Pro Controller

From switch2brew
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
};