X-keys XKE-64 Jog T-bar Data Report
General Information
VID
|
05f3h or 1523
|
---|---|
XKE-64 Jog T-bar PID #1 (Factory Default)
|
052Dh or 1325
|
XKE-64 Jog T-bar PID #2
|
052Eh or 1326
|
XKE-64 Jog T-bar PID #3
|
052Fh or 1327
|
XKE-64 Jog T-bar PID #4
|
0530h or 1328
|
XKE-64 Jog T-bar PID #5
|
0531h or 1329
|
XKE-64 Jog T-bar PID #6
|
0532h or 1330
|
XKE-64 Jog T-bar PID #7
|
0533h or 1331
|
XKE-64 Jog T-bar PID #8 (KVM)
|
0534h or 1332
|
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 Usge 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 Usge 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 Usge 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 Usge Page Input and Output (Hid Usage Page 12,
Hid Usage 1).
PID #7 Endpoints: Consumer Usge 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. Note T-bar will not work in this PID.
The XKE-64 Jog T-bar is an Android enabled device in PIDs #1, #2 or #3. This means the device can be enumerated, read (if input report available), and written to on Android OS that support host USB, generally 3.1 or higher. Android OS is not able to enumerate a device with a boot keyboard and thus if the XKE-64 Jog T-bar is in PID #4 it will appear to the Android OS as only a hardware keyboard/mouse, you will not be able to get a handle to it but it will work as a keyboard/mouse assuming there are hardware macros recorded on the keys.
XKE-64 Jog T-bar is supported by P.I. Engineering Macroworks 3.1, X-keys Basic Setup, P.I. Engineering SDK samples for Microsoft C# Express, VB Express, Microsoft C++ 2010 and Eclipse and Linux.
X-keys XKE-64 Jog T-bar Input Report
Figure 1: X-keys XKE-64 Jog T-bar 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
|
Byte 10
|
Byte 11
|
Byte 12
|
Byte 13
|
Byte 14
|
Byte 15
|
Byte 16
|
Bytes 17-18
|
Byte 19
|
Byte 20
|
Byte 21
|
Bytes 22-32
|
Bytes 33-36
|
Byte 37
|
Constant | Unit ID | Data Type | Keys | Keys | Keys | Keys | Keys | Keys | Keys | Keys | Keys | Keys | NumLck, CapsLck, ScrLck, Shuttle At Rest, Jog Digital | Shuttle Digital- CW | Shuttle Digital-CCW | T-bar Raw | T-bar Calibrated | Jog Analog | Shuttle Analog | Reserved | Time Stamp | Reserved |
0
|
<data>
|
DT
|
DI
|
DI
|
DI
|
DI
|
DI
|
DI
|
DI
|
DI
|
DI
|
DI
|
DS
|
SD1
|
SD2
|
TU
|
TC
|
JA
|
SA
|
value
|
Time
|
value
|
DT: Data Type value of 0, 1 or 2 indicates the following data is
a General Incoming Data report, 2 if generated by the output report: Generate
Data. Data Type value of 214 indicates a Descriptor Data Report, see below.
Data Type value of 224 indicates a Custom Data Report, see below.
DI: For all bits 0 if key is up, 1 if key is down. Bits 1 to 8 correspond
to the keys from top to bottom respectively of each column. For example
a value of 3 in Byte 4 indicates that keys 0 and 1 are pressed.
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, bit 6=Shuttle At Rest (sets bit if shuttle is in the at
rest position, clears it when not), bit 7=Jog clockwise digital, bit 8=Jog
counterclockwise digital.
SD1: Shuttle digital clockwise, bit 1=position 1, bit 2=position
2, bit 3=position 3, bit 4=position 4, bit 5=postion 5, bit 6=position 6,
bit 7=position 7, bit 8=0.
SD2: Shuttle digital counterclockwise, bit 1=position 1, bit 2=position
2, bit 3=position 3, bit 4=position 4, bit 5=postion 5, bit 6=position 6,
bit 7=position 7, bit 8=0.
TU: Uncalibrated T-bar data. 2 bytes, byte 17 is the high byte and
byte 18 is the low byte.
TC: Calibrated T-bar data. 0 for ful down, 255 for full up.
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.
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-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 |
0
|
<data>
|
214
|
Mode
|
96
|
128
|
255
|
255
|
10
|
8
|
LEDs
|
<data>
|
PIDL
|
PIDH
|
0
|
MMAL
|
MMAH
|
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.
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 36
|
Byte 37
|
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. 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.
X-keys XKE-64 Jog T-bar 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... | Request 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, Index, 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 X, 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, 172, 1... | Start Calibration* |
23
|
0, 172, 0... | Stop Calibratione* |
eCommand writes to EEPROM, do not
perform this command excessively, do not exceed 50,000 writes to EEPROM.
*Calibration is done at the factory, there is no need to do this normally.
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. Request Descriptor
After sending this output report a Descriptor 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.
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.
9. Index Based Set Backlights (Flash)
Control of individual backlights.
Byte 1*
|
Byte 2
|
Byte 3
|
Byte 4
|
Bytes 5-36
|
Constant | Command | Key Index | State | Constant |
0
|
181
|
Index
|
State
|
0
|
Index: For bank 1 equals the index given in Figure 1. For bank 2
add 80 to the index given in Figure 1. For example to control the top left
key bank 1 index=0, the corresponding bank 2 is index=80.
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 the two PIDs. This needs to be done only if the user wishes to have the joystick endpoint.
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, 4for 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 and thus the T-bar will not function. To convert back to PID #1 from PID #8 hold down the programming switch while plugging the device in. 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 and 7 to have it always return to PID #8 (KVM) on reboot.
To setup a device for KVM use first program the hardware keyboard macros into it using either P.I. Engineering Macroworks 3.1 or X-keys Basic Setup while it is in the factory default PID #1. Test the macros to make sure they are as desired. After programming send the Reboot Mode command with Change=7, then either reboot device or send the Change PID command with Mode=7.
To return a device previously setup for KVM use press and hold the programming switch at the top of the device while plugging in the device. The device will return to the factory default PID #1. Now it is important to send the Reboot Mode command with Change=0. The device will now be back to factory default. User may or may not wish to clear the hardware keyboard macros at this point.
To modify the hardware macros on a device setup for KVM use, press and
hold the program switch at the top of the device while plugging in the device.
The device will be return to the factory default PID #1. Make the desired
macro modifications using either P.I. Engineering Macroworks
3.1 or X-keys Basic
Setup. Replug the device and it will be in the KVM mode again.
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
|
Byte 7
|
Bytes 8-36
|
Constant | Command | Buttons | Mouse X | Mouse Y | Constant | Wheel Y | Constant |
0
|
203
|
Buttons
|
X
|
Y
|
0
|
WY
|
0
|
Buttons: Bit 1=Left, bit 2=Right, bit 3=Center, bit 4=XButton1,
bit 5=XButton2.
X=Mouse X motion. 128=0 no motion, 1-127 is right, 255-129=left,
finest inc (1 and 255) to coarsest (127 and 129).
Y=Mouse Y motion. 128=0 no motion, 1-127 is down, 255-129=up, finest
inc (1 and 255) to coarsest (127 and 129).
WY=Wheel Y. 128=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, available only on firmware version 27 or higher
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, available only on firmware version 27 or higher
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. Start Calibration
After sending this output report move the T-bar lever up and down to its full extents and then send a Stop Calibration output report.
Byte 1*
|
Byte 2
|
Bytes 3-36
|
Constant | Command | Constant |
0
|
172
|
1
|
23. Stop Calibration
After sending a Start Calibration output report and moving the T-bar back and forth send this report to stop and save the calibration.
Byte 1*
|
Byte 2
|
Bytes 3-36
|
Constant | Command | Constant |
0
|
172
|
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.