X-keys XKE-40/X-keys XKE-40 RS232 Data Report | Main Page

General Information

VID
05f3h or 1523
XKE-40 PID #1 (Factory Default)
054Bh or 1355
XKE-40 PID #2
054Ch or 1356
XKE-40 PID #3
054Dh or 1357
XKE-40 PID #4
054Eh or 1358
XKE-40 PID #5
054Fh or 1359
XKE-40 PID #6
0550h or 1360
XKE-40 PID #7
0551h or 1361
XKE-40 PID #8 (KVM)
0552h or 1362
XKE-40 RS232 PID #1 (Factory Default)
0627h or 1575
XKE-40 RS232 PID #2
0628h or 1576
XKE-40 RS232 PID #3
0629h or 1577
XKE-40 RS232 PID #4
062Ah or 1578
XKE-40 RS232 PID #5
062Bh or 1579
XKE-40 RS232 PID #6
062Ch or 1580
XKE-40 RS232 PID #7
062Dh or 1581
XKE-40 RS232 PID #8 (KVM)
062Eh or 1582
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: Consumer Usage Page Input and Output (Hid Usage Page 12, Hid Usage 1), Keyboard boot (Hid Usage Page 1, Hid Usage 6), Multimedia (Hid Usage Page 12 and 1, Hid Usage 1 and 128).
PID #3 Endpoints: Consumer Usage Page Input and Output (Hid Usage Page 12, Hid Usage 1), Keyboard (Hid Usage Page 1, Hid Usage 6), Joystick (Hid Usage Page 1, Hid Usage 4).
PID #4 Endpoints: Consumer Usage Page Input and Output (Hid Usage Page 12, Hid Usage 1), Joystick (Hid Usage Page 1, Hid Usage 4), Mouse (Hid Usage Page 1, Hid Usage 2).
PID #5 Endpoints: Consumer Usage Page Input and Output (Hid Usage Page 12, Hid Usage 1), Keyboard boot (Hid Usage Page 1, Hid Usage 6), Mouse (Hid Usage Page 1, Hid Usage 2).
PID #6 Endpoints: Consumer Usage Page Input and Output (Hid Usage Page 12, Hid Usage 1).
PID #7 Endpoints: Consumer Usage Page Input and Output (Hid Usage Page 12, Hid Usage 1), Keyboard (Hid Usage Page 1, Hid Usage 6), Mouse (Hid Usage Page 1, Hid Usage 2), Multimedia (Hid Usage Page 12 and 1, Hid Usage 1 and 128), Joystick (Hid Usage Page 1, Hid Usage 4).
PID #8 Endpoints: Keyboard boot (Hid Usage Page 1, Hid Usage 6) for use with KVMs. To exit KVM mode unplug the device, locate the small hole on the right end of the device and using a paper clip or similar item depress the program switch while simultaneously replugging the device.

The XKE-40 and XKE-40 RS232 are standard USB HID devices and are supported by P.I. Engineering's Macroworks 3.1, X-keys Basic Setup, X-keys Setup for Mac, and our many SDKs. XKE-40 RS232 is demonstrated in the RS232 Common Sample.

X-keys XKE-40 Input Report

Figure 1: X-keys XKE-40 key reference.

Report Length: 37 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 an output report: Generate Data 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
Bytes 10-32
Bytes 33-36
Byte 37
Constant Unit ID Data Type Keys Keys Keys Keys Keys NumLck, CapsLck, ScrLck, Program Switch Reserved Time Stamp Reserved
0
<data>
DT
D1
D2
D3
D4
D5
DS
value
Time
value

DT: Data Type value of 0, 1, 2, or 3 indicates the following data is a General Incoming Data report. 0 if program switch is not pressed, 1 if program switch is pressed, 2 if generated by Generate Data output report and 3 if program switch is down and generated by Generate Data output report
D1: For all bits 0 if key is up, 1 if key is down. Bit 1=key 0, bit 2=key 1, bit 3=key 2, bit 4=key 3, bit 5=key 4, bit 6=key 5, bit 7=key 6, bit 8=key 7
D2: For all bits 0 if key is up, 1 if key is down. Bit 1=key 8, bit 2=key 9, bit 3=key 10, bit 4=key 11, bit 5=key 12, bit 6=key 13, bit 7=key 14, bit 8=key 15
D3: For all bits 0 if key is up, 1 if key is down. Bit 1=key 16, bit 2=key 17, bit 3=key 18, bit 4=key 19, bit 5=key 20, bit 6=key 21, bit 7=key 22, bit 8=key 23
D4: For all bits 0 if key is up, 1 if key is down. Bit 1=key 24, bit 2=key 25, bit 3=key 26, bit 4=key 27, bit 5=key 28, bit 6=key 29, bit 7=key 30, bit 8=key 31
D5: For all bits 0 if key is up, 1 if key is down. Bit 1=key 32, bit 2=key 33, bit 3=key 34, bit 4=key 35, bit 5=key 36, bit 6=key 37, bit 7=key 38, bit 8=key 39
DS: Bit 1=NumLock, bit 2=CapsLock, bit 3=ScrLock, bit 4=On Boot (sets the bit when device is booted up by the usb then sets it back to 0), bit 5=Program Switch
Time: If enabled using Enable Time Stamp output report gives a time in ms starting from when the device was plugged into a port in 4 bytes where byte 33 is the MSB and byte 36 is the LSB

2. Descriptor Data

This data is returned after an output report: Request for Descriptor is sent. Bytes 22 to 27 are for the RS232 version only.

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 to 21
Byte 22
Byte 23
Byte 24
Byte 25
Byte 26
Byte 27
Bytes 18 to 37
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
UART Settings
Reserved
Start byte for Output Report Received Message
Stop byte for Output Report Received Message
Start byte for UART Custom Received Message
Stop byte for UART Custom Received Message
Reserved
0
<data>
214
Mode
96
128
255
255
10
8
LEDs
<data>
PIDL
PIDH
0
MMAL
MMAH
value
UART
value
4
5
2
3
value

Mode: 0 means device is in PID #1, 1 = PID #2, 2 = PID #3, 3 = PID #4, etc.
LEDs: This byte tells the current state of the indicator LEDs. Bit 7 set means Green LED is on, bit 8 set means Red LED is on
PIDL: LSB of the Product Identification number or PID
PIDH: 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
UART: XKE-40 RS232 only. Bit 1: 0=no UART PI Base64 Input Report Transmit Messages sent (factory default), 1=UART PI Base64 Input Report Transmit Message sent for selected input reports. See the Enable UART PI Base64 Input Report Transmit Messages output report for details. Bit 2: 0=no Incoming UART Data - Echo of UART Output Report Received Message input report generated (factory default), 1=Incoming UART Data - Echo of UART Output Report Received Message input report are generated when a UART Output Report Receive Message received. See the Enable UART Echo output report for details. Bit 3: 0=Sleep of USB enabled (factory default), 1=Sleep of USB disabled. See Disable Sleep of USB output report for details. Bit 4: 0=USB check enabled (factory default), 1=USB check disabled. See Disable USB Check output report for details.

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 37
Constant Unit ID Data Type Count of custom bytes to follow Custom byte 1 Custom byte 2 Custom byte 3... Reserved
0
<data>
224
Count
B1
B2
B3...
value

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

4. Check Dongle Key

This is received immediately following a Check Dongle Key output report is sent. The four values R0-R3 are required to continue the check. See Dongle Implementation for further details.

Byte 1*
Byte 2
Byte 3
Byte 4
Byte 5
Byte 6
Byte 7
Bytes 8 to 36
Constant Unit ID Data Type 1st byte returned from hash 2nd byte returned from hash 3rd byte returned from hash 4th byte returned from hash Reserved
0
<data>
193
R0
R1
R2
R3
value

R0: Value need for comparison to check for correct dongle key
R1: Value need for comparison to check for correct dongle key
R2: Value need for comparison to check for correct dongle key
R3: Value need for comparison to check for correct dongle key

5. Backlight On/Off State Data

This data is returned after an output report: Request Backlight On/Off State is sent.

Byte 1*
Byte 2
Byte 3
Byte 4
Byte 5
Byte 6
Byte 7
Byte 8
Byte 9
Byte 10
Byte 15
Byte 16
Byte 17
Byte 18
Byte 19
Bytes 20 to 36
Constant Unit ID Data Type Bank 1 Intensity Bank 2 Intensity State of Bank 1 Set 1 State of Bank 1 Set 2 State of Bank 1 Set 3 State of Bank 1 Set 4 State of Bank 1 Set 5 State of Bank 2 Set 1 State of Bank 2 Set 2 State of Bank 2 Set 3 State of Bank 2 Set 4 State of Bank 2 Set 5 Reserved
0
<data>
174
IntB1
IntB2
B1S1
B1S2
B1S3
B1S4
B1S5
B2S1
B2S2
B2S3
B2S4
B2S5
value

IntB1: Intensity of the bank 1 backlights, 0-255
IntB2: Intensity of the bank 2backlights, 0-255
B1S1: State of the bank 1 backlight LEDs for keys 0-7 (see Figure 1), 0 for off, 1 for on. Bit 1=key 0, bit 2=key 1, bit 3=key 2, bit 4=key 3, bit 5=key 4, bit 6=key 5, bit 7=key 6, bit 8=key 7
B1S2: State of the bank 1 backlight LEDs for keys 8-15 (see Figure 1), 0 for off, 1 for on. Bit 1=key 8, bit 2=key 9, bit 3=key 10, bit 4=key 11, bit 5=key 12, bit 6=key 13, bit 7=key 14, bit 8=key 15
B1S3: State of the bank 1 backlight LEDs for keys 15-23 (see Figure 1), 0 for off, 1 for on. Bit 1=key 16, bit 2=key 17, bit 3=key 18, bit 4=key 19, bit 5=key 20, bit 6=key 5, bit 7=key 6, bit 8=key 7
B1S4: State of the bank 1 backlight LEDs for keys 24-31 (see Figure 1), 0 for off, 1 for on. Bit 1=key 24, bit 2=key 25, bit 3=key 26, bit 4=key 27, bit 5=key 28, bit 6=key 29, bit 7=key 30, bit 8=key 31
B1S5: State of the bank 1 backlight LEDs for keys 32-39 (see Figure 1), 0 for off, 1 for on. Bit 1=key 32, bit 2=key 33, bit 3=key 34, bit 4=key 35, bit 5=key 36, bits 6=key 37, bit 7=key 38, bit 8=key 39.
B2S1: State of the bank 2 backlight LEDs for keys 0-7 (see Figure 1), 0 for off, 1 for on. Bit 1=key 0, bit 2=key 1, bit 3=key 2, bit 4=key 3, bit 5=key 4, bit 6=key 5, bit 7=key 6, bit 8=key 7
B2S2: State of the bank 2 backlight LEDs for keys 8-15 (see Figure 1), 0 for off, 1 for on. Bit 1=key 8, bit 2=key 9, bit 3=key 10, bit 4=key 11, bit 5=key 12, bit 6=key 13, bit 7=key 14, bit 8=key 15
B2S3: State of the bank 2 backlight LEDs for keys 15-23 (see Figure 1), 0 for off, 1 for on. Bit 1=key 16, bit 2=key 17, bit 3=key 18, bit 4=key 19, bit 5=key 20, bit 6=key 5, bit 7=key 6, bit 8=key 7
B2S4: State of the bank 2 backlight LEDs for keys 24-31 (see Figure 1), 0 for off, 1 for on. Bit 1=key 24, bit 2=key 25, bit 3=key 26, bit 4=key 27, bit 5=key 28, bit 6=key 29, bit 7=key 30, bit 8=key 31
B2S5: State of the bank 2 backlight LEDs for keys 32-39 (see Figure 1), 0 for off, 1 for on. Bit 1=key 32, bit 2=key 33, bit 3=key 34, bit 4=key 35, bit 5=key 36, bits 6=key 37, bit 7=key 38, bit 8=key 39

6. Backlight Flash State Data

This data is returned after an output report: Request Backlight Flash State is sent.

Byte 1*
Byte 2
Byte 3
Byte 4
Byte 5
Byte 6
Byte 7
Byte 8
Byte 9
Byte 10
Byte 15
Byte 16
Byte 17
Byte 18
Byte 19
Bytes 20 to 36
Constant Unit ID Data Type Flash State of Indicator LEDs Flash Frequency Flash State of Bank 1 Set 1 Flash State of Bank 1 Set 2 Flash State of Bank 1 Set 3 Flash State of Bank 1 Set 4 Flash State of Bank 1 Set 5 Flash State of Bank 2 Set 1 Flash State of Bank 2 Set 2 Flash State of Bank 2 Set 3 Flash State of Bank 2 Set 4 Flash State of Bank 2 Set 5 Reserved
0
<data>
175
Ind
Freq
B1S1
B1S2
B1S3
B1S4
B1S5
B2S1
B2S2
B2S3
B2S4
B2S5
value

Ind: If bit 6=1 then Green Indicator is flashing, if bit 7=1 then Red Indicator LED is flashing
Freq: Flash Frequency, 0-255
B1S1: State of the bank 1 backlight LEDs for keys 0-7 (see Figure 1), 0 for not flashing, 1 for flashing. Bit 1=key 0, bit 2=key 1, bit 3=key 2, bit 4=key 3, bit 5=key 4, bit 6=key 5, bit 7=key 6, bit 8=key 7
B1S2: State of the bank 1 backlight LEDs for keys 8-15 (see Figure 1), 0 for not flashing, 1 for flashing. Bit 1=key 8, bit 2=key 9, bit 3=key 10, bit 4=key 11, bit 5=key 12, bit 6=key 13, bit 7=key 14, bit 8=key 15
B1S3: State of the bank 1 backlight LEDs for keys 15-23 (see Figure 1), 0 for not flashing, 1 for flashing. Bit 1=key 16, bit 2=key 17, bit 3=key 18, bit 4=key 19, bit 5=key 20, bit 6=key 5, bit 7=key 6, bit 8=key 7
B1S4: State of the bank 1 backlight LEDs for keys 24-31 (see Figure 1), 0 for not flashing, 1 for flashing. Bit 1=key 24, bit 2=key 25, bit 3=key 26, bit 4=key 27, bit 5=key 28, bit 6=key 29, bit 7=key 30, bit 8=key 31
B1S5: State of the bank 1 backlight LEDs for keys 32-39 (see Figure 1), 0 for not flashing, 1 for flashing. Bit 1=key 32, bit 2=key 33, bit 3=key 34, bit 4=key 35, bit 5=key 36, bits 6=key 37, bit 7=key 38, bit 8=key 39
B2S1: State of the bank 2 backlight LEDs for keys 0-7 (see Figure 1), 0 for not flashing, 1 for flashing. Bit 1=key 0, bit 2=key 1, bit 3=key 2, bit 4=key 3, bit 5=key 4, bit 6=key 5, bit 7=key 6, bit 8=key 7
B2S2: State of the bank 2 backlight LEDs for keys 8-15 (see Figure 1), 0 for not flashing, 1 for flashing. Bit 1=key 8, bit 2=key 9, bit 3=key 10, bit 4=key 11, bit 5=key 12, bit 6=key 13, bit 7=key 14, bit 8=key 15
B2S3: State of the bank 2 backlight LEDs for keys 15-23 (see Figure 1), 0 for not flashing, 1 for flashing. Bit 1=key 16, bit 2=key 17, bit 3=key 18, bit 4=key 19, bit 5=key 20, bit 6=key 5, bit 7=key 6, bit 8=key 7
B2S4: State of the bank 2 backlight LEDs for keys 24-31 (see Figure 1), 0 for not flashing, 1 for flashing. Bit 1=key 24, bit 2=key 25, bit 3=key 26, bit 4=key 27, bit 5=key 28, bit 6=key 29, bit 7=key 30, bit 8=key 31
B2S5: State of the bank 2 backlight LEDs for keys 32-39 (see Figure 1), 0 for not flashing, 1 for flashing. Bit 1=key 32, bit 2=key 33, bit 3=key 34, bit 4=key 35, bit 5=key 36, bits 6=key 37, bit 7=key 38, bit 8=key 39

7. Unique ID Data

This data is returned after an output report: Request Unique ID is sent. It returns 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
Byte 3
Byte 4
Byte 5
Byte 6
Byte 7
Byte 8
Byte 9
Byte 10
Byte 11
Bytes 12 to 36
Constant Unit ID Data Type Unique ID Byte 1 (MSB/Leftmost characters) Unique ID Byte 2 Unique ID Byte 3 Unique ID Byte 4 Unique ID Byte 5 Unique ID Byte 6 Unique ID Byte 7 Unique ID Byte 8 (LSB/Rightmost characters) Reserved
0
<data>
157
B1
B2
B3
B4
B5
B6
B7
B8
value

B1-B8: The 8 bytes of the silicon generated unique ID of the device where B1 is the MSB and B8 is the LSB. Typically represented as a string of the hex values returned, for example if the 8 bytes returned were B1=70, B2=21, B3=48, B4=23, B5=22, B6=6, B7=43, and B8=0, the string for this would be 4615301716062B00

8. RS232 Settings Data (RS232 version only)

For users of the UART port only. This report is generated after an output report: Get RS232 Settings is sent.

Byte 1*
Byte 2
Byte 3
Byte 4
Byte 5
Byte 6
Bytes 7
Bytes 8 to 37
Constant Unit ID Data Type Baud Rate Index Parity Data Bits Stop Bits Constant
0
<data>
141
BaudRateIndex
Parity
DataBits
StopBits
0

BaudRateIndex: Baud Rate Index: 0=300, 1=1200, 2=2400, 3=4800, 4=9600, 5=19200, 6=38400, 7=57600, 8=115200, 9=230400 (factory default)
Parity: Parity: 0=even, 1=odd, 2=none (factory default)
DataBits: Data Bits: 5, 6, 7, or 8 (factory default)
StopBits: Stop Bits: 2=1 bit (factory default), 3=1.5 bits, 4=2 bits

9. Incoming UART Data - Echo of UART Output Report Received Message (XKE-40 RS232 only)

For users of the UART port only. If UART Echo is enabled, this report is generated when a UART Output Report Received Message is received on the module's UART RX. The module recognizes a UART Output Report Received Message by the start and stop bytes of 4 and 5, respectively. The data between the start and stop bytes in the UART Output Report Received Message is decoded from Base64 for this input report. For details on how to send a UART Output Report Receive Message to the module see the X-blox UART Port Information section below. This report can be enabled or disabled using the Enable Echo of UART Output Report Received Message output report. The current value can be read on the Descriptor as EchoEnabled. Note: regardless of this setting, when a UART Output Report Received Message is received it is executed.

Byte 1*
Byte 2
Byte 3
Byte 4
Byte 5
Byte 6
Byte 7
Bytes 8 to x
Bytes x+1 to 37
Constant Unit ID Data Type Number of bytes to follow Command byte output report Byte 1 of output report Byte 2 of output report Byte 3, 4, 5, ... of output report Constant
0
<data>
216
Count
BC
B1
B2
Bytes ...
0

Count: The number of bytes to follow
BC: The "Command" byte of the output report. For example, if receiving an Index Based Set RGB Backlights output report then this value would be 165
B1: The first byte of the required bytes for the output report. For example, if receiving an Index Based Set RGB Backlights output report then this value would be the Key Index
B2: The second byte of the required bytes of the output report. For example, if receiving an Index Based Set RGB Backlights output report then this value would be the Bank
Bytes: Additional bytes added until the required number of bytes is reached. In the Index Based Set RGB Backlights example there would be additionally B3=Red, B4=Green, B5=Blue, and B6= Flash and thus Count=7

10. Incoming UART Data - UART Custom Message (RS232 version only)

For users of the UART port only. This report is generated for messages received on the module's UART RX that have a start byte of 2 and a stop byte of 3. A single message may generate several of these reports. No decoding of data is performed.

Byte 1*
Byte 2
Byte 3
Byte 4
Byte 5
Byte 6
Bytes 7 to x..
Bytes x+1
Bytes 34 to 37
Constant Unit ID Data Type Start Byte Byte 1 Byte 2 Byte 3 Stop Byte Constant
0
<data>
216
2
B1
B2
Bytes ...
3
0

B1: The first byte of the custom message
B2: The second byte of the custom message
Bytes...: And so on, terminating with a stop byte of 3

The following is an example of an Incoming UART Data - UART Custom Message that requires a total of 5 input reports to capture. This message is a UART PI Base64 Input Report Transmit Message obtained from the following scenario:
- Connect the UART TX of the device A to the UART RX of the device B where both A and B devices have enabled UARTs
- Enable UART on both devices using the Enable UART output report
- On device A, enabled the Enable UART PI Base64 Input Report Transmit Messages using the Enable UART PI Base64 Input Report Transmit Messages output report
- Prepare device B for reading input reports via the USB (enumerate, SetupInterface, and SetDataCallback)
- Press a button on device A thus generating a General Incoming Data input report on module A, simultaneously a UART PI Base64 Input Report Transmit Messages is sent on module A's TX
- Device B receives the message on its UART RX and generates the Incoming UART Data - UART Custom Message input reports, 4 of them in this case

Byte 1*
Byte 2
Byte 3
Byte 4
Byte 5
Byte 6
Bytes 7
Byte 8
Byte 9
Bytes 10
Byte 11
Byte 12
Bytes 13
Byte 14
Byte 15
Bytes 16
Byte 17
Byte 18
Byte 19
Bytes 20
Byte 21
Byte 22
Bytes 23
Byte 24
Byte 25
Bytes 26
Byte 27
Byte 28
Bytes 29
Byte 30
Byte 31
Bytes 32
Byte 33
Bytes 34-37
Constant Unit ID Data Type Start Byte Byte 1
{
Byte 2
''
Byte 3
c
Byte 4
m
Byte 5
d
Byte 6
"
Byte 7
:
Byte 8
"
Byte 9
s
Byte 10
e
Byte 11
n
Byte 12
d
Byte 13
S
Byte 14
p
Byte 15
l
Byte 16
a
Byte 17
t
Byte 18
"
Byte 19
,
Byte 20
"
Byte 21
P
Byte 22
I
Byte 23
D
Byte 24
"
Byte 25
:
Byte 26
"
Byte 27
0-9
Byte 28
0-9
Byte 29
0-9
Constant
0
<data>
216
2
123 (0x7b)
34 (0x22)
99 (0x63)
109 (0x6d)
100 (0x64)
34 (0x22)
58 (0x3a)
34 (0x22)
115 (0x73)
101 (0x65)
110 (0x6e)
100 (0x64)
83 (0x53)
112 (0x70)
108 (0x6c)
97 (0x61)
116 (0x74)
34 (0x22)
44 (0x2c)
34 (0x22)
80 (0x50)
73 (0x49)
68 (0x44)
34 (0x22)
58 (0x3a)
34 (0x22)
PID thousands
PID hundreds
PID tens
0

Byte 1*
Byte 2
Byte 3
Byte 4
Byte 5
Bytes 6
Byte 7
Byte 8
Bytes 9
Byte 10
Byte 11
Bytes 12
Byte 13
Byte 14
Bytes 15
Byte 16
Byte 17
Byte 18
Bytes 19
Byte 20
Byte 21
Bytes 22
Byte 23
Byte 24
Byte 25
Byte 26
Byte 27
Byte 28
Byte 29
Byte 30
Byte 31
Byte 32
Byte 33
Bytes 34-37
Constant Unit ID Data Type Byte 30
0-9
Byte 31
"
Byte 32
,
Byte 33
"
Byte 34
U
Byte 35
I
Byte 36
D
Byte 37
"
Byte 38
:
Byte 39
"
Byte 40
0-9
Byte 41
0-9
Byte 42
0-9
Byte 43
"
Byte 44
,
Byte 45
"
Byte 46
S
Byte 47
N
Byte 48
"
Byte 49
:
Byte 50
"
Byte 51 Byte 52 Byte 53 Byte 54 Byte 55 Byte 56 Byte 57 Byte 58 Byte 59 Constant
0
<data>
216
PID ones
34 (0x22)
44 (0x2c)
34 (0x22)
85 (0x55)
73 (0x49)
68 (0x44)
34 (0x22)
58 (0x3a)
34 (0x22)
UID hundreds
UID tens
UID ones
34 (0x22)
44 (0x2c)
34 (0x22)
83 (0x53)
78 (0x4E)
34 (0x22)
58 (0x3a)
34 (0x22)
Base64 SN 1
Base64 SN 2
Base64 SN 3
Base64 SN 4
Base64 SN 5
Base64 SN 6
Base64 SN 7
Base64 SN 8
Base64 SN 9
0

Byte 1*
Byte 2
Byte 3
Byte 4
Byte 5
Bytes 6
Byte 7
Byte 8
Bytes 9
Byte 10
Byte 11
Bytes 12
Byte 13
Byte 14
Bytes 15
Byte 16
Byte 17
Byte 18
Bytes 19
Byte 20
Byte 21
Bytes 22
Byte 23
Byte 24
Bytes 25
Byte 26
Byte 27
Bytes 28
Byte 29
Byte 30
Bytes 31
Byte 32
Byte 33
Bytes 34-37
Constant Unit ID Data Type Byte 60 Byte 61 Byte 62 Byte 63
"
Byte 64
,
Byte 65
"
Byte 66
d
Byte 67
a
Byte 68
t
Byte 69
a
Byte 70
"
Byte 71
:
Byte 72
"
Byte 73 Byte 74 Byte 75 Byte 76 Byte 77 Byte 78 Byte 79 Byte 80 Byte 81 Byte 82 Byte 83 Byte 84 Byte 85 Byte 86 Byte 87 Byte 88 Byte 89 Constant
0
<data>
216
Base64 SN 10
Base64 SN 11
Base64 SN 12
34 (0x22)
44 (0x2c)
34 (0x22)
34 (0x22)
97 (0x61)
116 (0x74)
97 (0x61)
34 (0x22)
58 (0x3a)
34 (0x22)
Base64 1
Base64 2
Base64 3
Base64 4
Base64 5
Base64 6
Base64 7
Base64 8
Base64 9
Base64 10
Base64 11
Base64 12
Base64 13
Base64 14
Base64 15
Base64 16
Base64 17
0

Byte 1*
Byte 2
Byte 3
Byte 4
Byte 5
Bytes 6
Byte 7
Byte 8
Bytes 9
Byte 10
Byte 11
Bytes 12
Byte 13
Byte 14
Bytes 15
Byte 16
Byte 17
Byte 18
Bytes 19
Byte 20
Byte 21
Bytes 22
Byte 23
Byte 24
Bytes 25
Byte 26
Byte 27
Bytes 28
Byte 29
Byte 30
Bytes 31
Byte 32
Byte 33
Bytes 34-37
Constant Unit ID Data Type Byte 90 Byte 91 Byte 92 Byte 93 Byte 94 Byte 95 Byte 96 Byte 97 Byte 98 Byte 99 Byte 100 Byte 101 Byte 102 Byte 103 Byte 104 Byte 105 Byte 106 Byte 107 Byte 108 Byte 109 Byte 110 Byte 111 Byte 112 Byte 113 Byte 114 Byte 115 Byte 116 Byte 117 Byte 118 Byte 119 Constant
0
<data>
216
Base64 18
Base64 19
Base64 20
Base64 21
Base64 22
Base64 23
Base64 24
Base64 25
Base64 26
Base64 27
Base64 28
Base64 29
Base64 30
Base64 31
Base64 32
Base64 33
Base64 34
Base64 35
Base64 36
Base64 37
Base64 38
Base64 39
Base64 40
Base64 41
Base64 42
Base64 43
Base64 44
Base64 45
Base64 46
Base64 47
0

Byte 1*
Byte 2
Byte 3
Byte 4
Bytes 15
Byte 16
Byte 17
Bytes 18-37
Constant Unit ID Data Type Byte 120 Byte 121 Byte 122 Stop Byte Constant
0
<data>
216
Base64 48
34 (0x22)
125 (0x7d)
3
0

Base64 SN1-12: Base64 encoded bytes of the Unique ID or "Serial Number"
Base64 1-Base64 48:
Base64 encoded bytes of the input report, excluding the leading 0


*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 XKE-40 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, 186, LEDs, 0... Set LEDs
2
0, 179, LEDIndex, State, 0... Index Based Set LED (Flash)
3
0, 189, UnitID, 0... Set Unit IDe
4
0, 214, 0... Get Descriptor
5
0, 177, 0... Generate Data
6
0, 187, Bank 1 Intensity, Bank 2 Intensity, 0... Set Backlight Intensity
7
0, 184, 0... Toggle Backlights
8
0, 182, Bank, OnOff, 0... Turn On/Off Rows of Backlights
9
0, 181, BacklightIndex, State, 0... Index Based Set Backlights (Flash)
10
0, 180, Freq, 0... Set Frequency of Flash
11
0, 199, Save, 0... Save Backlight State to EEPROMe
12
0, 204, Mode, 0... Change PIDe
13
0, 196, Change, 0... Reboot Mode
14
0, 201, Modifier, 0, HC1, HC2, HC3, HC4, HC5, HC6, 0... Keyboard Reflector (keyboard endpoint required)
15
0, 203, Buttons, Mouse X, Mouse Y, Wheel Y, 0... Mouse Reflector (mouse endpoint required)
16
0, 202, Joystick X, Joystick Y, Joystick Z rot., Joystick Z, Joystick Slider, Game Buttons 1, Game Buttons 2, Game Buttons 3, Game Buttons 4, 0, Point of View Hat, 0... Joystick Reflector (joystick endpoint required)
17
0, 225, Usage ID LSB, Usage ID MSB, 0... Multimedia Reflector (multimedia endpoint required)
18
0, 195, Version LSB, Version MSB, 0... Set Version Numbere
19
0, 238, 0... Reboot Device
20
0, 192, K0, K1, K2, K3, 0... Set Dongle Keye
21
0, 193, N0, N1, N2, N3, 0... Check Dongle Key
22
0, 157, 0... Get Unique ID
23
0, 174, 0... Get Backlight On/Off State
24
0, 175, 0... Get Backlight Flash State
25
0, 224, Count, B1, B2, B3..., 0... Generate Custom Data
26
0, 141, 0... Get RS232 Settings*
27
0, 142, BaudRateIndex, Parity, DataBits, StopBits, 0... Change RS232 Settings*
28
0, 215, Enable, 0... Enable UART PI Base64 Input Report Transmit Messagese*
29
0, 216, Count, B1, B2, B3..., 0... Transmit to UART*
30
0, 217, Enable, 0... Enable Echo of UART Output Report Received Messagee*
31
0, 218, SleepDisable, 0... Disable Sleep of USBe*
32
0, 143, USBCheckDisable, 0... Disable USB Check*

eCommand writes to EEPROM, do not perform this command excessively, do not exceed 50,000 writes to EEPROM.
*RS232 version only.

Endpoint: 4, Vendor Defined Usage Page.

Report Length: 36 bytes.

1. Set LEDs

One of two methods for controlling the LEDs.

Byte 1*
Byte 2
Byte 3
Bytes 4-36
Constant Command LED Control Constant
0
186
LEDs
0

LEDs: Bits 1-6=0, bit 7=1 to turn on Green LED or 0 to turn off Green LED, bit 8=1 to turn on Red LED or 0 to turn off Red LED

2. 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: 6 = green, 7 = red
LEDState: 0 = off, 1 = on and 2=flash. Set the frequency of the flash with output report Set Frequency of Flash

3. 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.

Byte 1*
Byte 2
Byte 3
Bytes 4-36
Constant Command Unit ID (0-255) Constant
0
189
value
0

4. Get Descriptor

After sending this output report a Descriptor Data input report will be generated.

Byte 1*
Byte 2
Bytes 3-36
Constant Command Constant
0
214
0

5. Generate Data

After sending this output report a General Incoming Data input report will be generated with bit 2 of PS set (see General Incoming Data). 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 Backlight Intensity

Byte 1*
Byte 2
Byte 3
Byte 4
Bytes 5-36
Constant Command Bank 1 Intensity Bank 2 Intensity Constant
0
187
Intensity
Intensity
0

Intensity: 0-255 where 0 is no intensity for that color or off, and 255 is the brightest. Usabe range is actually much narrower

7. Toggle Backlights

Byte 1*
Byte 2
Bytes 3-36
Constant Command Constant
0
184
0

8. Turn On/Off Rows of Backlights

Send this output report to either turn on or off rows of the backlights. Because the backlights of the XKE-40 are not laid out in rows and columns this command is most useful for turning on or off all of the LEDs on a bank.

Byte 1*
Byte 2
Byte 3
Byte 4
Bytes 5-36
Constant Command Bank # State Constant
0
182
Bank
OnOff
0

Bank: 0 = bank 1, 1 = bank 2
OnOff: For all bits 0 for no backlighting, 1 for backlighting. Bit 0 = 1st row, bit 1=2nd row, bit 2=3rd row, bit 3=4th row, bit 4=5th row, bit 5=6th row. Note the intensities are not affected by this command. Set to 0 to turn off all the leds in the selected bank, set to 255 to turn them all on

9. Index Based Set Backlights (Flash)

Control of individual backlights.

Byte 1*
Byte 2
Byte 3
Byte 4
Bytes 5-36
Constant Command Backlight Index State Constant
0
181
BacklightIndex
State
0

BacklightIndex: For bank 1 (upper), value shown on key in Figure 1. For bank 2 (lower), add 40 to the value shown on key in Figure 1. For example to control the top left key bank 1 index=0, the corresponding bank 2 is index=40
State: 0 = off, 1 = on and 2 = flash. Set the frequency of the flash with output report Set Frequency of Flash

10. Set Frequency of Flash

Use this output report to control the frequency of the flashing of both the indicator LEDs and the backlights, same frequency is used for both.

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

11. Save Backlight State to EEPROM

Send this output report to change the default backlighting on startup of device to the current backlight state, ie, what ever backlights are on or off at the time this report is sent will be the new default.

Byte 1*
Byte 2
Byte 3
Bytes 4-36
Constant Command Save Constant
0
199
Save
0

Save: Any value other than 0 will save the current backlight state to the EEPROM so when the device is replugged it will display this save backlighting. Note because there is a limited number of times the EEProm can be written to, it is not a good idea to do this often

12. Change PID

Send this output report to change between PIDs.

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, 2 for PID #3 and 3 for PID #4, 4 for PID #5, 5 for PID #6, 6 for PID #7, and 7 for PID #8 (KVM). Note if change to PID #8 (KVM) input and output reports will not be available. To exit KVM mode unplug the device, locate the small hole on the right end of the device and using a paper clip or similar item depress the program switch while simultaneously replugging the device. Use the Reboot Mode command to either have the unit always revert to PID #8 (KVM) on reboot or not.

13. Reboot Mode

Send this output report to determine if the device will automatically return to PID #8 (KVM) on each reboot or if it will remain in the current PID between reboots.

Byte 1*
Byte 2
Byte 3
Bytes 4-36
Constant Command Change Constant
0
196
Change
0

Change: Enter 0 to have the device not return to PID #8 (KVM) on reboot or 7 to have it always return to PID #8 (KVM) on reboot

14. 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

15. Mouse Reflector

Sends native mouse messages.

Byte 1*
Byte 2
Byte 3
Byte 4
Byte 5
Byte 6
Bytes 7-36
Constant Command Buttons Mouse X Mouse Y Wheel Y Constant
0
203
Buttons
X
Y
WY
0

Buttons: Bit 1=Left, bit 2=Right, bit 3=Center, bit 4=XButton1, bit 5=XButton2
X=Mouse X motion. 0 no motion, 1-127 is right, 255-129=left, finest inc (1 and 255) to coarsest (127 and 129)
Y=Mouse Y motion. 0 no motion, 1-127 is down, 255-129=up, finest inc (1 and 255) to coarsest (127 and 129)
WY=Wheel Y. 0 no motion, 1-127 is up, 255-129=down, finest inc (1 and 255) to coarsest (127 and 129)

Example 1: Move mouse 1 mickey, the finest increment.
x+: 0, 203, 0, 1, 0, 0, 0
x-: 0, 203, 0, 255, 0, 0, 0
y+: 0, 203, 0, 0, 1, 0, 0
y-: 0, 203, 0, 0, 255, 0, 0

Example 2: Wheel Y with increment of 5.
+ motion: 0, 203, 0, 0, 0, 0, 5
- motion: 0, 203, 0, 0, 0, 0, 250 where 250=255-5

Example 3: Left button click.
left button down: 0, 203, 1, 0, 0, 0, 0
left button up: 0, 203, 0, 0, 0, 0, 0

Example 4: Left button down and drag
with mouse at starting position: 0, 203, 1, 0, 0, 0, 0
move mouse with button down: 0, 203, 1, 30, 30, 0, 0
release button: 0, 203, 0, 0, 0, 0, 0

16. Joystick Reflector

Sends native joystick messages. Must have the device set to a PID with a joystick endpoint; PID #1 or PID #3.

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
Bytes 14-36
Constant Command Joystick X Joystick Y Joystick Z rot. Joystick Z Joystick Slider Game Buttons Game Buttons Game Buttons Game Buttons Constant Point of View Hat Constant
0
202
X
Y
Z rot.
Z
Slider
GB1
GB2
GB3
GB4
0
Hat
0

X: Joystick X, 0-127 is from center to full right, 255-128 is from center to full left
Y: Joystick Y, 0-127 is from center to bottom, 255-128 is from center to top
Z rot.: Joystick Z rot., 0-127 is from center to bottom, 255-128 is from center to top
Z.: Joystick Z, 0-127 is from center to bottom, 255-128 is from center to top
Slider: Joystick Slider, 0-127 is from center to bottom, 255-128 is from center to top
GB1: Game buttons 1-8, bit 1= game button 1, bit 2=game button 2, etc.
GB2: Game buttons 9-16, bit 1= game button 9, bit 2=game button 10, etc.
GB3: Game buttons 17-24, bit 1= game button 17, bit 2=game button 18, etc.
GB4: Game buttons 25-32, bit 1= game button 25, bit 2=game button 26, etc.
Hat: 0 to 7 clockwise, 8 is no hat

17. Multimedia Reflector

Sends 2 byte multimedia messages. Must have the device set to a PID with a multimedia endpoint; PID #2 or PID #3. 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.

18. 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.

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

19. 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

20. Set Dongle Key

Sets the user entered key. Remember these numbers as they are required to check for the key. This is intented to be done once by the developer prior to sale. See Dongle Implemenation for more details.

Byte 1*
Byte 2
Byte 3
Byte 4
Byte 5
Byte 6
Bytes 7-36
Constant Command 1st byte of key 2nd byte of key 3rd byte of key 4th byte of key Constant
0
192
K0
K1
K2
K3
0

K0: 1st byte of user determined dongle key, any number 1-254
K1: 2nd byte of user determined dongle key, any number 1-254
K2: 3rd byte of user determined dongle key, any number 1-254
K3: 4th byte of user determined dongle key, any number 1-254

21. Check Dongle Key

Checks the key that was entered in Set Dongle Key. This is intented to be done by the developer within their own software to determine if the connected X-keys device is the one they sold to the customer. 4 random bytes along with the actual key are entered into the DongleCheck2() hash function of the Piehid32.dll/PieHid32Net.dll which returns 4 bytes. Then after sending this output report a Check Dongle Key input report will be received containing the same 4 bytes returned from the hash if the key matches. See Dongle Implemenation for more details.

Byte 1*
Byte 2
Byte 3
Byte 4
Byte 5
Byte 6
Bytes 7-36
Constant Command Random number Random number Random number Random number Constant
0
193
N0
N1
N2
N3
0

K0: 1st byte of a random number that was used in the hash, any number 1-254
K1: 2nd byte of a random number that was used in the hash, any number 1-254
K2: 3rd byte of a random number that was used in the hash, any number 1-254
K3: 4th byte of a random number that was used in the hash, any number 1-254

22. Get Unique ID

After sending a Request Unique ID output report, a Request 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-36
Constant Command Constant
0
157
0

23. Get Backlight On/Off State

After sending a Request Backlight On/Off State output report a Backlight On/Off State Data input report will be returned giving the value of the bank 1 and bank 2 intensities and the on/off state for each backlight as a bitmap.

Byte 1*
Byte 2
Bytes 3-36
Constant Command Constant
0
174
0

24. Get Backlight Flash State

After sending a Request Backlight Flash State output report a Backlight Flash State Data input report will be returned giving the flash state of the green and red indicator LEDs, the current flash frequency, and the flash state for each backlight as a bitmap.

Byte 1*
Byte 2
Bytes 3-36
Constant Command Constant
0
175
0

25. 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. Note input reports are available in PID #1 and PID #3 only.

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

26. Get RS232 Settings (RS232 version only)

After sending a Request RS232 Settings output report, a RS232 Settings Data input report will be generated providing the settings.

Byte 1*
Byte 2
Bytes 3 to 36
Constant Command Constant
0
141
0

27. Change RS232 Settings (RS232 version only)

Send this output report to change the X-keys RS232 settings.

Byte 1*
Byte 2
Byte 3
Byte 4
Byte 5
Byte 6
Bytes 7 to 36
Constant Command Baud Rate Index Parity Data Bits Stop Bits Constant
0
142
BaudRateIndex
Parity
DataBits
StopBits
0

BaudRateIndex: Baud Rate Index: 0=300, 1=1200, 2=2400, 3=4800, 4=9600, 5=19200, 6=38400, 7=57600, 8=115200, 9=230400 (factory default)
Parity: Parity: 0=even, 1=odd, 2=none (factory default)
DataBits: Data Bits: 5, 6, 7, or 8 (factory default)
StopBits: Stop Bits: 2=1 bit (factory default), 3=1.5 bits, 4=2 bits

28. Enable UART PI Base64 Input Report Transmit Messages (RS232 version only)

For users of the UART port only. Send this output report to disable or enable the UART PI Base64 Input Report Transmit Messages. If enabled, a UART PI Base64 Input Report Transmit Message will be transmitted via the module's UART TX whenever certain input reports are generated, see the X-blox UART Port Information section for additional details. Factory default is disabled. Current value can be read in the Descriptor as PIEnabled.

Byte 1*
Byte 2
Byte 3
Bytes 4 to 36
Constant
Command
Enable
Constant
0
215
Enable
0

Enable: 0=disabled (factory default), 1=enabled

29. Transmit to UART (RS232 version only)

For users of the UART port only. Puts bytes on the module's UART TX for transmission. The number of bytes sent at one time is limited by the output report length and is 33.

Byte 1*
Byte 2
Byte 3
Byte 4
Byte 5
Byte 6...
Bytes (Count+4) to 36
Constant
Command
Count of bytes to follow
Byte 1
Byte 2
Byte 3...
Constant
0
216
Count
B1
B2
B3...
0

Count: Number of bytes to follow
B1: 1st byte
B2: 2nd byte
B3: 3rd byte and so on for as many bytes as specified in Count

30. Enable Echo of UART Output Report Received Message (RS232 version only)

For users of the UART port only. Send this output report to disable or enable the Incoming UART Data - Echo of UART Output Report Received Message input reports generated when UART Output Report Received Messages are received via the module's UART RX. Current value can be read in the Descriptor as EchoEnabled. Note: regardless of this setting, when a UART Output Report Received Message is received, the corresponding output report is executed.

Byte 1*
Byte 2
Byte 3
Bytes 4 to 36
Constant
Command
Enable
Constant
0
217
Enable
0

Enable: 0=disabled (factory default), 1=enabled

31. Disable Sleep of USB (RS232 version only)

By factory default the X-keys device is designed to turn off its LEDs and any GPIO pins configured as outputs when a USB suspend condition occurs. To override this behavior send this report with SleepDisable=1.

Byte 1*
Byte 2
Byte 3
Bytes 4 to 36
Constant
Command
Sleep Disable
Constant
0
218
SleepDisable
0

SleepDisable: 0=enabled (factory default), 1=disabled

32. Disable Check of USB (RS232 version only)

For users of UART port only operating without USB connection. X-keys devices with UART capability are designed to operate without a USB connection. In this configuration the USB cord is used for power only. When no USB is detected and USBCheckDisable=0, the X-keys device will check for the presence of a USB connection periodically. Normally this presents no problems but to suppress this periodic check send this report with a value of 1.

Byte 1*
Byte 2
Byte 3
Bytes 4 to 36
Constant
Command
USB Check Disable
Constant
0
143
USBCheckDisable
0

USBCheckDisable: 0=enabled (factory default), 1=disabled

*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.

UART Port Information

For users of UART port only. The XKE-40 RS232 comes equipped with a UART port for serial communication options. On this device the UART is always enabled.

Pin assignments for the UART port are shown in Table 2.

Pin
Description
1
RX
2
TX
3
-
4
-
5
Ground

Table 2: Pin assignments for the UART port

Messages Received

Two types of messages received on the module's UART RX are recognized; UART Output Report Received Messages to control features like the RGB LEDs, set Unit ID, etc. and UART Custom Received Messages. Each is described below.

1. UART Output Report Received Message

Every output report described in the above Output Report section can be sent via the UART. UART Output Report Received Message requires a start byte of 4, encoding into Base64 of the 2 digit hexidecimal byte values required for the output report, and a stop byte of 5. This example demonstrates turning the bank 1 RGB LED corresponding to KeyIndex 0 (first button in top left) to red. Consulting the Index Based Set RGB Backlights output report from above, we need to send a total of 7 bytes; 165, KeyIndex, Bank, R, G, B, Flash. Note for this method we ignore the first 0 and the trailing 0s. Convert each byte to 2 digit hexidecimal strings and store in a string array called stringbytes:

stringbytes[0]="A5"; //Command
stringbytes[1]="00"; //KeyIndex
stringbytes[2]="00"; //bank 1
stringbytes[3]="FF"; //r
stringbytes[4]="00"; //g
stringbytes[5]="00"; //b
stringbytes[6]="00"; //flash


Next convert stringbytes to Base64, this example uses Visual Studio C# Convert call:

int baseType = 16; //data coming in hex
byte[] dataArray = new byte[stringbytes.Length];
for (int i = 0; i < stringbytes.Length; i++)
{
   dataArray[i] = Convert.ToByte(stringbytes[i], baseType); // baseType can be 16 for Hex or 10 for Dec
}
string bytesBase64 = Convert.ToBase64String(dataArray);

The resulting encoded string is pQAA/wAAAA==

Once the Base64 encoded string is obtained user can send it to the module's UART RX using a start byte of 4 and a stop byte of 5. The following is the complete message:

Byte 1=4 start byte
Byte 2=0x70 p
Byte 3=0x51 Q
Byte 4=0x41 A
Byte 5=0x41 A
Byte 6=0x2F /
Byte 7=0x77 w
Byte 8=0x41 A
Byte 9=0x41 A
Byte 10=0x41 A
Byte 11=0x41 A
Byte 12=0x3D =
Byte 13=0x3D =
Byte 14=5 stop byte

Sending this message will result in setting the top left bank 1 RGB LED to red and, if the UART Echo is enabled, an Incoming UART Data - UART Echo input report to be generated.

2. UART Custom Received Messages

A message received on the module's RX with a start byte of 2, up to 255 bytes of user defined data, and a stop byte of 3. For example:
Byte 1=0x02 start byte
Byte 2=0x75 first byte
Byte 3=0x41 second byte
Byte 4=0x3D third byte
Byte 5=0x3D fourth byte
Byte 6=0x03 stop byte

When this message is received on the module's UART RX, an Incoming UART Data - UART Custom Received Message input report is generated. Messages without the required start and stop bytes are ignored.

Messages Transmitted

Two types of messages are transmitted from the module's UART TX; UART PI Base64 Input Report Transmit Message and UART Custom Transmit Message.

UART PI Base64 Input Report Transmit Message

These messages are only sent if UART PI Base64 Input Report Transmit Messages are enabled, see Enable UART PI Base64 Input Report Transmit Messages output report. If enabled whenever General Incoming Data, Descriptor Data, Custom Data, Check Dongle Key, RGB Backlight Values Data, or Unique ID Data input report is generated a corresponding UART PI Base64 Input Report Transmit Message will also be transmitted on the module's UART TX. The message is a total of 104 bytes consisting of a start byte of 2, header text, Product ID, Unit ID, the Base64 encoded input report (excluding the leading 0), and a stop byte of 3 as follows:

0x02 start byte
0x7b {
0x22 "
0x63 c
0x6d m
0x64 d
0x22 "
0x3a :
0x22 "
0x73 s
0x65 e
0x6e n
0x64 d
0x53 S
0x70 p
0x6c l
0x61 a
0x74 t
0x22 "
0x2c ,
0x22 "
0x50 U
0x49 I
0x44 D
0x22 "
0x3A :
0x22 "
Ascii code for the thousands place of the Product ID
Ascii code for the hundreds place of the Product ID
Ascii code for the tens place of the Product ID
Ascii code for the ones place of the Product ID
0x22 "
0x2c ,
0x22 "
0x55 U
0x49 I
0x44 D
0x22 "
0x3a :
0x22 "
Ascii code for hundreds place of the Unit ID
Ascii code for the tens place of the Unit ID
Ascii code for the ones place of the Unit ID
0x22 "
0x2c ,
0x22 "
0x53 S
0x4E N
0x22 "
0x3A :
0x22 "
<SN Data> Base64 encoded Unique ID or "Serial Number", this is 12 bytes
0x22 "
0x2C ,
0x22 "
0x64 d
0x61 a
0x74 t
0x61 a
0x22 "
0x3a :
0x22 "
<Input Report Data> Base64 encoded input report, this is 48 bytes and does not include the leading 0 which is appended by Windows.
0x22 "
0x7d }
0x03 stop byte

UART Custom Transmit Message

Sending the Transmit to UART output report will place on the module's UART TX any bytes the user desires, up to 33 bytes per message

 

Back to top