'macOS Monterey not responding to Apple Vendor Keyboard USB HID Usage from 3rd party devices
I am a developer working on a 3rd party USB HID product that is intended for use with MAC. The product is required to send the commands to invoke both Mission Control and Launchpad over the USB interface.
During product development on a macOS Catalina test system, this was working well. The appropriate definitions were created in the product USB HID Descriptor tables to enable these Apple vendor-specific function definitions to work. Native USB HID commands could be sent to the MAC and both Misson Control and Launchpad could be triggered from the product.
The USB HID Usage Page definitions are published here: https://opensource.apple.com/source/IOHIDFamily/IOHIDFamily-870.60.4/IOHIDFamily/AppleHIDUsageTables.h.auto.html
Problem: Testing on macOS Monterey shows this to have stopped working, yet works fine on Catalina.
Since my implementation of the Apple vendor-specific function definitions was working in Catalina, but not Monterey, I originally figured that there would be some subtlety associated with how the product reported itself in the HID descriptors, and that possibly Monterey was being stricter on the format of the USB HID Descriptor it would accept. I believe Microsoft did something similar in Windows 10, becoming more strict on USB message formats than in the past.
Before going down the path of experimenting with alternative USB HID Descriptor reports, I decided to test the easiest change first – temporarily have the keyboard report itself as an Apple Keyboard. Making no other changes to the product, I changed:
- The VID (Vendor ID) to “Apple Inc.”
- The PID (Product ID) to the one for the Apple Aluminium keyboard.
Note that the VID/PID change was purely for testing and debugging purposes.
Immediately the macOS Special Functions started working again (Mission Control and Launchpad).
I changed the VID and PID back to the ones for our product – Apple Vendor-specific Functions stopped working. I changed the VID and PID back to the Apple ones – they started working again.
This tells me that the data format being reported to macOS in the HID Descriptor and the HID Commands are correct, and would be accepted, however macOS is choosing to ignore those commands as they do not originate from an Apple keyboard. It seems that, in either Big Sur or Monterey, Apple has chosen to deliberately ignore those correctly-formed HID commands, based on either the VID or PID of the device sending the commands.
Given that the information required to implement these features is publicly available, it would seem to me to be anti-competitive for Apple to publish this information and then deliberately prevent it's use.
Can anyone else verify that Apple have chosen in macOS Monterey to deliberately cripple 3rd party USB HID products from implementing the Apple Vendor-Specific USB HID Usage pages? If so, has anyone found a work-around?
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
