-
Notifications
You must be signed in to change notification settings - Fork 3
Racing Wheel
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.
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.
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 |
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.
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.
Plugging the Racing Wheel into the EXT socket sets bit 0x10 at offset 0x04. Unplugging clears it again.
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.
Pressing the directional buttons sets bits at offset 0x01 using the same bit mask as in the I²C communication (see table above).
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).
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.
The position of the analog Throttle grip is mapped to offset 0x2C. Values range from 0x00 (not pressed) to 0xFF (fully depressed).
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).
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).
Use Feature report 0xE0 to control the rumble motors. See the description for sending values above for details.
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).