<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://switch2brew.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Tatsh</id>
	<title>switch2brew - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://switch2brew.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Tatsh"/>
	<link rel="alternate" type="text/html" href="https://switch2brew.org/wiki/Special:Contributions/Tatsh"/>
	<updated>2026-04-24T16:35:37Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://switch2brew.org/w/index.php?title=Pro_Controller&amp;diff=123</id>
		<title>Pro Controller</title>
		<link rel="alternate" type="text/html" href="https://switch2brew.org/w/index.php?title=Pro_Controller&amp;diff=123"/>
		<updated>2025-06-26T01:09:43Z</updated>

		<summary type="html">&lt;p&gt;Tatsh: Start documenting the protocol&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Nintendo Switch 2 Pro Controller is the new iteration of the [https://switchbrew.org/wiki/Pro_Controller] for the Switch 2. &lt;br /&gt;
&lt;br /&gt;
= Hardware =&lt;br /&gt;
== BEE-FKC-MAIN-01 ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Component || Description&lt;br /&gt;
|-&lt;br /&gt;
| SoC || MediaTek MT3689BCA&lt;br /&gt;
|-&lt;br /&gt;
| NFC || NXP PN71602&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Protocol =&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Commands start with an ID. All appear to have 0x91 as the second byte.&lt;br /&gt;
&lt;br /&gt;
Axis 1 (left stick up/down) and axis 3 (right stick up/down) are inverted.&lt;br /&gt;
&lt;br /&gt;
== General structure ==&lt;br /&gt;
&lt;br /&gt;
Little-endian. The header must be padded to 8 bytes.&lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset !! Size !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || [[#CommandCode|CommandCode]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0x1 || Always 0x91&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || 0x2 || Argument 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x2 || Argument 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0x2 || Argument 3&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== CommandCode ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || ReadSPI&lt;br /&gt;
|-&lt;br /&gt;
| 0x3 || Init? Also used to enable haptics&lt;br /&gt;
|-&lt;br /&gt;
| 0x7 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x9 || Used to set controller LED state&lt;br /&gt;
|-&lt;br /&gt;
| 0xA || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || IMUCommand&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || RequestControllerMAC / LTKRequest / unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Initialize ==&lt;br /&gt;
&lt;br /&gt;
Required to start receiving input from the controller.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || 0x03 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0x1 || 0x91 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || 0x2 || 0x0 0xD ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x2 || 0x0 0x8 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0x2 || 0x0 0x0 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x2 || 0x1 0x0 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA || 0x6 || ... || Console MAC address (can be anything)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
const uint8_t INIT_CMD[] = {&lt;br /&gt;
  0x03,&lt;br /&gt;
  0x91,&lt;br /&gt;
  0x00, 0x0d,&lt;br /&gt;
  0x00, 0x08,&lt;br /&gt;
  0x00, 0x00,&lt;br /&gt;
  0x01, 0x00,&lt;br /&gt;
  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tatsh</name></author>
	</entry>
</feed>