- // 4-164 (20 bytes/160 bits)
- 0x85, 0x03, // Report ID (3),
- 0x75, 0x01, // Report Size (1),
- 0x95, 0xA0, // Report Count (160),
- 0x15, 0x00, // Logical Minimum (0),
- 0x25, 0x01, // Logical Maximum (1),
- 0x05, 0x07, // Usage Page (Key Codes),
- 0x19, 0x04, // Usage Minimum (4),
- 0x29, 0xA4, // Usage Maximum (164),
- 0x81, 0x02, // Input (Data, Variable, Absolute, Bitfield),
-
- // 176-221 (45 bits)
- 0x85, 0x04, // Report ID (4),
- 0x75, 0x01, // Report Size (1),
- 0x95, 0x2D, // Report Count (45),
- 0x15, 0x00, // Logical Minimum (0),
- 0x25, 0x01, // Logical Maximum (1),
- 0x05, 0x07, // Usage Page (Key Codes),
- 0x19, 0xB0, // Usage Minimum (176),
- 0x29, 0xDD, // Usage Maximum (221),
- 0x81, 0x02, // Input (Data, Variable, Absolute, Bitfield),
-
- // 176-221 Padding (3 bits)
- 0x75, 0x03, // Report Size (3),
- 0x95, 0x01, // Report Count (1),
- 0x81, 0x03, // Input (Constant),
- 0xc0, // End Collection - Keyboard
+ // Packing of bitmaps are as follows:
+ // 4-49 : 6 bytes (0x04-0x31) ( 46 bits + 2 padding bits for 6 bytes total)
+ // 51-155 : 14 bytes (0x33-0x9B) (105 bits + 6 padding bits for 15 bytes total)
+ // 157-164 : 1 byte (0x9D-0xA4) ( 8 bits)
+ // 176-221 : 6 bytes (0xB0-0xDD) ( 46 bits + 2 padding bits for 6 bytes total)
+ // 224-231 : 1 byte (0xE0-0xE7) ( 8 bits)
+
+ // Modifier Byte
+ 0x75, 0x01, // Report Size (1),
+ 0x95, 0x08, // Report Count (8),
+ 0x15, 0x00, // Logical Minimum (0),
+ 0x25, 0x01, // Logical Maximum (1),
+ 0x05, 0x07, // Usage Page (Key Codes),
+ 0x19, 0xE0, // Usage Minimum (224),
+ 0x29, 0xE7, // Usage Maximum (231),
+ 0x81, 0x02, // Input (Data, Variable, Absolute),
+
+ // 4-49 (6 bytes/46 bits) - MainKeys
+ 0x75, 0x01, // Report Size (1),
+ 0x95, 0x2E, // Report Count (46),
+ 0x15, 0x00, // Logical Minimum (0),
+ 0x25, 0x01, // Logical Maximum (1),
+ 0x05, 0x07, // Usage Page (Key Codes),
+ 0x19, 0x04, // Usage Minimum (4),
+ 0x29, 0x31, // Usage Maximum (49),
+ 0x81, 0x02, // Input (Data, Variable, Absolute, Bitfield),
+
+ // Padding (2 bits)
+ 0x75, 0x02, // Report Size (2),
+ 0x95, 0x01, // Report Count (1),
+ 0x81, 0x03, // Input (Constant),
+
+ // 51-155 (14 bytes/105 bits) - SecondaryKeys
+ 0x75, 0x01, // Report Size (1),
+ 0x95, 0x69, // Report Count (105),
+ 0x15, 0x00, // Logical Minimum (0),
+ 0x25, 0x01, // Logical Maximum (1),
+ 0x05, 0x07, // Usage Page (Key Codes),
+ 0x19, 0x33, // Usage Minimum (51),
+ 0x29, 0x9B, // Usage Maximum (155),
+ 0x81, 0x02, // Input (Data, Variable, Absolute, Bitfield),
+
+ // Padding (7 bits)
+ 0x75, 0x07, // Report Size (7),
+ 0x95, 0x01, // Report Count (1),
+ 0x81, 0x03, // Input (Constant),
+
+ // 157-164 (1 byte/8 bits) - TertiaryKeys
+ 0x75, 0x01, // Report Size (1),
+ 0x95, 0x08, // Report Count (8),
+ 0x15, 0x00, // Logical Minimum (0),
+ 0x25, 0x01, // Logical Maximum (1),
+ 0x05, 0x07, // Usage Page (Key Codes),
+ 0x19, 0x9D, // Usage Minimum (157),
+ 0x29, 0xA4, // Usage Maximum (164),
+ 0x81, 0x02, // Input (Data, Variable, Absolute, Bitfield),
+
+ // 176-221 (6 bytes/46 bits) - QuartiaryKeys
+ 0x75, 0x01, // Report Size (1),
+ 0x95, 0x2E, // Report Count (46),
+ 0x15, 0x00, // Logical Minimum (0),
+ 0x25, 0x01, // Logical Maximum (1),
+ 0x05, 0x07, // Usage Page (Key Codes),
+ 0x19, 0xB0, // Usage Minimum (176),
+ 0x29, 0xDD, // Usage Maximum (221),
+ 0x81, 0x02, // Input (Data, Variable, Absolute, Bitfield),
+
+ // Padding (2 bits)
+ 0x75, 0x02, // Report Size (2),
+ 0x95, 0x01, // Report Count (1),
+ 0x81, 0x03, // Input (Constant),
+ 0xc0, // End Collection - Keyboard