This is an old revision of the document!
Work In Progress
Ergodex DX1 protocol ==================== Written By Dominic Clifton (C) 2007 I guess the first byte is probably a control code that puts it in "program mode" Commands ======== 16 bytes per command. Byte 1: Command Code Bytes 2-16: Command Data Program Keys ------------ Usage: Program up to 4 keys per command Command Code: 0x03 Command Data: 3 bytes per key (below) If a key is not to be programmed then pad the command with 0x00's Then for each key that has a single key macro assigned to it sends 3 bytes Byte1: key number in hex (corresponds to the number on the physical key itself) Byte2: "Key Type" key types: 0x01 - "Single Key" 0x03 - "Macro" 3rd byte is different depending on "Key Type" when key is is: "Single Key" Byte 3: Keyboard Scan Code See Keyboard Scan Code Specification [References 1,2] Appendix C: USB Keyboard/Keypad Page (0x07) "macro" Byte 3: Empty Value (0x00) When Example of command sent when switching to an application that has a profile enabled for it. 000421: Bulk or Interrupt Transfer (UP), 05.02.2007 20:27:53.4687500 +0.1093750 Pipe Handle: 0x87ca8884 (Endpoint Address: 0x2) Send 0x70 bytes to the device: 03 01 01 1E 02 01 1F 03 01 20 04 01 21 05 01 22 ......... ..!.." 03 06 01 23 07 01 24 08 01 25 09 01 26 0A 01 27 ...#..$..%..&..' 03 0B 01 14 0C 01 1A 0D 01 08 0E 01 15 0F 01 17 ................ 03 10 01 1C 11 01 18 12 01 0C 13 01 12 14 01 13 ................ 03 15 01 04 16 01 16 17 01 07 18 01 09 19 01 0A ................ 03 29 01 1D 2A 01 1B 2B 01 06 2C 01 19 00 00 00 .)..*..+..,..... 02 00 00 01 00 00 01 01 00 00 00 00 00 00 00 00 ................ Finish Programming ------------------ Usage: Sent after one or more "Program Keys" commands. Command Code: 0x02 Command Data: 00 00 01 00 00 01 01 00 00 00 00 00 00 00 00 Contents unknown at present. Very similar (only one bit difference) to "Start Programming" Start Programming ----------------- Usage: Sent when device is idle. Sent before one or more "Program Keys" commands. Command Code: 0x02 Command Data: 00 00 01 00 01 01 01 00 00 00 00 00 00 00 00 Contents unknown at present. Get Device Status ----------------- Usage: Sent when device is idle. Command Code: 0x0A Command Data: Fill with 0x00's Command Response: 16 bytes First byte: 0x0A Next 8 bytes: encoded serial number? Next 2 bytes: binary status flags? Next 5 bytes: filled with 0x00 References ========== 1 - Key Support, Keyboard Scan Codes, and Windows http://www.microsoft.com/whdc/device/input/Scancode.mspx 2 - Keyboard Scan Code Specification http://download.microsoft.com/download/1/6/1/161ba512-40e2-4cc9-843a-923143f3456c/scancode.doc