Sixaxis

From WiiBrew
Jump to navigation Jump to search

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 ButtonRed.png Partially understood, but not yet working on the Wii or Windows with standard Bluetooth stacks
Core Buttons ButtonGreen.png All working.
Accelerometer ButtonGreen.png All working, but needs manual calibration
Gyro ButtonGreen.png Working, but needs automatic calibration
Player LEDs ButtonGreen.png Can be controlled and flashed by software arbitrarily. Even brightness modulation works.
Status Information ButtonRed.png Battery can't be read yet
Legend ButtonGreen.png Perfect or near-perfect ButtonYellow.png Usable but not complete ButtonRed.png Unusable

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
4
3
2
1
3 0x08
4
3
2
1
2 0x04
4
3
2
1
1 0x02
4
3
2
1

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.


Acknowledgements