ADC888 Data Report | Main Page

General Information

VID 05f3h
PID 043Bh or 1083
Consumer Usage Page 1
Usage Page 000Ch or 12

*Hardware mode is not addressed in this SDK, please contact P.I. Engineering for specific details on using this mode as a developer.

ADC888 Input Report

Endpoint: 3, consumer usage page. In Reflector mode there are two additional endpoints; 1 is keyboard and 2 is joystick.

Report Length: 33 bytes for Reflector and Splat modes, 0 for Hardware mode.

1. General Incoming Data

This data is returned when new data is detected such as button presses, unit id change, analog data changes. 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
Bytes 21-25
Byte 26
Bytes 26-33
Constant Unit ID Data Type Digital Ins Analog In 0 Low Analog In 0 High Analog In 1 Low Analog In 1 High Analog In 2 Low Analog In 2 High Analog In 3 Low Analog In 3 High Analog In 4 Low Analog In 4 High Analog In 5 Low Analog In 5 High Analog In 6 Low Analog In 6 High Analog In 7 Low Analog In 7 High Time Stamp Digital Out State Reserved
0
<data>
PS
DI
AL
AH
AL
AH
AL
AH
AL
AH
AL
AH
AL
AH
AL
AH
AL
AH
Time
DO
value

PS: Program switch, 0 if unset 1 if set. Note if a Generate Data Report output report is sent the 2nd bit of this byte is set.
DI: Digital inputs, for all bits 0 for off, 1 for on.  Bit 1=Pin 0, bit 2=pin 1, bit 3=pin 2, bit 4=pin 3, bit 5=pin 4, bit 6=pin 5, bits 7=pin 6, bit 8=pin7.
AL: For the corresponding pin number listed the LSB of its 2 byte analog data.
AH: For the corresponding pin number listed the MSB of its 2 byte analog data.
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 25 is the MSB and byte 21 is the LSB.
DO: The state of the digital output pins, 0 if unset, 1 if set. Bit 1=Pin 0, bit 2=pin 1, bit 3=pin 2, bit 4=pin 3, bit 5=pin 4, bit 6=pin 5, bits 7=pin 6, bit 8=pin7.

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
Bytes 15-33
Constant
Unit ID
Data Type
Mode
Key mapstart
Layer2 Offset
Out size
Report size
Max Columns
Max Rows
LED State
Version
PID Low
PID Hi
Reserved
0
<data>
214
Mode
32
128
35
32
4
6
LEDs
<data>
PIDL
PIDH
value

Mode: 0 is PID #1, 2 is PID #2.
LEDs: bit=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.

3. Check Key Data

This data is returned after a Check Key output report is sent.

Byte 1
Byte 2
Byte 3
Byte 4
Byte 5
Byte 6
Byte 7
Byte 8
Bytes 9-33
Constant
Unit ID
Data Type
Constant
R0 value
R1 value
R2 value
R3 value
Reserved
0
<data>
193
121
R0
R1
R3
R4
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.

4. Get Halfwidths

This data is returned after a Get Halfwidths output report is sent. See Get Halfwidth output report for more details.

Byte 1
Byte 2
Byte 3
Byte 4
Byte 5
Byte 6
Byte 7
Byte 6
Byte 7
Byte 6
Byte 7
Byte 6
Byte 7
Byte 6
Byte 7
Byte 6
Byte 7
Byte 6
Byte 7
Bytes 9-33
Constant Unit ID Data Type Analog In 0 Analog In 0 Analog In 1 Analog In 1 Analog In 2 Analog In 2 Analog In 3 Analog In 3 Analog In 4 Analog In 4 Analog In 5 Analog In 5 Analog In 6 Analog In 6 Analog In 7 Analog In 7 Reserved
0
<data>
168
HWL
HWH
HWL
HWH
HWL
HWH
HWL
HWH
HWL
HWH
HWL
HWH
HWL
HWH
HWL
HWH
value

HWL: For the corresponding pin number listed the LSB of its 2 byte halfwidth being used for averaging out noise/jitter.
HWH: For the corresponding pin number listed the MSB of its 2 byte halfwidth being used for averaging out noise/jitter.

ADC888 Output Reports

The following types of output reports are shown in the summary below.

Report
Format
Description
1
0, 186, LEDs, 0... Set LEDs
2
0, 167, DO, 0... Set Digital Outs
3
0, 170, Analogs, 0... Enable Analog Ins
4
0, 189, UnitID, 0... Set Unit ID
5
0, 214, 0... Request Descriptor
6
0, 210, Enable, 0... Enable Time Stamp
7
0, 177, 0... Generate Data Report
8
0, 171, StartStop, 0... Start/Stop Capture Halfwidths
9
0, 172, 0... Save Halfwidths
10
0, 168, 0... Get Halfwidths
11
0, 169, 0... Reset Halfwidths
12
0, 173, Pin, HWLSB, HWMSB, 0... Set Halfwidths Manually
13
0, 201, Modifier, 0, HC1, HC2, HC3, HC4, HC5, HC6, 0... Keyboard Reflector+
14
0, 202, Joystick X, Joystick Y, Joystick Z, Game Buttons, Point of View Hat, 0... Joystick Reflector+
15
0, 192, K0, K1, K2, K3, 0... Set key for dongle implementation*
16
0, 137, 137, 0, N0, N1, N2, N3, 121, 0... Check key for dongle implementation*

+Reflector mode only.
*Non PC users please contact P. I. Engineering for further details

Endpoint: 4, vendor defined usage page

Report Length: 36 bytes.

1. Set LEDs

Byte 1
Byte 2
Byte 3
Bytes 4-36
Constant
LED 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. Set Digital Outs

Send this output report to control the state of the digital outputs. The state of the digital outputs can be read in byte 26 of the general incoming data report.

Byte 1
Byte 2
Byte 3
Bytes 4-36
Constant
Command
Digital Outs
Constant
0
167
DO
0

DO: Digital outputs, for all bits 0 for off, 1 for on.  Bit 1=Pin 0, bit 2=pin 1, bit 3=pin 2, bit 4=pin 3, bit 5=pin 4, bit 6=pin 5, bits 7=pin 6, bit 8=pin7.

3. Enable Analog Ins

Send this output report to enable or disable the Analog Ins.

Byte 1
Byte 2
Byte 3
Bytes 4-36
Constant
Command
Analog
Constant
0
170
Analog
0

Analog: Analog Ins, for all bits 0 for off (default), 1 for on.  Bit 1=Pin 0, bit 2=pin 1, bit 3=pin 2, bit 4=pin 3, bit 5=pin 4, bit 6=pin 5, bits 7=pin 6, bit 8=pin7.

4. Set Unit ID

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

5. Request Descriptor

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

6. Enable Time Stamp

Byte 1
Byte 2
Byte 3
Bytes 4-36
Constant
Time Stamp Command
Enable
Constant
0
210
0=off, 1=on
0

7. Generate Data Report

After sending this output report a General Incoming Data input report will be generated. 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

8. Start/Stop Capture Halfwidths*

Starts and stops the automatic capture of halfwidths on all analog pins.

Byte 1
Byte 2
Byte 3
Bytes 4-36
Constant Command StartStop Constant
0
171
StartStop
0

StartStop: 1 to start capture, 0 to stop.

9. Save Halfwidths*

Stores the captured halfwidths to eeprom.

Byte 1
Byte 2
Bytes 3-36
Constant Command Constant
0
172
0

10. Get Halfwidths*

After sending this output report a Get Halfwidths input report is generated which provides the currently stored halfwidths for each analog pin.

Byte 1
Byte 2
Bytes 3-36
Constant Command Constant
0
168
0

11. Reset Halfwidths*

Sending this output report will reset back to 0 all of the halfwidths. Send Save Halfwidth output report afterwards to permanently write this to device eeprom.

Byte 1
Byte 2
Bytes 3-36
Constant Command Constant
0
169
0

12. Set Halfwidths Manually*

Use this output report to manually set the halfwidth of a particular analog input. Send Save Halfwidth output report afterwards to permanently write this to device eeprom.

Byte 1
Byte 2
Byte 3
Byte 4
Byte 5
Bytes 6-36
Constant Command Analog In Pin # Halfwidth LSB Halfwidth MSB Constant
0
173
AI
HWLSB
HWMSB
0

AI: The Analog Input pin number 0-7 for which the halfwidth will be set.
HWLSB: The LSB of the halfwidth for the analog pin given in AI.
HWMSB: The MSB of the halfwidth for the analog pin given in AI.

*About Halfwidths

The ADC888 can store internally a "window" that is used for reducing the amount of data being reported. Because only half the window width is stored it is referred to as a "halfwidth" in our internal nomenclature. It is useful to set a halfwidth on analog data that is noisy or jittery. For example if a particular analog pin has a + or - 2 bit noise so that at a particular position the data reported is anywhere between 8 and 12 for the same position. It is desirerable to not receive data reports for every bit change since in reality this is not real changes, just noise. In this example using a halfwidth of 2 (12-8 divided by 2) would report a value of 10, the average. A new data report would not be generated until this average changed. In this way high resolution is maintained as well as noise reduction. The halfwidths can be automatically determined on all analog channels at once by using the Start/Stop Capture Halfwidths output report, they can be reset using the Reset Halfwidths output report or they can be manually set using the Set Halfwidths Manually. Any change to the halfwidths will not be permanent, ie, will revert to previously saved values if device unplugged, if the Save Halfwidths output report is not sent. To get the currently saved halfwidths use the Get Halfwidths output report. Immediately after sending a Get Halfwidths output report a Get Widths input report will be generated.

13. Keyboard Reflector (applicable to Reflector mode only)

Byte 1
Byte 2
Byte 3
Byte 4
Byte 5
Byte 6
Byte 7
Byte 8
Byte 8
Byte 9
Bytes 10-36
Constant
Keyboard Reflector 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.

14. Joystick Reflector (applicable to Reflector mode only)

Byte 1
Byte 2
Byte 3
Byte 4
Byte 5
Byte 6
Byte 7
Bytes 8-36
Constant
Joystick Reflector Command
Joystick X
Joystick Y
Joystick Z
Game Buttons
Point of View Hat
Constant
0
202
X
Y
Z
GB
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: Joystick Z, 0-127 is from center to bottom, 255-128 is from center to top.
GB: Game buttons, bit 1= game button 1, bit 2=game button 2, etc.
Hat: 0 to 7 clockwise, 8 is no hat.

15. Set Key

Byte 1
Byte 2
Byte 3
Byte 4
Byte 5
Byte 6
Byte 7
Bytes 8-36
Constant
Set Key Command
K0 (1-254)
K1 (1-254)
K2 (1-254)
K3 (1-254)
Constant
Constant
0
192
K0
K1
K2
K3
0
0

K0:  any number between 1 and 254
K1:  any number between 1 and 254
K2:  any number between 1 and 254
K3:  any number between 1 and 254

16. Check Key

Byte 1
Byte 2
Byte 3
Byte 4
Byte 5
Byte 6
Byte 7
Byte 8
Byte 9
Bytes 10-36
Constant
Check Key Command
Check Key Command
Constant
N0 (1-254)
N1 (1-254)
N2 (1-254)
N3 (1-254)
Check Key Command
Constant
0
137
137
0
N0
N1
N2
N3
121
0

N0:  any number between 1 and 254
N1:  any number between 1 and 254
N2:  any number between 1 and 254
N3:  any number between 1 and 254

Non PC users please contact P. I. Engineering for further details