I am developing a gaming mouse using XMEGA32A4U. USB is setup according to the Atmel app note as full speed and with 48 MHz internal PLL, 24 MHz CPU clock.
Using udi_hid_mouse_btnleft(HID_MOUSE_BTN_DOWN), I notice the computer receives the command in about 1-8 ms, somewhat uniformly distributed.
So I setup the following experiment. I create a USB composite device on the XMEGA and I send to it a byte using USB CDC. Then in response to the byte, I do one of:
3. Toggle a GPIO which is hooked with a wire to a gaming mouse's button terminal. Then the mouse registers this as a click and sends the mouse down packet to the PC.
The roundtrip latencies of the above operations are quite different. As measured on my Windows dev PC,
1. is 1-8 ms as I mentioned above.
2. is fairly consistently 1-2 ms.
3. is 2-4 ms.
I was particularly surprised that 3 is much faster than 1.
Please share tips of why udi_hid_mouse_btnleft() function is that slow? Is it queuing the commands and can I remove that queue? Let me know if you need more info.