diff --git a/usb/README.md b/usb/README.md index 05ac5ef..cff6618 100644 --- a/usb/README.md +++ b/usb/README.md @@ -58,7 +58,72 @@ No details are available regarding internal functioning. ### TCPP-20009/TCPP-20012 -No details are available regarding internal functioning. +This controller has two handles (5 power notches and 8+emergency brake notches), a D-Pad and six buttons (Select, Start, A, B, C, D). In addition, it provides a door lamp and a 3.5 mm jack connector to plug a horn pedal. There are two rumble motors, one in each handle. + +Internally, it is a HID device with a vendor-specific class. + +| | | +|-------------------|----------------------| +| **Product name** | TAITO_DENSYA_CON_T01 | +| **Manufacturer** | TAITO | +| **Vendor ID** | 0x0AE4 | +| **Product ID** | 0x0004 | +| **Serial number** | TCPP20010 | + +#### Input + +The controller sends reports to the host (PS2) formed by 6 bytes: + +| Byte 1 | Byte 2 | Byte 3 | Byte 4 | Byte 5 | Byte 6 | +|:------:|:------:|:------:|:------:|:------:|:-------:| +| 0x01 | Brake | Power | Pedal | D-Pad | Buttons | + +The values for the brake notch byte are the following. + +| Released | B1 | B2 | B3 | B4 | B5 | B6 | B7 | B8 | Emergency | Transition | +|:--------:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:---------:|:----------:| +| 0x79 | 0x8A | 0x94 | 0x9A | 0xA2 | 0xA8 | 0xAF | 0xB2 | 0xB5 | 0xB9 | 0xFF | + +The values for the power notch byte are listed below. + +| N | P1 | P2 | P3 | P4 | P5 | Transition | +|:----:|:----:|:----:|:----:|:----:|:----:|:----------:| +| 0x81 | 0x6D | 0x54 | 0x3F | 0x21 | 0x00 | 0xFF | + +The pedal byte has two possible values depending on the state of the pedal. + +| Released | Pressed | +|:--------:|:-------:| +| 0xFF | 0x00 | + +The D-pad byte represents the state of the arrow buttons. If two opposite directions are pressed simultaneously, the result is **Center** unless a third button is pressed. + +| N | NE | E | SE | S | SW | W | NW | None/Center | +|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:-----------:| +| 0x00 | 0x01 | 0x02 | 0x03 | 0x04 | 0x05 | 0x06 | 0x07 | 0x08 | + +The button byte uses six bits to represent the state of the physical buttons. **0** means that the button is released and **1** that it is pressed. A bitmask can be used to retrieve the buttons. + +| Button 1 | Button 2 | Button 3 | Button 4 | Button 5 | Button 6 | +|:--------:|:--------:|:--------:|:--------:|:--------:|:--------:| +| B | A | C | D | SELECT | START | + +#### Output + +The controller supports receiving data via a control transfer to turn on/off the door lamp and provide rumble. The setup packet is as follows: + +| bmRequestType | bRequest | wValue | wIndex | wLength | +|:-------------:|:--------:|:------:|:------:|:-------:| +| 0x40 | 0x09 | 0x0301 | 0x0000 | 0x0002 | + +The data sent to the controller follows the structure below. + +| Byte 1 | Byte 2 | +|:------:|:--------:| +| Status | Function | + +* **Status:** defines whether the function specified in byte 2 is **Off** (**0x00**) or **On** (**0x01**). +* **Function:** **0x01** is **Left rumble**, **0x02** is **Right rumble**, **0x03** is **Door lamp**. ### TCPP-20011 @@ -118,7 +183,7 @@ The controller supports receiving data via a control transfer to update the scre | bmRequestType | bRequest | wValue | wIndex | wLength | |:-------------:|:--------:|:------:|:------:|:-------:| -| 0x40 | 0x09 | 0x0301 | 0x0000 | 0x0002 | +| 0x40 | 0x09 | 0x0301 | 0x0000 | 0x0008 | The data sent to the controller follows the structure below.