X-keys Control Room Keyboard Data Report | Main Page
General Information
|
VID
|
05f3h
|
|---|---|
|
Control Room Keyboard PID #1 (Factory Default)
|
0625h or 1573
|
|
Control Room Keyboard PID #2 (KVM)
|
0624h or 1574
|
|
Control Room Keyboard Plus One PID #1 (Factory Default)
|
062Fh or 1583
|
|
Control Room Keyboard Plus One PID #2 (KVM)
|
0630h or 1584
|
|
Control Room Keyboard Plus Two PID #1 (Factory Default)
|
0631h or 1585
|
|
Control Room Keyboard Plus Two PID #2 (KVM)
|
0632h or 1586
|
|
Consumer Usage Page
|
1
|
|
Usage Page
|
000Ch or 12
|
PID #1 Endpoints: Consumer Usage Page Input and Output (Hid Usage Page
12, Hid Usage 1), Keyboard (Hid Usage Page 1, Hid Usage 6), Multimedia (Hid
Usage Page 12, Hid Usage 1 and Hid Usage Page 1, Hid Usage 128).
PID #2 Endpoints: Keyboard boot (Hid Usage Page 1, Hid Usage 6) for use
with KVMs. To exit KVM mode unplug the device then immediately after re-plugging
the device in, toggle the Scroll Lock key on the keyboard 10-15 times.
X-keys Control Room Keyboard Input Report
Figure 1: X-keys Control Room Keyboard key reference.
Report Length: 41 bytes
1. General Incoming Data
This data is returned when new data is detected such as button presses, unit id change. This report can be manually stimulated by sending a Generate Data output report which is very useful for obtaining the initial state of the device immediately after enumeration.
|
Byte 1*
|
Byte 2
|
Byte 3
|
Byte 4
|
Byte 5
|
Byte 6
|
Byte 7
|
Byte 8
|
Byte 9
|
Byte 10
|
Byte 11
|
Byte 12
|
Byte 13
|
Byte 14
|
Byte 15
|
Byte 16
|
Byte 17
|
Byte 18
|
Byte 19
|
Byte 20
|
Byte 21
|
Byte 22
|
Byte 23
|
Byte 24
|
Byte 25
|
Byte 26
|
Byte 27
|
Byte 28
|
Byte 29
|
Byte 30
|
Byte 31
|
Byte 32
|
Byte 33
|
Byte 34
|
Byte 35
|
Bytes 36-37
|
Bytes 38-41
|
| Constant | Unit ID | Data Type | Keys | Keys | Keys | Keys | Keys | Keys | Keys | Keys | Keys | Keys | Keys | Keys | Keys | Keys | Keys | Keys | Keys | Keys | Keys | Keys | Keys | Keys | Keys | Keys | Keys | Keys | Keys | Keys | Keys | Keys | Keys | Caps Lk,,, | Reserved | Time Stamp |
|
0
|
<data>
|
PS
|
D1
|
D2
|
D3
|
D4
|
D5
|
D6
|
D7
|
D8
|
D9
|
D10
|
D11
|
DI2
|
D13
|
D14
|
D15
|
D16
|
D17
|
D18
|
D19
|
D20
|
D21
|
D22
|
D23
|
D24
|
D25
|
D26
|
D27
|
D28
|
D29
|
D30
|
D31
|
D32
|
value
|
Time
|
PS: 0 if program switch unset, 1 if program switch is set, 2 if
generated by the Generate Data (output report 6) and program switch is unset,
3 if generated by the Generate Data (output report 6) and program switch
is set.
D1: For all bits 0 if key is up, 1 if key is down. Keys 1 to 6; bit
1=Key 1, bit 2=Key 2, bit 3=Key 3, bit 4=Key 4, bit 5=Key 6, bit 6=Key 6,
bit 7=NA, bit 8=NA
D2: For all bits 0 if key is up, 1 if key is down. Keys 7 to 12;
bit 1=Key 7, bit 2=Key 8, bit 3=Key 9, bit 4=Key 10, bit 5=Key 11, bit 6=Key
12, bit 7=NA, bit 8=NA
D3: For all bits 0 if key is up, 1 if key is down. Keys 13 to 18;
bit 1=Key 13, bit 2=Key 14, bit 3=Key 15, bit 4=Key 16, bit 5=Key 17, bit
6=Key 18, bit 7=NA, bit 8=NA
D4: For all bits 0 if key is up, 1 if key is down. Keys 19 to 23;
bit 1=Key 19, bit 2=Key 20, bit 3=Key 21, bit 4=Key 22, bit 5=Key 23, bit
6=NA, bit 7=NA, bit 8=NA
D5: For all bits 0 if key is up, 1 if key is down. Keys 24 to 28,
180; bit 1=Key 24, bit 2=Key 25, bit 3=Key 26, bit 4=Key 27, bit 5=Key 28,
bit 6=Key 180 (Plus One/Plus Two only), bit 7=NA, bit 8=NA
D6: For all bits 0 if key is up, 1 if key is down. Keys 29 to 34;
bit 1=Key 29, bit 2=Key 30, bit 3=Key 31, bit 4=Key 32, bit 5=Key 33, bit
6=Key 34, bit 7=NA, bit 8=NA
D7: For all bits 0 if key is up, 1 if key is down. Keys 35 to 39;
bit 1=Key 35, bit 2=Key 36, bit 3=Key 37, bit 4=Key 38, bit 5=Key 39, bit
6=NA, bit 7=NA, bit 8=NA
D8: For all bits 0 if key is up, 1 if key is down. Keys 40 to 44;
bit 1=Key 40, bit 2=Key 41, bit 3=Key 42, bit 4=Key 43, bit 5=Key 44, bit
6=NA, bit 7=NA, bit 8=NA
D9: For all bits 0 if key is up, 1 if key is down. Keys 45 to 49;
bit 1=Key 45, bit 2=Key 46, bit 3=Key 47, bit 4=Key 48, bit 5=Key 49, bit
6=NA, bit 7=NA, bit 8=NA
D10: For all bits 0 if key is up, 1 if key is down. Keys 50 to 55;
bit 1=Key 50, bit 2=Key 51, bit 3=Key 52, bit 4=Key 53, bit 5=Key 54, bit
6=Key 55, bit 7=NA, bit 8=NA
D11: For all bits 0 if key is up, 1 if key is down. Keys 56 to 61;
bit 1=Key 56, bit 2=Key 57, bit 3=Key 58, bit 4=Key 59, bit 5=Key 60, bit
6=Key 61, bit 7=NA, bit 8=NA
D12: For all bits 0 if key is up, 1 if key is down. Keys 62 to 65;
bit 1=Key 62, bit 2=Key 63, bit 3=Key 64, bit 4=Key 65, bit 5=NA, bit 6=NA,
bit 7=NA, bit 8=NA
D13: For all bits 0 if key is up, 1 if key is down. Keys 66 to 68;
bit 1=Key 66, bit 2=Key 67, bit 3=Key 68, bit 4=NA, bit 5=NA, bit 6=NA,
bit 7=NA, bit 8=NA
D14: For all bits 0 if key is up, 1 if key is down. Keys 69 to 74;
bit 1=Key 69, bit 2=Key 70, bit 3=Key 71, bit 4=Key 72, bit 5=Key 73, bit
6=Key 74, bit 7=NA, bit 8=NA
D15: For all bits 0 if key is up, 1 if key is down. Keys 75, 76,
NA, NA,185, 77; bit 1=Key 75, bit 2=Key 76, bit 3=NA, bit 4=NA, bit 5=Key
185 (Plus Two only), bit 6=Key 77, bit 7=NA, bit 8=NA
D16: For all bits 0 if key is up, 1 if key is down. Keys 78 to 83;
bit 1=Key 78, bit 2=Key 79, bit 3=Key 80, bit 4=Key 81, bit 5=Key 82, bit
6=Key 83, bit 7=NA, bit 8=NA
D17: For all bits 0 if key is up, 1 if key is down. Keys 84 to 89;
bit 1=Key 84, bit 2=Key 85, bit 3=Key 86, bit 4=Key 87, bit 5=Key 88, bit
6=Key 89, bit 7=NA, bit 8=NA
D18: For all bits 0 if key is up, 1 if key is down. Keys 90 to 95;
bit 1=Key 90, bit 2=Key 91, bit 3=Key 92, bit 4=Key 93, bit 5=Key 94, bit
6=Key 95, bit 7=NA, bit 8=NA
D19: For all bits 0 if key is up, 1 if key is down. Keys 96 to 101;
bit 1=Key 96, bit 2=Key 97, bit 3=Key 98, bit 4=Key 99, bit 5=Key 100, bit
6=Key 101, bit 7=NA, bit 8=NA
D20: For all bits 0 if key is up, 1 if key is down. Keys 102 to 107;
bit 1=Key 102, bit 2=Key 103, bit 3=Key 104, bit 4=Key 105, bit 5=Key 106,
bit 6=Key 107, bit 7=NA, bit 8=NA
D21: For all bits 0 if key is up, 1 if key is down. Keys 108 to 113;
bit 1=Key 108, bit 2=Key 109, bit 3=Key 110, bit 4=Key 111, bit 5=Key 112,
bit 6=Key 113, bit 7=NA, bit 8=NA
D22: For all bits 0 if key is up, 1 if key is down. Keys 114 to 119;
bit 1=Key 114, bit 2=Key 115, bit 3=Key 116, bit 4=Key 117, bit 5=Key 118,
bit 6=Key 119, bit 7=NA, bit 8=NA
D23: For all bits 0 if key is up, 1 if key is down. Keys 120 to 125;
bit 1=Key 120, bit 2=Key 121, bit 3=Key 122, bit 4=Key 123, bit 5=Key 124,
bit 6=Key 125, bit 7=NA, bit 8=NA
D24: For all bits 0 if key is up, 1 if key is down. Keys 126 to 131;
bit 1=Key 126, bit 2=Key 127, bit 3=Key 128, bit 4=Key 129, bit 5=Key 130,
bit 6=Key 131, bit 7=NA, bit 8=NA
D25: For all bits 0 if key is up, 1 if key is down. Keys 132 to 138;
bit 1=Key 132, bit 2=Key 133, bit 3=Key 134, bit 4=Key 135, bit 5=Key 136,
bit 6=Key 137, bit 7=Key 138, bit 8=NA
D26: For all bits 0 if key is up, 1 if key is down. Keys 139 to 145;
bit 1=Key 139, bit 2=Key 140, bit 3=Key 141, bit 4=Key 142, bit 5=Key 143,
bit 6=Key 144, bit 7=Key 145, bit 8=NA
D27: For all bits 0 if key is up, 1 if key is down. Keys 146 to 152;
bit 1=Key 146, bit 2=Key 147, bit 3=Key 148, bit 4=Key 149, bit 5=Key 150,
bit 6=Key 151, bit 7=Key 152, bit 8=NA
D28: For all bits 0 if key is up, 1 if key is down. Keys 153 to 159;
bit 1=Key 153, bit 2=Key 154, bit 3=Key 155, bit 4=Key 156, bit 5=Key 157,
bit 6=Key 158, bit 7=Key 159, bit 8=NA
D29: For all bits 0 if key is up, 1 if key is down. Keys 160 to 166;
bit 1=Key 160, bit 2=Key 161, bit 3=Key 162, bit 4=Key 163, bit 5=Key 164,
bit 6=Key 165, bit 7=Key 166, bit 8=NA
D30: For all bits 0 if key is up, 1 if key is down. Keys 167 to 173;
bit 1=Key 167, bit 2=Key 168, bit 3=Key 169, bit 4=Key 170, bit 5=Key 171,
bit 6=Key 172, bit 7=Key 173, bit 8=NA
D31: For all bits 0 if key is up, 1 if key is down. Keys 174 to 179;
bit 1=Key 174, bit 2=Key 175, bit 3=Key 176, bit 4=Key 177, bit 5=Key 178,
bit 6=Key 179, bit 7=NA, bit 8=NA
D32: For all bits 0 if key is up, 1 if key is down. NumLock, CapsLock,
ScrollLock, Virtual On Boot; bit 1=NumLock, bit 2=CapsLock, bit 3=ScrollLock,
bit 4=Virtual On Boot, bits 5-8=NA
Time: If enabled using Enable Time Stamp output report gives a time
in ms from start of computer in 4 bytes where byte 20 is the MSB and byte
23 is the LSB.
2. Descriptor Data
This data is returned after a Request for Descriptor output report is sent.
|
Byte 1*
|
Byte 2
|
Byte 3
|
Byte 4
|
Byte 5
|
Byte 6
|
Byte 7
|
Byte 8
|
Byte 9
|
Byte 10
|
Byte 11
|
Byte 12
|
Byte 13
|
Byte 14
|
Byte 15
|
Byte 16
|
Byte 17
|
Bytes 18-41
|
| Constant | Unit ID | Data Type | Mode | Key mapstart | Layer2 Offset | Constant | Constant | Max Columns | Max Rows | LED State | Version | PID Low | PID Hi | Keymapstart Hi | Max Macro Address Lo | Max Macro Address Hi | Reserved |
|
0
|
<data>
|
214
|
Mode
|
208
|
255
|
255
|
255
|
31
|
8
|
LEDs
|
<data>
|
PIDL
|
PIDH
|
0
|
MMAL
|
MMAH
|
value
|
Mode: 0 means device is in PID #1, 2 means the device is in PID
#2
LEDs: bit 7=1 for Green LED on, 0 for Green LED off, bit 8=1 for
Red LED on, bit 8=0 for Red LED off
PIDL: The LSB of the Product Identification number or PID
PIDH: The MSB of the Product Identification number or PID
MMAL: LSB of the maximum macro address, for internal use only
MMAH: MSB of the maximum macro address, for internal use only
3. Custom Data
This data is returned after an output report: Generate Custom Data is sent.
|
Byte 1*
|
Byte 2
|
Byte 3
|
Byte 4
|
Byte 5
|
Byte 6
|
Byte 7
|
Bytes Count+5 to 40
|
Byte 41
|
| Constant | Unit ID | Data Type | Count of custom bytes to follow | Custom byte 1 | Custom byte 2 | Custom byte 3... | Reserved | Increment |
|
0
|
<data>
|
224
|
Count
|
B1
|
B2
|
B3...
|
value
|
Increment
|
Count: Number of custom bytes to follow.
B1: 1st custom byte.
B2: 2nd custom byte.
B3: 3rd custom byte and so on for as many bytes as specified in Count.
Increment: This byte is incremented each time a Custom Data report
is sent thus even if 2 identical reports are sent they will both come in
even if SuppressDuplicate reports is on.
4. AES Encrypted Data
This is received immediately following an AES Encrypt output report is sent. See AES Dongle Implementation for further details.
|
Byte 1*
|
Byte 2
|
Byte 3
|
Byte 4
|
Byte 5
|
Byte x
|
Bytes x+1 to 41
|
| Constant | Unit ID | Data Type | Encryptd byte1 | Encrypted byte 2... | Encrypted byte x | Constant |
|
0
|
<data>
|
139
|
E1
|
E2
|
Ex
|
0
|
E1, E2,..., Ex: Encrypted data results, up to 32 bytes.
5. AES Decrypted Data
This is received immediately following an AES Decrypt output report is sent. AES key and AES initialization vector must be the same as those used in AES Encrypt command in order to successfully decrypt the results.
|
Byte 1*
|
Byte 2
|
Byte 3
|
Byte 4
|
Byte 5
|
Byte x
|
Bytes x+1 to 41
|
| Constant | Unit ID | Data Type | Decryptd byte1 | Decrypted byte 2... | Decrypted byte x | Constant |
|
0
|
<data>
|
140
|
D1
|
D2
|
Dx
|
0
|
D1, D2,..., Dx: Decrypted data results, up to 32 bytes.
*This first byte may be omitted on some non-PC operating systems. On
these systems the read and write lengths will be 1 byte smaller.
X-keys Control Room Keyboard Output Report
The following types of output reports are shown in the summary below. Please be aware that several of these commands result in writing to the device's eeprom which has a limit to the number of writes allowed before it is "burnt out". The manufacturer's specification is 50,000 eeprom writes. Because of this we recommend the commands designated with e be executed rarely and not within timing loops. Note, the first byte listed in this documentation is 0 and represents the report ID. This is not present on some non-PC operating systems. So when sending an output report on Android for example, eliminate this byte.
|
Report
|
Format
|
Description
|
|---|---|---|
|
1
|
0, 179, LEDIndex, State, 0... | Index Based Set LED (Flash) |
|
2
|
0, 189, UnitID, 0... | Set Unit IDe |
|
3
|
0, 214, 0... | Request Descriptor |
|
4
|
0, 210, Enable, 0... | Enable Time Stamp |
|
5
|
0, 177, 0... | Generate Data |
|
6
|
0, 180, Freq, 0... | Set Frequency of Flash |
|
7
|
0, 204, Mode, 0... | Change PIDe |
|
8
|
0, 196, Change, 0... | Reboot Mode |
|
9
|
0, 201, Modifier, 0, HC1, HC2, HC3, HC4, HC5, HC6, 0... | Keyboard Reflector |
|
10
|
0, 225, Usage ID LSB, Usage ID MSB, 0... | Multimedia Reflector |
|
11
|
0, 224, Count, B1, B2, B3..., 0... | Generate Custom Data |
|
12
|
0, 195, Version LSB, Version MSB, 0... | Set Version Numbere |
|
13
|
0, 238, 0... | Reboot Device |
|
14
|
0, 157, 0... | Get Unique ID |
|
15
|
0, 137, K1, K2,..., K16, 0... | Set AES Keye |
|
16
|
0, 138, IV1, IV2, ..., IV16, 0... | Set AES Initialization Vector |
|
17
|
0, 139, M1, M2, ..., Mx, 0... | AES Encrypt |
|
18
|
0, 140, E1, E2,...Ex, 0... | AES Decrypt |
eCommand writes to EEPROM, do not
perform this command excessively, do not exceed 50,000 writes to EEPROM.
Endpoint: 4, Vendor Defined Usage Page.
Report Length: 36 bytes.
1. Index Based Set LED (Flash)
One of two methods for controlling the LEDs. If flashing of LEDs is desired this method must be used.
|
Byte 1*
|
Byte 2
|
Byte 3
|
Byte 4
|
Bytes 5-36
|
| Constant | Command | LED Index | LED State | Constant |
|
0
|
179
|
LEDIndex
|
LEDState
|
0
|
LEDIndex: 0 = topmost indicator LED (green), 1 = 2nd from top indicator
LED (red), 2 = 3rd from top indicator LED (red), 3 = bottom indicator LED
(red).
LEDState: 0 = off, 1 = on and 2 = flash. Set the frequency of the
flash with output report Set Frequency of Flash.
2. Set Unit ID
Send this output report to set the Unit ID of the device. This is useful if connecting more than one of the same device to the a computer. Command writes to EEPROM, do not perform this command excessively, do not exceed 50,000 writes to EEPROM.
|
Byte 1*
|
Byte 2
|
Byte 3
|
Bytes 4-36
|
| Constant | Command | Unit ID (0-255) | Constant |
|
0
|
189
|
value
|
0
|
3. Request Descriptor
After sending this output report a Descriptor input report will be generated.
|
Byte 1*
|
Byte 2
|
Bytes 3-36
|
| Constant | Descriptor Command | Constant |
|
0
|
214
|
0
|
4. Enable Time Stamp
By default the Time Stamp feature is enabled. To turn off send this command with Byte 3=0.
|
Byte 1*
|
Byte 2
|
Byte 3
|
Bytes 4-36
|
| Constant | Command | Enable | Constant |
|
0
|
210
|
0=off, 1=on
|
0
|
5. Generate Data
After sending this output report a General Incoming Data input report will be generated with bit 2 of PS set. This is useful in determining the initial state of the device before any data has changed.
|
Byte 1*
|
Byte 2
|
Bytes 3-36
|
| Constant | Command | Constant |
|
0
|
177
|
0
|
6. Set Frequency of Flash
Use this output report to control the frequency of the flashing of the indicator LEDs.
|
Byte 1*
|
Byte 2
|
Byte 3
|
Bytes 4-36
|
| Constant | Command | Frequency | Constant |
|
0
|
180
|
Freq
|
0
|
Freq: 1-255 where 1 is the fastest flash and 255 is the slowest. 255 is approximately 4 seconds between flashes.
7. Change PID
Send this output report to change between the PIDs. Command writes to EEPROM, do not perform this command excessively, do not exceed 50,000 writes to EEPROM.
|
Byte 1*
|
Byte 2
|
Byte 3
|
Bytes 4-36
|
| Constant | Command | Mode | Constant |
|
0
|
204
|
Mode
|
0
|
Mode: 0 for PID #1, 1 for PID #2 (KVM). Note if change to PID#2 (KVM) input and output reports will not be available. To exit KVM mode unplug the device then immediately after re-plugging the device in, toggle the Scroll Lock key on the keyboard 10-15 times.
8. Reboot Mode
Send this output report to determine if the device will automatically return to PID #2 (KVM) on each reboot or if it will remain in the current PID between reboots.
|
Byte 1*
|
Byte 2
|
Byte 3
|
Bytes 4 to 36
|
| Constant | Command | Change | Constant |
|
0
|
196
|
Change
|
0
|
Change: Enter 0 to have the device not return to PID #2 (KVM) on reboot and 1 to have it always return to PID #2 (KVM) on reboot
9. Keyboard Reflector
Sends native keyboard messages.
|
Byte 1*
|
Byte 2
|
Byte 3
|
Byte 4
|
Byte 5
|
Byte 6
|
Byte 7
|
Byte 8
|
Byte 9
|
Byte 10
|
Bytes 11-36
|
| Constant | Command | Modifier | Constant | Hid Code 1 | Hid Code 2 | Hid Code 3 | Hid Code 4 | Hid Code 5 | Hid Code 6 | Constant |
|
0
|
201
|
Modifier
|
0
|
HC1
|
HC2
|
HC3
|
HC4
|
HC5
|
HC6
|
0
|
Modifier: Bit 1=Left Ctrl, bit 2=Left Shift, bit 3=Left Alt, bit
4=Left Gui, bit 5=Right Ctrl, bit 6=Right Shift, bit 7=Right Alt, bit 8=Right
Gui.
HC1=Hid Code for 1st key down, or 0 to release previous key press
in this byte position.
HC2=Hid Code for 2nd key down, or 0 to release previous key press
in this byte position.
HC3=Hid Code for 3rd key down, or 0 to release previous key press
in this byte position.
HC4=Hid Code for 4th key down, or 0 to release previous key press
in this byte position.
HC5=Hid Code for 5th key down, or 0 to release previous key press
in this byte position.
HC6=Hid Code for 6th key down, or 0 to release previous key press
in this byte position.
10. Multimedia Reflector
Sends 2 byte multimedia messages. Must have the device set to a PID with a multimedia endpoint; PID #4. When in this PID there is no input data report available thus users of this feature will not be able to read any data, only write output reports. If desiring this feature users are instructed to use MacroWorks 3.1 programming utility for programming of the buttons and converting to a multimedia PID. This command must be followed with an "up" command with ULo and UHi =0.
|
Byte 1*
|
Byte 2
|
Byte 3
|
Byte 4
|
Bytes 8-36
|
| Constant | Command | Usage ID Lo | Usage ID Hi | Constant |
|
0
|
225
|
ULo
|
UHi
|
0
|
ULo=Usage ID low byte see hut1_12.pdf, pages 75-85 Consumer Page.
UHi=Usage ID high byte see hut1_12.pdf, pages 75-85 Consumer Page.
Example: My Computer - 0, 225, 94, 01, 0... and send report using WriteData.
Then 0, 225, 0, 0, 0... and send report using WriteData. In this example
0194 is the Usage ID for My Computer.
11. Generate Custom Data
After sending this output report a Custom Data input report will be generated with Byte 3 set to 224 and the count and custom bytes following.
|
Byte 1*
|
Byte 2
|
Byte 3
|
Byte 4
|
Byte 5
|
Byte 6...
|
Bytes (Count+4) to 36
|
| Constant | Command | Count of custom bytes to follow | Custom byte 1 | Custom byte 2 | Custom byte 3... | Constant |
|
0
|
224
|
Count
|
B1
|
B2
|
B3...
|
0
|
Count: Number of custom bytes to follow.
B1: 1st custom byte.
B2: 2nd custom byte.
B3: 3rd custom byte and so on for as many bytes as specified in Count.
12. Set Version Number
Send this output report to set the Version of the device. This is not the firmware version given in the descriptor but a 2 byte number available on enumeration. The value is "remembered" so if it is changed, using this report, the device must be rebooted. The device can be rebooted by replugging it or by sending the output report : Reboot Device. The device is also rebooted when changing pids using output report: Change PID. Command writes to EEPROM, do not perform this command excessively, do not exceed 50,000 writes to EEPROM.
|
Byte 1*
|
Byte 2
|
Byte 3
|
Byte 4
|
Bytes 5-36
|
| Constant | Command | Version LB (0-255) | Version HB (0-255) | Constant |
|
0
|
195
|
value
|
value
|
0
|
13. Reboot Device
Send this output report to reboot the device without having to unplug it. After sending this report the device must be re-enumerated.
|
Byte 1*
|
Byte 2
|
Bytes 3-36
|
| Constant | Command | Constant |
|
0
|
238
|
0
|
14. Get Unique ID
After sending a Get Unique ID output report, a Unique ID Data input report will be generated with the 8 bytes of the silicon generated unique ID of the device. This value is available also in the HID device descriptor as the string iSerialNumber.
|
Byte 1*
|
Byte 2
|
Bytes 3 to 36
|
| Constant | Command | Constant |
|
0
|
157
|
0
|
15. Set AES Key
Sets the user defined Advanced Encryption Standard (AES) key. Remember these numbers as they are required to check for the key. This is intended to be done once by the developer prior to sale. See AES Dongle Implementation.
|
Byte 1*
|
Byte 2
|
Byte 3
|
Byte 4
|
Byte 5
|
Byte 6
|
Byte 7
|
Byte 8
|
Byte 9
|
Byte 10
|
Byte 11
|
Byte 12
|
Byte 13
|
Byte 14
|
Byte 15
|
Byte 16
|
Byte 17
|
Byte 18
|
Bytes 19 to 36
|
| Constant | Command | AES key byte 1 | AES key byte 2 | AES key byte 3 | AES key byte 4 | AES key byte 5 | AES key byte 6 | AES key byte 7 | AES key byte 8 | AES key byte 9 | AES key byte 10 | AES key byte 11 | AES key byte 12 | AES key byte 13 | AES key byte 14 | AES key byte 15 | AES key byte 16 | Constant |
|
0
|
137
|
K1
|
K2
|
K3
|
K4
|
K5
|
K6
|
K7
|
K8
|
K9
|
K10
|
K11
|
K12
|
K13
|
K14
|
K15
|
K16
|
0
|
K1, K2, ..., K16: The 16 byte of user defined AES key, any number
0-255, however all 0s is invalid.
16. Set AES Intialization Vector
This command sets the AES initialization vector. This command is used in conjuction with Set AES Key and AES Encryption to check the AES dongle. The initialization vector must be set before each encryption and decryption as it is set to all 0s after each encryption and decryption in the X-keys. See AES Dongle Implemenation for more details.
|
Byte 1*
|
Byte 2
|
Byte 3
|
Byte 4
|
Byte 5
|
Byte 6
|
Byte 7
|
Byte 8
|
Byte 9
|
Byte 10
|
Byte 11
|
Byte 12
|
Byte 13
|
Byte 14
|
Byte 15
|
Byte 16
|
Byte 17
|
Byte 18
|
Bytes 19 to 36
|
| Constant | Command | AES IV byte 1 | AES IV byte 2 | AES IV byte 3 | AES IV byte 4 | AES IV byte 5 | AES IV byte 6 | AES IV byte 7 | AES IV byte 8 | AES IV byte 9 | AES IV byte 10 | AES IV byte 11 | AES IV byte 12 | AES IV byte 13 | AES IV byte 14 | AES IV byte 15 | AES IV byte 16 | Constant |
|
0
|
138
|
IV1
|
IV2
|
IV3
|
IV4
|
IV5
|
IV6
|
IV7
|
IV8
|
IV9
|
IV10
|
IV11
|
IV12
|
IV13
|
IV14
|
IV15
|
IV16
|
0
|
IV1, IV2, ..., IV16: The 16 byte of user determined AES initialization vector, any number 0-255, however all 0s is invalid.
17. AES Encrypt
This command encrypts a user defined message using AES-CBC mode and returns the results in an AES Encrypted Data input report. The AES initialization vector is cleared in the X-keys following this command. This command is used in conjuction with Set AES Key and AES Initialization Vector to check the AES dongle. See AES Dongle Implemenation for more details.
|
Byte 1*
|
Byte 2
|
Byte 3
|
Byte 4...
|
Byte z
|
Bytes z+1 to 36
|
| Constant | Command | Message byte 1 | Message byte 2 | Message byte x | Constant |
|
0
|
139
|
M1
|
M2
|
Mx
|
0
|
M1, M2, ..., Mx: ASCII values for the user defined message, not to exceed 32 characters (32 bytes). For example Encrypt Me would have M1=110, M2=99, M3=114, M4=121, M5=112, M6=116, M7=32, M8=77, M9=101
18. AES Decrypt
This command decrypts previously encrypted data using AES-CBC mode and returns the results in an AES Decrypted Data input report. The Set AES Initialization command used for encrypted data must be sent again using the same values prior to using this command to decrypt. The AES initialization vector is cleared in the X-keys following this command. This command is not used for the AES Dongle implementation, developers are to use their own AES decryption function.
|
Byte 1*
|
Byte 2
|
Byte 3
|
Byte 4...
|
Byte z
|
Bytes z+1 to 36
|
| Constant | Command | Encrypted byte 1 | Encrypted byte 2 | Encrypted byte x | Constant |
|
0
|
140
|
E1
|
E2
|
EX
|
0
|
E1, E2, ..., Ex: Encrypted data not to exceed 32 bytes.
*This first byte may be omitted on some non-PC operating systems. On these systems the read and write lengths will be 1 byte smaller.
Back to top