### 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