Shinkansen controller (Sony PlayStation 2)

Overview

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

Supported software (WIP)

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

Technical details

This controller has two 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 two rumble motors, one in each handle.

Internally, it is a HID device with a vendor-specific class.

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

Input

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

Byte 1Byte 2Byte 3Byte 4Byte 5Byte 6
BrakePowerPedalD-PadButtonsUnused

The values for the brake notch byte are the following.

ReleasedB1B2B3B4B5B6B7EmergencyTransition
0x1C0x380x540x700x8B0xA70xC30xDF0xFB0xFF

The values for the power notch byte are listed below.

NP1P2P3P4P5P6P7P8P9P10P11P12P13Transition
0x120x240x360x480x5A0x6C0x7E0x900xA20xB40xC60xD70xE90xFB0xFF

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

ReleasedPressed
0xFF0x00

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.

NNEESESSWWNWNone/Center
0x000x010x020x030x040x050x060x070x08

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 1Button 2Button 3Button 4Button 5Button 6
DCBASELECTSTART

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:

bmRequestTypebRequestwValuewIndexwLength
0x400x090x03010x00000x0008

The data sent to the controller follows the structure below.

Byte 1Byte 2Byte 3Byte 4Bytes 5-6Bytes 7-8
Left rumbleRight rumbleDoor lamp + Limit approachSpeed gaugeSpeedometerATC 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).

Multi-byte values should be stored in Little Endian.