I think because of Bluetooth profile (BT-HID) mostly. The hardware supports up to 6mbps (750KB/s max theoretical air throughput).
NOTICE: The next section is pretty technical.
So let's break down what we know, the facts, the theories and the unknowns.
(I'm excluding the Pro controller here, because I don't have one.)
-------------------------------
First of all the max net data rate we ever saw for the Joy-Con is:
362bytes * 66.67 (it pushes every 15ms) =
24.1KB/s - 193.0Kbps.
This is without the bt headers (the actual is 24.7KB/s - 197.9Kbps).
But the it uses only 300bytes for the image portion in every packet.
That is
20.0KB/s - 160.0Kbps for the
image transfer rate.
-------------------------------
Now let's break down the image sizes:
Code:
// 8bpp greyscale
320*240 = 76.8KB
160*120 = 19.2KB
80*60 = 4.8KB
40*30 = 1.2KB
And we also know that the sensor supports quantization. I said before that it produces 6bit images but I don't know for sure.
I just assumed 256 colors / 4 = 64 colors.
As I said the quantization lets you reduce the color depth, so you can fit the same resolution in less space.
I know that in the IR hand analysis image transfer mode, it receives a 40*30 image every packet.
That means that in 300bytes it fits an encoded 1200pixel image and thus in every byte they encode 4 pixels.
An easy quantization method to do this, is by using 2bits in a byte for every pixel. But this creates images with 16 different colors.
As I said I don't know yet which algorithm it uses. And also
if image transfer mode supports this.
So we the size become:
Code:
// ?bpp (4pixels per byte) greyscale
320*240 = 19.2KB
160*120 = 4.8KB
80*60 = 1.2KB
40*30 = 0.3KB
-------------------------------
So let's have the max framerates now:
Code:
// 8bpp greyscale
320*240 = 0.00fps (3840ms per frame)
160*120 = 1.04fps (960ms per frame)
80*60 = 4.16fps (240ms per frame)
40*30 = 16.67fps (60ms per frame)
[CODE]// ?bpp (4pixels per byte) greyscale
320*240 = 1.04fps (960ms per frame)
160*120 = 4.16fps (240ms per frame)
80*60 = 16.67fps (60ms per frame)
40*30 = 66.67fps (15ms per frame)
Because of the way image transfer works, it has additional latency of 30ms (because it sends the last image fragment 3 times).
The quantized hand analysis image transfer mode does not have this. It immediately pushes the 1st fragment for the new image.
-------------------------------
So now you know how it sends the images. But how about using other BT modes?
If we use other BT profiles to tranfer the image, we can have 10 times bigger fps (BT2.0) or 30x fps (BT4.0).
But you want to also send controller buttons/sticks/acc/gyro states also. So you have to change the whole implementation..
So I don't think this will change soon. Maybe there's a way already, but I don't know it.
-------------------------------
Another thing I saw, were the videos from Nintendo Labo.
It looks like they use 160*120 at around 15fps for the live view which is pretty strange.
Maybe they already implemented new encoding modes in joy-con fw 3.89.
We will find out when it comes out.
Ok that's it for now.
If I forgot sth or you have a question on these, please ask.
And have in mind, that I am still learning how Joy-Con's IR/NFC MCU works.