Issues creating an HID

Hello Arduino forum,

First (technically second :P)time poster here.

I have looked through quite a bit of documentation and other posts and I believe that I have somewhat novel questions.

My device, SysLat, is an open source system latency monitoring tool similar to Nvidia's recently released Reflex Latency Analyzer and LDAT systems. It's a bit of a niche item aimed at highly competitive PC gamers.

Here are the repos:

Finally, my questions:
These 2 posts below have been very helpful in trying to understand the conversion process of a device using a 32u4 from COM to HID, but ultimately I'm left with more questions than answers.

https://forum.arduino.cc/index.php?topic=565711.0
https://forum.arduino.cc/index.php?topic=545288.msg3717028#msg3717028

  1. In the first post above, user gdsports mentions:

The USB probe report reports the 32u4 is still reporting Interface Association descriptors.

I took a look through the file supplied and saw exactly what you were referring to. If a device is still "reporting Interface Association descriptors" does that mean the device is not an HID? Do HID devices not not provide "Interface Association descriptors" whatsoever?

  1. Does NicoHood's HID library only provide some sort of "pseudo-HID" functionality? Asking because of the issues encountered by the first post mentioned above.

Any help you can provide will be greatly appreciated.

The USB specification allows one physical device to appear as more than one
logical device. The Arduino framework (board package) creates the USB serial
interface also known as CDC ACM. Then the NicoHood HID library creates the USB
HID interface. The result is (I am not sure of the official terminology) known
as a USB composite or multi-function device.

The NicoHood HID library cannot remove the CDC ACM interface, it can only add
the HID interface. Removing the CDC ACM interface is outside the scope of what
an Arduino library is allowed to do.

I suggest looking at the USB descriptors of a plain USB keyboard to see
what a plain USB HID look like. Keyboards that are not "plain" include
features such as trackpads, multi-media keys, scroll wheels, NKRO, etc.

People have dug into the AVR board package source code and manually removed
the CDC ACM interface and changed the USB device decriptors so the end result
is the 32u4 appears to be a plain USB keyboard. This is desirable because some
systems do not handle USB composite devices correctly but will handle a plain
USB keyboard. There is an issue on the NicoHood HID github repo discussing this.
I think the title refers to "boot keyboard" or "boot mode".

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.