Skip to content
Alexander Nitsch edited this page Jun 10, 2017 · 3 revisions

Introduction

http://us.playstation.com/ps3/accessories/playstation-move-racing-wheel-ps3.html

For a detailed technical description of the Move's EXT interface see the wiki page on extension devices.

Configuration data

81 01 00 00 00 00 00 3c 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
a0 02 01 01 00 a0 03 01 01 01 a0 04 01 04 2b a0
05 01 04 2c a0 06 01 04 2d a0 07 01 04 2e a0 08
01 04 2f 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

For an interpretation of this data see the section about initialization and configuration of exension devices.

Protocol

The Racing Wheel uses the slave address 0xA0 – the read/write bit is included as LSB, so the read address is 0xA1 and the write address is 0xA0. The Move sends single-byte feature queries to this address and receives single-byte responses that encode the Racing Wheel's current button states. The Move sends 7 of these queries in a repeating pattern (the overall sequence repeating approximately every 11–13 ms).

The default responses are 0x00, with the exception of query 0x07 in whose response the bits 0x3C are always set. But depending on which Raching Wheel buttons are currently pressed, certain additional bits in the responses are set:

Racing Wheel button state
Query 0x02 0x03 0x04 0x05 0x06 0x07 0x08
Response 0x01             Select button pressed
Response 0x08             Start button pressed
Response 0x10             D-pad UP pressed
Response 0x20             D-pad RIGHT pressed
Response 0x40             D-pad DOWN pressed
Response 0x80             D-pad LEFT pressed
Response   0x04           L1 button pressed
Response   0x08           R1 button pressed
Response   0x10           Triangle button pressed
Response   0x20           Circle button pressed
Response   0x40           X button pressed
Response   0x80           Square button pressed
Response     0–255         Throttle value
Response       0–255       L2 button value
Response         0–255     R2 button value
Response           0x01   Left Paddle pressed
Response           0x02   Right Paddle pressed

Sending values

The Racing Wheel contains a rumble motor in each one of its handles. These can be controlled by sending a command message which is either 2 or 3 bytes long over I²C, depending on whether you want to set both rumble values at the same time or just one separately.

The first byte always determines the mode. Set it to 0x20 to control the right (second byte) and left (third byte) rumble motor separately. When sending only 2 bytes, setting the control byte to 0x20 will address only the right rumble motor with the second byte. Setting the control byte to 0x21 will address only the left rumble motor with the second byte. Setting the control byte to 0x22 will address both rumble motors with the second byte, setting them to the same value.

Like with the Move, the Racing Wheel's rumble motors will automatically stop after a short period of time. If you need longer rumble times, you must periodically resend to refresh.

Accessing the values

In order to make the Racing Wheel's button state available via Bluetooth, these values are mapped to specific positions in the Move controller's Input report. The following offsets are referring to the Input Report.

Detecting the device

Plugging the Racing Wheel into the EXT socket sets bit 0x10 at offset 0x04. Unplugging clears it again.

Start/Select

Pressing the Start or the Select button has the same effect as pressing the Move controller's corresponding button, i.e. both sources cannot be distinguished.

D-Pad

Pressing the directional buttons sets bits at offset 0x01 using the same bit mask as in the I²C communication (see table above).

L1/R1 buttons

Pressing the L1 or R1 button sets bits at offset 0x02 using the same bit mask as in the I²C communication (see table above).

Symbol buttons

Pressing the Triangle, Circle, X or Square button has the same effect as pressing the Move controller's corresponding button, i.e. both sources cannot be distinguished.

Throttle

The position of the analog Throttle grip is mapped to offset 0x2C. Values range from 0x00 (not pressed) to 0xFF (fully depressed).

L2/R2 buttons

The position of the analog L2 and R2 buttons are mapped to offset 0x2D and offset 0x2E, respectively. Values range from 0x00 (not pressed) to 0xFF (fully depressed).

Paddles

Pressing the Left Paddle or Right Paddle sets bits at offset 0x2F using the same bit mask as in the I²C communication (see table above).

Rumble motors

Use Feature report 0xE0 to control the rumble motors. See the description for sending values above for details.

Hardware

The Racing Wheel is powered by a STM8S903K3 8-bit MCU which handles the I²C communication with the Move, controls the rumble motors, and processes the digital and analog inputs from the buttons. The device is not locked in any way, so you can freely access its EEPROM and flash memory using the MCU's Single Wire Interface Module (SWIM).