Getting HID (Leonardo) to work on Thin Client

Testing on Arduino Leonardo (also tried Sparkfun pro micro)...

A very basic sketch to send a single key stroke to my PC and it works when connected to several PC's and Laptop (all of which have drivers installed to detect and work with additional devices), but not on either of my two Thin Clients as they rely on their BIOS which of course works fine with any keyboard I test..

lsusb -v report...

Interface Descriptor: (Actual Keyboard)
     bInterfaceClass         3 Human Interface Device
     bInterfaceSubClass      1 Boot Interface Subclass
     bInterfaceProtocol      1 Keyboard

HID Device (Leonardo & Pro Micro)
      bFunctionClass          2 Communications
      bFunctionSubClass       2 Abstract (modem)
      bFunctionProtocol       0

As I am relying on the bios to detect the HID devices as Keyboards, I'm guessing I will have to change the SubClass and Protocol in the descriptor, how do I do this, is it even possible?


Take a look at NicoHood's HID library which has a boot/BIOS keyboard example

Be sure to search the Issues and Pull requests for fixes because the lib has not been updated in a while. Other people have proposed fixes such as Keyboard not recognized at boot / BIOS · Issue #34 · NicoHood/HID · GitHub

Perfect... initial testing appears to confirm it works :wink:

Editing my project couldn't be simpler ...
Just included HID-Project.h, changed all instances of Keyboard... to BootKeyboard...

Many thanks Pagus, my project back on track :grin: (now to examine the HID-Project code and find out exactly what was required)...