HID++ 2.0 is a self descriptive protocol built on top of the USB HID specification. The goal is to be able to interact with the device without having any knowledge about it beforehand.
byte | 0 | 1 | 2 | 3 | 4 .. End | |
---|---|---|---|---|---|---|
bit | 15 .. 8 | 7 .. 0 | ||||
description | Report ID | Device Index | Feature Index | Function | Software ID | Parameters |
- Report ID
The first byte of the report as defined in the HID specification. Supported report types by the device can be found in the HID report descriptor.
There following report types are supported:
Table 2 - Supported report types Report Type Value Lenght Short 0x10
7 bytes Long 0x11
20 bytes - Device Index
- Target device index.
0xff
is reserved for corded devices and receivers. - Feature Index
Each device has a feature table. It resolves the feature ID (see below) to the internal feature index. The IRoot feature is required to be present and have the index 0.
To read the feature table, you can use the
GetFeature
function from theIRoot
feature.Table 3 - Example device feature table Feature ID Index 0x0000
(IRoot)0 0x0002
(IFeatureInfo)1 0x0003
(Device Information)2 0x40a0
(Fn Inversion)3 - Function
- Each HID++ feature can define a list of functions. To access a function you send a request with the desired feature index and the function ID.
- Software ID
- This ID is used in case multiple applications want to interact with the device. When you send a request with a software ID, the reponse's software ID will have the same value. You can use it to make sure a reply is meant for you.
- Parameters
- The parameters hold arbitrary data to interact with the functions. For requests they hold function arguments, and for responses, they hold return values.
byte | 0 | 1 | 2 | 3 | 4 | 5 | 6 | |
---|---|---|---|---|---|---|---|---|
bit | 15 .. 8 | 7 .. 0 | ||||||
description | 0x10 | Device Index | Feature Index | Function | Software ID | Parameters |
byte | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
bit | 15 .. 8 | 7 .. 0 | |||||||||||||||||||
description | 0x11 | Device Index | Feature Index | Function | Software ID | Parameters |
- 00 - Important
0x0000
IRoot0x0001
IFeatureSet0x0002
IFeatureInfo
- 01 - Common
0x0003
Device Information0x0004
Unit ID0x0005
Device Name and Type0x0006
Device Groups0x0007
Device Friendly Name0x0008
Keep-Alive0x0020
Config Change0x0021
32-byte Unique Random Identifier0x0030
Target Software0x0080
Wireless Signal Strength0x00c0
DFU Control Legacy0x00c1
DFU Control Unsigned0x00c2
DFU Control Signed0x00d0
DFU0x1000
Battery Unified Level Status0x1001
Battery Voltage0x1010
Charging Control0x1814
Change Host0x1981
Backlight 10x1982
Backlight 20x1a00
PresenterControl0x1b00
Keyboard reprogrammable keys and Mouse buttons 10x1b01
Keyboard reprogrammable Keys and Mouse buttons 20x1b02
Keyboard reprogrammable Keys and Mouse buttons 30x1b03
Keyboard reprogrammable Keys and Mouse buttons 40x1b04
Keyboard reprogrammable Keys and Mouse buttons 50x1bc0
Report HID Usages0x1c00
Persistent Remappable Action0x1d4b
Wireless Device Status0x1df0
Remaining Pairings
- 02 - Mouse
0x2001
Swap left/right button0x2005
Button Swap Cancel0x2006
Pointer Axes Orientation0x2100
Vertical Scrolling0x2110
SmartShift wheel0x2120
High-Resolution Scrolling0x2121
HiRes Wheel0x2130
Ratchet Wheel0x2150
Thumbwheel0x2200
Mouse Pointer0x2201
Adjustable DPI0x2205
Pointer Motion Scaling0x2230
Sensor angle snapping0x2240
Surface Tuning0x2400
Hybrid Tracking Engine
- 04 - Keyboard
0x40a0
Fn Inversion0x40a2
Fn Inversion, with default state0x40a3
Fn Inversion, for multi-host devices0x4100
Encryption0x4220
Lock Key State0x4301
Solar Keyboard Dashboard Feature0x4520
Keyboard Layout0x4521
Disable Keys0x4522
Disable Keys By Usage0x4530
Dual Platform0x4540
Keyboard International Layouts0x4600
Crown
- 06 - Touchpad
0x6010
Touchpad FW items0x6011
Touchpad SW Items0x6012
Touchpad Win8 FW items0x6020
TAP enable0x6021
TAP enable Extended0x6030
Cursor Ballistic0x6040
Touchpad resolution divider0x6100
TouchPad Raw XY0x6110
TouchMouse Raw TouchPoints0x6120
BT TouchMouse Settings0x6500
Gestures10x6501
Gestures2
- 08 - Gaming Devices
0x8010
Gaming G-Keys0x8020
Gaming M-keys0x8030
MacroRecord, MR Key0x8040
Brightness control0x8060
Adjustable Report Rate0x8070
Color LED Effects0x8071
RGB Effects0x8080
Per Key Lighting0x8090
Mode status0x8100
Onboard Profiles0x8110
Mouse Button Filter