Sixaxis
The SIXAXIS or Dual Shock 3 is the Play Station 3's main input device can be used with some Homebrew applications on the wii via USB or Bluetooth. The (HID protocol) controller is both a wired/wireless device, using USB HID or Bluetooth 2.0 HID. SIXAXIS uses (and, frequently, abuses) the standard USB or Bluetooth HID protocol to communicate with the host, which is directly based on these HID Standards. As such, it will appear as a standard input device to any USB or Bluetooth host. However, the SIXAXIS will not transmit any data until a special HID feature report is read, but Windows HID functions do not allow that feature report to be read due to the incorrect HID descriptor. The HID descriptor also uses unusual axis assignments making it less useful with standard HID drivers.
Unlike the Wii Remote, the SIXAXIS also uses feature reports, in addition to input and output reports.
Summary
Reverse engineering and documenting all of the SIXAXIS's features is a work in progress. Here are the known features and their status:
Bluetooth Communication | Partially understood, but not yet working on the Wii or Windows with standard Bluetooth stacks | |||||
Core Buttons | All working. | |||||
Accelerometer | All working, but needs manual calibration | |||||
Gyro | Working, but needs automatic calibration | |||||
Player LEDs | Can be controlled and flashed by software arbitrarily. Even brightness modulation works. | |||||
Status Information | Battery can't be read yet | |||||
|
Bluetooth Communication
When queried with the Bluetooth Service Discovery Protocol (SDP), the SIXAXIS reports back a great deal of information, some of it wrong. In particular, it reports:
Name | |
Vendor ID | |
Product ID | |
Major Device Class | 1280 |
Minor Device Class | 4 |
Service Class | 0 |
(Summary of all Class Values) | 0x002504 |
The SIXAXIS does not require any of the authentication or encryption features of the Bluetooth standard, since it can only connect to a host that it first connects to via USB cable.
HID Interface
The HID standard allows devices to be self-describing, using a HID descriptor block. This block includes an enumeration of reports that the device understands. A report can be thought of similar to a network port assigned to a particular service. Reports are unidirectional however, and the HID descriptor lists for each port the direction (Input or Output) and the payload size for each port. Like all Bluetooth HID devices, the SIXAXIS reports its HID descriptor block when queried using the SDP protocol.
Note: An "Input" report is sent by the SIXAXIS to the host. An "Output" report is sent by the host to the SIXAXIS. A "Feature" report can go in either direction.
These are the reports the SIXAXIS uses, and their use:
For clarity, the convention in this document is to show packets including the Bluetooth-HID command (in parentheses), report ID, and payload, as described in sections 7.3 and 7.4 of the Bluetooth HID specification. Each byte is written out in hexadecimal, without the 0x prefix, separated by spaces. For example,
(a1) 30 00 00
is a DATA input packet (0xa1), with report number 0x30, with the two byte payload 0x00, 0x00. When using higher level HID functions rather than Bluetooth functions, the bytes in parentheses will never be present.
Force Feedback is accessible through output reports.
Output Report common information
Input Report common information
Status Reporting
Input Features
The SIXAXIS has a Three-Axis Accelerometer, a rate gyro, 12 analog buttons, and 5 digital buttons.
Buttons
Core Buttons
PS Button
The PS button makes the SIXAXIS discoverable, and also starts it sending data. Once sending data, it functions as a normal button.
Reset Button
The Reset button is hidden on the bottom of the SIXAXIS, and needs to be pressed with a pin or skewer. It will reset all the settings stored in the SIXAXIS. Sometimes it is necessary if the SIXAXIS stops working.
Button Hardware
Accelerometer
The Wii Remote includes a three-axis linear accelerometer.
Since the accelerometer actually measures the force exerted by a set of small proof masses inside of it with respect to its enclosure, the accelerometer measures linear acceleration in a free fall frame of reference. If the SIXAXIS is in free fall, it will report zero acceleration. At rest, it will report an upward acceleration (+Z, when horizontal) equal to the acceleration due to gravity, g (approximately 9.8 m/s²) but in the opposite direction. This fact can be used to derive tilt from the acceleration outputs when the SIXAXIS is reasonably still.
Feedback Features
The SIXAXIS supports only player LEDs, but the Dual Shock 3 sports two feedback features: Player LEDs, and Rumble.
Player LEDs
There are four red LEDs on the back of the SIXAXIS. During discovery and before initialization, these LEDs blink at a fixed rate.
During gameplay with the PS3, one LED is lit to indicate the player number assigned to the SIXAXIS. However, the LEDs are independently controllable by the host, and can be set to display any pattern.
The LEDs can be set to flash automatically at any rate, with variable on and off times. When flashed fast enough they give excellent control over brightness.
Bits 1 to 4 of LL controls the four LEDs. Bit 1 of LL controls the first (rightmost) LED, and bit 4 controls the last (leftmost):
Bit | Mask | LEDs | ||||
4 | 0x10 |
| ||||
3 | 0x08 |
| ||||
2 | 0x04 |
| ||||
1 | 0x02 |
|
Rumble
Implementation
A library created for adding Sixaxis support to homebrew apps has been created, dubbed libsicksaxis.
Currently, the only known implementation of libsicksaxis is a branch of Snes9x GX.