Reports

From Wiimote Wiki

Jump to: navigation, search

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.

Personal tools