diff --git a/usb/README.md b/usb/README.md index 8a08753..64181b2 100644 --- a/usb/README.md +++ b/usb/README.md @@ -10,9 +10,45 @@ The information in this section applies to the following controllers: - TCPP-20012: two-handle controller "Type 2", purple skeleton (Sony PlayStation 2) - TCPP-20014: Ryojōhen controller (Sony PlayStation 2) -### DGC-255/DGOC-44U +### DGC-255 -No details are available regarding internal functioning. +This controller shares most of its behaviour with DGOC-44U, but internal details need to be confirmed. + +### DGOC-44U + +This controller is a HID-compliant joystick with two axes and six buttons. You can find its HID descriptor [here](descriptor_dgoc44u.txt). + +| | | +|-------------------|-----------------------------| +| **Product name** | `電車でGO! コントローラ USB版` | +| **Manufacturer** | `TAITO` | +| **Vendor ID** | `0x0AE4` | +| **Product ID** | `0x0003` | +| **Serial number** | `TCPP20009` | + +The controller sends reports to the host (PC) formed by 6 bytes: + +| Byte 1 | Byte 2 | Byte 3 | Byte 4 | Byte 5 | Byte 6 | +|:------:|:------:|:------:|:-------:|:------:|:------:| +| Brake | Power | Null | Buttons | Null | Null | + +The values for the brake notch byte are the following. There are 5 unmarked positions between **B8** and **Emergency**, but unlike classic controllers, they are all report the value for **Emergency**. + +| 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 | B1 | B2 | B3 | B4 | B5 | Transition | +|:----:|:----:|:----:|:----:|:----:|:----:|:----------:| +| 0x81 | 0x6D | 0x54 | 0x3F | 0x21 | 0x00 | 0xFF | + +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. + +| Button 1 | Button 2 | Button 3 | Button 4 | Button 5 | Button 6 | +|:--------:|:--------:|:--------:|:--------:|:--------:|:--------:| +| B | A | C | D | SELECT | START | ### DRC-184/DYC-288 @@ -29,3 +65,7 @@ No details are available regarding internal functioning. ### TCPP-20014 No details are available regarding internal functioning. + +## Acknowledgements + +Big thanks to [GMMan](https://github.com/GMMan), who has provided the internal details of the DGOC-44U. diff --git a/usb/descriptor-dgoc44u.txt b/usb/descriptor-dgoc44u.txt new file mode 100644 index 0000000..3190528 --- /dev/null +++ b/usb/descriptor-dgoc44u.txt @@ -0,0 +1,34 @@ +0x05, 0x01, // Usage Page (Generic Desktop Ctrls) +0x09, 0x04, // Usage (Joystick) +0xA1, 0x01, // Collection (Application) +0x09, 0x01, // Usage (Pointer) +0xA1, 0x00, // Collection (Physical) +0x09, 0x30, // Usage (X) +0x09, 0x31, // Usage (Y) +0x15, 0x00, // Logical Minimum (0) +0x26, 0xFF, 0x00, // Logical Maximum (255) +0x75, 0x08, // Report Size (8) +0x95, 0x02, // Report Count (2) +0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) +0xC0, // End Collection +0x75, 0x08, // Report Size (8) +0x95, 0x01, // Report Count (1) +0x81, 0x01, // Input (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position) +0x05, 0x09, // Usage Page (Button) +0x19, 0x01, // Usage Minimum (0x01) +0x29, 0x06, // Usage Maximum (0x06) +0x15, 0x00, // Logical Minimum (0) +0x25, 0x01, // Logical Maximum (1) +0x35, 0x00, // Physical Minimum (0) +0x45, 0x01, // Physical Maximum (1) +0x75, 0x01, // Report Size (1) +0x95, 0x06, // Report Count (6) +0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) +0x95, 0x02, // Report Count (2) +0x81, 0x01, // Input (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position) +0x75, 0x08, // Report Size (8) +0x95, 0x02, // Report Count (2) +0x81, 0x01, // Input (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position) +0xC0, // End Collection + +// 63 bytes