Shinkansen controller (Sony PlayStation 2)

Overview

NameShinkansen controller (Sony PlayStation 2)
Release dateSeptember 20, 2001
Serial codeTCPP-20011
Notes

Supported software

SoftwareNotes
Densha de GO! Final (Sony PlayStation 2)
Densha de GO! Professional 2 (Sony PlayStation 2)
Densha de GO! Ryojōhen (Sony PlayStation 2)
Densha de GO! Shinkansen San'yō Shinkansen-hen (Sony PlayStation 2)
OpenBVE (PC - Multiplatform)Supported via input plugin.
Train Simulator: Keisei, Toei Asakusa, Keikyu Lines (Sony PlayStation 2)
Train Simulator: Kyūshū Shinkansen (Sony PlayStation 2)

Technical details

This controller has 2 handles (13 power notches and 7+emergency brake notches), a D-Pad and 6 buttons (Select, Start, A, B, C, D). In addition, it provides a simple display, a door lamp and a 3.5 mm jack connector to plug a horn pedal. There are 2 rumble motors, one in each handle.

Internally, it is a vendor-specific class device. The input data is compatible with HID, but the device does not provide a HID descriptor.

Product nameTAITO_DENSYA_CON_T02
ManufacturerTAITO
Vendor ID0x0AE4
Product ID0x0005
Serial numberTCPP20011
USB standard descriptorDownload
HID report descriptorDownload (recreated, not provided by actual device)

Input

The controller sends reports to the host (PS2) formed by 6 bytes:

Byte #Data
1Brake
2Power
3Pedal
4D-Pad
5Buttons
6Unused

The values for the brake notch byte are the following. Between notches, a transition value of 0xFF is reported.

NotchValue
Emergency0xFB
B70xDF
B60xC3
B50xA7
B40x8B
B30x70
B20x54
B10x38
Released0x1C

The values for the power notch byte are the following. Between notches, a transition value of 0xFF is reported.

NotchValue
N0x12
P10x24
P20x36
P30x48
P40x5A
P50x6C
P60x7E
P70x90
P80xA2
P90xB4
P100xC6
P110xD7
P120xE9
P130xFB

The pedal byte has two possible values depending on the state of the pedal.

StateValue
Released0xFF
Pressed0x00

The D-pad byte represents the input from the Up, Down, Left and Right physical buttons. If two opposite directions are pressed simultaneously, the result is None unless a third button is pressed.

ButtonValue
Up0x00
Up+Right0x01
Right0x02
Down+Right0x03
Down0x04
Down+Left0x05
Left0x06
Up+Left0x07
None0x08

The button byte uses bits to represent the state of the physical buttons. 0 means that the button is released and 1 that it is pressed.

BitPhysical Button
1D
2C
3B
4A
5Select
6Start
7Unused
8Unused

Output

The controller supports receiving data via a control transfer to update the screen, turn on/off the door lamp and provide rumble. The setup packet is as follows:

DataValue
bmRequestType0x40
bRequest0x09
wValue0x0301
wIndex0x0
wLength0x8

The data sent to the controller follows the structure below.

Byte #Value
1Left rumble
2Right rumble
3Door lamp + Limit approach
4Speed gauge
5+6 (Little Endian)Speedometer
7+8 (Little Endian)ATC limit
  • Left/right rumble: 0x00 is Off, 0x01 is On.
  • Door lamp: 0x0X is Off, 0x8X is On.
  • Limit approach: values between 0xX0 and 0xXA representing the number of LEDs lit above the speedometer. In-game, these mark the 10 km/h right below the speed limit.
  • Speed gauge: values between 0x00 and 0x16 representing the number of LEDs lit on the speed gauge. LED #23 cannot be lit. In-game, these mark 15 km/h increments in the current speed, with one lit when speed is 1-15 km/h, two when 16-30 km/h, etc.
  • Speedometer: values between 0x0000 and 0x0999 representing the current speed. Values are encoded with BCD 8421 (i.e. 120 km/h should be represented as 0x0120, NOT 0x0078).
  • ATC limit: values between 0x0000 and 0x0999 representing the ATC speed limit. Values are encoded with BCD 8421 (i.e. 120 km/h should be represented as 0x0120, NOT 0x0078).