Reports
From Wiimote Wiki
The Wii Remote is known to send or receive the following HID reports. "Input" and "Output" are from the perspective of user interaction - input is received from the Wii Remote and output is sent to it.
The bellow reports are from the perspective of a Bluetooth HID client. Software using raw L2CAP packets will need to emulate some degree of the bluetooth HID protocol.
Contents |
General Operations
These reports relate to general operation and control of the Wii Remote.
0x15 Status Request
| Output Report 0x15 | |
| Payload Length: | 1 |
| Purpose: | Status Request |
| BYTE | BIT 7 | 6 | 5 | 4 | 3 | 2 | 1 | BIT 0 |
| 0 | ? | ? | ? | ? | ? | ? | ? | RUMBLE |
Values:
RUMBLE: enable rumble motor
Discussion: Sending this report will cause the Wii Remote to respond with report 0x20.
0x20 Status
| Input Report 0x20 | |
| Payload Length: | 1 |
| Purpose: | Status Request |
| BYTE | BIT 7 | 6 | 5 | 4 | 3 | 2 | 1 | BIT 0 |
| 0 | ? | ? | ? | ? | ? | ? | ? | ? |
| 1 | ? | ? | ? | ? | ? | ? | ? | ? |
| 2 | P4 | P3 | P2 | P1 | ALWAYS | SPKEN | EXTCON | ? |
| 3 | ? | ? | ? | ? | ? | ? | ? | ? |
| 4 | ? | ? | ? | ? | ? | ? | ? | ? |
| 5 | VBAT | |||||||
Values:
Pn: Player n LED is lit. Set via report 0x11.
ALWAYS: Continuous output mode enabled. Set via report 0x12.
SPKEN: Audio output system enabled. Set via report 0x14.
EXTCON: Extension controller is connected.
VBAT: Output of battery voltage A/D.
Discussion: This report is sent in response to report 0x15.
0x11 Player LEDs
| Output Report 0x11 | |
| Payload Length: | 1 |
| Purpose: | Update Player LEDs |
| BYTE | BIT 7 | 6 | 5 | 4 | 3 | 2 | 1 | BIT 0 |
| 0 | P4 | P3 | P2 | P1 | ? | ? | 1? | RUMBLE |
Values:
Pn: enable player n LED
RUMBLE: enable rumble motor
1?: the Wii sets this bit when sending this report.
Discussion: This report is used to update the four player-indicator LEDs at the base of the Wii Remote. This report must be issued after connecting to the Wii Remote to disable the automatic blinking. Wii Remote will respond with report 0x22.
0x22 Command Status
| Input Report 0x22 | |
| Payload Length: | 4 |
| Purpose: | Command Status |
| BYTE | BIT 7 | 6 | 5 | 4 | 3 | 2 | 1 | BIT 0 |
| 1 | 0 | |||||||
| 2 | 0 | |||||||
| 3 | REPORT | |||||||
| 4 | 0 | |||||||
Values:
REPORT: Report number of the report being acknowledged.
Discussion: Sent in response to most output reports. If the bytes besides REPORT are non-zero, may indicate an error.
Memory & Register Access
0x17 Read
| Output Report 0x17 | |
| Payload Length: | 6 |
| Purpose: | Read memory/registers |
| BYTE | BIT 7 | 6 | 5 | 4 | 3 | 2 | 1 | BIT 0 |
| 0 | ? | ? | ? | ? | ? | REG | ? | RUMBLE |
| 1 | ADDR[23:16] | |||||||
| 2 | ADDR[15:8] | |||||||
| 3 | ADDR[7:0] | |||||||
| 4 | LENGTH[15:8] | |||||||
| 5 | LENGTH[7:0] | |||||||
Values:
REG: Read from registers. If 0 read from EEPROM
RUMBLE: enable rumble motor
ADDR: Address to read from
LENGTH: Number of bytes to read
Discussion: Reads data from Wii Remote EEPROM (if REG=0) or configuration registers (if REG=1). The Wii Remote will respond via one or more input report 0x21.
0x21 Read Data
| Input Report 0x21 | |
| Payload Length: | 21 |
| Purpose: | Read memory status & data, also has button state |
| BYTE | BIT 7 | 6 | 5 | 4 | 3 | 2 | 1 | BIT 0 |
| 0 | ? | ? | ? | PLUS | UP | DOWN | RIGHT | LEFT |
| 1 | HOME | ? | ? | MINUS | A | B | ONE | TWO |
| 2 | SIZE | ERROR | ||||||
| 3 | ADDR[15:8] | |||||||
| 4 | ADDR[7:0] | |||||||
| 5 | DATA | |||||||
| · · · | ||||||||
| 20 | DATA | |||||||
Values:
SIZE: Number of bytes in DATA minus 1. For example for 16 bytes, SIZE is 15.
ERROR: 0: success; 7: write-only memory; 8: invalid address
ADDR: Low 16 bits of the address of the first byte in DATA
DATA: data read from memory. NULL padded to 16 bytes.
Discussion: Sent by the Wii Remote in response to an Output Report 0x17.
0x16 Write
| Output Report 0x16 | |
| Payload Length: | 21 |
| Purpose: | Write memory/registers |
| BYTE | BIT 7 | 6 | 5 | 4 | 3 | 2 | 1 | BIT 0 |
| 0 | ? | ? | ? | ? | ? | REG | ? | RUMBLE |
| 1 | ADDR[23:16] | |||||||
| 2 | ADDR[15:8] | |||||||
| 3 | ADDR[7:0] | |||||||
| 4 | 0 | 0 | LENGTH | |||||
| 5 | DATA | |||||||
| · · · | ||||||||
| 20 | DATA | |||||||
Values:
REG: Write to registers. If 0 write to EEPROM
RUMBLE: enable rumble motor
ADDR: Address to write to
LENGTH: Length of data to write. 1 ≤ LENGTH ≤ 16
Discussion: Writes data to either the Wii Remote EEPROM (if REG=0) or configuration registers (if REG=1). The Wii Remote will respond via input report 0x22.
IR Sensor Control
0x13 IR Enable 1
| Output Report 0x13 | |
| Payload Length: | 1 |
| Purpose: | IR Pixel Clock Enable |
| BYTE | BIT 7 | 6 | 5 | 4 | 3 | 2 | 1 | BIT 0 |
| 0 | ? | ? | ? | ? | ? | IRPCK | 1? | RUMBLE |
Values:
IRPCK: enable 24MHz IR pixel clock
1?: Wii sets this bit when sending this report
RUMBLE: enable rumble motor
Discussion: This and output report 0x1A are used to powering up the IR camera. This report enables a 24MHz clock signal supplied to the camera. To extend battery life, the pixel clock should be disabled when the IR camera is not being used. Wii Remote will respond with report 0x22.
0x1A IR Enable 2
| Output Report 0x1A | |
| Payload Length: | 1 |
| Purpose: | IR Sensor Enable |
| BYTE | BIT 7 | 6 | 5 | 4 | 3 | 2 | 1 | BIT 0 |
| 0 | ? | ? | ? | ? | ? | IREN | 1? | RUMBLE |
Values:
IREN: enable IR camera
1?: Wii sets this bit when sending this report
RUMBLE: enable rumble motor
Discussion: This and output report 0x13 are used to power up the IR camera. This report controls the enable line to the camera. To extend battery life, the camera should be disabled when not in use. Wii Remote will respond with report 0x22.
Speaker Reports
| The following section or page relates to parts of the Wii Remote that are poorly understood. Research and contribution in these areas is encouraged. |
0x14 Audio Enable
| Output Report 0x14 | |
| Payload Length: | 1 |
| Purpose: | Audio output enable |
| BYTE | BIT 7 | 6 | 5 | 4 | 3 | 2 | 1 | BIT 0 |
| 0 | ? | ? | ? | ? | ? | SPKEN | ? | RUMBLE |
Values:
LENGTH: number of bytes of audio data to send
RUMBLE: enable rumble motor
Discussion: When SPKEN is set, the audio output subsystem will be powered up. See Speaker for details on playing audio. When SPKEN is cleared, power consumption may be reduced slightly. Wii Remote will respond with report 0x22.
0x19 Audio Mute
| Output Report 0x19 | |
| Payload Length: | 1 |
| Purpose: | Audio output mute |
| BYTE | BIT 7 | 6 | 5 | 4 | 3 | 2 | 1 | BIT 0 |
| 0 | ? | ? | ? | ? | ? | MUTE | ? | RUMBLE |
Values:
MUTE: Silence audio output.
RUMBLE: enable rumble motor
Discussion: When MUTE is set, audio output is disabled. This is likely used when changing speaker configuration to prevent popping. Wii Remote will respond with report 0x22.
0x18 Audio Data
| Output Report 0x18 | |
| Payload Length: | 21 |
| Purpose: | Audio data |
| BYTE | BIT 7 | 6 | 5 | 4 | 3 | 2 | 1 | BIT 0 |
| 0 | LENGTH[7:1] | RUMBLE | ||||||
| 1 | DATA | |||||||
| · · · | ||||||||
| 20 | DATA | |||||||
Values:
LENGTH: Number of bytes to send, low bit is not used
RUMBLE: enable rumble motor
DATA: Audio data. If fewer than 20 bytes, append NULL bytes to reach that size.
Discussion: Sends audio data to the Wii Remote. For details see Speaker. Length value may not be required - this information was copied from WiiBrew and seems inconsistent with all other report formats.
User Input
0x12 Select Input Report
| Output Report 0x12 | |
| Payload Length: | 2 |
| Purpose: | Select User Input Report |
| BYTE | BIT 7 | 6 | 5 | 4 | 3 | 2 | 1 | BIT 0 |
| 0 | ? | ? | ? | ? | ? | ALWAYS | 1? | RUMBLE |
| 1 | REPORT | |||||||
Values:
ALWAYS: always send input report, otherwise only on change
RUMBLE: enable rumble motor
1?: Wii sets this bit when sending this report.
REPORT: input report that should be sent.
Discussion: This report is used to select what type of input data should be returned. If ALWAYS is 1, then input reports will be sent continuously at 100Hz. Otherwise, input reports will only be sent when the reported value changes. REPORT determines which input report will be sent. Known values are listed bellow. To select reports 3E and 3F, specify report 3E.
0x30 BTN
| Input Report 0x30 | |
| Payload Length: | 2 |
| Purpose: | User Input: Buttons |
| BYTE | BIT 7 | 6 | 5 | 4 | 3 | 2 | 1 | BIT 0 |
| 0 | ? | ? | ? | PLUS | UP | DOWN | RIGHT | LEFT |
| 1 | HOME | ? | ? | MINUS | A | B | ONE | TWO |
Values:
A/B/PLUS/MINUS/HOME/ONE/TWO: 1 if face button/trigger with this label is pressed.
UP/DOWN/LEFT/RIGHT: 1 if this D-Pad direction is pressed. UP is towards the IR sensor.
Discussion: The labeled bits here are common between all user input reports besides 0x3D. Bits 6 and 5 in both bytes see other uses in the other user input reports.
0x31 BTN + XLR
| Input Report 0x31 | |
| Payload Length: | 5 |
| Purpose: | User Input: Buttons and Accelerometer |
| BYTE | BIT 7 | 6 | 5 | 4 | 3 | 2 | 1 | BIT 0 |
| 0 | ? | XLRLSB | XLRLSB | PLUS | UP | DOWN | RIGHT | LEFT |
| 1 | HOME | XLRLSB | XLRLSB | MINUS | A | B | ONE | TWO |
| 2 | XLR.X | |||||||
| 3 | XLR.Y | |||||||
| 4 | XLR.Z | |||||||
Values:
XLRLSB: least significant bits of the accelerometer data. Which bits are what has not been determined.
XLR: Acceleration detected along each axis.
Discussion: See Accelerometer.
0x32 BTN + 8 EXT
| Input Report 0x32 | |
| Payload Length: | 10 |
| Purpose: | User Input: Buttons and 8 Extension bytes |
| BYTE | BIT 7 | 6 | 5 | 4 | 3 | 2 | 1 | BIT 0 |
| 0 | ? | ? | ? | PLUS | UP | DOWN | RIGHT | LEFT |
| 1 | HOME | ? | ? | MINUS | A | B | ONE | TWO |
| 2 | EXT0 | |||||||
| · · · | ||||||||
| 9 | EXT7 | |||||||
Values:
EXTn: Byte of data from extension controller.
Discussion: See Extensions.
0x33 BTN + XLR + IR
| Input Report 0x33 | |
| Payload Length: | 17 |
| Purpose: | User Input: Buttons, Accelerometer, IR Sensor |
| BYTE | BIT 7 | 6 | 5 | 4 | 3 | 2 | 1 | BIT 0 |
| 0 | ? | XLRLSB | XLRLSB | PLUS | UP | DOWN | RIGHT | LEFT |
| 1 | HOME | XLRLSB | XLRLSB | MINUS | A | B | ONE | TWO |
| 2 | XLR.X | |||||||
| 3 | XLR.Y | |||||||
| 4 | XLR.Z | |||||||
| 5 | IR0 | |||||||
| · · · | ||||||||
| 16 | IR11 | |||||||
Values:
XLRLSB: least significant bits of the accelerometer data. Which bits are what has not been determined.
XLR: Acceleration detected along each axis. See Accelerometer
IR: Data from IR sensor in medium form.
Discussion: See Accelerometer and IR Sensor.
0x34 BTN + 19 EXT
| Input Report 0x34 | |
| Payload Length: | 21 |
| Purpose: | User Input: Buttons and 19 Extension bytes |
| BYTE | BIT 7 | 6 | 5 | 4 | 3 | 2 | 1 | BIT 0 |
| 0 | ? | ? | ? | PLUS | UP | DOWN | RIGHT | LEFT |
| 1 | HOME | ? | ? | MINUS | A | B | ONE | TWO |
| 2 | EXT0 | |||||||
| · · · | ||||||||
| 20 | EXT18 | |||||||
Values:
EXTn: Byte of data from extension controller.
Discussion: See Extensions.
0x35 BTN + XLR + 16 EXT
| Input Report 0x35 | |
| Payload Length: | 21 |
| Purpose: | User Input: Buttons, Accelerometer, 16 Extension Bytes |
| BYTE | BIT 7 | 6 | 5 | 4 | 3 | 2 | 1 | BIT 0 | ||||||||||||
| 0 | ? | XLRLSB | XLRLSB | PLUS | UP | DOWN | RIGHT | LEFT | ||||||||||||
| 1 | HOME | XLRLSB | XLRLSB | MINUS | A | B | ONE | TWO | ||||||||||||
| 2 | XLR.X | |||||||||||||||||||
| 3 | XLR.Y | |||||||||||||||||||
| 4 | XLR.Z | |||||||||||||||||||
| 5 | EXT0 | |||||||||||||||||||
| · · · | ||||||||||||||||||||
| 16 | EXT16 | |||||||||||||||||||
Values:
XLRLSB: least significant bits of the accelerometer data. Which bits are what has not been determined.
XLR: Acceleration detected along each axis. See Accelerometer.
EXT: Data from extension.
Discussion: See Accelerometer and Extensions.
0x36 BTN + IR + 9 EXT
| Input Report 0x37 | |
| Payload Length: | 21 |
| Purpose: | User Input: Buttons, IR Sensor, Extension |
| BYTE | BIT 7 | 6 | 5 | 4 | 3 | 2 | 1 | BIT 0 |
| 0 | ? | ? | ? | PLUS | UP | DOWN | RIGHT | LEFT |
| 1 | HOME | ? | ? | MINUS | A | B | ONE | TWO |
| 2 | IR0 | |||||||
| · · · | ||||||||
| 11 | IR9 | |||||||
| 12 | EXT0 | |||||||
| · · · | ||||||||
| 20 | EXT9 | |||||||
Values:
IR: Data from IR sensor in short form.
EXT: Data from extension.
Discussion: See IR Sensor and Extensions.
0x37 BTN + XLR + IR + 6 EXT
| Input Report 0x37 | |
| Payload Length: | 21 |
| Purpose: | User Input: Buttons, Accelerometer, IR Sensor, Extension |
| BYTE | BIT 7 | 6 | 5 | 4 | 3 | 2 | 1 | BIT 0 |
| 0 | ? | XLRLSB | XLRLSB | PLUS | UP | DOWN | RIGHT | LEFT |
| 1 | HOME | XLRLSB | XLRLSB | MINUS | A | B | ONE | TWO |
| 2 | XLR.X | |||||||
| 3 | XLR.Y | |||||||
| 4 | XLR.Z | |||||||
| 5 | IR0 | |||||||
| · · · | ||||||||
| 14 | IR9 | |||||||
| 15 | EXT0 | |||||||
| · · · | ||||||||
| 20 | EXT5 | |||||||
Values:
XLRLSB: least significant bits of the accelerometer data. Which bits are what has not been determined.
XLR: Acceleration detected along each axis. See Accelerometer
IR: Data from IR sensor in short form.
EXT: Data from extension.
Discussion: See Accelerometer, IR Sensor and Extensions.
0x3D EXT
| Input Report 0x3D | |
| Payload Length: | 21 |
| Purpose: | User Input: Extension |
| BYTE | BIT 7 | 6 | 5 | 4 | 3 | 2 | 1 | BIT 0 |
| 0 | EXT0 | |||||||
| · · · | ||||||||
| 20 | EXT20 | |||||||
Values:
EXT: Data from extension.
Discussion: Allows the extension to send data to the Wii at over 2kB/sec. Probable use would be for a Mic. See Extensions.
0x3E & 0x3F BTN + XLR + IR
| Input Report 0x3E & 3F | |
| Payload Length: | 21 & 21 |
| Purpose: | User Input: Buttons, Accelerometer and Long IR |
| BYTE | BIT 7 | 6 | 5 | 4 | 3 | 2 | 1 | BIT 0 |
| 3E 0 | ? | XLR.Z[5:4] | PLUS | UP | DOWN | RIGHT | LEFT | |
| 3E 1 | HOME | XLR.Z[7:6] | MINUS | A | B | ONE | TWO | |
| 3E 2 | XLR.X | |||||||
| 3E 3 | IR0.0 | |||||||
| · · · | ||||||||
| 3E 11 | IR0.8 | |||||||
| 3E 12 | IR1.0 | |||||||
| · · · | ||||||||
| 3E 20 | IR1.8 | |||||||
| 3F 0 | ? | XLR.Z[1:0] | PLUS | UP | DOWN | RIGHT | LEFT | |
| 3F 1 | HOME | XLR.Z[3:2] | MINUS | A | B | ONE | TWO | |
| 3F 2 | XLR.Y | |||||||
| 3F 3 | IR2.0 | |||||||
| · · · | ||||||||
| 3F 11 | IR2.8 | |||||||
| 3F 12 | IR3.0 | |||||||
| · · · | ||||||||
| 3F 20 | IR3.8 | |||||||
Values:
XLR: Acceleration detected along each axis. See Accelerometer
IRn: Data from IR sensor for point n in long form.
Discussion: See Accelerometer and IR Sensor. Note that a single Accelerometer sample is split between the two reports.
Unknown Reports
0x10 Unknown
| The following section or page relates to parts of the Wii Remote that are poorly understood. Research and contribution in these areas is encouraged. |
| Output Report 0x10 | |
| Payload Length: | 1 |
| Purpose: | Unknown |
| BYTE | BIT 7 | 6 | 5 | 4 | 3 | 2 | 1 | BIT 0 |
| 0 | ? | ? | ? | ? | ? | ? | ? | RUMBLE |
Values:
RUMBLE: enable rumble motor
Discussion: This report is mentioned by the HID descriptor. Purpose and effects are unknown. May be used to just set rumble.

