|
| 1 | +import usb_hid |
| 2 | + |
| 3 | +BITMAP_KEYBOARD_DESCRIPTOR_REPORT_ID = 7 |
| 4 | +REPORT_BYTES = 16 |
| 5 | +bitmap_keyboard_descriptor = bytes(( |
| 6 | + 0x05, 0x01, # Usage Page (Generic Desktop), |
| 7 | + 0x09, 0x06, # Usage (Keyboard), |
| 8 | + 0xA1, 0x01, # Collection (Application), |
| 9 | + 0x85, 0xFF, # 6,7 Report ID [SET AT RUNTIME] |
| 10 | + # bitmap of modifiers |
| 11 | + 0x75, 0x01, # Report Size (1), |
| 12 | + 0x95, 0x08, # Report Count (8), |
| 13 | + 0x05, 0x07, # Usage Page (Key Codes), |
| 14 | + 0x19, 0xE0, # Usage Minimum (224), |
| 15 | + 0x29, 0xE7, # Usage Maximum (231), |
| 16 | + 0x15, 0x00, # Logical Minimum (0), |
| 17 | + 0x25, 0x01, # Logical Maximum (1), |
| 18 | + 0x81, 0x02, # Input (Data, Variable, Absolute), ;Modifier byte |
| 19 | + # LED output report |
| 20 | + 0x95, 0x05, # Report Count (5), |
| 21 | + 0x75, 0x01, # Report Size (1), |
| 22 | + 0x05, 0x08, # Usage Page (LEDs), |
| 23 | + 0x19, 0x01, # Usage Minimum (1), |
| 24 | + 0x29, 0x05, # Usage Maximum (5), |
| 25 | + 0x91, 0x02, # Output (Data, Variable, Absolute), |
| 26 | + 0x95, 0x01, # Report Count (1), |
| 27 | + 0x75, 0x03, # Report Size (3), |
| 28 | + 0x91, 0x03, # Output (Constant), |
| 29 | + # bitmap of keys |
| 30 | + 0x95, (REPORT_BYTES-1)*8, # Report Count (), |
| 31 | + 0x75, 0x01, # Report Size (1), |
| 32 | + 0x15, 0x00, # Logical Minimum (0), |
| 33 | + 0x25, 0x01, # Logical Maximum(1), |
| 34 | + 0x05, 0x07, # Usage Page (Key Codes), |
| 35 | + 0x19, 0x00, # Usage Minimum (0), |
| 36 | + 0x29, (REPORT_BYTES-1)*8-1, # Usage Maximum (), |
| 37 | + 0x81, 0x02, # Input (Data, Variable, Absolute), |
| 38 | + 0xc0 # End Collection |
| 39 | +)) |
| 40 | + |
| 41 | +bitmap_keyboard = usb_hid.Device( |
| 42 | + report_descriptor = bitmap_keyboard_descriptor, |
| 43 | + usage_page = 0x1, |
| 44 | + usage = 0x6, |
| 45 | + in_report_length = 16, |
| 46 | + out_report_length = 1, |
| 47 | + report_id_index = BITMAP_KEYBOARD_DESCRIPTOR_REPORT_ID, |
| 48 | +) |
| 49 | + |
| 50 | +print(bitmap_keyboard) |
| 51 | +devices = [ |
| 52 | + bitmap_keyboard, |
| 53 | + usb_hid.Device.CONSUMER_CONTROL, |
| 54 | + usb_hid.Device.MOUSE, |
| 55 | +] |
| 56 | +usb_hid.enable(devices) |
| 57 | +print("enabled HID with custom keyboard device") |
0 commit comments