Pro Controller
Jump to navigation
Jump to search
The Nintendo Switch 2 Pro Controller is the new iteration of the [1] for the Switch 2.
Hardware
BEE-FKC-MAIN-01
Component | Description |
---|---|
SoC | MediaTek MT3689BCA |
NFC | NXP PN71602 |
Protocol
Expected to be extremely similar to Switch 1. One difference is that over the wire the USB bulk out endpoint is used. Data is sent over interface 1.
Commands start with an ID. All appear to have 0x91 as the second byte.
Axis 1 (left stick up/down) and axis 3 (right stick up/down) are inverted.
General structure
Little-endian. The header must be padded to 8 bytes.
Header
Offset | Size | Description |
---|---|---|
0x0 | 0x1 | CommandCode |
0x1 | 0x1 | Always 0x91 |
0x2 | 0x2 | Argument 1 |
0x4 | 0x2 | Argument 2 |
0x6 | 0x2 | Argument 3 |
CommandCode
Value | Description |
---|---|
0x2 | ReadSPI |
0x3 | Init? Also used to enable haptics |
0x7 | Unknown |
0x9 | Used to set controller LED state |
0xA | Unknown |
0xC | IMUCommand |
0x11 | Unknown |
0x15 | RequestControllerMAC / LTKRequest / unknown |
Initialize
Required to start receiving input from the controller.
Offset | Size | Value | Description |
---|---|---|---|
0x0 | 0x1 | 0x03 | |
0x1 | 0x1 | 0x91 | |
0x2 | 0x2 | 0x0 0xD | |
0x4 | 0x2 | 0x0 0x8 | |
0x6 | 0x2 | 0x0 0x0 | |
0x8 | 0x2 | 0x1 0x0 | |
0xA | 0x6 | ... | Console MAC address (can be anything) |
const uint8_t INIT_CMD[] = { 0x03, 0x91, 0x00, 0x0d, 0x00, 0x08, 0x00, 0x00, 0x01, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };