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 descriptorUnavailable

Input

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

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

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: 0x0? is Off, 0x8? is On.
  • Limit approach: values between 0x?0 and 0x?A 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.