Last active
August 15, 2021 07:57
-
-
Save tmk/d8a3bfa0e886164c2d75a772c3ef07ae to your computer and use it in GitHub Desktop.
258a:0016 TrulyErgonomic.com Truly Ergonomic CLEAVE Keyboard
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#### get data using Usb_desc_dump.hex | |
$ dfu-programmer atmega32u4 flash ./usb_desc_dump.hex | |
$ dfu-programmer atmega32u4 reset | |
Device disconnected. | |
Waiting for new device:............. | |
Listening: | |
TMK:7b2827/LUFA:d6a7df/UHS2:96112d | |
Start | |
USB configured. | |
Loop start. | |
usb_state: 20 | |
usb_state: 40 | |
usb_state: 50 | |
usb_state: 51 | |
usb_state: 90 | |
////////////////////////////////////////////////////////////////////// | |
// USB_desc_dump | |
// Address: 01 | |
// Lowspeed: 00 | |
// Devicer dump: | |
12 01 00 02 00 00 00 08 8A 25 16 00 01 00 01 02 | |
00 01 | |
// Device: | |
bLength: 12 | |
bDescriptorType: 01 | |
bcdUSB: 0200 | |
bDeviceClass: 00 | |
bDeviceSubClass: 00 | |
bDeviceProtocol: 00 | |
bMaxPacketSize0: 08 | |
idVendor: 258A | |
idProduct: 0016 | |
bcdDevice: 0001 | |
iManufacturer: 01 | |
iProduct: 02 | |
iSerialNumber: 00 | |
bNumConfigurations: 01 | |
// String Zero: len: 04 | |
// 04 03 09 04 | |
// LangId: 0409 | |
// iManufacturer: String1(0409): len: 26 | |
// 26 03 54 00 72 00 75 00 6C 00 79 00 45 00 72 00 | |
// 67 00 6F 00 6E 00 6F 00 6D 00 69 00 63 00 2E 00 | |
// 63 00 6F 00 6D 00 | |
// TrulyErgonomic.com | |
// iProduct: String2(0409): len: 40 | |
// 40 03 54 00 72 00 75 00 6C 00 79 00 20 00 45 00 | |
// 72 00 67 00 6F 00 6E 00 6F 00 6D 00 69 00 63 00 | |
// 20 00 43 00 4C 00 45 00 41 00 56 00 45 00 20 00 | |
// 4B 00 65 00 79 00 62 00 6F 00 61 00 72 00 64 00 | |
// Truly Ergonomic CLEAVE Keyboard | |
// Config0 dump: len: 003B | |
09 02 3B 00 02 01 00 A0 32 09 04 00 00 01 03 01 | |
01 00 09 21 11 01 00 01 22 43 00 07 05 81 03 08 | |
00 01 09 04 01 00 01 03 00 00 00 09 21 11 01 00 | |
01 22 EB 00 07 05 82 03 10 00 08 | |
// Config: | |
bLength: 09 | |
bDescriptorType: 02 | |
wTotalLength: 003B | |
bNumInterfaces: 02 | |
bConfigurationValue: 01 | |
iConfiguration: 00 | |
bmAttributes: A0 | |
bMaxPower: 32 | |
// Interface0.0: | |
bLength: 09 | |
bDescriptorType: 04 | |
bInterfaceNumber: 00 | |
bAlternateSetting: 00 | |
bNumEndpoints: 01 | |
bInterfaceClass: 03 | |
bInterfaceSubClass: 01 | |
bInterfaceProtocol: 01 | |
iInterface: 00 | |
// HID: | |
bLength: 09 | |
bDescriptorType: 21 | |
bcdHID: 0111 | |
bCountryCode: 00 | |
bNumDescriptors: 01 | |
bDescrType: 22 | |
wDescriptorLength: 0043 | |
// Report0 dump: len: 0043 | |
05 01 09 06 A1 01 05 07 19 E0 29 E7 15 00 25 01 | |
95 08 75 01 81 02 95 01 75 08 81 03 95 06 75 08 | |
15 00 26 FF 00 05 07 19 00 2A FF 00 81 00 25 01 | |
95 05 75 01 05 08 19 01 29 05 91 02 95 01 75 03 | |
91 03 C0 | |
// Endpoint: | |
bLength: 07 | |
bDescriptorType: 05 | |
bEndpointAddress: 81 | |
bmAttributes: 03 | |
wMaxPacketSize: 0008 | |
bInterval: 01 | |
// Interface1.0: | |
bLength: 09 | |
bDescriptorType: 04 | |
bInterfaceNumber: 01 | |
bAlternateSetting: 00 | |
bNumEndpoints: 01 | |
bInterfaceClass: 03 | |
bInterfaceSubClass: 00 | |
bInterfaceProtocol: 00 | |
iInterface: 00 | |
// HID: | |
bLength: 09 | |
bDescriptorType: 21 | |
bcdHID: 0111 | |
bCountryCode: 00 | |
bNumDescriptors: 01 | |
bDescrType: 22 | |
wDescriptorLength: 00EB | |
// Report0 dump: len: 00EB | |
06 01 00 09 80 A1 01 85 01 19 81 29 83 15 00 25 | |
01 95 03 75 01 81 02 95 01 75 05 81 01 C0 05 0C | |
09 01 A1 01 85 02 19 00 2A FF 02 15 00 26 FF 7F | |
95 01 75 10 81 00 C0 06 00 FF 09 01 A1 01 85 03 | |
15 00 26 FF 00 09 2F 75 08 95 03 81 02 C0 05 01 | |
09 06 A1 01 85 04 15 00 25 01 75 01 95 70 05 07 | |
19 E0 29 E7 19 00 29 67 81 02 95 08 81 01 C0 06 | |
00 FF 09 01 A1 01 85 05 15 00 26 FF 00 19 01 29 | |
02 75 08 95 05 B1 02 C0 06 00 FF 09 01 A1 01 85 | |
06 15 00 26 FF 00 19 01 29 02 75 08 96 07 04 B1 | |
02 C0 05 01 09 02 A1 01 85 07 09 01 A1 00 05 09 | |
15 00 25 01 19 01 29 05 75 01 95 05 81 02 95 03 | |
81 01 05 01 16 00 80 26 FF 7F 09 30 09 31 75 10 | |
95 02 81 06 15 81 25 7F 09 38 75 08 95 01 81 06 | |
05 0C 0A 38 02 95 01 81 06 C0 C0 | |
// Endpoint: | |
bLength: 07 | |
bDescriptorType: 05 | |
bEndpointAddress: 82 | |
bmAttributes: 03 | |
wMaxPacketSize: 0010 | |
bInterval: 08 | |
// Parse data here: http://eleccelerator.com/usbdescreqparser/ | |
######### Same firmware, unplug Usb2Usb & reinsert | |
Waiting for new device:.. | |
Listening: | |
TMK:7b2827/LUFA:d6a7df/UHS2:96112d | |
Start | |
USB configured. | |
Loop start. | |
usb_state: 12 | |
0x12, // bLength | |
0x01, // bDescriptorType (Device) | |
0x00, 0x02, // bcdUSB 2.00 | |
0x00, // bDeviceClass (Use class information in the Interface Descriptors) | |
0x00, // bDeviceSubClass | |
0x00, // bDeviceProtocol | |
0x08, // bMaxPacketSize0 8 | |
0x8A, 0x25, // idVendor 0x258A | |
0x16, 0x00, // idProduct 0x16 | |
0x01, 0x00, // bcdDevice 0.01 | |
0x01, // iManufacturer (String Index) | |
0x02, // iProduct (String Index) | |
0x00, // iSerialNumber (String Index) | |
0x01, // bNumConfigurations 1 | |
// 18 bytes | |
0x09, // bLength | |
0x02, // bDescriptorType (Configuration) | |
0x3B, 0x00, // wTotalLength 59 | |
0x02, // bNumInterfaces 2 | |
0x01, // bConfigurationValue | |
0x00, // iConfiguration (String Index) | |
0xA0, // bmAttributes Remote Wakeup | |
0x32, // bMaxPower 100mA | |
0x09, // bLength | |
0x04, // bDescriptorType (Interface) | |
0x00, // bInterfaceNumber 0 | |
0x00, // bAlternateSetting | |
0x01, // bNumEndpoints 1 | |
0x03, // bInterfaceClass | |
0x01, // bInterfaceSubClass | |
0x01, // bInterfaceProtocol | |
0x00, // iInterface (String Index) | |
0x09, // bLength | |
0x21, // bDescriptorType (HID) | |
0x11, 0x01, // bcdHID 1.11 | |
0x00, // bCountryCode | |
0x01, // bNumDescriptors | |
0x22, // bDescriptorType[0] (HID) | |
0x43, 0x00, // wDescriptorLength[0] 67 | |
0x07, // bLength | |
0x05, // bDescriptorType (Endpoint) | |
0x81, // bEndpointAddress (IN/D2H) | |
0x03, // bmAttributes (Interrupt) | |
0x08, 0x00, // wMaxPacketSize 8 | |
0x01, // bInterval 1 (unit depends on device speed) | |
0x09, // bLength | |
0x04, // bDescriptorType (Interface) | |
0x01, // bInterfaceNumber 1 | |
0x00, // bAlternateSetting | |
0x01, // bNumEndpoints 1 | |
0x03, // bInterfaceClass | |
0x00, // bInterfaceSubClass | |
0x00, // bInterfaceProtocol | |
0x00, // iInterface (String Index) | |
0x09, // bLength | |
0x21, // bDescriptorType (HID) | |
0x11, 0x01, // bcdHID 1.11 | |
0x00, // bCountryCode | |
0x01, // bNumDescriptors | |
0x22, // bDescriptorType[0] (HID) | |
0xEB, 0x00, // wDescriptorLength[0] 235 | |
0x07, // bLength | |
0x05, // bDescriptorType (Endpoint) | |
0x82, // bEndpointAddress (IN/D2H) | |
0x03, // bmAttributes (Interrupt) | |
0x10, 0x00, // wMaxPacketSize 16 | |
0x08, // bInterval 8 (unit depends on device speed) | |
// 59 bytes | |
0x05, 0x01, // Usage Page (Generic Desktop Ctrls) | |
0x09, 0x06, // Usage (Keyboard) | |
0xA1, 0x01, // Collection (Application) | |
0x05, 0x07, // Usage Page (Kbrd/Keypad) | |
0x19, 0xE0, // Usage Minimum (0xE0) | |
0x29, 0xE7, // Usage Maximum (0xE7) | |
0x15, 0x00, // Logical Minimum (0) | |
0x25, 0x01, // Logical Maximum (1) | |
0x95, 0x08, // Report Count (8) | |
0x75, 0x01, // Report Size (1) | |
0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) | |
0x95, 0x01, // Report Count (1) | |
0x75, 0x08, // Report Size (8) | |
0x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) | |
0x95, 0x06, // Report Count (6) | |
0x75, 0x08, // Report Size (8) | |
0x15, 0x00, // Logical Minimum (0) | |
0x26, 0xFF, 0x00, // Logical Maximum (255) | |
0x05, 0x07, // Usage Page (Kbrd/Keypad) | |
0x19, 0x00, // Usage Minimum (0x00) | |
0x2A, 0xFF, 0x00, // Usage Maximum (0xFF) | |
0x81, 0x00, // Input (Data,Array,Abs,No Wrap,Linear,Preferred State,No Null Position) | |
0x25, 0x01, // Logical Maximum (1) | |
0x95, 0x05, // Report Count (5) | |
0x75, 0x01, // Report Size (1) | |
0x05, 0x08, // Usage Page (LEDs) | |
0x19, 0x01, // Usage Minimum (Num Lock) | |
0x29, 0x05, // Usage Maximum (Kana) | |
0x91, 0x02, // Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) | |
0x95, 0x01, // Report Count (1) | |
0x75, 0x03, // Report Size (3) | |
0x91, 0x03, // Output (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) | |
0xC0, // End Collection | |
// 67 bytes | |
0x06, 0x01, 0x00, // Usage Page (Generic Desktop Ctrls) | |
0x09, 0x80, // Usage (Sys Control) | |
0xA1, 0x01, // Collection (Application) | |
0x85, 0x01, // Report ID (1) | |
0x19, 0x81, // Usage Minimum (Sys Power Down) | |
0x29, 0x83, // Usage Maximum (Sys Wake Up) | |
0x15, 0x00, // Logical Minimum (0) | |
0x25, 0x01, // Logical Maximum (1) | |
0x95, 0x03, // Report Count (3) | |
0x75, 0x01, // Report Size (1) | |
0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) | |
0x95, 0x01, // Report Count (1) | |
0x75, 0x05, // Report Size (5) | |
0x81, 0x01, // Input (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position) | |
0xC0, // End Collection | |
0x05, 0x0C, // Usage Page (Consumer) | |
0x09, 0x01, // Usage (Consumer Control) | |
0xA1, 0x01, // Collection (Application) | |
0x85, 0x02, // Report ID (2) | |
0x19, 0x00, // Usage Minimum (Unassigned) | |
0x2A, 0xFF, 0x02, // Usage Maximum (0x02FF) | |
0x15, 0x00, // Logical Minimum (0) | |
0x26, 0xFF, 0x7F, // Logical Maximum (32767) | |
0x95, 0x01, // Report Count (1) | |
0x75, 0x10, // Report Size (16) | |
0x81, 0x00, // Input (Data,Array,Abs,No Wrap,Linear,Preferred State,No Null Position) | |
0xC0, // End Collection | |
0x06, 0x00, 0xFF, // Usage Page (Vendor Defined 0xFF00) | |
0x09, 0x01, // Usage (0x01) | |
0xA1, 0x01, // Collection (Application) | |
0x85, 0x03, // Report ID (3) | |
0x15, 0x00, // Logical Minimum (0) | |
0x26, 0xFF, 0x00, // Logical Maximum (255) | |
0x09, 0x2F, // Usage (0x2F) | |
0x75, 0x08, // Report Size (8) | |
0x95, 0x03, // Report Count (3) | |
0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) | |
0xC0, // End Collection | |
0x05, 0x01, // Usage Page (Generic Desktop Ctrls) | |
0x09, 0x06, // Usage (Keyboard) | |
0xA1, 0x01, // Collection (Application) | |
0x85, 0x04, // Report ID (4) | |
0x15, 0x00, // Logical Minimum (0) | |
0x25, 0x01, // Logical Maximum (1) | |
0x75, 0x01, // Report Size (1) | |
0x95, 0x70, // Report Count (112) | |
0x05, 0x07, // Usage Page (Kbrd/Keypad) | |
0x19, 0xE0, // Usage Minimum (0xE0) | |
0x29, 0xE7, // Usage Maximum (0xE7) | |
0x19, 0x00, // Usage Minimum (0x00) | |
0x29, 0x67, // Usage Maximum (0x67) | |
0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) | |
0x95, 0x08, // Report Count (8) | |
0x81, 0x01, // Input (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position) | |
0xC0, // End Collection | |
0x06, 0x00, 0xFF, // Usage Page (Vendor Defined 0xFF00) | |
0x09, 0x01, // Usage (0x01) | |
0xA1, 0x01, // Collection (Application) | |
0x85, 0x05, // Report ID (5) | |
0x15, 0x00, // Logical Minimum (0) | |
0x26, 0xFF, 0x00, // Logical Maximum (255) | |
0x19, 0x01, // Usage Minimum (0x01) | |
0x29, 0x02, // Usage Maximum (0x02) | |
0x75, 0x08, // Report Size (8) | |
0x95, 0x05, // Report Count (5) | |
0xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) | |
0xC0, // End Collection | |
0x06, 0x00, 0xFF, // Usage Page (Vendor Defined 0xFF00) | |
0x09, 0x01, // Usage (0x01) | |
0xA1, 0x01, // Collection (Application) | |
0x85, 0x06, // Report ID (6) | |
0x15, 0x00, // Logical Minimum (0) | |
0x26, 0xFF, 0x00, // Logical Maximum (255) | |
0x19, 0x01, // Usage Minimum (0x01) | |
0x29, 0x02, // Usage Maximum (0x02) | |
0x75, 0x08, // Report Size (8) | |
0x96, 0x07, 0x04, // Report Count (1031) | |
0xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) | |
0xC0, // End Collection | |
0x05, 0x01, // Usage Page (Generic Desktop Ctrls) | |
0x09, 0x02, // Usage (Mouse) | |
0xA1, 0x01, // Collection (Application) | |
0x85, 0x07, // Report ID (7) | |
0x09, 0x01, // Usage (Pointer) | |
0xA1, 0x00, // Collection (Physical) | |
0x05, 0x09, // Usage Page (Button) | |
0x15, 0x00, // Logical Minimum (0) | |
0x25, 0x01, // Logical Maximum (1) | |
0x19, 0x01, // Usage Minimum (0x01) | |
0x29, 0x05, // Usage Maximum (0x05) | |
0x75, 0x01, // Report Size (1) | |
0x95, 0x05, // Report Count (5) | |
0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) | |
0x95, 0x03, // Report Count (3) | |
0x81, 0x01, // Input (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position) | |
0x05, 0x01, // Usage Page (Generic Desktop Ctrls) | |
0x16, 0x00, 0x80, // Logical Minimum (-32768) | |
0x26, 0xFF, 0x7F, // Logical Maximum (32767) | |
0x09, 0x30, // Usage (X) | |
0x09, 0x31, // Usage (Y) | |
0x75, 0x10, // Report Size (16) | |
0x95, 0x02, // Report Count (2) | |
0x81, 0x06, // Input (Data,Var,Rel,No Wrap,Linear,Preferred State,No Null Position) | |
0x15, 0x81, // Logical Minimum (-127) | |
0x25, 0x7F, // Logical Maximum (127) | |
0x09, 0x38, // Usage (Wheel) | |
0x75, 0x08, // Report Size (8) | |
0x95, 0x01, // Report Count (1) | |
0x81, 0x06, // Input (Data,Var,Rel,No Wrap,Linear,Preferred State,No Null Position) | |
0x05, 0x0C, // Usage Page (Consumer) | |
0x0A, 0x38, 0x02, // Usage (AC Pan) | |
0x95, 0x01, // Report Count (1) | |
0x81, 0x06, // Input (Data,Var,Rel,No Wrap,Linear,Preferred State,No Null Position) | |
0xC0, // End Collection | |
0xC0, // End Collection | |
// 235 bytes | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment