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

X-keys Control Room Keyboard

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