<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://switchbrew.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Imp+Uhrfik+Simone</id>
	<title>Nintendo Switch Brew - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://switchbrew.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Imp+Uhrfik+Simone"/>
	<link rel="alternate" type="text/html" href="https://switchbrew.org/wiki/Special:Contributions/Imp_Uhrfik_Simone"/>
	<updated>2026-04-19T12:15:11Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Joy-Con&amp;diff=12379</id>
		<title>Joy-Con</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Joy-Con&amp;diff=12379"/>
		<updated>2023-06-30T22:05:53Z</updated>

		<summary type="html">&lt;p&gt;Imp Uhrfik Simone: /* Colors */ ...verified and added Hex-Values for Newly Released Pastel Colored Joy-Con (...Pastel-Pink, Pastel-Yellow, Pastel-Purple, &amp;amp; Pastel-Green)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Joy-Con is the name for the Switch&#039;s primary game controllers. The controllers communicate to the console through bluetooth and can be disconnected from the main unit.&lt;br /&gt;
&lt;br /&gt;
= Hardware =&lt;br /&gt;
The controllers themselves are simple to disassemble and identify.&lt;br /&gt;
[[File:JoyconFront.jpg|400px|thumb|The front of the Joy-Con internal[https://www.ifixit.com/Teardown/Nintendo+Switch+Teardown/78263]]]&lt;br /&gt;
[[File:JoyconRear.jpg|400px|thumb|The rear of the Joy-Con internal[https://www.ifixit.com/Teardown/Nintendo+Switch+Teardown/78263]]]&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Color || Item&lt;br /&gt;
|-&lt;br /&gt;
| Red || Broadcom BCM20734 Bluetooth 4.1/2.4 GHz Transceiver&lt;br /&gt;
|-&lt;br /&gt;
| Orange || STMicroelectronics NFCBEA 812006 33 (Likely NFC reader IC)&lt;br /&gt;
|-&lt;br /&gt;
| Yellow|| Macronix International MX25U4033E 4 Mb CMOS Flash&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Firmware =&lt;br /&gt;
&#039;&#039;See also: [[Joy-Con Firmware]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The firmware of the Joy-Cons seems to be generic across all instances. Details such as the handedness of the controller and the color is just indicated in a configuration part of the flash. Judging by quick glance at the firmware, it&#039;s probably identical to that used on the Pro Controller as well.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Controller || 1.0.0&lt;br /&gt;
|-&lt;br /&gt;
| Joy-Con Left (Blue) || [[:File:pad.L.bin|flash dump]]&lt;br /&gt;
|-&lt;br /&gt;
| Joy-Con Right (Red) || [[:File:pad.R.bin|flash dump]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The flash is in a patch-ram format. Tools for dealing with it are available [https://github.com/shuffle2/nxpad].&lt;br /&gt;
A dump of the ROM region (taken while firmware was running) can be found [[:File:bcm20734_rom.bin|here]]. Note this is the same SoC used on the other controller models, as well.&lt;br /&gt;
&lt;br /&gt;
= Protocol =&lt;br /&gt;
The Joy-Con can communicate wirelessly over Bluetooth or through the rails over UART. This uses a Nintendo proprietary protocol called &amp;quot;Nwcp&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
== NwcpPacket ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x5&lt;br /&gt;
| [[#HciHeader|HciHeader]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| 0x7&lt;br /&gt;
| [[#NwcpHeader|NwcpHeader]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| Variable&lt;br /&gt;
| Data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== HciHeader ===&lt;br /&gt;
This is a 5-byte packet header used by Broadcom&#039;s HCI Control Protocol.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x1&lt;br /&gt;
| PacketType (always 0x19)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[#CommandCode|CommandCode]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0x1&lt;br /&gt;
| GroupCode (always 0x03)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| 0x2&lt;br /&gt;
| PacketLength&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;
| 0x1 || SendToDevice&lt;br /&gt;
|-&lt;br /&gt;
| 0x81 || ReceiveFromDevice&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== NwcpHeader ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[#CommandType|CommandType]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[#DeviceCommand|DeviceCommand]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0x2&lt;br /&gt;
| DataSize&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x1&lt;br /&gt;
| CommandResult&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| 0x1&lt;br /&gt;
| DataCrc (CRC8 over Data for DataSize bytes)&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 0x1&lt;br /&gt;
| HeaderCrc (CRC8 over the previous 6 bytes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== CommandType ====&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;
| 0x91 || DeviceCommandToDevice&lt;br /&gt;
|-&lt;br /&gt;
| 0x92 || Hid&lt;br /&gt;
|-&lt;br /&gt;
| 0x94 || DeviceCommandFromDevice&lt;br /&gt;
|-&lt;br /&gt;
| 0x9A || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA3 || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA5 || Handshake&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== DeviceCommand ==&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;
| 0x01 || Inquiry&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || WriteChargerSettings&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || ReadChargerSettings&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || AttachmentEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || IsAttachmentEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 0x06 || GetBatteryVoltage&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || ReadWakeUpReason&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || CreateHidConnection&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || DisconnectHid&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || SetHidInterval&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || GetHidInterval&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || Pairing&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || UpdateUartBaudRate&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || Test&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== HidCommand ==&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;
| 0x01 || PairingOut&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || GetDeviceInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || SetDataFormat&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || LRButtonDetection&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || Page&lt;br /&gt;
|-&lt;br /&gt;
| 0x06 || Reset&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || ClearPairingInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || Shipment&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || SerialFlashRead&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || SerialFlashWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || SerialFlashSectorErase&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || McuReset&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || McuWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || McuResume&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || McuPollingEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || McuPollingDisable&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || AttachmentWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || AttachmentRead&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || AttachmentEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || GetAttachmentInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || SetIndicatorLed&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || GetIndicatorLed&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || SetNotificationLed&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || SensorSleep&lt;br /&gt;
|-&lt;br /&gt;
| 0x41 || SensorConfig&lt;br /&gt;
|-&lt;br /&gt;
| 0x42 || SensorWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x43 || SensorRead&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || MotorEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || GetBatteryVoltage&lt;br /&gt;
|-&lt;br /&gt;
| 0x51 || WriteChargeSetting&lt;br /&gt;
|-&lt;br /&gt;
| 0x52 || ReadChargeSetting&lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || ExtDevWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x59 || GetExtDevInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x5A || ExtDevPollingEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x5B || ExtDevPollingDisable&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C || ExtDevInFormatConfig&lt;br /&gt;
|-&lt;br /&gt;
| 0x5D || &lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || InternalAttachmentWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x61 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x62 || InternalAttachmentEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x63 || InternalAttachmentPollingEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x64 || InternalAttachmentPollingDisable&lt;br /&gt;
|-&lt;br /&gt;
| 0x7A || AddButtonPlayData&lt;br /&gt;
|-&lt;br /&gt;
| 0x7B || StartStopButtonPlayData&lt;br /&gt;
|-&lt;br /&gt;
| 0x80 || Ack&lt;br /&gt;
|-&lt;br /&gt;
| 0x81 || PairingIn&lt;br /&gt;
|-&lt;br /&gt;
| 0x82 || DeviceInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x83 || LRButtonElapsedTime&lt;br /&gt;
|-&lt;br /&gt;
| 0x90 || SerialFlashData&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0 || McuData&lt;br /&gt;
|-&lt;br /&gt;
| 0xA8 || AttachmentData&lt;br /&gt;
|-&lt;br /&gt;
| 0xA9 || AttachmentInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0xAA || InternalAttachmentRead&lt;br /&gt;
|-&lt;br /&gt;
| 0xB0 || IndicatorLed&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0 || SensorData&lt;br /&gt;
|-&lt;br /&gt;
| 0xD0 || BatteryVoltage&lt;br /&gt;
|-&lt;br /&gt;
| 0xD8 || ExtDevRead&lt;br /&gt;
|-&lt;br /&gt;
| 0xD9 || ExtDevInfo&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Left &amp;amp; Right Separate Joy-con ==&lt;br /&gt;
When paired directly to a computer over bluetooth, the joy-con both provide identical HID input report descriptor. This does not appear to include motion controls, IR data, or NFC. They both behave as detached single-player controllers.&lt;br /&gt;
&lt;br /&gt;
HID Input Report Descriptor (Hexadecimal):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
00000000: 05010905 A1010601 FF852109 21750895  ....¡...ÿ…!.!u.•&lt;br /&gt;
00000010: 30810285 30093075 08953081 02853109  0..…0.0u.•0..…1.&lt;br /&gt;
00000020: 31750896 69018102 85320932 75089669  1u.–i...…2.2u.–i&lt;br /&gt;
00000030: 01810285 33093375 08966901 8102853F  ...…3.3u.–i...…?&lt;br /&gt;
00000040: 05091901 29101500 25017501 95108102  ....)...%.u.•...&lt;br /&gt;
00000050: 05010939 15002507 75049501 81420509  ...9..%.u.•..B..&lt;br /&gt;
00000060: 75049501 81010501 09300931 09330934  u.•......0.1.3.4&lt;br /&gt;
00000070: 16000027 FFFF0000 75109504 81020601  ...&#039;ÿÿ..u.•.....&lt;br /&gt;
00000080: FF850109 01750895 30910285 10091075  ÿ…...u.•0‘.…...u&lt;br /&gt;
00000090: 08953091 02851109 11750895 30910285  .•0‘.…...u.•0‘.…&lt;br /&gt;
000000A0: 12091275 08953091 02C0               ...u.•0‘.À&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Parsed Bytes || Description&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x01,        || Usage Page (Generic Desktop Ctrls)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x05,        || Usage (Game Pad)&lt;br /&gt;
|-&lt;br /&gt;
|0xA1, 0x01,        || Collection (Application)&lt;br /&gt;
|-&lt;br /&gt;
|0x06, 0x01, 0xFF,  ||   Usage Page (Vendor Defined 0xFF01)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x21,        ||   Report ID (33)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x21,        ||   Usage (0x21)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x30,        ||   Report ID (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x30,        ||   Usage (0x30)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x31,        ||   Report ID (49)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x31,        ||   Usage (0x31)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x96, 0x69, 0x01,  ||   Report Count (361)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x32,        ||   Report ID (50)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x32,        ||   Usage (0x32)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x96, 0x69, 0x01,  ||   Report Count (361)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x33,        ||   Report ID (51)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x33,        ||   Usage (0x33)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x96, 0x69, 0x01,  ||   Report Count (361)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x3F,        ||   Report ID (63)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x09,        ||   Usage Page (Button)&lt;br /&gt;
|-&lt;br /&gt;
|0x19, 0x01,        ||   Usage Minimum (0x01)&lt;br /&gt;
|-&lt;br /&gt;
|0x29, 0x10,        ||   Usage Maximum (0x10)&lt;br /&gt;
|-&lt;br /&gt;
|0x15, 0x00,        ||   Logical Minimum (0)&lt;br /&gt;
|-&lt;br /&gt;
|0x25, 0x01,        ||   Logical Maximum (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x01,        ||   Report Size (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x10,        ||   Report Count (16)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x01,        ||   Usage Page (Generic Desktop Ctrls)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x39,        ||   Usage (Hat switch)&lt;br /&gt;
|-&lt;br /&gt;
|0x15, 0x00,        ||   Logical Minimum (0)&lt;br /&gt;
|-&lt;br /&gt;
|0x25, 0x07,        ||   Logical Maximum (7)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x04,        ||   Report Size (4)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x01,        ||   Report Count (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x42,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,Null State)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x09,        ||   Usage Page (Button)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x04,        ||   Report Size (4)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x01,        ||   Report Count (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x01,        ||   Input (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x01,        ||   Usage Page (Generic Desktop Ctrls)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x30,        ||   Usage (X)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x31,        ||   Usage (Y)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x33,        ||   Usage (Rx)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x34,        ||   Usage (Ry)&lt;br /&gt;
|-&lt;br /&gt;
|0x16, 0x00, 0x00,  ||   Logical Minimum (0)&lt;br /&gt;
|-&lt;br /&gt;
|0x27, 0xFF, 0xFF, 0x00, 0x00,  ||   Logical Maximum (65534)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x10,        ||   Report Size (16)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x04,        ||   Report Count (4)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x06, 0x01, 0xFF,  ||   Usage Page (Vendor Defined 0xFF01)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x01,        ||   Report ID (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x01,        ||   Usage (0x01)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x10,        ||   Report ID (16)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x10,        ||   Usage (0x10)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x11,        ||   Report ID (17)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x11,        ||   Usage (0x11)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x12,        ||   Report ID (18)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x12,        ||   Usage (0x12)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0xC0,              || End Collection&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Colors ==&lt;br /&gt;
HEX codes for the colors shown in the &amp;quot;Controllers&amp;quot; menu of the Switch UI can be found in a Joy-con SPI dump starting at offset 0x6050. Body color is first followed by button color and each is 3 bytes long. These values are able to be re-written with any HEX color value to make the Joy-cons show up as different colors in the UI. The following is a list of official HEX colors recovered from SPI dumps.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Developer Kit Joy-Con || Release || Body HEX || Button HEX&lt;br /&gt;
|-&lt;br /&gt;
| Black / ブラック || 2015.10.16 || #313131 || #0F0F0F&lt;br /&gt;
|-&lt;br /&gt;
! Standard Retail Joy-Con Color || Release || Body HEX || Button HEX&lt;br /&gt;
|-&lt;br /&gt;
| Gray / グレー || 2017.03.03 || #828282 || #0F0F0F&lt;br /&gt;
|-&lt;br /&gt;
| Neon Red / ネオンレッド || 2017.03.03 || #FF3C28 || #1E0A0A&lt;br /&gt;
|-&lt;br /&gt;
| Neon Blue / ネオンブルー || 2017.03.03 || #0AB9E6 || #001E1E&lt;br /&gt;
|-&lt;br /&gt;
| Neon Yellow / ネオンイエロー || 2017.06.16 || #E6FF00 || #142800&lt;br /&gt;
|-&lt;br /&gt;
| Neon Green / ネオングリーン || 2017.07.21 || #1EDC00 || #002800&lt;br /&gt;
|-&lt;br /&gt;
| Neon Pink / ネオンピンク || 2017.07.21 || #FF3278 || #28001E&lt;br /&gt;
|-&lt;br /&gt;
| Red / レッド || 2017.10.27 || #E10F00 || #280A0A&lt;br /&gt;
|-&lt;br /&gt;
| Blue / ブルー || 2019.10.04 || #4655F5 || #00000A&lt;br /&gt;
|-&lt;br /&gt;
| Neon Purple / ネオンパープル || 2019.10.04 || #B400E6 || #140014&lt;br /&gt;
|-&lt;br /&gt;
| Neon Orange / ネオンオレンジ || 2019.10.04 || #FAA005 || #0F0A00&lt;br /&gt;
|-&lt;br /&gt;
| White / ホワイト || 2021.10.08 || #E6E6E6 || #323232&lt;br /&gt;
|-&lt;br /&gt;
| Pastel Pink / パステルピンク || 2023.06.30 || #FFAFAF || #372D2D&lt;br /&gt;
|-&lt;br /&gt;
| Pastel Yellow / パステルイエロー || 2023.06.30 || #F5FF82 || #32332D&lt;br /&gt;
|-&lt;br /&gt;
| Pastel Purple / パステルパープル || 2023.06.30 || #F0CBEB || #373037&lt;br /&gt;
|-&lt;br /&gt;
| Pastel Green / パステルグリーン || 2023.06.30 || #BCFFC8 || #2D322D&lt;br /&gt;
|-&lt;br /&gt;
! Special Edition Joy-Con Color || Release || Body HEX || Button HEX&lt;br /&gt;
|-&lt;br /&gt;
| Nintendo Switch Gray Joy-Con / Nintendo Switch グレー || 2017.03.03 || #828282 || #0F0F0F&lt;br /&gt;
|-&lt;br /&gt;
| Nintendo Switch Neon-Blue Left Joy-Con / Nintendo Switch ネオンブルー・ネオンレッド || 2017.03.03 || #0AB9E6 || #001E1E&lt;br /&gt;
|-&lt;br /&gt;
| Nintendo Switch Neon-Red Right Joy-Con / Nintendo Switch ネオンブルー・ネオンレッド || 2017.03.03 || #FF3C28 || #1E0A0A&lt;br /&gt;
|-&lt;br /&gt;
| Splatoon 2 Edition Neon-Green Left Joy-Con / スプラトゥーン2 || 2017.07.21 || #1EDC00 || #002800&lt;br /&gt;
|-&lt;br /&gt;
| Splatoon 2 Edition Neon-Pink Right Joy-Con / スプラトゥーン2 || 2017.07.21 || #FF3278 || #28001E&lt;br /&gt;
|-&lt;br /&gt;
| Super Mario Odyssey Edition Red Joy-Con / スーパーマリオ オデッセイ || 2017.10.27 || #E10F00 || #280A0A&lt;br /&gt;
|-&lt;br /&gt;
| Super Smash Bros. Ultimate Edition Gray Joy-Con / 大乱闘スマッシュブラザーズ || 2018.11.02 || #828282 || #0F0F0F&lt;br /&gt;
|-&lt;br /&gt;
| Pokémon: Let&#039;s Go! Edition Eevee-Brown Left Joy-Con / ポケットモンスター Let&#039;s Go! イーブイ || 2018.11.16 || #C88C32 || #281900&lt;br /&gt;
|-&lt;br /&gt;
| Pokémon: Let&#039;s Go! Edition Pikachu-Yellow Right Joy-Con / ポケットモンスター Let&#039;s Go! ピカチュウ || 2018.11.16 || #FFDC00 || #322800&lt;br /&gt;
|-&lt;br /&gt;
| *Nintendo Labo Creators Contest Edition &amp;quot;Cardboard&amp;quot;-Colored Joy-Con || 2018. (...?) || #D7AA73 || #1E1914&lt;br /&gt;
|-&lt;br /&gt;
| **Dragon Quest XI S Lotto Edition Royal-Blue Joy-Con / ドラゴン クエスト XI S （ロト版） || 2019.09.27 || #1473FA || #00000F&lt;br /&gt;
|-&lt;br /&gt;
| **Disney Tsum Tsum Festival Edition Neon-Purple Left Joy-Con / ディズニー ツムツム フェスティバル || 2019.10.10 || #B400E6 || #140014&lt;br /&gt;
|-&lt;br /&gt;
| **Disney Tsum Tsum Festival Edition Neon-Pink Right Joy-Con / ディズニー ツムツム フェスティバル || 2019.10.10 || #FF3278 || #28001E&lt;br /&gt;
|-&lt;br /&gt;
| Animal Crossing: New Horizons Edition Pastel-Green Left Joy-Con / あつまれ どうぶつの森 || 2020.03.13 || #82FF96 || #0A1E0A&lt;br /&gt;
|-&lt;br /&gt;
| Animal Crossing: New Horizons Edition Pastel-Blue Right Joy-Con / あつまれ どうぶつの森 || 2020.03.13 || #96F5F5 || #0A1E28&lt;br /&gt;
|-&lt;br /&gt;
| Fortnite Wildcat Edition Yellow Left Joy-Con / フォートナイト ワイルドキャット(山猫) || 2020.10.30 || #FFCC00 || #1A1100&lt;br /&gt;
|-&lt;br /&gt;
| Fortnite Wildcat Edition Dark-Blue Right Joy-Con / フォートナイト ワイルドキャット(山猫) || 2020.10.30 || #0084FF || #000F1E&lt;br /&gt;
|-&lt;br /&gt;
| Mario Red × Blue Edition Red Joy-Con / マリオ レッド × ブルー || 2021.02.12 || #F04614 || #1E1914&lt;br /&gt;
|-&lt;br /&gt;
| Monster Hunter Rise Edition Gray Joy-Con / モンスターハンターライズ || 2021.03.26 || #818282 || #0E0F0F&lt;br /&gt;
|-&lt;br /&gt;
| Fortnite Fleet Force Edition Dark-Blue Left Joy-Con / フォートナイト フリート フォース(力の艦隊) || 2021.06.04 || #0084FF || #000F1E&lt;br /&gt;
|-&lt;br /&gt;
| Fortnite Fleet Force Edition Yellow Right Joy-Con / フォートナイト フリート フォース(力の艦隊) || 2021.06.04 || #FFCC00 || #1A1100&lt;br /&gt;
|-&lt;br /&gt;
| Legend of Zelda: Skyward Sword Edition Dark-Blue Left Joy-Con / ゼルダの伝説 スカイウォードソード || 2021.07.16 || #2D50F0 || #1E0F46&lt;br /&gt;
|-&lt;br /&gt;
| Legend of Zelda: Skyward Sword Edition Dark-Purple Right Joy-Con / ゼルダの伝説 スカイウォードソード || 2021.07.16 || #500FC8 || #00051E&lt;br /&gt;
|-&lt;br /&gt;
| Nintendo Switch OLED Edition White Joy-Con / Nintendo Switch （有機ELモデル） ホワイト || 2021.10.08 || #E6E6E6 || #323232&lt;br /&gt;
|-&lt;br /&gt;
| Splatoon 3 OLED Edition Blue-Gradient Left Joy-Con / （有機ELモデル） スプラトゥーン3 || 2022.08.26 || #6455F5 || #28282D&lt;br /&gt;
|-&lt;br /&gt;
| Splatoon 3 OLED Edition Neon-Yellow-Gradient Right Joy-Con / （有機ELモデル） スプラトゥーン3 || 2022.08.26 || #C3FA05 || #1E1E28&lt;br /&gt;
|-&lt;br /&gt;
| Pokémon: Scarlet × Violet OLED Edition Scarlet Left Joy-Con / （有機ELモデル） ポケットモンスター スカーレット・バイオレット || 2022.11.04 || #F07341 || #322D1E&lt;br /&gt;
|-&lt;br /&gt;
| Pokémon: Scarlet × Violet OLED Edition Violet Right Joy-Con / （有機ELモデル） ポケットモンスター スカーレット・バイオレット || 2022.11.04 || #9650AA || #32322D&lt;br /&gt;
|-&lt;br /&gt;
| Legend of Zelda: Tears of the Kingdom Edition Gold Joy-Con / （有機ELモデル） ゼルダの伝説　ティアーズ オブ ザ キングダム || 2023.04.28 || #D2BE69 || #32322D&lt;br /&gt;
|-&lt;br /&gt;
| // *(Prize Awarded for Labo Contest - No Retail) // **(Available Japan Only)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Additional Links =&lt;br /&gt;
[https://github.com/dekuNukem/Nintendo_Switch_Reverse_Engineering Reverse Engineering of the Joy-Con by Github user dekuNukem]&lt;/div&gt;</summary>
		<author><name>Imp Uhrfik Simone</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Joy-Con&amp;diff=12366</id>
		<title>Joy-Con</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Joy-Con&amp;diff=12366"/>
		<updated>2023-06-09T17:03:22Z</updated>

		<summary type="html">&lt;p&gt;Imp Uhrfik Simone: /* Colors */ ...added temporary place-holder lines for New Pastel Joy-Con&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Joy-Con is the name for the Switch&#039;s primary game controllers. The controllers communicate to the console through bluetooth and can be disconnected from the main unit.&lt;br /&gt;
&lt;br /&gt;
= Hardware =&lt;br /&gt;
The controllers themselves are simple to disassemble and identify.&lt;br /&gt;
[[File:JoyconFront.jpg|400px|thumb|The front of the Joy-Con internal[https://www.ifixit.com/Teardown/Nintendo+Switch+Teardown/78263]]]&lt;br /&gt;
[[File:JoyconRear.jpg|400px|thumb|The rear of the Joy-Con internal[https://www.ifixit.com/Teardown/Nintendo+Switch+Teardown/78263]]]&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Color || Item&lt;br /&gt;
|-&lt;br /&gt;
| Red || Broadcom BCM20734 Bluetooth 4.1/2.4 GHz Transceiver&lt;br /&gt;
|-&lt;br /&gt;
| Orange || STMicroelectronics NFCBEA 812006 33 (Likely NFC reader IC)&lt;br /&gt;
|-&lt;br /&gt;
| Yellow|| Macronix International MX25U4033E 4 Mb CMOS Flash&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Firmware =&lt;br /&gt;
&#039;&#039;See also: [[Joy-Con Firmware]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The firmware of the Joy-Cons seems to be generic across all instances. Details such as the handedness of the controller and the color is just indicated in a configuration part of the flash. Judging by quick glance at the firmware, it&#039;s probably identical to that used on the Pro Controller as well.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Controller || 1.0.0&lt;br /&gt;
|-&lt;br /&gt;
| Joy-Con Left (Blue) || [[:File:pad.L.bin|flash dump]]&lt;br /&gt;
|-&lt;br /&gt;
| Joy-Con Right (Red) || [[:File:pad.R.bin|flash dump]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The flash is in a patch-ram format. Tools for dealing with it are available [https://github.com/shuffle2/nxpad].&lt;br /&gt;
A dump of the ROM region (taken while firmware was running) can be found [[:File:bcm20734_rom.bin|here]]. Note this is the same SoC used on the other controller models, as well.&lt;br /&gt;
&lt;br /&gt;
= Protocol =&lt;br /&gt;
The Joy-Con can communicate wirelessly over Bluetooth or through the rails over UART. This uses a Nintendo proprietary protocol called &amp;quot;Nwcp&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
== NwcpPacket ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x5&lt;br /&gt;
| [[#HciHeader|HciHeader]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| 0x7&lt;br /&gt;
| [[#NwcpHeader|NwcpHeader]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| Variable&lt;br /&gt;
| Data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== HciHeader ===&lt;br /&gt;
This is a 5-byte packet header used by Broadcom&#039;s HCI Control Protocol.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x1&lt;br /&gt;
| PacketType (always 0x19)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[#CommandCode|CommandCode]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0x1&lt;br /&gt;
| GroupCode (always 0x03)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| 0x2&lt;br /&gt;
| PacketLength&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;
| 0x1 || SendToDevice&lt;br /&gt;
|-&lt;br /&gt;
| 0x81 || ReceiveFromDevice&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== NwcpHeader ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[#CommandType|CommandType]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[#DeviceCommand|DeviceCommand]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0x2&lt;br /&gt;
| DataSize&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x1&lt;br /&gt;
| CommandResult&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| 0x1&lt;br /&gt;
| DataCrc (CRC8 over Data for DataSize bytes)&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 0x1&lt;br /&gt;
| HeaderCrc (CRC8 over the previous 6 bytes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== CommandType ====&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;
| 0x91 || DeviceCommandToDevice&lt;br /&gt;
|-&lt;br /&gt;
| 0x92 || Hid&lt;br /&gt;
|-&lt;br /&gt;
| 0x94 || DeviceCommandFromDevice&lt;br /&gt;
|-&lt;br /&gt;
| 0x9A || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA3 || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA5 || Handshake&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== DeviceCommand ==&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;
| 0x01 || Inquiry&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || WriteChargerSettings&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || ReadChargerSettings&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || AttachmentEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || IsAttachmentEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 0x06 || GetBatteryVoltage&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || ReadWakeUpReason&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || CreateHidConnection&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || DisconnectHid&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || SetHidInterval&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || GetHidInterval&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || Pairing&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || UpdateUartBaudRate&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || Test&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== HidCommand ==&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;
| 0x01 || PairingOut&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || GetDeviceInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || SetDataFormat&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || LRButtonDetection&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || Page&lt;br /&gt;
|-&lt;br /&gt;
| 0x06 || Reset&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || ClearPairingInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || Shipment&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || SerialFlashRead&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || SerialFlashWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || SerialFlashSectorErase&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || McuReset&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || McuWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || McuResume&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || McuPollingEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || McuPollingDisable&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || AttachmentWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || AttachmentRead&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || AttachmentEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || GetAttachmentInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || SetIndicatorLed&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || GetIndicatorLed&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || SetNotificationLed&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || SensorSleep&lt;br /&gt;
|-&lt;br /&gt;
| 0x41 || SensorConfig&lt;br /&gt;
|-&lt;br /&gt;
| 0x42 || SensorWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x43 || SensorRead&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || MotorEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || GetBatteryVoltage&lt;br /&gt;
|-&lt;br /&gt;
| 0x51 || WriteChargeSetting&lt;br /&gt;
|-&lt;br /&gt;
| 0x52 || ReadChargeSetting&lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || ExtDevWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x59 || GetExtDevInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x5A || ExtDevPollingEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x5B || ExtDevPollingDisable&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C || ExtDevInFormatConfig&lt;br /&gt;
|-&lt;br /&gt;
| 0x5D || &lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || InternalAttachmentWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x61 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x62 || InternalAttachmentEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x63 || InternalAttachmentPollingEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x64 || InternalAttachmentPollingDisable&lt;br /&gt;
|-&lt;br /&gt;
| 0x7A || AddButtonPlayData&lt;br /&gt;
|-&lt;br /&gt;
| 0x7B || StartStopButtonPlayData&lt;br /&gt;
|-&lt;br /&gt;
| 0x80 || Ack&lt;br /&gt;
|-&lt;br /&gt;
| 0x81 || PairingIn&lt;br /&gt;
|-&lt;br /&gt;
| 0x82 || DeviceInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x83 || LRButtonElapsedTime&lt;br /&gt;
|-&lt;br /&gt;
| 0x90 || SerialFlashData&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0 || McuData&lt;br /&gt;
|-&lt;br /&gt;
| 0xA8 || AttachmentData&lt;br /&gt;
|-&lt;br /&gt;
| 0xA9 || AttachmentInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0xAA || InternalAttachmentRead&lt;br /&gt;
|-&lt;br /&gt;
| 0xB0 || IndicatorLed&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0 || SensorData&lt;br /&gt;
|-&lt;br /&gt;
| 0xD0 || BatteryVoltage&lt;br /&gt;
|-&lt;br /&gt;
| 0xD8 || ExtDevRead&lt;br /&gt;
|-&lt;br /&gt;
| 0xD9 || ExtDevInfo&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Left &amp;amp; Right Separate Joy-con ==&lt;br /&gt;
When paired directly to a computer over bluetooth, the joy-con both provide identical HID input report descriptor. This does not appear to include motion controls, IR data, or NFC. They both behave as detached single-player controllers.&lt;br /&gt;
&lt;br /&gt;
HID Input Report Descriptor (Hexadecimal):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
00000000: 05010905 A1010601 FF852109 21750895  ....¡...ÿ…!.!u.•&lt;br /&gt;
00000010: 30810285 30093075 08953081 02853109  0..…0.0u.•0..…1.&lt;br /&gt;
00000020: 31750896 69018102 85320932 75089669  1u.–i...…2.2u.–i&lt;br /&gt;
00000030: 01810285 33093375 08966901 8102853F  ...…3.3u.–i...…?&lt;br /&gt;
00000040: 05091901 29101500 25017501 95108102  ....)...%.u.•...&lt;br /&gt;
00000050: 05010939 15002507 75049501 81420509  ...9..%.u.•..B..&lt;br /&gt;
00000060: 75049501 81010501 09300931 09330934  u.•......0.1.3.4&lt;br /&gt;
00000070: 16000027 FFFF0000 75109504 81020601  ...&#039;ÿÿ..u.•.....&lt;br /&gt;
00000080: FF850109 01750895 30910285 10091075  ÿ…...u.•0‘.…...u&lt;br /&gt;
00000090: 08953091 02851109 11750895 30910285  .•0‘.…...u.•0‘.…&lt;br /&gt;
000000A0: 12091275 08953091 02C0               ...u.•0‘.À&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Parsed Bytes || Description&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x01,        || Usage Page (Generic Desktop Ctrls)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x05,        || Usage (Game Pad)&lt;br /&gt;
|-&lt;br /&gt;
|0xA1, 0x01,        || Collection (Application)&lt;br /&gt;
|-&lt;br /&gt;
|0x06, 0x01, 0xFF,  ||   Usage Page (Vendor Defined 0xFF01)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x21,        ||   Report ID (33)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x21,        ||   Usage (0x21)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x30,        ||   Report ID (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x30,        ||   Usage (0x30)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x31,        ||   Report ID (49)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x31,        ||   Usage (0x31)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x96, 0x69, 0x01,  ||   Report Count (361)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x32,        ||   Report ID (50)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x32,        ||   Usage (0x32)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x96, 0x69, 0x01,  ||   Report Count (361)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x33,        ||   Report ID (51)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x33,        ||   Usage (0x33)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x96, 0x69, 0x01,  ||   Report Count (361)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x3F,        ||   Report ID (63)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x09,        ||   Usage Page (Button)&lt;br /&gt;
|-&lt;br /&gt;
|0x19, 0x01,        ||   Usage Minimum (0x01)&lt;br /&gt;
|-&lt;br /&gt;
|0x29, 0x10,        ||   Usage Maximum (0x10)&lt;br /&gt;
|-&lt;br /&gt;
|0x15, 0x00,        ||   Logical Minimum (0)&lt;br /&gt;
|-&lt;br /&gt;
|0x25, 0x01,        ||   Logical Maximum (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x01,        ||   Report Size (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x10,        ||   Report Count (16)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x01,        ||   Usage Page (Generic Desktop Ctrls)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x39,        ||   Usage (Hat switch)&lt;br /&gt;
|-&lt;br /&gt;
|0x15, 0x00,        ||   Logical Minimum (0)&lt;br /&gt;
|-&lt;br /&gt;
|0x25, 0x07,        ||   Logical Maximum (7)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x04,        ||   Report Size (4)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x01,        ||   Report Count (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x42,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,Null State)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x09,        ||   Usage Page (Button)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x04,        ||   Report Size (4)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x01,        ||   Report Count (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x01,        ||   Input (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x01,        ||   Usage Page (Generic Desktop Ctrls)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x30,        ||   Usage (X)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x31,        ||   Usage (Y)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x33,        ||   Usage (Rx)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x34,        ||   Usage (Ry)&lt;br /&gt;
|-&lt;br /&gt;
|0x16, 0x00, 0x00,  ||   Logical Minimum (0)&lt;br /&gt;
|-&lt;br /&gt;
|0x27, 0xFF, 0xFF, 0x00, 0x00,  ||   Logical Maximum (65534)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x10,        ||   Report Size (16)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x04,        ||   Report Count (4)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x06, 0x01, 0xFF,  ||   Usage Page (Vendor Defined 0xFF01)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x01,        ||   Report ID (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x01,        ||   Usage (0x01)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x10,        ||   Report ID (16)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x10,        ||   Usage (0x10)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x11,        ||   Report ID (17)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x11,        ||   Usage (0x11)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x12,        ||   Report ID (18)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x12,        ||   Usage (0x12)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0xC0,              || End Collection&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Colors ==&lt;br /&gt;
HEX codes for the colors shown in the &amp;quot;Controllers&amp;quot; menu of the Switch UI can be found in a Joy-con SPI dump starting at offset 0x6050. Body color is first followed by button color and each is 3 bytes long. These values are able to be re-written with any HEX color value to make the Joy-cons show up as different colors in the UI. The following is a list of official HEX colors recovered from SPI dumps.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Developer Kit Joy-Con || Release || Body HEX || Button HEX&lt;br /&gt;
|-&lt;br /&gt;
| Black / ブラック || 2015.10.16 || #313131 || #0F0F0F&lt;br /&gt;
|-&lt;br /&gt;
! Standard Retail Joy-Con Color || Release || Body HEX || Button HEX&lt;br /&gt;
|-&lt;br /&gt;
| Gray / グレー || 2017.03.03 || #828282 || #0F0F0F&lt;br /&gt;
|-&lt;br /&gt;
| Neon Red / ネオンレッド || 2017.03.03 || #FF3C28 || #1E0A0A&lt;br /&gt;
|-&lt;br /&gt;
| Neon Blue / ネオンブルー || 2017.03.03 || #0AB9E6 || #001E1E&lt;br /&gt;
|-&lt;br /&gt;
| Neon Yellow / ネオンイエロー || 2017.06.16 || #E6FF00 || #142800&lt;br /&gt;
|-&lt;br /&gt;
| Neon Green / ネオングリーン || 2017.07.21 || #1EDC00 || #002800&lt;br /&gt;
|-&lt;br /&gt;
| Neon Pink / ネオンピンク || 2017.07.21 || #FF3278 || #28001E&lt;br /&gt;
|-&lt;br /&gt;
| Red / レッド || 2017.10.27 || #E10F00 || #280A0A&lt;br /&gt;
|-&lt;br /&gt;
| Blue / ブルー || 2019.10.04 || #4655F5 || #00000A&lt;br /&gt;
|-&lt;br /&gt;
| Neon Purple / ネオンパープル || 2019.10.04 || #B400E6 || #140014&lt;br /&gt;
|-&lt;br /&gt;
| Neon Orange / ネオンオレンジ || 2019.10.04 || #FAA005 || #0F0A00&lt;br /&gt;
|-&lt;br /&gt;
| White / ホワイト || 2021.10.08 || #E6E6E6 || #323232&lt;br /&gt;
|-&lt;br /&gt;
| Pastel Pink / パステルピンク || 2023.06.30 || #XXXXXX || #XXXXXX&lt;br /&gt;
|-&lt;br /&gt;
| Pastel Yellow / パステルイエロー || 2023.06.30 || #XXXXXX || #XXXXXX&lt;br /&gt;
|-&lt;br /&gt;
| Pastel Purple / パステルパープル || 2023.06.30 || #XXXXXX || #XXXXXX&lt;br /&gt;
|-&lt;br /&gt;
| Pastel Green / パステルグリーン || 2023.06.30 || #XXXXXX || #XXXXXX&lt;br /&gt;
|-&lt;br /&gt;
! Special Edition Joy-Con Color || Release || Body HEX || Button HEX&lt;br /&gt;
|-&lt;br /&gt;
| Nintendo Switch Gray Joy-Con / Nintendo Switch グレー || 2017.03.03 || #828282 || #0F0F0F&lt;br /&gt;
|-&lt;br /&gt;
| Nintendo Switch Neon-Blue Left Joy-Con / Nintendo Switch ネオンブルー・ネオンレッド || 2017.03.03 || #0AB9E6 || #001E1E&lt;br /&gt;
|-&lt;br /&gt;
| Nintendo Switch Neon-Red Right Joy-Con / Nintendo Switch ネオンブルー・ネオンレッド || 2017.03.03 || #FF3C28 || #1E0A0A&lt;br /&gt;
|-&lt;br /&gt;
| Splatoon 2 Edition Neon-Green Left Joy-Con / スプラトゥーン2 || 2017.07.21 || #1EDC00 || #002800&lt;br /&gt;
|-&lt;br /&gt;
| Splatoon 2 Edition Neon-Pink Right Joy-Con / スプラトゥーン2 || 2017.07.21 || #FF3278 || #28001E&lt;br /&gt;
|-&lt;br /&gt;
| Super Mario Odyssey Edition Red Joy-Con / スーパーマリオ オデッセイ || 2017.10.27 || #E10F00 || #280A0A&lt;br /&gt;
|-&lt;br /&gt;
| Super Smash Bros. Ultimate Edition Gray Joy-Con / 大乱闘スマッシュブラザーズ || 2018.11.02 || #828282 || #0F0F0F&lt;br /&gt;
|-&lt;br /&gt;
| Pokémon: Let&#039;s Go! Edition Eevee-Brown Left Joy-Con / ポケットモンスター Let&#039;s Go! イーブイ || 2018.11.16 || #C88C32 || #281900&lt;br /&gt;
|-&lt;br /&gt;
| Pokémon: Let&#039;s Go! Edition Pikachu-Yellow Right Joy-Con / ポケットモンスター Let&#039;s Go! ピカチュウ || 2018.11.16 || #FFDC00 || #322800&lt;br /&gt;
|-&lt;br /&gt;
| *Nintendo Labo Creators Contest Edition &amp;quot;Cardboard&amp;quot;-Colored Joy-Con || 2018. (...?) || #D7AA73 || #1E1914&lt;br /&gt;
|-&lt;br /&gt;
| **Dragon Quest XI S Lotto Edition Royal-Blue Joy-Con / ドラゴン クエスト XI S （ロト版） || 2019.09.27 || #1473FA || #00000F&lt;br /&gt;
|-&lt;br /&gt;
| **Disney Tsum Tsum Festival Edition Neon-Purple Left Joy-Con / ディズニー ツムツム フェスティバル || 2019.10.10 || #B400E6 || #140014&lt;br /&gt;
|-&lt;br /&gt;
| **Disney Tsum Tsum Festival Edition Neon-Pink Right Joy-Con / ディズニー ツムツム フェスティバル || 2019.10.10 || #FF3278 || #28001E&lt;br /&gt;
|-&lt;br /&gt;
| Animal Crossing: New Horizons Edition Pastel-Green Left Joy-Con / あつまれ どうぶつの森 || 2020.03.13 || #82FF96 || #0A1E0A&lt;br /&gt;
|-&lt;br /&gt;
| Animal Crossing: New Horizons Edition Pastel-Blue Right Joy-Con / あつまれ どうぶつの森 || 2020.03.13 || #96F5F5 || #0A1E28&lt;br /&gt;
|-&lt;br /&gt;
| Fortnite Wildcat Edition Yellow Left Joy-Con / フォートナイト ワイルドキャット(山猫) || 2020.10.30 || #FFCC00 || #1A1100&lt;br /&gt;
|-&lt;br /&gt;
| Fortnite Wildcat Edition Dark-Blue Right Joy-Con / フォートナイト ワイルドキャット(山猫) || 2020.10.30 || #0084FF || #000F1E&lt;br /&gt;
|-&lt;br /&gt;
| Mario Red × Blue Edition Red Joy-Con / マリオ レッド × ブルー || 2021.02.12 || #F04614 || #1E1914&lt;br /&gt;
|-&lt;br /&gt;
| Monster Hunter Rise Edition Gray Joy-Con / モンスターハンターライズ || 2021.03.26 || #818282 || #0E0F0F&lt;br /&gt;
|-&lt;br /&gt;
| Fortnite Fleet Force Edition Dark-Blue Left Joy-Con / フォートナイト フリート フォース(力の艦隊) || 2021.06.04 || #0084FF || #000F1E&lt;br /&gt;
|-&lt;br /&gt;
| Fortnite Fleet Force Edition Yellow Right Joy-Con / フォートナイト フリート フォース(力の艦隊) || 2021.06.04 || #FFCC00 || #1A1100&lt;br /&gt;
|-&lt;br /&gt;
| Legend of Zelda: Skyward Sword Edition Dark-Blue Left Joy-Con / ゼルダの伝説 スカイウォードソード || 2021.07.16 || #2D50F0 || #1E0F46&lt;br /&gt;
|-&lt;br /&gt;
| Legend of Zelda: Skyward Sword Edition Dark-Purple Right Joy-Con / ゼルダの伝説 スカイウォードソード || 2021.07.16 || #500FC8 || #00051E&lt;br /&gt;
|-&lt;br /&gt;
| Nintendo Switch OLED Edition White Joy-Con / Nintendo Switch （有機ELモデル） ホワイト || 2021.10.08 || #E6E6E6 || #323232&lt;br /&gt;
|-&lt;br /&gt;
| Splatoon 3 OLED Edition Blue-Gradient Left Joy-Con / （有機ELモデル） スプラトゥーン3 || 2022.08.26 || #6455F5 || #28282D&lt;br /&gt;
|-&lt;br /&gt;
| Splatoon 3 OLED Edition Neon-Yellow-Gradient Right Joy-Con / （有機ELモデル） スプラトゥーン3 || 2022.08.26 || #C3FA05 || #1E1E28&lt;br /&gt;
|-&lt;br /&gt;
| Pokémon: Scarlet × Violet OLED Edition Scarlet Left Joy-Con / （有機ELモデル） ポケットモンスター スカーレット・バイオレット || 2022.11.04 || #F07341 || #322D1E&lt;br /&gt;
|-&lt;br /&gt;
| Pokémon: Scarlet × Violet OLED Edition Violet Right Joy-Con / （有機ELモデル） ポケットモンスター スカーレット・バイオレット || 2022.11.04 || #9650AA || #32322D&lt;br /&gt;
|-&lt;br /&gt;
| Legend of Zelda: Tears of the Kingdom Edition Gold Joy-Con / （有機ELモデル） ゼルダの伝説　ティアーズ オブ ザ キングダム || 2023.04.28 || #D2BE69 || #32322D&lt;br /&gt;
|-&lt;br /&gt;
| // *(Prize Awarded for Labo Contest - No Retail) // **(Available Japan Only)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Additional Links =&lt;br /&gt;
[https://github.com/dekuNukem/Nintendo_Switch_Reverse_Engineering Reverse Engineering of the Joy-Con by Github user dekuNukem]&lt;/div&gt;</summary>
		<author><name>Imp Uhrfik Simone</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Joy-Con&amp;diff=12343</id>
		<title>Joy-Con</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Joy-Con&amp;diff=12343"/>
		<updated>2023-04-29T10:15:29Z</updated>

		<summary type="html">&lt;p&gt;Imp Uhrfik Simone: /* Colors */  ...just removed the KATAKANA suffix of the word &amp;quot;edition&amp;quot; to align with other Japanese titles (...as &amp;quot;edition&amp;quot; was also omitted in Japanese from all other previous titles)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Joy-Con is the name for the Switch&#039;s primary game controllers. The controllers communicate to the console through bluetooth and can be disconnected from the main unit.&lt;br /&gt;
&lt;br /&gt;
= Hardware =&lt;br /&gt;
The controllers themselves are simple to disassemble and identify.&lt;br /&gt;
[[File:JoyconFront.jpg|400px|thumb|The front of the Joy-Con internal[https://www.ifixit.com/Teardown/Nintendo+Switch+Teardown/78263]]]&lt;br /&gt;
[[File:JoyconRear.jpg|400px|thumb|The rear of the Joy-Con internal[https://www.ifixit.com/Teardown/Nintendo+Switch+Teardown/78263]]]&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Color || Item&lt;br /&gt;
|-&lt;br /&gt;
| Red || Broadcom BCM20734 Bluetooth 4.1/2.4 GHz Transceiver&lt;br /&gt;
|-&lt;br /&gt;
| Orange || STMicroelectronics NFCBEA 812006 33 (Likely NFC reader IC)&lt;br /&gt;
|-&lt;br /&gt;
| Yellow|| Macronix International MX25U4033E 4 Mb CMOS Flash&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Firmware =&lt;br /&gt;
&#039;&#039;See also: [[Joy-Con Firmware]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The firmware of the Joy-Cons seems to be generic across all instances. Details such as the handedness of the controller and the color is just indicated in a configuration part of the flash. Judging by quick glance at the firmware, it&#039;s probably identical to that used on the Pro Controller as well.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Controller || 1.0.0&lt;br /&gt;
|-&lt;br /&gt;
| Joy-Con Left (Blue) || [[:File:pad.L.bin|flash dump]]&lt;br /&gt;
|-&lt;br /&gt;
| Joy-Con Right (Red) || [[:File:pad.R.bin|flash dump]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The flash is in a patch-ram format. Tools for dealing with it are available [https://github.com/shuffle2/nxpad].&lt;br /&gt;
A dump of the ROM region (taken while firmware was running) can be found [[:File:bcm20734_rom.bin|here]]. Note this is the same SoC used on the other controller models, as well.&lt;br /&gt;
&lt;br /&gt;
= Protocol =&lt;br /&gt;
The Joy-Con can communicate wirelessly over Bluetooth or through the rails over UART. This uses a Nintendo proprietary protocol called &amp;quot;Nwcp&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
== NwcpPacket ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x5&lt;br /&gt;
| [[#HciHeader|HciHeader]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| 0x7&lt;br /&gt;
| [[#NwcpHeader|NwcpHeader]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| Variable&lt;br /&gt;
| Data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== HciHeader ===&lt;br /&gt;
This is a 5-byte packet header used by Broadcom&#039;s HCI Control Protocol.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x1&lt;br /&gt;
| PacketType (always 0x19)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[#CommandCode|CommandCode]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0x1&lt;br /&gt;
| GroupCode (always 0x03)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| 0x2&lt;br /&gt;
| PacketLength&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;
| 0x1 || SendToDevice&lt;br /&gt;
|-&lt;br /&gt;
| 0x81 || ReceiveFromDevice&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== NwcpHeader ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[#CommandType|CommandType]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[#DeviceCommand|DeviceCommand]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0x2&lt;br /&gt;
| DataSize&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x1&lt;br /&gt;
| CommandResult&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| 0x1&lt;br /&gt;
| DataCrc (CRC8 over Data for DataSize bytes)&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 0x1&lt;br /&gt;
| HeaderCrc (CRC8 over the previous 6 bytes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== CommandType ====&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;
| 0x91 || DeviceCommandToDevice&lt;br /&gt;
|-&lt;br /&gt;
| 0x92 || Hid&lt;br /&gt;
|-&lt;br /&gt;
| 0x94 || DeviceCommandFromDevice&lt;br /&gt;
|-&lt;br /&gt;
| 0x9A || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA3 || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA5 || Handshake&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== DeviceCommand ==&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;
| 0x01 || Inquiry&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || WriteChargerSettings&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || ReadChargerSettings&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || AttachmentEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || IsAttachmentEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 0x06 || GetBatteryVoltage&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || ReadWakeUpReason&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || CreateHidConnection&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || DisconnectHid&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || SetHidInterval&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || GetHidInterval&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || Pairing&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || UpdateUartBaudRate&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || Test&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== HidCommand ==&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;
| 0x01 || PairingOut&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || GetDeviceInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || SetDataFormat&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || LRButtonDetection&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || Page&lt;br /&gt;
|-&lt;br /&gt;
| 0x06 || Reset&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || ClearPairingInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || Shipment&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || SerialFlashRead&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || SerialFlashWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || SerialFlashSectorErase&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || McuReset&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || McuWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || McuResume&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || McuPollingEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || McuPollingDisable&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || AttachmentWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || AttachmentRead&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || AttachmentEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || GetAttachmentInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || SetIndicatorLed&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || GetIndicatorLed&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || SetNotificationLed&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || SensorSleep&lt;br /&gt;
|-&lt;br /&gt;
| 0x41 || SensorConfig&lt;br /&gt;
|-&lt;br /&gt;
| 0x42 || SensorWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x43 || SensorRead&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || MotorEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || GetBatteryVoltage&lt;br /&gt;
|-&lt;br /&gt;
| 0x51 || WriteChargeSetting&lt;br /&gt;
|-&lt;br /&gt;
| 0x52 || ReadChargeSetting&lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || ExtDevWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x59 || GetExtDevInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x5A || ExtDevPollingEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x5B || ExtDevPollingDisable&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C || ExtDevInFormatConfig&lt;br /&gt;
|-&lt;br /&gt;
| 0x5D || &lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || InternalAttachmentWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x61 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x62 || InternalAttachmentEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x63 || InternalAttachmentPollingEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x64 || InternalAttachmentPollingDisable&lt;br /&gt;
|-&lt;br /&gt;
| 0x7A || AddButtonPlayData&lt;br /&gt;
|-&lt;br /&gt;
| 0x7B || StartStopButtonPlayData&lt;br /&gt;
|-&lt;br /&gt;
| 0x80 || Ack&lt;br /&gt;
|-&lt;br /&gt;
| 0x81 || PairingIn&lt;br /&gt;
|-&lt;br /&gt;
| 0x82 || DeviceInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x83 || LRButtonElapsedTime&lt;br /&gt;
|-&lt;br /&gt;
| 0x90 || SerialFlashData&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0 || McuData&lt;br /&gt;
|-&lt;br /&gt;
| 0xA8 || AttachmentData&lt;br /&gt;
|-&lt;br /&gt;
| 0xA9 || AttachmentInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0xAA || InternalAttachmentRead&lt;br /&gt;
|-&lt;br /&gt;
| 0xB0 || IndicatorLed&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0 || SensorData&lt;br /&gt;
|-&lt;br /&gt;
| 0xD0 || BatteryVoltage&lt;br /&gt;
|-&lt;br /&gt;
| 0xD8 || ExtDevRead&lt;br /&gt;
|-&lt;br /&gt;
| 0xD9 || ExtDevInfo&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Left &amp;amp; Right Separate Joy-con ==&lt;br /&gt;
When paired directly to a computer over bluetooth, the joy-con both provide identical HID input report descriptor. This does not appear to include motion controls, IR data, or NFC. They both behave as detached single-player controllers.&lt;br /&gt;
&lt;br /&gt;
HID Input Report Descriptor (Hexadecimal):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
00000000: 05010905 A1010601 FF852109 21750895  ....¡...ÿ…!.!u.•&lt;br /&gt;
00000010: 30810285 30093075 08953081 02853109  0..…0.0u.•0..…1.&lt;br /&gt;
00000020: 31750896 69018102 85320932 75089669  1u.–i...…2.2u.–i&lt;br /&gt;
00000030: 01810285 33093375 08966901 8102853F  ...…3.3u.–i...…?&lt;br /&gt;
00000040: 05091901 29101500 25017501 95108102  ....)...%.u.•...&lt;br /&gt;
00000050: 05010939 15002507 75049501 81420509  ...9..%.u.•..B..&lt;br /&gt;
00000060: 75049501 81010501 09300931 09330934  u.•......0.1.3.4&lt;br /&gt;
00000070: 16000027 FFFF0000 75109504 81020601  ...&#039;ÿÿ..u.•.....&lt;br /&gt;
00000080: FF850109 01750895 30910285 10091075  ÿ…...u.•0‘.…...u&lt;br /&gt;
00000090: 08953091 02851109 11750895 30910285  .•0‘.…...u.•0‘.…&lt;br /&gt;
000000A0: 12091275 08953091 02C0               ...u.•0‘.À&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Parsed Bytes || Description&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x01,        || Usage Page (Generic Desktop Ctrls)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x05,        || Usage (Game Pad)&lt;br /&gt;
|-&lt;br /&gt;
|0xA1, 0x01,        || Collection (Application)&lt;br /&gt;
|-&lt;br /&gt;
|0x06, 0x01, 0xFF,  ||   Usage Page (Vendor Defined 0xFF01)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x21,        ||   Report ID (33)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x21,        ||   Usage (0x21)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x30,        ||   Report ID (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x30,        ||   Usage (0x30)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x31,        ||   Report ID (49)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x31,        ||   Usage (0x31)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x96, 0x69, 0x01,  ||   Report Count (361)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x32,        ||   Report ID (50)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x32,        ||   Usage (0x32)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x96, 0x69, 0x01,  ||   Report Count (361)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x33,        ||   Report ID (51)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x33,        ||   Usage (0x33)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x96, 0x69, 0x01,  ||   Report Count (361)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x3F,        ||   Report ID (63)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x09,        ||   Usage Page (Button)&lt;br /&gt;
|-&lt;br /&gt;
|0x19, 0x01,        ||   Usage Minimum (0x01)&lt;br /&gt;
|-&lt;br /&gt;
|0x29, 0x10,        ||   Usage Maximum (0x10)&lt;br /&gt;
|-&lt;br /&gt;
|0x15, 0x00,        ||   Logical Minimum (0)&lt;br /&gt;
|-&lt;br /&gt;
|0x25, 0x01,        ||   Logical Maximum (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x01,        ||   Report Size (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x10,        ||   Report Count (16)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x01,        ||   Usage Page (Generic Desktop Ctrls)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x39,        ||   Usage (Hat switch)&lt;br /&gt;
|-&lt;br /&gt;
|0x15, 0x00,        ||   Logical Minimum (0)&lt;br /&gt;
|-&lt;br /&gt;
|0x25, 0x07,        ||   Logical Maximum (7)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x04,        ||   Report Size (4)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x01,        ||   Report Count (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x42,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,Null State)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x09,        ||   Usage Page (Button)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x04,        ||   Report Size (4)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x01,        ||   Report Count (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x01,        ||   Input (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x01,        ||   Usage Page (Generic Desktop Ctrls)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x30,        ||   Usage (X)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x31,        ||   Usage (Y)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x33,        ||   Usage (Rx)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x34,        ||   Usage (Ry)&lt;br /&gt;
|-&lt;br /&gt;
|0x16, 0x00, 0x00,  ||   Logical Minimum (0)&lt;br /&gt;
|-&lt;br /&gt;
|0x27, 0xFF, 0xFF, 0x00, 0x00,  ||   Logical Maximum (65534)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x10,        ||   Report Size (16)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x04,        ||   Report Count (4)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x06, 0x01, 0xFF,  ||   Usage Page (Vendor Defined 0xFF01)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x01,        ||   Report ID (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x01,        ||   Usage (0x01)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x10,        ||   Report ID (16)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x10,        ||   Usage (0x10)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x11,        ||   Report ID (17)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x11,        ||   Usage (0x11)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x12,        ||   Report ID (18)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x12,        ||   Usage (0x12)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0xC0,              || End Collection&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Colors ==&lt;br /&gt;
HEX codes for the colors shown in the &amp;quot;Controllers&amp;quot; menu of the Switch UI can be found in a Joy-con SPI dump starting at offset 0x6050. Body color is first followed by button color and each is 3 bytes long. These values are able to be re-written with any HEX color value to make the Joy-cons show up as different colors in the UI. The following is a list of official HEX colors recovered from SPI dumps.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Developer Kit Joy-Con || Release || Body HEX || Button HEX&lt;br /&gt;
|-&lt;br /&gt;
| Black / ブラック || 2015.10.16 || #313131 || #0F0F0F&lt;br /&gt;
|-&lt;br /&gt;
! Standard Retail Joy-Con Color || Release || Body HEX || Button HEX&lt;br /&gt;
|-&lt;br /&gt;
| Gray / グレー || 2017.03.03 || #828282 || #0F0F0F&lt;br /&gt;
|-&lt;br /&gt;
| Neon Red / ネオンレッド || 2017.03.03 || #FF3C28 || #1E0A0A&lt;br /&gt;
|-&lt;br /&gt;
| Neon Blue / ネオンブルー || 2017.03.03 || #0AB9E6 || #001E1E&lt;br /&gt;
|-&lt;br /&gt;
| Neon Yellow / ネオンイエロー || 2017.06.16 || #E6FF00 || #142800&lt;br /&gt;
|-&lt;br /&gt;
| Neon Green / ネオングリーン || 2017.07.21 || #1EDC00 || #002800&lt;br /&gt;
|-&lt;br /&gt;
| Neon Pink / ネオンピンク || 2017.07.21 || #FF3278 || #28001E&lt;br /&gt;
|-&lt;br /&gt;
| Red / レッド || 2017.10.27 || #E10F00 || #280A0A&lt;br /&gt;
|-&lt;br /&gt;
| Blue / ブルー || 2019.10.04 || #4655F5 || #00000A&lt;br /&gt;
|-&lt;br /&gt;
| Neon Purple / ネオンパープル || 2019.10.04 || #B400E6 || #140014&lt;br /&gt;
|-&lt;br /&gt;
| Neon Orange / ネオンオレンジ || 2019.10.04 || #FAA005 || #0F0A00&lt;br /&gt;
|-&lt;br /&gt;
| White / ホワイト || 2021.10.08 || #E6E6E6 || #323232&lt;br /&gt;
|-&lt;br /&gt;
! Special Edition Joy-Con Color || Release || Body HEX || Button HEX&lt;br /&gt;
|-&lt;br /&gt;
| Nintendo Switch Gray Joy-Con / Nintendo Switch グレー || 2017.03.03 || #828282 || #0F0F0F&lt;br /&gt;
|-&lt;br /&gt;
| Nintendo Switch Neon-Blue Left Joy-Con / Nintendo Switch ネオンブルー・ネオンレッド || 2017.03.03 || #0AB9E6 || #001E1E&lt;br /&gt;
|-&lt;br /&gt;
| Nintendo Switch Neon-Red Right Joy-Con / Nintendo Switch ネオンブルー・ネオンレッド || 2017.03.03 || #FF3C28 || #1E0A0A&lt;br /&gt;
|-&lt;br /&gt;
| Splatoon 2 Edition Neon-Green Left Joy-Con / スプラトゥーン2 || 2017.07.21 || #1EDC00 || #002800&lt;br /&gt;
|-&lt;br /&gt;
| Splatoon 2 Edition Neon-Pink Right Joy-Con / スプラトゥーン2 || 2017.07.21 || #FF3278 || #28001E&lt;br /&gt;
|-&lt;br /&gt;
| Super Mario Odyssey Edition Red Joy-Con / スーパーマリオ オデッセイ || 2017.10.27 || #E10F00 || #280A0A&lt;br /&gt;
|-&lt;br /&gt;
| Super Smash Bros. Ultimate Edition Gray Joy-Con / 大乱闘スマッシュブラザーズ || 2018.11.02 || #828282 || #0F0F0F&lt;br /&gt;
|-&lt;br /&gt;
| Pokémon: Let&#039;s Go! Edition Eevee-Brown Left Joy-Con / ポケットモンスター Let&#039;s Go! イーブイ || 2018.11.16 || #C88C32 || #281900&lt;br /&gt;
|-&lt;br /&gt;
| Pokémon: Let&#039;s Go! Edition Pikachu-Yellow Right Joy-Con / ポケットモンスター Let&#039;s Go! ピカチュウ || 2018.11.16 || #FFDC00 || #322800&lt;br /&gt;
|-&lt;br /&gt;
| *Nintendo Labo Creators Contest Edition &amp;quot;Cardboard&amp;quot;-Colored Joy-Con || 2018. (...?) || #D7AA73 || #1E1914&lt;br /&gt;
|-&lt;br /&gt;
| **Dragon Quest XI S Lotto Edition Royal-Blue Joy-Con / ドラゴン クエスト XI S （ロト版） || 2019.09.27 || #1473FA || #00000F&lt;br /&gt;
|-&lt;br /&gt;
| **Disney Tsum Tsum Festival Edition Neon-Purple Left Joy-Con / ディズニー ツムツム フェスティバル || 2019.10.10 || #B400E6 || #140014&lt;br /&gt;
|-&lt;br /&gt;
| **Disney Tsum Tsum Festival Edition Neon-Pink Right Joy-Con / ディズニー ツムツム フェスティバル || 2019.10.10 || #FF3278 || #28001E&lt;br /&gt;
|-&lt;br /&gt;
| Animal Crossing: New Horizons Edition Pastel-Green Left Joy-Con / あつまれ どうぶつの森 || 2020.03.13 || #82FF96 || #0A1E0A&lt;br /&gt;
|-&lt;br /&gt;
| Animal Crossing: New Horizons Edition Pastel-Blue Right Joy-Con / あつまれ どうぶつの森 || 2020.03.13 || #96F5F5 || #0A1E28&lt;br /&gt;
|-&lt;br /&gt;
| Fortnite Wildcat Edition Yellow Left Joy-Con / フォートナイト ワイルドキャット(山猫) || 2020.10.30 || #FFCC00 || #1A1100&lt;br /&gt;
|-&lt;br /&gt;
| Fortnite Wildcat Edition Dark-Blue Right Joy-Con / フォートナイト ワイルドキャット(山猫) || 2020.10.30 || #0084FF || #000F1E&lt;br /&gt;
|-&lt;br /&gt;
| Mario Red × Blue Edition Red Joy-Con / マリオ レッド × ブルー || 2021.02.12 || #F04614 || #1E1914&lt;br /&gt;
|-&lt;br /&gt;
| Monster Hunter Rise Edition Gray Joy-Con / モンスターハンターライズ || 2021.03.26 || #818282 || #0E0F0F&lt;br /&gt;
|-&lt;br /&gt;
| Fortnite Fleet Force Edition Dark-Blue Left Joy-Con / フォートナイト フリート フォース(力の艦隊) || 2021.06.04 || #0084FF || #000F1E&lt;br /&gt;
|-&lt;br /&gt;
| Fortnite Fleet Force Edition Yellow Right Joy-Con / フォートナイト フリート フォース(力の艦隊) || 2021.06.04 || #FFCC00 || #1A1100&lt;br /&gt;
|-&lt;br /&gt;
| Legend of Zelda: Skyward Sword Edition Dark-Blue Left Joy-Con / ゼルダの伝説 スカイウォードソード || 2021.07.16 || #2D50F0 || #1E0F46&lt;br /&gt;
|-&lt;br /&gt;
| Legend of Zelda: Skyward Sword Edition Dark-Purple Right Joy-Con / ゼルダの伝説 スカイウォードソード || 2021.07.16 || #500FC8 || #00051E&lt;br /&gt;
|-&lt;br /&gt;
| Nintendo Switch OLED Edition White Joy-Con / Nintendo Switch （有機ELモデル） ホワイト || 2021.10.08 || #E6E6E6 || #323232&lt;br /&gt;
|-&lt;br /&gt;
| Splatoon 3 OLED Edition Blue-Gradient Left Joy-Con / （有機ELモデル） スプラトゥーン3 || 2022.08.26 || #6455F5 || #28282D&lt;br /&gt;
|-&lt;br /&gt;
| Splatoon 3 OLED Edition Neon-Yellow-Gradient Right Joy-Con / （有機ELモデル） スプラトゥーン3 || 2022.08.26 || #C3FA05 || #1E1E28&lt;br /&gt;
|-&lt;br /&gt;
| Pokémon: Scarlet × Violet OLED Edition Scarlet Left Joy-Con / （有機ELモデル） ポケットモンスター スカーレット・バイオレット || 2022.11.04 || #F07341 || #322D1E&lt;br /&gt;
|-&lt;br /&gt;
| Pokémon: Scarlet × Violet OLED Edition Violet Right Joy-Con / （有機ELモデル） ポケットモンスター スカーレット・バイオレット || 2022.11.04 || #9650AA || #32322D&lt;br /&gt;
|-&lt;br /&gt;
| Legend of Zelda: Tears of the Kingdom Edition Gold Joy-Con / （有機ELモデル） ゼルダの伝説　ティアーズ オブ ザ キングダム || 2023.04.28 || #D2BE69 || #32322D&lt;br /&gt;
|-&lt;br /&gt;
| // *(Prize Awarded for Labo Contest - No Retail) // **(Available Japan Only)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Additional Links =&lt;br /&gt;
[https://github.com/dekuNukem/Nintendo_Switch_Reverse_Engineering Reverse Engineering of the Joy-Con by Github user dekuNukem]&lt;/div&gt;</summary>
		<author><name>Imp Uhrfik Simone</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Joy-Con&amp;diff=12028</id>
		<title>Joy-Con</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Joy-Con&amp;diff=12028"/>
		<updated>2022-11-12T13:14:53Z</updated>

		<summary type="html">&lt;p&gt;Imp Uhrfik Simone: /* Colors */ ...Official Pokémon Scarlet/Violet Joy-Con Hex-Values personally verified and swapped out for temp-values&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Joy-Con is the name for the Switch&#039;s primary game controllers. The controllers communicate to the console through bluetooth and can be disconnected from the main unit.&lt;br /&gt;
&lt;br /&gt;
= Hardware =&lt;br /&gt;
The controllers themselves are simple to disassemble and identify.&lt;br /&gt;
[[File:JoyconFront.jpg|400px|thumb|The front of the Joy-Con internal[https://www.ifixit.com/Teardown/Nintendo+Switch+Teardown/78263]]]&lt;br /&gt;
[[File:JoyconRear.jpg|400px|thumb|The rear of the Joy-Con internal[https://www.ifixit.com/Teardown/Nintendo+Switch+Teardown/78263]]]&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Color || Item&lt;br /&gt;
|-&lt;br /&gt;
| Red || Broadcom BCM20734 Bluetooth 4.1/2.4 GHz Transceiver&lt;br /&gt;
|-&lt;br /&gt;
| Orange || STMicroelectronics NFCBEA 812006 33 (Likely NFC reader IC)&lt;br /&gt;
|-&lt;br /&gt;
| Yellow|| Macronix International MX25U4033E 4 Mb CMOS Flash&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Firmware =&lt;br /&gt;
&#039;&#039;See also: [[Joy-Con Firmware]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The firmware of the Joy-Cons seems to be generic across all instances. Details such as the handedness of the controller and the color is just indicated in a configuration part of the flash. Judging by quick glance at the firmware, it&#039;s probably identical to that used on the Pro Controller as well.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Controller || 1.0.0&lt;br /&gt;
|-&lt;br /&gt;
| Joy-Con Left (Blue) || [[:File:pad.L.bin|flash dump]]&lt;br /&gt;
|-&lt;br /&gt;
| Joy-Con Right (Red) || [[:File:pad.R.bin|flash dump]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The flash is in a patch-ram format. Tools for dealing with it are available [https://github.com/shuffle2/nxpad].&lt;br /&gt;
A dump of the ROM region (taken while firmware was running) can be found [[:File:bcm20734_rom.bin|here]]. Note this is the same SoC used on the other controller models, as well.&lt;br /&gt;
&lt;br /&gt;
= Protocol =&lt;br /&gt;
The Joy-Con can communicate wirelessly over Bluetooth or through the rails over UART. This uses a Nintendo proprietary protocol called &amp;quot;Nwcp&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
== NwcpPacket ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x5&lt;br /&gt;
| [[#HciHeader|HciHeader]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| 0x7&lt;br /&gt;
| [[#NwcpHeader|NwcpHeader]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| Variable&lt;br /&gt;
| Data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== HciHeader ===&lt;br /&gt;
This is a 5-byte packet header used by Broadcom&#039;s HCI Control Protocol.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x1&lt;br /&gt;
| PacketType (always 0x19)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[#CommandCode|CommandCode]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0x1&lt;br /&gt;
| GroupCode (always 0x03)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| 0x2&lt;br /&gt;
| PacketLength&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;
| 0x1 || SendToDevice&lt;br /&gt;
|-&lt;br /&gt;
| 0x81 || ReceiveFromDevice&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== NwcpHeader ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[#CommandType|CommandType]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[#DeviceCommand|DeviceCommand]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0x2&lt;br /&gt;
| DataSize&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x1&lt;br /&gt;
| CommandResult&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| 0x1&lt;br /&gt;
| DataCrc (CRC8 over Data for DataSize bytes)&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 0x1&lt;br /&gt;
| HeaderCrc (CRC8 over the previous 6 bytes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== CommandType ====&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;
| 0x91 || DeviceCommandToDevice&lt;br /&gt;
|-&lt;br /&gt;
| 0x92 || Hid&lt;br /&gt;
|-&lt;br /&gt;
| 0x94 || DeviceCommandFromDevice&lt;br /&gt;
|-&lt;br /&gt;
| 0x9A || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA3 || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA5 || Handshake&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== DeviceCommand ==&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;
| 0x01 || Inquiry&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || WriteChargerSettings&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || ReadChargerSettings&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || AttachmentEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || IsAttachmentEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 0x06 || GetBatteryVoltage&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || ReadWakeUpReason&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || CreateHidConnection&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || DisconnectHid&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || SetHidInterval&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || GetHidInterval&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || Pairing&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || UpdateUartBaudRate&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || Test&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== HidCommand ==&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;
| 0x01 || PairingOut&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || GetDeviceInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || SetDataFormat&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || LRButtonDetection&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || Page&lt;br /&gt;
|-&lt;br /&gt;
| 0x06 || Reset&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || ClearPairingInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || Shipment&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || SerialFlashRead&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || SerialFlashWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || SerialFlashSectorErase&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || McuReset&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || McuWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || McuResume&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || McuPollingEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || McuPollingDisable&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || AttachmentWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || AttachmentRead&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || AttachmentEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || GetAttachmentInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || SetIndicatorLed&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || GetIndicatorLed&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || SetNotificationLed&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || SensorSleep&lt;br /&gt;
|-&lt;br /&gt;
| 0x41 || SensorConfig&lt;br /&gt;
|-&lt;br /&gt;
| 0x42 || SensorWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x43 || SensorRead&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || MotorEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || GetBatteryVoltage&lt;br /&gt;
|-&lt;br /&gt;
| 0x51 || WriteChargeSetting&lt;br /&gt;
|-&lt;br /&gt;
| 0x52 || ReadChargeSetting&lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || ExtDevWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x59 || GetExtDevInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x5A || ExtDevPollingEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x5B || ExtDevPollingDisable&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C || ExtDevInFormatConfig&lt;br /&gt;
|-&lt;br /&gt;
| 0x5D || &lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || InternalAttachmentWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x61 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x62 || InternalAttachmentEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x63 || InternalAttachmentPollingEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x64 || InternalAttachmentPollingDisable&lt;br /&gt;
|-&lt;br /&gt;
| 0x7A || AddButtonPlayData&lt;br /&gt;
|-&lt;br /&gt;
| 0x7B || StartStopButtonPlayData&lt;br /&gt;
|-&lt;br /&gt;
| 0x80 || Ack&lt;br /&gt;
|-&lt;br /&gt;
| 0x81 || PairingIn&lt;br /&gt;
|-&lt;br /&gt;
| 0x82 || DeviceInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x83 || LRButtonElapsedTime&lt;br /&gt;
|-&lt;br /&gt;
| 0x90 || SerialFlashData&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0 || McuData&lt;br /&gt;
|-&lt;br /&gt;
| 0xA8 || AttachmentData&lt;br /&gt;
|-&lt;br /&gt;
| 0xA9 || AttachmentInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0xAA || InternalAttachmentRead&lt;br /&gt;
|-&lt;br /&gt;
| 0xB0 || IndicatorLed&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0 || SensorData&lt;br /&gt;
|-&lt;br /&gt;
| 0xD0 || BatteryVoltage&lt;br /&gt;
|-&lt;br /&gt;
| 0xD8 || ExtDevRead&lt;br /&gt;
|-&lt;br /&gt;
| 0xD9 || ExtDevInfo&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Left &amp;amp; Right Separate Joy-con ==&lt;br /&gt;
When paired directly to a computer over bluetooth, the joy-con both provide identical HID input report descriptor. This does not appear to include motion controls, IR data, or NFC. They both behave as detached single-player controllers.&lt;br /&gt;
&lt;br /&gt;
HID Input Report Descriptor (Hexadecimal):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
00000000: 05010905 A1010601 FF852109 21750895  ....¡...ÿ…!.!u.•&lt;br /&gt;
00000010: 30810285 30093075 08953081 02853109  0..…0.0u.•0..…1.&lt;br /&gt;
00000020: 31750896 69018102 85320932 75089669  1u.–i...…2.2u.–i&lt;br /&gt;
00000030: 01810285 33093375 08966901 8102853F  ...…3.3u.–i...…?&lt;br /&gt;
00000040: 05091901 29101500 25017501 95108102  ....)...%.u.•...&lt;br /&gt;
00000050: 05010939 15002507 75049501 81420509  ...9..%.u.•..B..&lt;br /&gt;
00000060: 75049501 81010501 09300931 09330934  u.•......0.1.3.4&lt;br /&gt;
00000070: 16000027 FFFF0000 75109504 81020601  ...&#039;ÿÿ..u.•.....&lt;br /&gt;
00000080: FF850109 01750895 30910285 10091075  ÿ…...u.•0‘.…...u&lt;br /&gt;
00000090: 08953091 02851109 11750895 30910285  .•0‘.…...u.•0‘.…&lt;br /&gt;
000000A0: 12091275 08953091 02C0               ...u.•0‘.À&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Parsed Bytes || Description&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x01,        || Usage Page (Generic Desktop Ctrls)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x05,        || Usage (Game Pad)&lt;br /&gt;
|-&lt;br /&gt;
|0xA1, 0x01,        || Collection (Application)&lt;br /&gt;
|-&lt;br /&gt;
|0x06, 0x01, 0xFF,  ||   Usage Page (Vendor Defined 0xFF01)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x21,        ||   Report ID (33)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x21,        ||   Usage (0x21)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x30,        ||   Report ID (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x30,        ||   Usage (0x30)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x31,        ||   Report ID (49)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x31,        ||   Usage (0x31)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x96, 0x69, 0x01,  ||   Report Count (361)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x32,        ||   Report ID (50)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x32,        ||   Usage (0x32)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x96, 0x69, 0x01,  ||   Report Count (361)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x33,        ||   Report ID (51)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x33,        ||   Usage (0x33)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x96, 0x69, 0x01,  ||   Report Count (361)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x3F,        ||   Report ID (63)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x09,        ||   Usage Page (Button)&lt;br /&gt;
|-&lt;br /&gt;
|0x19, 0x01,        ||   Usage Minimum (0x01)&lt;br /&gt;
|-&lt;br /&gt;
|0x29, 0x10,        ||   Usage Maximum (0x10)&lt;br /&gt;
|-&lt;br /&gt;
|0x15, 0x00,        ||   Logical Minimum (0)&lt;br /&gt;
|-&lt;br /&gt;
|0x25, 0x01,        ||   Logical Maximum (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x01,        ||   Report Size (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x10,        ||   Report Count (16)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x01,        ||   Usage Page (Generic Desktop Ctrls)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x39,        ||   Usage (Hat switch)&lt;br /&gt;
|-&lt;br /&gt;
|0x15, 0x00,        ||   Logical Minimum (0)&lt;br /&gt;
|-&lt;br /&gt;
|0x25, 0x07,        ||   Logical Maximum (7)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x04,        ||   Report Size (4)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x01,        ||   Report Count (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x42,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,Null State)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x09,        ||   Usage Page (Button)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x04,        ||   Report Size (4)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x01,        ||   Report Count (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x01,        ||   Input (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x01,        ||   Usage Page (Generic Desktop Ctrls)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x30,        ||   Usage (X)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x31,        ||   Usage (Y)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x33,        ||   Usage (Rx)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x34,        ||   Usage (Ry)&lt;br /&gt;
|-&lt;br /&gt;
|0x16, 0x00, 0x00,  ||   Logical Minimum (0)&lt;br /&gt;
|-&lt;br /&gt;
|0x27, 0xFF, 0xFF, 0x00, 0x00,  ||   Logical Maximum (65534)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x10,        ||   Report Size (16)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x04,        ||   Report Count (4)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x06, 0x01, 0xFF,  ||   Usage Page (Vendor Defined 0xFF01)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x01,        ||   Report ID (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x01,        ||   Usage (0x01)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x10,        ||   Report ID (16)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x10,        ||   Usage (0x10)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x11,        ||   Report ID (17)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x11,        ||   Usage (0x11)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x12,        ||   Report ID (18)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x12,        ||   Usage (0x12)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0xC0,              || End Collection&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Colors ==&lt;br /&gt;
HEX codes for the colors shown in the &amp;quot;Controllers&amp;quot; menu of the Switch UI can be found in a Joy-con SPI dump starting at offset 0x6050. Body color is first followed by button color and each is 3 bytes long. These values are able to be re-written with any HEX color value to make the Joy-cons show up as different colors in the UI. The following is a list of official HEX colors recovered from SPI dumps.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Developer Kit Joy-Con || Release || Body HEX || Button HEX&lt;br /&gt;
|-&lt;br /&gt;
| Black / ブラック || 2015.10.16 || #313131 || #0F0F0F&lt;br /&gt;
|-&lt;br /&gt;
! Standard Retail Joy-Con Color || Release || Body HEX || Button HEX&lt;br /&gt;
|-&lt;br /&gt;
| Gray / グレー || 2017.03.03 || #828282 || #0F0F0F&lt;br /&gt;
|-&lt;br /&gt;
| Neon Red / ネオンレッド || 2017.03.03 || #FF3C28 || #1E0A0A&lt;br /&gt;
|-&lt;br /&gt;
| Neon Blue / ネオンブルー || 2017.03.03 || #0AB9E6 || #001E1E&lt;br /&gt;
|-&lt;br /&gt;
| Neon Yellow / ネオンイエロー || 2017.06.16 || #E6FF00 || #142800&lt;br /&gt;
|-&lt;br /&gt;
| Neon Green / ネオングリーン || 2017.07.21 || #1EDC00 || #002800&lt;br /&gt;
|-&lt;br /&gt;
| Neon Pink / ネオンピンク || 2017.07.21 || #FF3278 || #28001E&lt;br /&gt;
|-&lt;br /&gt;
| Red / レッド || 2017.10.27 || #E10F00 || #280A0A&lt;br /&gt;
|-&lt;br /&gt;
| Blue / ブルー || 2019.10.04 || #4655F5 || #00000A&lt;br /&gt;
|-&lt;br /&gt;
| Neon Purple / ネオンパープル || 2019.10.04 || #B400E6 || #140014&lt;br /&gt;
|-&lt;br /&gt;
| Neon Orange / ネオンオレンジ || 2019.10.04 || #FAA005 || #0F0A00&lt;br /&gt;
|-&lt;br /&gt;
| White / ホワイト || 2021.10.08 || #E6E6E6 || #323232&lt;br /&gt;
|-&lt;br /&gt;
! Special Edition Joy-Con Color || Release || Body HEX || Button HEX&lt;br /&gt;
|-&lt;br /&gt;
| Nintendo Switch Gray Joy-Con / Nintendo Switch グレー || 2017.03.03 || #828282 || #0F0F0F&lt;br /&gt;
|-&lt;br /&gt;
| Nintendo Switch Neon-Blue Left Joy-Con / Nintendo Switch ネオンブルー・ネオンレッド || 2017.03.03 || #828282 || #0F0F0F&lt;br /&gt;
|-&lt;br /&gt;
| Nintendo Switch Neon-Red Right Joy-Con / Nintendo Switch ネオンブルー・ネオンレッド || 2017.03.03 || #828282 || #0F0F0F&lt;br /&gt;
|-&lt;br /&gt;
| Splatoon 2 Edition Neon-Green Left Joy-Con / スプラトゥーン2 || 2017.07.21 || #1EDC00 || #002800&lt;br /&gt;
|-&lt;br /&gt;
| Splatoon 2 Edition Neon-Pink Right Joy-Con / スプラトゥーン2 || 2017.07.21 || #FF3278 || #28001E&lt;br /&gt;
|-&lt;br /&gt;
| Super Mario Odyssey Edition Red Joy-Con / スーパーマリオ オデッセイ || 2017.10.27 || #E10F00 || #280A0A&lt;br /&gt;
|-&lt;br /&gt;
| Super Smash Bros. Ultimate Edition Gray Joy-Con / 大乱闘スマッシュブラザーズ || 2018.11.02 || #828282 || #0F0F0F&lt;br /&gt;
|-&lt;br /&gt;
| Pokémon: Let&#039;s Go! Edition Eevee-Brown Left Joy-Con / ポケットモンスター Let&#039;s Go! イーブイ || 2018.11.16 || #C88C32 || #281900&lt;br /&gt;
|-&lt;br /&gt;
| Pokémon: Let&#039;s Go! Edition Pikachu-Yellow Right Joy-Con / ポケットモンスター Let&#039;s Go! ピカチュウ || 2018.11.16 || #FFDC00 || #322800&lt;br /&gt;
|-&lt;br /&gt;
| *Nintendo Labo Creators Contest Edition &amp;quot;Cardboard&amp;quot;-Colored Joy-Con || 2018. (...?) || #D7AA73 || #1E1914&lt;br /&gt;
|-&lt;br /&gt;
| **Dragon Quest XI S Lotto Edition Royal-Blue Joy-Con / ドラゴン クエスト XI S （ロト版） || 2019.09.27 || #1473FA || #00000F&lt;br /&gt;
|-&lt;br /&gt;
| **Disney Tsum Tsum Festival Edition Neon-Purple Left Joy-Con / ディズニー ツムツム フェスティバル || 2019.10.10 || #B400E6 || #140014&lt;br /&gt;
|-&lt;br /&gt;
| **Disney Tsum Tsum Festival Edition Neon-Pink Right Joy-Con / ディズニー ツムツム フェスティバル || 2019.10.10 || #FF3278 || #28001E&lt;br /&gt;
|-&lt;br /&gt;
| Animal Crossing: New Horizons Edition Pastel-Green Left Joy-Con / あつまれ どうぶつの森 || 2020.03.13 || #82FF96 || #0A1E0A&lt;br /&gt;
|-&lt;br /&gt;
| Animal Crossing: New Horizons Edition Pastel-Blue Right Joy-Con / あつまれ どうぶつの森 || 2020.03.13 || #96F5F5 || #0A1E28&lt;br /&gt;
|-&lt;br /&gt;
| Fortnite Wildcat Edition Yellow Left Joy-Con / フォートナイト ワイルドキャット(山猫) || 2020.10.30 || #FFCC00 || #1A1100&lt;br /&gt;
|-&lt;br /&gt;
| Fortnite Wildcat Edition Dark-Blue Right Joy-Con / フォートナイト ワイルドキャット(山猫) || 2020.10.30 || #0084FF || #000F1E&lt;br /&gt;
|-&lt;br /&gt;
| Mario Red × Blue Edition Red Joy-Con / マリオ レッド × ブルー || 2021.02.12 || #F04614 || #1E1914&lt;br /&gt;
|-&lt;br /&gt;
| Monster Hunter Rise Edition Gray Joy-Con / モンスターハンターライズ || 2021.03.26 || #818282 || #0E0F0F&lt;br /&gt;
|-&lt;br /&gt;
| Fortnite Fleet Force Edition Dark-Blue Left Joy-Con / フォートナイト フリート フォース(力の艦隊) || 2021.06.04 || #0084FF || #000F1E&lt;br /&gt;
|-&lt;br /&gt;
| Fortnite Fleet Force Edition Yellow Right Joy-Con / フォートナイト フリート フォース(力の艦隊) || 2021.06.04 || #FFCC00 || #1A1100&lt;br /&gt;
|-&lt;br /&gt;
| Legend of Zelda: Skyward Sword Edition Dark-Blue Left Joy-Con / ゼルダの伝説 スカイウォードソード || 2021.07.16 || #2D50F0 || #1E0F46&lt;br /&gt;
|-&lt;br /&gt;
| Legend of Zelda: Skyward Sword Edition Dark-Purple Right Joy-Con / ゼルダの伝説 スカイウォードソード || 2021.07.16 || #500FC8 || #00051E&lt;br /&gt;
|-&lt;br /&gt;
| Nintendo Switch OLED Edition White Joy-Con / Nintendo Switch （有機ELモデル） ホワイト || 2021.10.08 || #E6E6E6 || #323232&lt;br /&gt;
|-&lt;br /&gt;
| Splatoon 3 OLED Edition Blue-Gradient Left Joy-Con / （有機ELモデル） スプラトゥーン3 || 2022.08.26 || #6455F5 || #28282D&lt;br /&gt;
|-&lt;br /&gt;
| Splatoon 3 OLED Edition Neon-Yellow-Gradient Right Joy-Con / （有機ELモデル） スプラトゥーン3 || 2022.08.26 || #C3FA05 || #1E1E28&lt;br /&gt;
|-&lt;br /&gt;
| Pokémon: Scarlet × Violet OLED Edition Scarlet Left Joy-Con / （有機ELモデル） ポケットモンスター スカーレット・バイオレット || 2022.11.04 || #F07341 || #322D1E&lt;br /&gt;
|-&lt;br /&gt;
| Pokémon: Scarlet × Violet OLED Edition Violet Right Joy-Con / （有機ELモデル） ポケットモンスター スカーレット・バイオレット || 2022.11.04 || #9650AA || #32322D&lt;br /&gt;
|-&lt;br /&gt;
| // *(Prize Awarded for Labo Contest - No Retail) // **(Available Japan Only)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Additional Links =&lt;br /&gt;
[https://github.com/dekuNukem/Nintendo_Switch_Reverse_Engineering Reverse Engineering of the Joy-Con by Github user dekuNukem]&lt;/div&gt;</summary>
		<author><name>Imp Uhrfik Simone</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Joy-Con&amp;diff=11879</id>
		<title>Joy-Con</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Joy-Con&amp;diff=11879"/>
		<updated>2022-09-13T14:43:45Z</updated>

		<summary type="html">&lt;p&gt;Imp Uhrfik Simone: /* Colors */ ...vetted Splatoon 3 joy-con hex-colors ...preliminary addition of Pokémon Scarlet Violet joy-con ...will follow-up once hex-colors are vetted&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Joy-Con is the name for the Switch&#039;s primary game controllers. The controllers communicate to the console through bluetooth and can be disconnected from the main unit.&lt;br /&gt;
&lt;br /&gt;
= Hardware =&lt;br /&gt;
The controllers themselves are simple to disassemble and identify.&lt;br /&gt;
[[File:JoyconFront.jpg|400px|thumb|The front of the Joy-Con internal[https://www.ifixit.com/Teardown/Nintendo+Switch+Teardown/78263]]]&lt;br /&gt;
[[File:JoyconRear.jpg|400px|thumb|The rear of the Joy-Con internal[https://www.ifixit.com/Teardown/Nintendo+Switch+Teardown/78263]]]&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Color || Item&lt;br /&gt;
|-&lt;br /&gt;
| Red || Broadcom BCM20734 Bluetooth 4.1/2.4 GHz Transceiver&lt;br /&gt;
|-&lt;br /&gt;
| Orange || STMicroelectronics NFCBEA 812006 33 (Likely NFC reader IC)&lt;br /&gt;
|-&lt;br /&gt;
| Yellow|| Macronix International MX25U4033E 4 Mb CMOS Flash&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Firmware =&lt;br /&gt;
&#039;&#039;See also: [[Joy-Con Firmware]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The firmware of the Joy-Cons seems to be generic across all instances. Details such as the handedness of the controller and the color is just indicated in a configuration part of the flash. Judging by quick glance at the firmware, it&#039;s probably identical to that used on the Pro Controller as well.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Controller || 1.0.0&lt;br /&gt;
|-&lt;br /&gt;
| Joy-Con Left (Blue) || [[:File:pad.L.bin|flash dump]]&lt;br /&gt;
|-&lt;br /&gt;
| Joy-Con Right (Red) || [[:File:pad.R.bin|flash dump]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The flash is in a patch-ram format. Tools for dealing with it are available [https://github.com/shuffle2/nxpad].&lt;br /&gt;
A dump of the ROM region (taken while firmware was running) can be found [[:File:bcm20734_rom.bin|here]]. Note this is the same SoC used on the other controller models, as well.&lt;br /&gt;
&lt;br /&gt;
= Protocol =&lt;br /&gt;
The Joy-Con can communicate wirelessly over Bluetooth or through the rails over UART. This uses a Nintendo proprietary protocol called &amp;quot;Nwcp&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
== NwcpPacket ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x5&lt;br /&gt;
| [[#HciHeader|HciHeader]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| 0x7&lt;br /&gt;
| [[#NwcpHeader|NwcpHeader]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| Variable&lt;br /&gt;
| Data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== HciHeader ===&lt;br /&gt;
This is a 5-byte packet header used by Broadcom&#039;s HCI Control Protocol.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x1&lt;br /&gt;
| PacketType (always 0x19)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[#CommandCode|CommandCode]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0x1&lt;br /&gt;
| GroupCode (always 0x03)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| 0x2&lt;br /&gt;
| PacketLength&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;
| 0x1 || SendToDevice&lt;br /&gt;
|-&lt;br /&gt;
| 0x81 || ReceiveFromDevice&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== NwcpHeader ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[#CommandType|CommandType]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[#DeviceCommand|DeviceCommand]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0x2&lt;br /&gt;
| DataSize&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x1&lt;br /&gt;
| CommandResult&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| 0x1&lt;br /&gt;
| DataCrc (CRC8 over Data for DataSize bytes)&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 0x1&lt;br /&gt;
| HeaderCrc (CRC8 over the previous 6 bytes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== CommandType ====&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;
| 0x91 || DeviceCommandToDevice&lt;br /&gt;
|-&lt;br /&gt;
| 0x92 || Hid&lt;br /&gt;
|-&lt;br /&gt;
| 0x94 || DeviceCommandFromDevice&lt;br /&gt;
|-&lt;br /&gt;
| 0x9A || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA3 || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA5 || Handshake&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== DeviceCommand ==&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;
| 0x01 || Inquiry&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || WriteChargerSettings&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x06 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || ReadWakeUpReason&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || CreateHidConnection&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || DisconnectHid&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || SetHidInterval&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || Pairing&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || UpdateUartBaudRate&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== HidCommand ==&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;
| 0x00 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || PairingOut&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || GetDeviceInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || SetDataFormat&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || LRButtonDetection&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || Page&lt;br /&gt;
|-&lt;br /&gt;
| 0x06 || Reset&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || ClearPairingInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || Shipment&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || SerialFlashRead&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || SerialFlashWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || SerialFlashSectorErase&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || McuReset&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || McuWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || McuResume&lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || McuPollingEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || McuPollingDisable&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || AttachmentWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || AttachmentRead&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || AttachmentEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || &lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || SetIndicatorLed&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || GetIndicatorLed&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || SetNotificationLed&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || SensorSleep&lt;br /&gt;
|-&lt;br /&gt;
| 0x41 || SensorConfig&lt;br /&gt;
|-&lt;br /&gt;
| 0x42 || SensorWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x43 || SensorRead&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || MotorEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || GetBatteryVoltage&lt;br /&gt;
|-&lt;br /&gt;
| 0x51 || WriteChargeSetting&lt;br /&gt;
|-&lt;br /&gt;
| 0x52 || ReadChargeSetting&lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || ExtDevWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x59 || GetExtDevInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x5A || ExtDevPollingEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x5B || ExtDevPollingDisable&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C || ExtDevInFormatConfig&lt;br /&gt;
|-&lt;br /&gt;
| 0x5D || &lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || InternalAttachmentWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x61 || InternalAttachmentReadOld&lt;br /&gt;
|-&lt;br /&gt;
| 0x62 || InternalAttachmentEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x63 || InternalAttachmentPollingEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x64 || InternalAttachmentPollingDisable&lt;br /&gt;
|-&lt;br /&gt;
| 0x7A || AddButtonPlayData&lt;br /&gt;
|-&lt;br /&gt;
| 0x7B || StartStopButtonPlayData&lt;br /&gt;
|-&lt;br /&gt;
| 0x80 || Ack&lt;br /&gt;
|-&lt;br /&gt;
| 0x81 || PairingIn&lt;br /&gt;
|-&lt;br /&gt;
| 0x82 || DeviceInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x83 || LRButtonElapsedTime&lt;br /&gt;
|-&lt;br /&gt;
| 0x90 || SerialFlashData&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0 || McuData&lt;br /&gt;
|-&lt;br /&gt;
| 0xA8 || AttachmentData&lt;br /&gt;
|-&lt;br /&gt;
| 0xA9 || &lt;br /&gt;
|-&lt;br /&gt;
| 0xAA || InternalAttachmentRead&lt;br /&gt;
|-&lt;br /&gt;
| 0xB0 || IndicatorLed&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0 || SensorData&lt;br /&gt;
|-&lt;br /&gt;
| 0xD0 || BatteryVoltage&lt;br /&gt;
|-&lt;br /&gt;
| 0xD8 || ExtDevRead&lt;br /&gt;
|-&lt;br /&gt;
| 0xD9 || ExtDevInfo&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Left &amp;amp; Right Separate Joy-con ==&lt;br /&gt;
When paired directly to a computer over bluetooth, the joy-con both provide identical HID input report descriptor. This does not appear to include motion controls, IR data, or NFC. They both behave as detached single-player controllers.&lt;br /&gt;
&lt;br /&gt;
HID Input Report Descriptor (Hexadecimal):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
00000000: 05010905 A1010601 FF852109 21750895  ....¡...ÿ…!.!u.•&lt;br /&gt;
00000010: 30810285 30093075 08953081 02853109  0..…0.0u.•0..…1.&lt;br /&gt;
00000020: 31750896 69018102 85320932 75089669  1u.–i...…2.2u.–i&lt;br /&gt;
00000030: 01810285 33093375 08966901 8102853F  ...…3.3u.–i...…?&lt;br /&gt;
00000040: 05091901 29101500 25017501 95108102  ....)...%.u.•...&lt;br /&gt;
00000050: 05010939 15002507 75049501 81420509  ...9..%.u.•..B..&lt;br /&gt;
00000060: 75049501 81010501 09300931 09330934  u.•......0.1.3.4&lt;br /&gt;
00000070: 16000027 FFFF0000 75109504 81020601  ...&#039;ÿÿ..u.•.....&lt;br /&gt;
00000080: FF850109 01750895 30910285 10091075  ÿ…...u.•0‘.…...u&lt;br /&gt;
00000090: 08953091 02851109 11750895 30910285  .•0‘.…...u.•0‘.…&lt;br /&gt;
000000A0: 12091275 08953091 02C0               ...u.•0‘.À&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Parsed Bytes || Description&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x01,        || Usage Page (Generic Desktop Ctrls)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x05,        || Usage (Game Pad)&lt;br /&gt;
|-&lt;br /&gt;
|0xA1, 0x01,        || Collection (Application)&lt;br /&gt;
|-&lt;br /&gt;
|0x06, 0x01, 0xFF,  ||   Usage Page (Vendor Defined 0xFF01)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x21,        ||   Report ID (33)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x21,        ||   Usage (0x21)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x30,        ||   Report ID (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x30,        ||   Usage (0x30)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x31,        ||   Report ID (49)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x31,        ||   Usage (0x31)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x96, 0x69, 0x01,  ||   Report Count (361)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x32,        ||   Report ID (50)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x32,        ||   Usage (0x32)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x96, 0x69, 0x01,  ||   Report Count (361)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x33,        ||   Report ID (51)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x33,        ||   Usage (0x33)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x96, 0x69, 0x01,  ||   Report Count (361)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x3F,        ||   Report ID (63)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x09,        ||   Usage Page (Button)&lt;br /&gt;
|-&lt;br /&gt;
|0x19, 0x01,        ||   Usage Minimum (0x01)&lt;br /&gt;
|-&lt;br /&gt;
|0x29, 0x10,        ||   Usage Maximum (0x10)&lt;br /&gt;
|-&lt;br /&gt;
|0x15, 0x00,        ||   Logical Minimum (0)&lt;br /&gt;
|-&lt;br /&gt;
|0x25, 0x01,        ||   Logical Maximum (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x01,        ||   Report Size (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x10,        ||   Report Count (16)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x01,        ||   Usage Page (Generic Desktop Ctrls)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x39,        ||   Usage (Hat switch)&lt;br /&gt;
|-&lt;br /&gt;
|0x15, 0x00,        ||   Logical Minimum (0)&lt;br /&gt;
|-&lt;br /&gt;
|0x25, 0x07,        ||   Logical Maximum (7)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x04,        ||   Report Size (4)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x01,        ||   Report Count (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x42,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,Null State)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x09,        ||   Usage Page (Button)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x04,        ||   Report Size (4)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x01,        ||   Report Count (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x01,        ||   Input (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x01,        ||   Usage Page (Generic Desktop Ctrls)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x30,        ||   Usage (X)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x31,        ||   Usage (Y)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x33,        ||   Usage (Rx)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x34,        ||   Usage (Ry)&lt;br /&gt;
|-&lt;br /&gt;
|0x16, 0x00, 0x00,  ||   Logical Minimum (0)&lt;br /&gt;
|-&lt;br /&gt;
|0x27, 0xFF, 0xFF, 0x00, 0x00,  ||   Logical Maximum (65534)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x10,        ||   Report Size (16)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x04,        ||   Report Count (4)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x06, 0x01, 0xFF,  ||   Usage Page (Vendor Defined 0xFF01)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x01,        ||   Report ID (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x01,        ||   Usage (0x01)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x10,        ||   Report ID (16)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x10,        ||   Usage (0x10)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x11,        ||   Report ID (17)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x11,        ||   Usage (0x11)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x12,        ||   Report ID (18)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x12,        ||   Usage (0x12)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0xC0,              || End Collection&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Colors ==&lt;br /&gt;
HEX codes for the colors shown in the &amp;quot;Controllers&amp;quot; menu of the Switch UI can be found in a Joy-con SPI dump starting at offset 0x6050. Body color is first followed by button color and each is 3 bytes long. These values are able to be re-written with any HEX color value to make the Joy-cons show up as different colors in the UI. The following is a list of official HEX colors recovered from SPI dumps.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Developer Kit Joy-Con || Release || Body HEX || Button HEX&lt;br /&gt;
|-&lt;br /&gt;
| Black / ブラック || 2015.10.16 || #313131 || #0F0F0F&lt;br /&gt;
|-&lt;br /&gt;
! Standard Retail Joy-Con Color || Release || Body HEX || Button HEX&lt;br /&gt;
|-&lt;br /&gt;
| Gray / グレー || 2017.03.03 || #828282 || #0F0F0F&lt;br /&gt;
|-&lt;br /&gt;
| Neon Red / ネオンレッド || 2017.03.03 || #FF3C28 || #1E0A0A&lt;br /&gt;
|-&lt;br /&gt;
| Neon Blue / ネオンブルー || 2017.03.03 || #0AB9E6 || #001E1E&lt;br /&gt;
|-&lt;br /&gt;
| Neon Yellow / ネオンイエロー || 2017.06.16 || #E6FF00 || #142800&lt;br /&gt;
|-&lt;br /&gt;
| Neon Green / ネオングリーン || 2017.07.21 || #1EDC00 || #002800&lt;br /&gt;
|-&lt;br /&gt;
| Neon Pink / ネオンピンク || 2017.07.21 || #FF3278 || #28001E&lt;br /&gt;
|-&lt;br /&gt;
| Red / レッド || 2017.10.27 || #E10F00 || #280A0A&lt;br /&gt;
|-&lt;br /&gt;
| Blue / ブルー || 2019.10.04 || #4655F5 || #00000A&lt;br /&gt;
|-&lt;br /&gt;
| Neon Purple / ネオンパープル || 2019.10.04 || #B400E6 || #140014&lt;br /&gt;
|-&lt;br /&gt;
| Neon Orange / ネオンオレンジ || 2019.10.04 || #FAA005 || #0F0A00&lt;br /&gt;
|-&lt;br /&gt;
| White / ホワイト || 2021.10.08 || #E6E6E6 || #323232&lt;br /&gt;
|-&lt;br /&gt;
! Special Edition Joy-Con Color || Release || Body HEX || Button HEX&lt;br /&gt;
|-&lt;br /&gt;
| Nintendo Switch Gray Joy-Con / Nintendo Switch グレー || 2017.03.03 || #828282 || #0F0F0F&lt;br /&gt;
|-&lt;br /&gt;
| Nintendo Switch Neon-Blue Left Joy-Con / Nintendo Switch ネオンブルー・ネオンレッド || 2017.03.03 || #828282 || #0F0F0F&lt;br /&gt;
|-&lt;br /&gt;
| Nintendo Switch Neon-Red Right Joy-Con / Nintendo Switch ネオンブルー・ネオンレッド || 2017.03.03 || #828282 || #0F0F0F&lt;br /&gt;
|-&lt;br /&gt;
| Splatoon 2 Edition Neon-Green Left Joy-Con / スプラトゥーン2 || 2017.07.21 || #1EDC00 || #002800&lt;br /&gt;
|-&lt;br /&gt;
| Splatoon 2 Edition Neon-Pink Right Joy-Con / スプラトゥーン2 || 2017.07.21 || #FF3278 || #28001E&lt;br /&gt;
|-&lt;br /&gt;
| Super Mario Odyssey Edition Red Joy-Con / スーパーマリオ オデッセイ || 2017.10.27 || #E10F00 || #280A0A&lt;br /&gt;
|-&lt;br /&gt;
| Super Smash Bros. Ultimate Edition Gray Joy-Con / 大乱闘スマッシュブラザーズ || 2018.11.02 || #828282 || #0F0F0F&lt;br /&gt;
|-&lt;br /&gt;
| Pokémon: Let&#039;s Go! Edition Eevee-Brown Left Joy-Con / ポケットモンスター Let&#039;s Go! イーブイ || 2018.11.16 || #C88C32 || #281900&lt;br /&gt;
|-&lt;br /&gt;
| Pokémon: Let&#039;s Go! Edition Pikachu-Yellow Right Joy-Con / ポケットモンスター Let&#039;s Go! ピカチュウ || 2018.11.16 || #FFDC00 || #322800&lt;br /&gt;
|-&lt;br /&gt;
| *Nintendo Labo Creators Contest Edition &amp;quot;Cardboard&amp;quot;-Colored Joy-Con || 2018. (...?) || #D7AA73 || #1E1914&lt;br /&gt;
|-&lt;br /&gt;
| **Dragon Quest XI S Lotto Edition Royal-Blue Joy-Con / ドラゴン クエスト XI S （ロト版） || 2019.09.27 || #1473FA || #00000F&lt;br /&gt;
|-&lt;br /&gt;
| **Disney Tsum Tsum Festival Edition Neon-Purple Left Joy-Con / ディズニー ツムツム フェスティバル || 2019.10.10 || #B400E6 || #140014&lt;br /&gt;
|-&lt;br /&gt;
| **Disney Tsum Tsum Festival Edition Neon-Pink Right Joy-Con / ディズニー ツムツム フェスティバル || 2019.10.10 || #FF3278 || #28001E&lt;br /&gt;
|-&lt;br /&gt;
| Animal Crossing: New Horizons Edition Pastel-Green Left Joy-Con / あつまれ どうぶつの森 || 2020.03.13 || #82FF96 || #0A1E0A&lt;br /&gt;
|-&lt;br /&gt;
| Animal Crossing: New Horizons Edition Pastel-Blue Right Joy-Con / あつまれ どうぶつの森 || 2020.03.13 || #96F5F5 || #0A1E28&lt;br /&gt;
|-&lt;br /&gt;
| Fortnite Wildcat Edition Yellow Left Joy-Con / フォートナイト ワイルドキャット(山猫) || 2020.10.30 || #FFCC00 || #1A1100&lt;br /&gt;
|-&lt;br /&gt;
| Fortnite Wildcat Edition Dark-Blue Right Joy-Con / フォートナイト ワイルドキャット(山猫) || 2020.10.30 || #0084FF || #000F1E&lt;br /&gt;
|-&lt;br /&gt;
| Mario Red × Blue Edition Red Joy-Con / マリオ レッド × ブルー || 2021.02.12 || #F04614 || #1E1914&lt;br /&gt;
|-&lt;br /&gt;
| Monster Hunter Rise Edition Gray Joy-Con / モンスターハンターライズ || 2021.03.26 || #818282 || #0E0F0F&lt;br /&gt;
|-&lt;br /&gt;
| Fortnite Fleet Force Edition Dark-Blue Left Joy-Con / フォートナイト フリート フォース(力の艦隊) || 2021.06.04 || #0084FF || #000F1E&lt;br /&gt;
|-&lt;br /&gt;
| Fortnite Fleet Force Edition Yellow Right Joy-Con / フォートナイト フリート フォース(力の艦隊) || 2021.06.04 || #FFCC00 || #1A1100&lt;br /&gt;
|-&lt;br /&gt;
| Legend of Zelda: Skyward Sword Edition Dark-Blue Left Joy-Con / ゼルダの伝説 スカイウォードソード || 2021.07.16 || #2D50F0 || #1E0F46&lt;br /&gt;
|-&lt;br /&gt;
| Legend of Zelda: Skyward Sword Edition Dark-Purple Right Joy-Con / ゼルダの伝説 スカイウォードソード || 2021.07.16 || #500FC8 || #00051E&lt;br /&gt;
|-&lt;br /&gt;
| Nintendo Switch OLED Edition White Joy-Con / Nintendo Switch （有機ELモデル） ホワイト || 2021.10.08 || #E6E6E6 || #323232&lt;br /&gt;
|-&lt;br /&gt;
| Splatoon 3 OLED Edition Blue-Gradient Left Joy-Con / （有機ELモデル） スプラトゥーン3 || 2022.08.26 || #6455F5 || #28282D&lt;br /&gt;
|-&lt;br /&gt;
| Splatoon 3 OLED Edition Neon-Yellow-Gradient Right Joy-Con / （有機ELモデル） スプラトゥーン3 || 2022.08.26 || #C3FA05 || #1E1E28&lt;br /&gt;
|-&lt;br /&gt;
| Pokémon: Scarlet × Violet OLED Edition Scarlet Left Joy-Con / （有機ELモデル） ポケットモンスター スカーレット・バイオレット || 2022.11.04 || #F04614 || #1E1914&lt;br /&gt;
|-&lt;br /&gt;
| Pokémon: Scarlet × Violet OLED Edition Violet Right Joy-Con / （有機ELモデル） ポケットモンスター スカーレット・バイオレット || 2022.11.04 || #B400E6 || #140014&lt;br /&gt;
|-&lt;br /&gt;
| // *(Prize Awarded for Labo Contest - No Retail) // **(Available Japan Only)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Additional Links =&lt;br /&gt;
[https://github.com/dekuNukem/Nintendo_Switch_Reverse_Engineering Reverse Engineering of the Joy-Con by Github user dekuNukem]&lt;/div&gt;</summary>
		<author><name>Imp Uhrfik Simone</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Joy-Con&amp;diff=11863</id>
		<title>Joy-Con</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Joy-Con&amp;diff=11863"/>
		<updated>2022-09-03T08:37:45Z</updated>

		<summary type="html">&lt;p&gt;Imp Uhrfik Simone: /* Colors */ ...preliminary addition of Splatoon 3 joy-con ...will follow-up once hex-colors are vetted ...also added special edition consoles with &amp;quot;retail color&amp;quot; joy-con&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Joy-Con is the name for the Switch&#039;s primary game controllers. The controllers communicate to the console through bluetooth and can be disconnected from the main unit.&lt;br /&gt;
&lt;br /&gt;
= Hardware =&lt;br /&gt;
The controllers themselves are simple to disassemble and identify.&lt;br /&gt;
[[File:JoyconFront.jpg|400px|thumb|The front of the Joy-Con internal[https://www.ifixit.com/Teardown/Nintendo+Switch+Teardown/78263]]]&lt;br /&gt;
[[File:JoyconRear.jpg|400px|thumb|The rear of the Joy-Con internal[https://www.ifixit.com/Teardown/Nintendo+Switch+Teardown/78263]]]&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Color || Item&lt;br /&gt;
|-&lt;br /&gt;
| Red || Broadcom BCM20734 Bluetooth 4.1/2.4 GHz Transceiver&lt;br /&gt;
|-&lt;br /&gt;
| Orange || STMicroelectronics NFCBEA 812006 33 (Likely NFC reader IC)&lt;br /&gt;
|-&lt;br /&gt;
| Yellow|| Macronix International MX25U4033E 4 Mb CMOS Flash&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Firmware =&lt;br /&gt;
&#039;&#039;See also: [[Joy-Con Firmware]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The firmware of the Joy-Cons seems to be generic across all instances. Details such as the handedness of the controller and the color is just indicated in a configuration part of the flash. Judging by quick glance at the firmware, it&#039;s probably identical to that used on the Pro Controller as well.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Controller || 1.0.0&lt;br /&gt;
|-&lt;br /&gt;
| Joy-Con Left (Blue) || [[:File:pad.L.bin|flash dump]]&lt;br /&gt;
|-&lt;br /&gt;
| Joy-Con Right (Red) || [[:File:pad.R.bin|flash dump]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The flash is in a patch-ram format. Tools for dealing with it are available [https://github.com/shuffle2/nxpad].&lt;br /&gt;
A dump of the ROM region (taken while firmware was running) can be found [[:File:bcm20734_rom.bin|here]]. Note this is the same SoC used on the other controller models, as well.&lt;br /&gt;
&lt;br /&gt;
= Protocol =&lt;br /&gt;
The Joy-Con can communicate wirelessly over Bluetooth or through the rails over UART. This uses a Nintendo proprietary protocol called &amp;quot;Nwcp&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
== NwcpPacket ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x5&lt;br /&gt;
| [[#HciHeader|HciHeader]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| 0x6&lt;br /&gt;
| [[#NwcpHeader|NwcpHeader]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xB&lt;br /&gt;
| 0x1&lt;br /&gt;
| HeaderCrc (CRC8 over NwcpHeader)&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| Variable&lt;br /&gt;
| Data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== HciHeader ===&lt;br /&gt;
This is a 5-byte packet header used by Broadcom&#039;s HCI Control Protocol.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x1&lt;br /&gt;
| PacketType (always 0x19)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[#CommandCode|CommandCode]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0x1&lt;br /&gt;
| GroupCode (always 0x03)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| 0x2&lt;br /&gt;
| PacketLength&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;
| 0x1 || SendToDevice&lt;br /&gt;
|-&lt;br /&gt;
| 0x81 || ReceiveFromDevice&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== NwcpHeader ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[#CommandType|CommandType]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[#DeviceCommand|DeviceCommand]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0x2&lt;br /&gt;
| DataSize&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x1&lt;br /&gt;
| CommandResult&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| 0x1&lt;br /&gt;
| DataCrc (CRC8 over Data for DataSize bytes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== CommandType ====&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;
| 0x91 || DeviceCommandToDevice&lt;br /&gt;
|-&lt;br /&gt;
| 0x92 || Hid&lt;br /&gt;
|-&lt;br /&gt;
| 0x94 || DeviceCommandFromDevice&lt;br /&gt;
|-&lt;br /&gt;
| 0x9A || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA3 || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA5 || Handshake&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== DeviceCommand ==&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;
| 0x01 || Inquiry&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || WriteChargerSettings&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x06 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || ReadWakeUpReason&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || CreateHidConnection&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || DisconnectHid&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || SetHidInterval&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || Pairing&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || UpdateUartBaudRate&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== HidCommand ==&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;
| 0x00 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || PairingOut&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || GetDeviceInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || SetDataFormat&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || LRButtonDetection&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || Page&lt;br /&gt;
|-&lt;br /&gt;
| 0x06 || Reset&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || ClearPairingInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || Shipment&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || SerialFlashRead&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || SerialFlashWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || SerialFlashSectorErase&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || McuReset&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || McuWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || McuResume&lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || McuPollingEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || McuPollingDisable&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || AttachmentWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || AttachmentRead&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || AttachmentEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || &lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || SetIndicatorLed&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || GetIndicatorLed&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || SetNotificationLed&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || SensorSleep&lt;br /&gt;
|-&lt;br /&gt;
| 0x41 || SensorConfig&lt;br /&gt;
|-&lt;br /&gt;
| 0x42 || SensorWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x43 || SensorRead&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || MotorEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || GetBatteryVoltage&lt;br /&gt;
|-&lt;br /&gt;
| 0x51 || WriteChargeSetting&lt;br /&gt;
|-&lt;br /&gt;
| 0x52 || ReadChargeSetting&lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || ExtDevWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x59 || GetExtDevInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x5A || ExtDevPollingEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x5B || ExtDevPollingDisable&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C || ExtDevInFormatConfig&lt;br /&gt;
|-&lt;br /&gt;
| 0x5D || &lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || InternalAttachmentWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x61 || InternalAttachmentReadOld&lt;br /&gt;
|-&lt;br /&gt;
| 0x62 || InternalAttachmentEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x63 || InternalAttachmentPollingEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x64 || InternalAttachmentPollingDisable&lt;br /&gt;
|-&lt;br /&gt;
| 0x7A || AddButtonPlayData&lt;br /&gt;
|-&lt;br /&gt;
| 0x7B || StartStopButtonPlayData&lt;br /&gt;
|-&lt;br /&gt;
| 0x80 || Ack&lt;br /&gt;
|-&lt;br /&gt;
| 0x81 || PairingIn&lt;br /&gt;
|-&lt;br /&gt;
| 0x82 || DeviceInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x83 || LRButtonElapsedTime&lt;br /&gt;
|-&lt;br /&gt;
| 0x90 || SerialFlashData&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0 || McuData&lt;br /&gt;
|-&lt;br /&gt;
| 0xA8 || AttachmentData&lt;br /&gt;
|-&lt;br /&gt;
| 0xA9 || &lt;br /&gt;
|-&lt;br /&gt;
| 0xAA || InternalAttachmentRead&lt;br /&gt;
|-&lt;br /&gt;
| 0xB0 || IndicatorLed&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0 || SensorData&lt;br /&gt;
|-&lt;br /&gt;
| 0xD0 || BatteryVoltage&lt;br /&gt;
|-&lt;br /&gt;
| 0xD8 || ExtDevRead&lt;br /&gt;
|-&lt;br /&gt;
| 0xD9 || ExtDevInfo&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Left &amp;amp; Right Separate Joy-con ==&lt;br /&gt;
When paired directly to a computer over bluetooth, the joy-con both provide identical HID input report descriptor. This does not appear to include motion controls, IR data, or NFC. They both behave as detached single-player controllers.&lt;br /&gt;
&lt;br /&gt;
HID Input Report Descriptor (Hexadecimal):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
00000000: 05010905 A1010601 FF852109 21750895  ....¡...ÿ…!.!u.•&lt;br /&gt;
00000010: 30810285 30093075 08953081 02853109  0..…0.0u.•0..…1.&lt;br /&gt;
00000020: 31750896 69018102 85320932 75089669  1u.–i...…2.2u.–i&lt;br /&gt;
00000030: 01810285 33093375 08966901 8102853F  ...…3.3u.–i...…?&lt;br /&gt;
00000040: 05091901 29101500 25017501 95108102  ....)...%.u.•...&lt;br /&gt;
00000050: 05010939 15002507 75049501 81420509  ...9..%.u.•..B..&lt;br /&gt;
00000060: 75049501 81010501 09300931 09330934  u.•......0.1.3.4&lt;br /&gt;
00000070: 16000027 FFFF0000 75109504 81020601  ...&#039;ÿÿ..u.•.....&lt;br /&gt;
00000080: FF850109 01750895 30910285 10091075  ÿ…...u.•0‘.…...u&lt;br /&gt;
00000090: 08953091 02851109 11750895 30910285  .•0‘.…...u.•0‘.…&lt;br /&gt;
000000A0: 12091275 08953091 02C0               ...u.•0‘.À&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Parsed Bytes || Description&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x01,        || Usage Page (Generic Desktop Ctrls)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x05,        || Usage (Game Pad)&lt;br /&gt;
|-&lt;br /&gt;
|0xA1, 0x01,        || Collection (Application)&lt;br /&gt;
|-&lt;br /&gt;
|0x06, 0x01, 0xFF,  ||   Usage Page (Vendor Defined 0xFF01)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x21,        ||   Report ID (33)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x21,        ||   Usage (0x21)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x30,        ||   Report ID (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x30,        ||   Usage (0x30)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x31,        ||   Report ID (49)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x31,        ||   Usage (0x31)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x96, 0x69, 0x01,  ||   Report Count (361)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x32,        ||   Report ID (50)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x32,        ||   Usage (0x32)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x96, 0x69, 0x01,  ||   Report Count (361)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x33,        ||   Report ID (51)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x33,        ||   Usage (0x33)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x96, 0x69, 0x01,  ||   Report Count (361)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x3F,        ||   Report ID (63)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x09,        ||   Usage Page (Button)&lt;br /&gt;
|-&lt;br /&gt;
|0x19, 0x01,        ||   Usage Minimum (0x01)&lt;br /&gt;
|-&lt;br /&gt;
|0x29, 0x10,        ||   Usage Maximum (0x10)&lt;br /&gt;
|-&lt;br /&gt;
|0x15, 0x00,        ||   Logical Minimum (0)&lt;br /&gt;
|-&lt;br /&gt;
|0x25, 0x01,        ||   Logical Maximum (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x01,        ||   Report Size (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x10,        ||   Report Count (16)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x01,        ||   Usage Page (Generic Desktop Ctrls)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x39,        ||   Usage (Hat switch)&lt;br /&gt;
|-&lt;br /&gt;
|0x15, 0x00,        ||   Logical Minimum (0)&lt;br /&gt;
|-&lt;br /&gt;
|0x25, 0x07,        ||   Logical Maximum (7)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x04,        ||   Report Size (4)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x01,        ||   Report Count (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x42,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,Null State)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x09,        ||   Usage Page (Button)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x04,        ||   Report Size (4)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x01,        ||   Report Count (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x01,        ||   Input (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x01,        ||   Usage Page (Generic Desktop Ctrls)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x30,        ||   Usage (X)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x31,        ||   Usage (Y)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x33,        ||   Usage (Rx)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x34,        ||   Usage (Ry)&lt;br /&gt;
|-&lt;br /&gt;
|0x16, 0x00, 0x00,  ||   Logical Minimum (0)&lt;br /&gt;
|-&lt;br /&gt;
|0x27, 0xFF, 0xFF, 0x00, 0x00,  ||   Logical Maximum (65534)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x10,        ||   Report Size (16)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x04,        ||   Report Count (4)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x06, 0x01, 0xFF,  ||   Usage Page (Vendor Defined 0xFF01)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x01,        ||   Report ID (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x01,        ||   Usage (0x01)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x10,        ||   Report ID (16)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x10,        ||   Usage (0x10)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x11,        ||   Report ID (17)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x11,        ||   Usage (0x11)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x12,        ||   Report ID (18)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x12,        ||   Usage (0x12)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0xC0,              || End Collection&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Colors ==&lt;br /&gt;
HEX codes for the colors shown in the &amp;quot;Controllers&amp;quot; menu of the Switch UI can be found in a Joy-con SPI dump starting at offset 0x6050. Body color is first followed by button color and each is 3 bytes long. These values are able to be re-written with any HEX color value to make the Joy-cons show up as different colors in the UI. The following is a list of official HEX colors recovered from SPI dumps.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Developer Kit Joy-Con || Release || Body HEX || Button HEX&lt;br /&gt;
|-&lt;br /&gt;
| Black / ブラック || 2015.10.16 || #313131 || #0F0F0F&lt;br /&gt;
|-&lt;br /&gt;
! Standard Retail Joy-Con Color || Release || Body HEX || Button HEX&lt;br /&gt;
|-&lt;br /&gt;
| Gray / グレー || 2017.03.03 || #828282 || #0F0F0F&lt;br /&gt;
|-&lt;br /&gt;
| Neon Red / ネオンレッド || 2017.03.03 || #FF3C28 || #1E0A0A&lt;br /&gt;
|-&lt;br /&gt;
| Neon Blue / ネオンブルー || 2017.03.03 || #0AB9E6 || #001E1E&lt;br /&gt;
|-&lt;br /&gt;
| Neon Yellow / ネオンイエロー || 2017.06.16 || #E6FF00 || #142800&lt;br /&gt;
|-&lt;br /&gt;
| Neon Green / ネオングリーン || 2017.07.21 || #1EDC00 || #002800&lt;br /&gt;
|-&lt;br /&gt;
| Neon Pink / ネオンピンク || 2017.07.21 || #FF3278 || #28001E&lt;br /&gt;
|-&lt;br /&gt;
| Red / レッド || 2017.10.27 || #E10F00 || #280A0A&lt;br /&gt;
|-&lt;br /&gt;
| Blue / ブルー || 2019.10.04 || #4655F5 || #00000A&lt;br /&gt;
|-&lt;br /&gt;
| Neon Purple / ネオンパープル || 2019.10.04 || #B400E6 || #140014&lt;br /&gt;
|-&lt;br /&gt;
| Neon Orange / ネオンオレンジ || 2019.10.04 || #FAA005 || #0F0A00&lt;br /&gt;
|-&lt;br /&gt;
| White / ホワイト || 2021.10.08 || #E6E6E6 || #323232&lt;br /&gt;
|-&lt;br /&gt;
! Special Edition Joy-Con Color || Release || Body HEX || Button HEX&lt;br /&gt;
|-&lt;br /&gt;
| Splatoon 2 Edition Neon-Green Left Joy-Con / スプラトゥーン2 || 2017.07.21 || #1EDC00 || #002800&lt;br /&gt;
|-&lt;br /&gt;
| Splatoon 2 Edition Neon-Pink Right Joy-Con / スプラトゥーン2 || 2017.07.21 || #FF3278 || #28001E&lt;br /&gt;
|-&lt;br /&gt;
| Super Mario Odyssey Edition Red Joy-Con / スーパーマリオ オデッセイ || 2017.10.27 || #E10F00 || #280A0A&lt;br /&gt;
|-&lt;br /&gt;
| Super Smash Bros. Ultimate Edition Gray Joy-Con / 大乱闘スマッシュブラザーズ || 2018.11.02 || #828282 || #0F0F0F&lt;br /&gt;
|-&lt;br /&gt;
| Pokemon: Let&#039;s Go! Eevee-Brown Left Joy-Con / ポケットモンスター Let&#039;s Go! イーブイ || 2018.11.16 || #C88C32 || #281900&lt;br /&gt;
|-&lt;br /&gt;
| Pokemon: Let&#039;s Go! Pikachu-Yellow Right Joy-Con / ポケットモンスター Let&#039;s Go! ピカチュウ || 2018.11.16 || #FFDC00 || #322800&lt;br /&gt;
|-&lt;br /&gt;
| *Nintendo Labo Creators Contest Edition &amp;quot;Cardboard&amp;quot;-Colored Joy-Con || 2018. (...?) || #D7AA73 || #1E1914&lt;br /&gt;
|-&lt;br /&gt;
| **Dragon Quest XI S Lotto Edition Royal-Blue Joy-Con / ドラゴン クエスト XI S （ロト版） || 2019.09.27 || #1473FA || #00000F&lt;br /&gt;
|-&lt;br /&gt;
| **Disney Tsum Tsum Festival Neon-Purple Left Joy-Con / ディズニー ツムツム フェスティバル || 2019.10.10 || #B400E6 || #140014&lt;br /&gt;
|-&lt;br /&gt;
| **Disney Tsum Tsum Festival Neon-Pink Right Joy-Con / ディズニー ツムツム フェスティバル || 2019.10.10 || #FF3278 || #28001E&lt;br /&gt;
|-&lt;br /&gt;
| Animal Crossing: New Horizons Pastel-Green Left Joy-Con / あつまれ どうぶつの森 || 2020.03.13 || #82FF96 || #0A1E0A&lt;br /&gt;
|-&lt;br /&gt;
| Animal Crossing: New Horizons Pastel-Blue Right Joy-Con / あつまれ どうぶつの森 || 2020.03.13 || #96F5F5 || #0A1E28&lt;br /&gt;
|-&lt;br /&gt;
| Fortnite Wildcat Edition Yellow Left Joy-Con / フォートナイト ワイルドキャット(山猫) || 2020.10.30 || #FFCC00 || #1A1100&lt;br /&gt;
|-&lt;br /&gt;
| Fortnite Wildcat Edition Dark-Blue Right Joy-Con / フォートナイト ワイルドキャット(山猫) || 2020.10.30 || #0084FF || #000F1E&lt;br /&gt;
|-&lt;br /&gt;
| Mario Red &amp;amp; Blue Edition Red Joy-Con / マリオ レッド × ブルー || 2021.02.12 || #F04614 || #1E1914&lt;br /&gt;
|-&lt;br /&gt;
| Monster Hunter Rise Edition Gray Joy-Con / モンスターハンターライズ || 2021.03.26 || #818282 || #0E0F0F&lt;br /&gt;
|-&lt;br /&gt;
| Fortnite Fleet Force Edition Dark-Blue Left Joy-Con / フォートナイト フリート フォース(力の艦隊) || 2021.06.04 || #0084FF || #000F1E&lt;br /&gt;
|-&lt;br /&gt;
| Fortnite Fleet Force Edition Yellow Right Joy-Con / フォートナイト フリート フォース(力の艦隊) || 2021.06.04 || #FFCC00 || #1A1100&lt;br /&gt;
|-&lt;br /&gt;
| Legend of Zelda: Skyward Sword Dark-Blue Left Joy-Con / ゼルダの伝説 スカイウォードソード || 2021.07.16 || #2D50F0 || #1E0F46&lt;br /&gt;
|-&lt;br /&gt;
| Legend of Zelda: Skyward Sword Dark-Purple Right Joy-Con / ゼルダの伝説 スカイウォードソード || 2021.07.16 || #500FC8 || #00051E&lt;br /&gt;
|-&lt;br /&gt;
| Nintendo Switch OLED Edition White Joy-Con / Nintendo Switch（有機ELモデル） ホワイト || 2021.10.08 || #E6E6E6 || #323232&lt;br /&gt;
|-&lt;br /&gt;
| Splatoon 3 OLED Edition Blue-Gradient Left Joy-Con / （有機ELモデル） スプラトゥーン3 || 2022.08.26 || #4655F5 || #00000A&lt;br /&gt;
|-&lt;br /&gt;
| Splatoon 3 OLED Edition Neon-Yellow-Gradient Right Joy-Con / （有機ELモデル） スプラトゥーン3 || 2022.08.26 || #E6FF00 || #142800&lt;br /&gt;
|-&lt;br /&gt;
| // *(Prize Awarded for Labo Contest - No Retail) // **(Available Japan Only)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Additional Links =&lt;br /&gt;
[https://github.com/dekuNukem/Nintendo_Switch_Reverse_Engineering Reverse Engineering of the Joy-Con by Github user dekuNukem]&lt;/div&gt;</summary>
		<author><name>Imp Uhrfik Simone</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Joy-Con&amp;diff=11255</id>
		<title>Joy-Con</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Joy-Con&amp;diff=11255"/>
		<updated>2021-10-20T14:58:39Z</updated>

		<summary type="html">&lt;p&gt;Imp Uhrfik Simone: /* Colors */ ...added release dates ...Neon-Green/Neon-Pink release-dates specifically referenced from official Nintendo website (www.nintendo.co.jp) ...not using US release date&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Joy-Con is the name for the Switch&#039;s primary game controllers. The controllers communicate to the console through bluetooth and can be disconnected from the main unit.&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
The controllers themselves are simple to disassemble and identify.&lt;br /&gt;
[[File:JoyconFront.jpg|400px|thumb|The front of the Joy-Con internal[https://www.ifixit.com/Teardown/Nintendo+Switch+Teardown/78263]]]&lt;br /&gt;
[[File:JoyconRear.jpg|400px|thumb|The rear of the Joy-Con internal[https://www.ifixit.com/Teardown/Nintendo+Switch+Teardown/78263]]]&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Color || Item&lt;br /&gt;
|-&lt;br /&gt;
| Red || Broadcom BCM20734 Bluetooth 4.1/2.4 GHz Transceiver&lt;br /&gt;
|-&lt;br /&gt;
| Orange || STMicroelectronics NFCBEA 812006 33 (Likely NFC reader IC)&lt;br /&gt;
|-&lt;br /&gt;
| Yellow|| Macronix International MX25U4033E 4 Mb CMOS Flash&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Firmware ==&lt;br /&gt;
&#039;&#039;See also: [[Joy-Con Firmware]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The firmware of the Joy-Cons seems to be generic across all instances. Details such as the handedness of the controller and the color is just indicated in a configuration part of the flash. Judging by quick glance at the firmware, it&#039;s probably identical to that used on the Pro Controller as well.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Controller || 1.0.0&lt;br /&gt;
|-&lt;br /&gt;
| Joy-Con Left (Blue) || [[:File:pad.L.bin|flash dump]]&lt;br /&gt;
|-&lt;br /&gt;
| Joy-Con Right (Red) || [[:File:pad.R.bin|flash dump]]&lt;br /&gt;
|}&lt;br /&gt;
The flash is in a patch-ram format. Tools for dealing with it are available [https://github.com/shuffle2/nxpad].&lt;br /&gt;
A dump of the ROM region (taken while firmware was running) can be found [[:File:bcm20734_rom.bin|here]]. Note this is the same SoC used on the other controller models, as well.&lt;br /&gt;
&lt;br /&gt;
== Bluetooth HID ==&lt;br /&gt;
=== Commands ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || PairingOut&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || GetDeviceInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || SetDataFormat&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || LRButtonDetection&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || Page&lt;br /&gt;
|-&lt;br /&gt;
| 0x06 || Reset&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || ClearPairingInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || Shipment&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || SerialFlashRead&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || SerialFlashWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || SerialFlashSectorErase&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || McuReset&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || McuWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || McuResume&lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || McuPollingEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || McuPollingDisable&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || AttachmentWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || AttachmentEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || &lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || SetIndicatorLed&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || GetIndicatorLed&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || SetNotificationLed&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || SensorSleep&lt;br /&gt;
|-&lt;br /&gt;
| 0x41 || SensorConfig&lt;br /&gt;
|-&lt;br /&gt;
| 0x42 || SensorWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x43 || SensorRead&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || MotorEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || GetBatteryVoltage&lt;br /&gt;
|-&lt;br /&gt;
| 0x51 || WriteChargeSetting&lt;br /&gt;
|-&lt;br /&gt;
| 0x52 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || ExtDevWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x59 || GetExtDevInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x5A || ExtDevPollingEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x5B || ExtDevPollingDisable&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C || ExtDevInFormatConfig&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || InternalAttachmentWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x61 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x62 || InternalAttachmentEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x63 || InternalAttachmentPollingEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x64 || InternalAttachmentPollingDisable&lt;br /&gt;
|-&lt;br /&gt;
| 0x80 || Ack&lt;br /&gt;
|-&lt;br /&gt;
| 0x81 || PairingIn&lt;br /&gt;
|-&lt;br /&gt;
| 0x82 || DeviceInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x83 || LRButtonElapsedTime&lt;br /&gt;
|-&lt;br /&gt;
| 0x90 || SerialFlashData&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0 || McuData&lt;br /&gt;
|-&lt;br /&gt;
| 0xA8 || AttachmentData&lt;br /&gt;
|-&lt;br /&gt;
| 0xAA || InternalAttachmentRead&lt;br /&gt;
|-&lt;br /&gt;
| 0xB0 || IndicatorLed&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0 || SensorData&lt;br /&gt;
|-&lt;br /&gt;
| 0xD0 || BatteryVoltage&lt;br /&gt;
|-&lt;br /&gt;
| 0xD8 || ExtDevRead&lt;br /&gt;
|-&lt;br /&gt;
| 0xD9 || ExtDevInfo&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Left &amp;amp; Right Separate Joy-con ===&lt;br /&gt;
When paired directly to a computer over bluetooth, the joy-con both provide identical HID input report descriptor. This does not appear to include motion controls, IR data, or NFC. They both behave as detached single-player controllers.&lt;br /&gt;
&lt;br /&gt;
HID Input Report Descriptor (Hexadecimal):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
00000000: 05010905 A1010601 FF852109 21750895  ....¡...ÿ…!.!u.•&lt;br /&gt;
00000010: 30810285 30093075 08953081 02853109  0..…0.0u.•0..…1.&lt;br /&gt;
00000020: 31750896 69018102 85320932 75089669  1u.–i...…2.2u.–i&lt;br /&gt;
00000030: 01810285 33093375 08966901 8102853F  ...…3.3u.–i...…?&lt;br /&gt;
00000040: 05091901 29101500 25017501 95108102  ....)...%.u.•...&lt;br /&gt;
00000050: 05010939 15002507 75049501 81420509  ...9..%.u.•..B..&lt;br /&gt;
00000060: 75049501 81010501 09300931 09330934  u.•......0.1.3.4&lt;br /&gt;
00000070: 16000027 FFFF0000 75109504 81020601  ...&#039;ÿÿ..u.•.....&lt;br /&gt;
00000080: FF850109 01750895 30910285 10091075  ÿ…...u.•0‘.…...u&lt;br /&gt;
00000090: 08953091 02851109 11750895 30910285  .•0‘.…...u.•0‘.…&lt;br /&gt;
000000A0: 12091275 08953091 02C0               ...u.•0‘.À&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Parsed Bytes || Description&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x01,        || Usage Page (Generic Desktop Ctrls)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x05,        || Usage (Game Pad)&lt;br /&gt;
|-&lt;br /&gt;
|0xA1, 0x01,        || Collection (Application)&lt;br /&gt;
|-&lt;br /&gt;
|0x06, 0x01, 0xFF,  ||   Usage Page (Vendor Defined 0xFF01)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x21,        ||   Report ID (33)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x21,        ||   Usage (0x21)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x30,        ||   Report ID (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x30,        ||   Usage (0x30)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x31,        ||   Report ID (49)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x31,        ||   Usage (0x31)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x96, 0x69, 0x01,  ||   Report Count (361)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x32,        ||   Report ID (50)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x32,        ||   Usage (0x32)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x96, 0x69, 0x01,  ||   Report Count (361)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x33,        ||   Report ID (51)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x33,        ||   Usage (0x33)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x96, 0x69, 0x01,  ||   Report Count (361)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x3F,        ||   Report ID (63)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x09,        ||   Usage Page (Button)&lt;br /&gt;
|-&lt;br /&gt;
|0x19, 0x01,        ||   Usage Minimum (0x01)&lt;br /&gt;
|-&lt;br /&gt;
|0x29, 0x10,        ||   Usage Maximum (0x10)&lt;br /&gt;
|-&lt;br /&gt;
|0x15, 0x00,        ||   Logical Minimum (0)&lt;br /&gt;
|-&lt;br /&gt;
|0x25, 0x01,        ||   Logical Maximum (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x01,        ||   Report Size (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x10,        ||   Report Count (16)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x01,        ||   Usage Page (Generic Desktop Ctrls)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x39,        ||   Usage (Hat switch)&lt;br /&gt;
|-&lt;br /&gt;
|0x15, 0x00,        ||   Logical Minimum (0)&lt;br /&gt;
|-&lt;br /&gt;
|0x25, 0x07,        ||   Logical Maximum (7)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x04,        ||   Report Size (4)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x01,        ||   Report Count (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x42,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,Null State)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x09,        ||   Usage Page (Button)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x04,        ||   Report Size (4)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x01,        ||   Report Count (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x01,        ||   Input (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x01,        ||   Usage Page (Generic Desktop Ctrls)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x30,        ||   Usage (X)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x31,        ||   Usage (Y)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x33,        ||   Usage (Rx)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x34,        ||   Usage (Ry)&lt;br /&gt;
|-&lt;br /&gt;
|0x16, 0x00, 0x00,  ||   Logical Minimum (0)&lt;br /&gt;
|-&lt;br /&gt;
|0x27, 0xFF, 0xFF, 0x00, 0x00,  ||   Logical Maximum (65534)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x10,        ||   Report Size (16)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x04,        ||   Report Count (4)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x06, 0x01, 0xFF,  ||   Usage Page (Vendor Defined 0xFF01)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x01,        ||   Report ID (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x01,        ||   Usage (0x01)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x10,        ||   Report ID (16)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x10,        ||   Usage (0x10)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x11,        ||   Report ID (17)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x11,        ||   Usage (0x11)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x12,        ||   Report ID (18)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x12,        ||   Usage (0x12)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0xC0,              || End Collection&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Colors ==&lt;br /&gt;
HEX codes for the colors shown in the &amp;quot;Controllers&amp;quot; menu of the Switch UI can be found in a Joy-con SPI dump starting at offset 0x6050. Body color is first followed by button color and each is 3 bytes long. These values are able to be re-written with any HEX color value to make the Joy-cons show up as different colors in the UI. The following is a list of official HEX colors recovered from SPI dumps.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Developer Kit Joy-Con || Release || Body HEX || Button HEX&lt;br /&gt;
|-&lt;br /&gt;
| Black / ブラック || 2015.10.16 || #313131 || #0F0F0F&lt;br /&gt;
|-&lt;br /&gt;
! Standard Retail Joy-Con Color || Release || Body HEX || Button HEX&lt;br /&gt;
|-&lt;br /&gt;
| Gray / グレー || 2017.03.03 || #828282 || #0F0F0F&lt;br /&gt;
|-&lt;br /&gt;
| Neon Red / ネオンレッド || 2017.03.03 || #FF3C28 || #1E0A0A&lt;br /&gt;
|-&lt;br /&gt;
| Neon Blue / ネオンブルー || 2017.03.03 || #0AB9E6 || #001E1E&lt;br /&gt;
|-&lt;br /&gt;
| Neon Yellow / ネオンイエロー || 2017.06.16 || #E6FF00 || #142800&lt;br /&gt;
|-&lt;br /&gt;
| Neon Green / ネオングリーン || 2017.07.21 || #1EDC00 || #002800&lt;br /&gt;
|-&lt;br /&gt;
| Neon Pink / ネオンピンク || 2017.07.21 || #FF3278 || #28001E&lt;br /&gt;
|-&lt;br /&gt;
| Red / レッド || 2017.10.27 || #E10F00 || #280A0A&lt;br /&gt;
|-&lt;br /&gt;
| Blue / ブルー || 2019.10.04 || #4655F5 || #00000A&lt;br /&gt;
|-&lt;br /&gt;
| Neon Purple / ネオンパープル || 2019.10.04 || #B400E6 || #140014&lt;br /&gt;
|-&lt;br /&gt;
| Neon Orange / ネオンオレンジ || 2019.10.04 || #FAA005 || #0F0A00&lt;br /&gt;
|-&lt;br /&gt;
| White / ホワイト || 2021.10.08 || #E6E6E6 || #323232&lt;br /&gt;
|-&lt;br /&gt;
! Special Edition Joy-Con Color || Release || Body HEX || Button HEX&lt;br /&gt;
|-&lt;br /&gt;
| Super Smash Bros. Ultimate Edition Gray Joy-Con / 大乱闘スマッシュブラザーズ SPECIAL || 2018.11.02 || #828282 || #0F0F0F&lt;br /&gt;
|-&lt;br /&gt;
| Pokemon: Let&#039;s Go! Eevee-Brown Left Joy-Con / ポケットモンスター Let&#039;s Go! イーブイ || 2018.11.16 || #C88C32 || #281900&lt;br /&gt;
|-&lt;br /&gt;
| Pokemon: Let&#039;s Go! Pikachu-Yellow Right Joy-Con / ポケットモンスター Let&#039;s Go! ピカチュウ || 2018.11.16 || #FFDC00 || #322800&lt;br /&gt;
|-&lt;br /&gt;
| *Nintendo Labo Creators Contest Edition &amp;quot;Cardboard&amp;quot;-Colored Joy-Con || 2018. (...?) || #D7AA73 || #1E1914&lt;br /&gt;
|-&lt;br /&gt;
| **Dragon Quest XI S Lotto Edition Royal-Blue Joy-Con / ドラゴン クエスト XI S （ロト版） || 2019.09.27 || #1473FA || #00000F&lt;br /&gt;
|-&lt;br /&gt;
| **Disney Tsum Tsum Festival Neon-Purple Left Joy-Con / ディズニー ツムツム フェスティバル || 2019.10.10 || #B400E6 || #140014&lt;br /&gt;
|-&lt;br /&gt;
| **Disney Tsum Tsum Festival Neon-Pink Right Joy-Con / ディズニー ツムツム フェスティバル || 2019.10.10 || #FF3278 || #28001E&lt;br /&gt;
|-&lt;br /&gt;
| Animal Crossing: New Horizons Pastel-Green Left Joy-Con / あつまれ どうぶつの森 || 2020.03.13 || #82FF96 || #0A1E0A&lt;br /&gt;
|-&lt;br /&gt;
| Animal Crossing: New Horizons Pastel-Blue Right Joy-Con / あつまれ どうぶつの森 || 2020.03.13 || #96F5F5 || #0A1E28&lt;br /&gt;
|-&lt;br /&gt;
| Fortnite Wildcat Edition Yellow Left Joy-Con || 2020.10.30 || #FFCC00 || #1A1100&lt;br /&gt;
|-&lt;br /&gt;
| Fortnite Wildcat Edition Dark-Blue Right Joy-Con || 2020.10.30 || #0084FF || #000F1E&lt;br /&gt;
|-&lt;br /&gt;
| Mario Red &amp;amp; Blue Edition Red Joy-Con / マリオ レッド × ブルー || 2021.02.12 || #F04614 || #1E1914&lt;br /&gt;
|-&lt;br /&gt;
| Monster Hunter Rise Edition Gray Joy-Con / モンスターハンターライズ || 2021.03.26 || #818282 || #0E0F0F&lt;br /&gt;
|-&lt;br /&gt;
| Fortnite Fleet Force Edition Dark-Blue Left Joy-Con || 2021.06.04 || #0084FF || #000F1E&lt;br /&gt;
|-&lt;br /&gt;
| Fortnite Fleet Force Edition Yellow Right Joy-Con || 2021.06.04 || #FFCC00 || #1A1100&lt;br /&gt;
|-&lt;br /&gt;
| Legend of Zelda: Skyward Sword Dark-Blue Left Joy-Con / ゼルダの伝説 スカイウォードソード || 2021.07.16 || #2D50F0 || #1E0F46&lt;br /&gt;
|-&lt;br /&gt;
| Legend of Zelda: Skyward Sword Dark-Purple Right Joy-Con / ゼルダの伝説 スカイウォードソード || 2021.07.16 || #500FC8 || #00051E&lt;br /&gt;
|-&lt;br /&gt;
| // *(Prize Awarded for Labo Contest - No Retail) // **(Available Japan Only)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Additional Links ==&lt;br /&gt;
[https://github.com/dekuNukem/Nintendo_Switch_Reverse_Engineering Reverse Engineering of the Joy-Con by Github user dekuNukem]&lt;/div&gt;</summary>
		<author><name>Imp Uhrfik Simone</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Joy-Con&amp;diff=11254</id>
		<title>Joy-Con</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Joy-Con&amp;diff=11254"/>
		<updated>2021-10-20T13:29:17Z</updated>

		<summary type="html">&lt;p&gt;Imp Uhrfik Simone: /* Colors */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Joy-Con is the name for the Switch&#039;s primary game controllers. The controllers communicate to the console through bluetooth and can be disconnected from the main unit.&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
The controllers themselves are simple to disassemble and identify.&lt;br /&gt;
[[File:JoyconFront.jpg|400px|thumb|The front of the Joy-Con internal[https://www.ifixit.com/Teardown/Nintendo+Switch+Teardown/78263]]]&lt;br /&gt;
[[File:JoyconRear.jpg|400px|thumb|The rear of the Joy-Con internal[https://www.ifixit.com/Teardown/Nintendo+Switch+Teardown/78263]]]&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Color || Item&lt;br /&gt;
|-&lt;br /&gt;
| Red || Broadcom BCM20734 Bluetooth 4.1/2.4 GHz Transceiver&lt;br /&gt;
|-&lt;br /&gt;
| Orange || STMicroelectronics NFCBEA 812006 33 (Likely NFC reader IC)&lt;br /&gt;
|-&lt;br /&gt;
| Yellow|| Macronix International MX25U4033E 4 Mb CMOS Flash&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Firmware ==&lt;br /&gt;
&#039;&#039;See also: [[Joy-Con Firmware]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The firmware of the Joy-Cons seems to be generic across all instances. Details such as the handedness of the controller and the color is just indicated in a configuration part of the flash. Judging by quick glance at the firmware, it&#039;s probably identical to that used on the Pro Controller as well.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Controller || 1.0.0&lt;br /&gt;
|-&lt;br /&gt;
| Joy-Con Left (Blue) || [[:File:pad.L.bin|flash dump]]&lt;br /&gt;
|-&lt;br /&gt;
| Joy-Con Right (Red) || [[:File:pad.R.bin|flash dump]]&lt;br /&gt;
|}&lt;br /&gt;
The flash is in a patch-ram format. Tools for dealing with it are available [https://github.com/shuffle2/nxpad].&lt;br /&gt;
A dump of the ROM region (taken while firmware was running) can be found [[:File:bcm20734_rom.bin|here]]. Note this is the same SoC used on the other controller models, as well.&lt;br /&gt;
&lt;br /&gt;
== Bluetooth HID ==&lt;br /&gt;
=== Commands ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || PairingOut&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || GetDeviceInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || SetDataFormat&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || LRButtonDetection&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || Page&lt;br /&gt;
|-&lt;br /&gt;
| 0x06 || Reset&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || ClearPairingInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || Shipment&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || SerialFlashRead&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || SerialFlashWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || SerialFlashSectorErase&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || McuReset&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || McuWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || McuResume&lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || McuPollingEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || McuPollingDisable&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || AttachmentWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || AttachmentEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || &lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || SetIndicatorLed&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || GetIndicatorLed&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || SetNotificationLed&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || SensorSleep&lt;br /&gt;
|-&lt;br /&gt;
| 0x41 || SensorConfig&lt;br /&gt;
|-&lt;br /&gt;
| 0x42 || SensorWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x43 || SensorRead&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || MotorEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || GetBatteryVoltage&lt;br /&gt;
|-&lt;br /&gt;
| 0x51 || WriteChargeSetting&lt;br /&gt;
|-&lt;br /&gt;
| 0x52 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || ExtDevWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x59 || GetExtDevInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x5A || ExtDevPollingEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x5B || ExtDevPollingDisable&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C || ExtDevInFormatConfig&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || InternalAttachmentWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x61 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x62 || InternalAttachmentEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x63 || InternalAttachmentPollingEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x64 || InternalAttachmentPollingDisable&lt;br /&gt;
|-&lt;br /&gt;
| 0x80 || Ack&lt;br /&gt;
|-&lt;br /&gt;
| 0x81 || PairingIn&lt;br /&gt;
|-&lt;br /&gt;
| 0x82 || DeviceInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x83 || LRButtonElapsedTime&lt;br /&gt;
|-&lt;br /&gt;
| 0x90 || SerialFlashData&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0 || McuData&lt;br /&gt;
|-&lt;br /&gt;
| 0xA8 || AttachmentData&lt;br /&gt;
|-&lt;br /&gt;
| 0xAA || InternalAttachmentRead&lt;br /&gt;
|-&lt;br /&gt;
| 0xB0 || IndicatorLed&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0 || SensorData&lt;br /&gt;
|-&lt;br /&gt;
| 0xD0 || BatteryVoltage&lt;br /&gt;
|-&lt;br /&gt;
| 0xD8 || ExtDevRead&lt;br /&gt;
|-&lt;br /&gt;
| 0xD9 || ExtDevInfo&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Left &amp;amp; Right Separate Joy-con ===&lt;br /&gt;
When paired directly to a computer over bluetooth, the joy-con both provide identical HID input report descriptor. This does not appear to include motion controls, IR data, or NFC. They both behave as detached single-player controllers.&lt;br /&gt;
&lt;br /&gt;
HID Input Report Descriptor (Hexadecimal):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
00000000: 05010905 A1010601 FF852109 21750895  ....¡...ÿ…!.!u.•&lt;br /&gt;
00000010: 30810285 30093075 08953081 02853109  0..…0.0u.•0..…1.&lt;br /&gt;
00000020: 31750896 69018102 85320932 75089669  1u.–i...…2.2u.–i&lt;br /&gt;
00000030: 01810285 33093375 08966901 8102853F  ...…3.3u.–i...…?&lt;br /&gt;
00000040: 05091901 29101500 25017501 95108102  ....)...%.u.•...&lt;br /&gt;
00000050: 05010939 15002507 75049501 81420509  ...9..%.u.•..B..&lt;br /&gt;
00000060: 75049501 81010501 09300931 09330934  u.•......0.1.3.4&lt;br /&gt;
00000070: 16000027 FFFF0000 75109504 81020601  ...&#039;ÿÿ..u.•.....&lt;br /&gt;
00000080: FF850109 01750895 30910285 10091075  ÿ…...u.•0‘.…...u&lt;br /&gt;
00000090: 08953091 02851109 11750895 30910285  .•0‘.…...u.•0‘.…&lt;br /&gt;
000000A0: 12091275 08953091 02C0               ...u.•0‘.À&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Parsed Bytes || Description&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x01,        || Usage Page (Generic Desktop Ctrls)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x05,        || Usage (Game Pad)&lt;br /&gt;
|-&lt;br /&gt;
|0xA1, 0x01,        || Collection (Application)&lt;br /&gt;
|-&lt;br /&gt;
|0x06, 0x01, 0xFF,  ||   Usage Page (Vendor Defined 0xFF01)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x21,        ||   Report ID (33)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x21,        ||   Usage (0x21)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x30,        ||   Report ID (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x30,        ||   Usage (0x30)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x31,        ||   Report ID (49)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x31,        ||   Usage (0x31)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x96, 0x69, 0x01,  ||   Report Count (361)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x32,        ||   Report ID (50)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x32,        ||   Usage (0x32)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x96, 0x69, 0x01,  ||   Report Count (361)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x33,        ||   Report ID (51)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x33,        ||   Usage (0x33)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x96, 0x69, 0x01,  ||   Report Count (361)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x3F,        ||   Report ID (63)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x09,        ||   Usage Page (Button)&lt;br /&gt;
|-&lt;br /&gt;
|0x19, 0x01,        ||   Usage Minimum (0x01)&lt;br /&gt;
|-&lt;br /&gt;
|0x29, 0x10,        ||   Usage Maximum (0x10)&lt;br /&gt;
|-&lt;br /&gt;
|0x15, 0x00,        ||   Logical Minimum (0)&lt;br /&gt;
|-&lt;br /&gt;
|0x25, 0x01,        ||   Logical Maximum (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x01,        ||   Report Size (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x10,        ||   Report Count (16)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x01,        ||   Usage Page (Generic Desktop Ctrls)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x39,        ||   Usage (Hat switch)&lt;br /&gt;
|-&lt;br /&gt;
|0x15, 0x00,        ||   Logical Minimum (0)&lt;br /&gt;
|-&lt;br /&gt;
|0x25, 0x07,        ||   Logical Maximum (7)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x04,        ||   Report Size (4)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x01,        ||   Report Count (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x42,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,Null State)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x09,        ||   Usage Page (Button)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x04,        ||   Report Size (4)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x01,        ||   Report Count (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x01,        ||   Input (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x01,        ||   Usage Page (Generic Desktop Ctrls)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x30,        ||   Usage (X)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x31,        ||   Usage (Y)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x33,        ||   Usage (Rx)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x34,        ||   Usage (Ry)&lt;br /&gt;
|-&lt;br /&gt;
|0x16, 0x00, 0x00,  ||   Logical Minimum (0)&lt;br /&gt;
|-&lt;br /&gt;
|0x27, 0xFF, 0xFF, 0x00, 0x00,  ||   Logical Maximum (65534)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x10,        ||   Report Size (16)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x04,        ||   Report Count (4)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x06, 0x01, 0xFF,  ||   Usage Page (Vendor Defined 0xFF01)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x01,        ||   Report ID (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x01,        ||   Usage (0x01)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x10,        ||   Report ID (16)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x10,        ||   Usage (0x10)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x11,        ||   Report ID (17)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x11,        ||   Usage (0x11)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x12,        ||   Report ID (18)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x12,        ||   Usage (0x12)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0xC0,              || End Collection&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Colors ==&lt;br /&gt;
HEX codes for the colors shown in the &amp;quot;Controllers&amp;quot; menu of the Switch UI can be found in a Joy-con SPI dump starting at offset 0x6050. Body color is first followed by button color and each is 3 bytes long. These values are able to be re-written with any HEX color value to make the Joy-cons show up as different colors in the UI. The following is a list of official HEX colors recovered from SPI dumps.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Developer Kit Joy-Con || Body HEX || Button HEX&lt;br /&gt;
|-&lt;br /&gt;
| Black / ブラック || #313131 || #0F0F0F&lt;br /&gt;
|-&lt;br /&gt;
! Standard Retail Joy-Con Color || Body HEX || Button HEX&lt;br /&gt;
|-&lt;br /&gt;
| Gray / グレー || #828282 || #0F0F0F&lt;br /&gt;
|-&lt;br /&gt;
| Neon Red / ネオンレッド || #FF3C28 || #1E0A0A&lt;br /&gt;
|-&lt;br /&gt;
| Neon Blue / ネオンブルー || #0AB9E6 || #001E1E&lt;br /&gt;
|-&lt;br /&gt;
| Neon Yellow / ネオンイエロー || #E6FF00 || #142800&lt;br /&gt;
|-&lt;br /&gt;
| Neon Green / ネオングリーン || #1EDC00 || #002800&lt;br /&gt;
|-&lt;br /&gt;
| Neon Pink / ネオンピンク || #FF3278 || #28001E&lt;br /&gt;
|-&lt;br /&gt;
| Red / レッド || #E10F00 || #280A0A&lt;br /&gt;
|-&lt;br /&gt;
| Blue / ブルー || #4655F5 || #00000A&lt;br /&gt;
|-&lt;br /&gt;
| Neon Purple / ネオンパープル || #B400E6 || #140014&lt;br /&gt;
|-&lt;br /&gt;
| Neon Orange / ネオンオレンジ || #FAA005 || #0F0A00&lt;br /&gt;
|-&lt;br /&gt;
| White / ホワイト || #E6E6E6 || #323232&lt;br /&gt;
|-&lt;br /&gt;
! Special Edition Joy-Con Color || Body HEX || Button HEX&lt;br /&gt;
|-&lt;br /&gt;
| Super Smash Bros. Ultimate Edition Gray Joy-Con / 大乱闘スマッシュブラザーズ SPECIAL || #828282 || #0F0F0F&lt;br /&gt;
|-&lt;br /&gt;
| Pokemon: Let&#039;s Go! Eevee-Brown Left Joy-Con / ポケットモンスター Let&#039;s Go! イーブイ || #C88C32 || #281900&lt;br /&gt;
|-&lt;br /&gt;
| Pokemon: Let&#039;s Go! Pikachu-Yellow Right Joy-Con / ポケットモンスター Let&#039;s Go! ピカチュウ || #FFDC00 || #322800&lt;br /&gt;
|-&lt;br /&gt;
| *Nintendo Labo Creators Contest Edition &amp;quot;Cardboard&amp;quot;-Colored Joy-Con || #D7AA73 || #1E1914&lt;br /&gt;
|-&lt;br /&gt;
| **Dragon Quest XI S Lotto Edition Royal-Blue Joy-Con / ドラゴン クエスト XI S （ロト版） || #1473FA || #00000F&lt;br /&gt;
|-&lt;br /&gt;
| **Disney Tsum Tsum Festival Neon-Purple Left Joy-Con / ディズニー ツムツム フェスティバル || #B400E6 || #140014&lt;br /&gt;
|-&lt;br /&gt;
| **Disney Tsum Tsum Festival Neon-Pink Right Joy-Con / ディズニー ツムツム フェスティバル || #FF3278 || #28001E&lt;br /&gt;
|-&lt;br /&gt;
| Animal Crossing: New Horizons Pastel-Green Left Joy-Con / あつまれ どうぶつの森 || #82FF96 || #0A1E0A&lt;br /&gt;
|-&lt;br /&gt;
| Animal Crossing: New Horizons Pastel-Blue Right Joy-Con / あつまれ どうぶつの森 || #96F5F5 || #0A1E28&lt;br /&gt;
|-&lt;br /&gt;
| Fortnite Wildcat Edition Yellow Left Joy-Con || #FFCC00 || #1A1100&lt;br /&gt;
|-&lt;br /&gt;
| Fortnite Wildcat Edition Dark-Blue Right Joy-Con || #0084FF || #000F1E&lt;br /&gt;
|-&lt;br /&gt;
| Mario Red &amp;amp; Blue Edition Red Joy-Con / マリオ レッド × ブルー || #F04614 || #1E1914&lt;br /&gt;
|-&lt;br /&gt;
| Monster Hunter Rise Edition Gray Joy-Con / モンスターハンターライズ || #818282 || #0E0F0F&lt;br /&gt;
|-&lt;br /&gt;
| Fortnite Fleet Force Edition Dark-Blue Left Joy-Con || #0084FF || #000F1E&lt;br /&gt;
|-&lt;br /&gt;
| Fortnite Fleet Force Edition Yellow Right Joy-Con || #FFCC00 || #1A1100&lt;br /&gt;
|-&lt;br /&gt;
| Legend of Zelda: Skyward Sword Dark-Blue Left Joy-Con / ゼルダの伝説 スカイウォードソード || #2D50F0 || #1E0F46&lt;br /&gt;
|-&lt;br /&gt;
| Legend of Zelda: Skyward Sword Dark-Purple Right Joy-Con / ゼルダの伝説 スカイウォードソード || #500FC8 || #00051E&lt;br /&gt;
|-&lt;br /&gt;
| // *(Prize Awarded for Labo Contest - No Retail) // **(Available Japan Only)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Additional Links ==&lt;br /&gt;
[https://github.com/dekuNukem/Nintendo_Switch_Reverse_Engineering Reverse Engineering of the Joy-Con by Github user dekuNukem]&lt;/div&gt;</summary>
		<author><name>Imp Uhrfik Simone</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Joy-Con&amp;diff=11243</id>
		<title>Joy-Con</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Joy-Con&amp;diff=11243"/>
		<updated>2021-10-14T19:25:09Z</updated>

		<summary type="html">&lt;p&gt;Imp Uhrfik Simone: /* Colors */ ...all colors confirmed with personal collection ...except* &amp;quot;developer kit black&amp;quot;, &amp;quot;super smash bros. ultimate&amp;quot;, &amp;quot;nintendo labo creators contest&amp;quot;, &amp;amp; &amp;quot;disney tsum tsum festival&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Joy-Con is the name for the Switch&#039;s primary game controllers. The controllers communicate to the console through bluetooth and can be disconnected from the main unit.&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
The controllers themselves are simple to disassemble and identify.&lt;br /&gt;
[[File:JoyconFront.jpg|400px|thumb|The front of the Joy-Con internal[https://www.ifixit.com/Teardown/Nintendo+Switch+Teardown/78263]]]&lt;br /&gt;
[[File:JoyconRear.jpg|400px|thumb|The rear of the Joy-Con internal[https://www.ifixit.com/Teardown/Nintendo+Switch+Teardown/78263]]]&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Color || Item&lt;br /&gt;
|-&lt;br /&gt;
| Red || Broadcom BCM20734 Bluetooth 4.1/2.4 GHz Transceiver&lt;br /&gt;
|-&lt;br /&gt;
| Orange || STMicroelectronics NFCBEA 812006 33 (Likely NFC reader IC)&lt;br /&gt;
|-&lt;br /&gt;
| Yellow|| Macronix International MX25U4033E 4 Mb CMOS Flash&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Firmware ==&lt;br /&gt;
&#039;&#039;See also: [[Joy-Con Firmware]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The firmware of the Joy-Cons seems to be generic across all instances. Details such as the handedness of the controller and the color is just indicated in a configuration part of the flash. Judging by quick glance at the firmware, it&#039;s probably identical to that used on the Pro Controller as well.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Controller || 1.0.0&lt;br /&gt;
|-&lt;br /&gt;
| Joy-Con Left (Blue) || [[:File:pad.L.bin|flash dump]]&lt;br /&gt;
|-&lt;br /&gt;
| Joy-Con Right (Red) || [[:File:pad.R.bin|flash dump]]&lt;br /&gt;
|}&lt;br /&gt;
The flash is in a patch-ram format. Tools for dealing with it are available [https://github.com/shuffle2/nxpad].&lt;br /&gt;
A dump of the ROM region (taken while firmware was running) can be found [[:File:bcm20734_rom.bin|here]]. Note this is the same SoC used on the other controller models, as well.&lt;br /&gt;
&lt;br /&gt;
== Bluetooth HID ==&lt;br /&gt;
=== Commands ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || PairingOut&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || GetDeviceInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || SetDataFormat&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || LRButtonDetection&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || Page&lt;br /&gt;
|-&lt;br /&gt;
| 0x06 || Reset&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || ClearPairingInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || Shipment&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || SerialFlashRead&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || SerialFlashWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || SerialFlashSectorErase&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || McuReset&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || McuWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || McuResume&lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || McuPollingEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || McuPollingDisable&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || AttachmentWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || AttachmentEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || &lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || SetIndicatorLed&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || GetIndicatorLed&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || SetNotificationLed&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || SensorSleep&lt;br /&gt;
|-&lt;br /&gt;
| 0x41 || SensorConfig&lt;br /&gt;
|-&lt;br /&gt;
| 0x42 || SensorWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x43 || SensorRead&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || MotorEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || GetBatteryVoltage&lt;br /&gt;
|-&lt;br /&gt;
| 0x51 || WriteChargeSetting&lt;br /&gt;
|-&lt;br /&gt;
| 0x52 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || ExtDevWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x59 || GetExtDevInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x5A || ExtDevPollingEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x5B || ExtDevPollingDisable&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C || ExtDevInFormatConfig&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || InternalAttachmentWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x61 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x62 || InternalAttachmentEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x63 || InternalAttachmentPollingEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x64 || InternalAttachmentPollingDisable&lt;br /&gt;
|-&lt;br /&gt;
| 0x80 || Ack&lt;br /&gt;
|-&lt;br /&gt;
| 0x81 || PairingIn&lt;br /&gt;
|-&lt;br /&gt;
| 0x82 || DeviceInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x83 || LRButtonElapsedTime&lt;br /&gt;
|-&lt;br /&gt;
| 0x90 || SerialFlashData&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0 || McuData&lt;br /&gt;
|-&lt;br /&gt;
| 0xA8 || AttachmentData&lt;br /&gt;
|-&lt;br /&gt;
| 0xAA || InternalAttachmentRead&lt;br /&gt;
|-&lt;br /&gt;
| 0xB0 || IndicatorLed&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0 || SensorData&lt;br /&gt;
|-&lt;br /&gt;
| 0xD0 || BatteryVoltage&lt;br /&gt;
|-&lt;br /&gt;
| 0xD8 || ExtDevRead&lt;br /&gt;
|-&lt;br /&gt;
| 0xD9 || ExtDevInfo&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Left &amp;amp; Right Separate Joy-con ===&lt;br /&gt;
When paired directly to a computer over bluetooth, the joy-con both provide identical HID input report descriptor. This does not appear to include motion controls, IR data, or NFC. They both behave as detached single-player controllers.&lt;br /&gt;
&lt;br /&gt;
HID Input Report Descriptor (Hexadecimal):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
00000000: 05010905 A1010601 FF852109 21750895  ....¡...ÿ…!.!u.•&lt;br /&gt;
00000010: 30810285 30093075 08953081 02853109  0..…0.0u.•0..…1.&lt;br /&gt;
00000020: 31750896 69018102 85320932 75089669  1u.–i...…2.2u.–i&lt;br /&gt;
00000030: 01810285 33093375 08966901 8102853F  ...…3.3u.–i...…?&lt;br /&gt;
00000040: 05091901 29101500 25017501 95108102  ....)...%.u.•...&lt;br /&gt;
00000050: 05010939 15002507 75049501 81420509  ...9..%.u.•..B..&lt;br /&gt;
00000060: 75049501 81010501 09300931 09330934  u.•......0.1.3.4&lt;br /&gt;
00000070: 16000027 FFFF0000 75109504 81020601  ...&#039;ÿÿ..u.•.....&lt;br /&gt;
00000080: FF850109 01750895 30910285 10091075  ÿ…...u.•0‘.…...u&lt;br /&gt;
00000090: 08953091 02851109 11750895 30910285  .•0‘.…...u.•0‘.…&lt;br /&gt;
000000A0: 12091275 08953091 02C0               ...u.•0‘.À&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Parsed Bytes || Description&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x01,        || Usage Page (Generic Desktop Ctrls)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x05,        || Usage (Game Pad)&lt;br /&gt;
|-&lt;br /&gt;
|0xA1, 0x01,        || Collection (Application)&lt;br /&gt;
|-&lt;br /&gt;
|0x06, 0x01, 0xFF,  ||   Usage Page (Vendor Defined 0xFF01)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x21,        ||   Report ID (33)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x21,        ||   Usage (0x21)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x30,        ||   Report ID (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x30,        ||   Usage (0x30)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x31,        ||   Report ID (49)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x31,        ||   Usage (0x31)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x96, 0x69, 0x01,  ||   Report Count (361)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x32,        ||   Report ID (50)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x32,        ||   Usage (0x32)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x96, 0x69, 0x01,  ||   Report Count (361)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x33,        ||   Report ID (51)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x33,        ||   Usage (0x33)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x96, 0x69, 0x01,  ||   Report Count (361)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x3F,        ||   Report ID (63)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x09,        ||   Usage Page (Button)&lt;br /&gt;
|-&lt;br /&gt;
|0x19, 0x01,        ||   Usage Minimum (0x01)&lt;br /&gt;
|-&lt;br /&gt;
|0x29, 0x10,        ||   Usage Maximum (0x10)&lt;br /&gt;
|-&lt;br /&gt;
|0x15, 0x00,        ||   Logical Minimum (0)&lt;br /&gt;
|-&lt;br /&gt;
|0x25, 0x01,        ||   Logical Maximum (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x01,        ||   Report Size (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x10,        ||   Report Count (16)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x01,        ||   Usage Page (Generic Desktop Ctrls)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x39,        ||   Usage (Hat switch)&lt;br /&gt;
|-&lt;br /&gt;
|0x15, 0x00,        ||   Logical Minimum (0)&lt;br /&gt;
|-&lt;br /&gt;
|0x25, 0x07,        ||   Logical Maximum (7)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x04,        ||   Report Size (4)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x01,        ||   Report Count (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x42,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,Null State)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x09,        ||   Usage Page (Button)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x04,        ||   Report Size (4)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x01,        ||   Report Count (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x01,        ||   Input (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x01,        ||   Usage Page (Generic Desktop Ctrls)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x30,        ||   Usage (X)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x31,        ||   Usage (Y)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x33,        ||   Usage (Rx)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x34,        ||   Usage (Ry)&lt;br /&gt;
|-&lt;br /&gt;
|0x16, 0x00, 0x00,  ||   Logical Minimum (0)&lt;br /&gt;
|-&lt;br /&gt;
|0x27, 0xFF, 0xFF, 0x00, 0x00,  ||   Logical Maximum (65534)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x10,        ||   Report Size (16)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x04,        ||   Report Count (4)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x06, 0x01, 0xFF,  ||   Usage Page (Vendor Defined 0xFF01)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x01,        ||   Report ID (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x01,        ||   Usage (0x01)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x10,        ||   Report ID (16)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x10,        ||   Usage (0x10)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x11,        ||   Report ID (17)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x11,        ||   Usage (0x11)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x12,        ||   Report ID (18)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x12,        ||   Usage (0x12)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0xC0,              || End Collection&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Colors ==&lt;br /&gt;
HEX codes for the colors shown in the &amp;quot;Controllers&amp;quot; menu of the Switch UI can be found in a Joy-con SPI dump starting at offset 0x6050. Body color is first followed by button color and each is 3 bytes long. These values are able to be re-written with any HEX color value to make the Joy-cons show up as different colors in the UI. The following is a list of official HEX colors recovered from SPI dumps.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Developer Kit Joy-Con || Body HEX || Button HEX&lt;br /&gt;
|-&lt;br /&gt;
| Black / ブラック || #313131 || #0F0F0F&lt;br /&gt;
|-&lt;br /&gt;
! Standard Retail Joy-Con Color || Body HEX || Button HEX&lt;br /&gt;
|-&lt;br /&gt;
| Gray / グレー || #828282 || #0F0F0F&lt;br /&gt;
|-&lt;br /&gt;
| Neon Red / ネオンレッド || #FF3C28 || #1E0A0A&lt;br /&gt;
|-&lt;br /&gt;
| Neon Blue / ネオンブルー || #0AB9E6 || #001E1E&lt;br /&gt;
|-&lt;br /&gt;
| Neon Yellow / ネオンイエロー || #E6FF00 || #142800&lt;br /&gt;
|-&lt;br /&gt;
| Neon Green / ネオングリーン || #1EDC00 || #002800&lt;br /&gt;
|-&lt;br /&gt;
| Neon Pink / ネオンピンク || #FF3278 || #28001E&lt;br /&gt;
|-&lt;br /&gt;
| Red / レッド || #E10F00 || #280A0A&lt;br /&gt;
|-&lt;br /&gt;
| Blue / ブルー || #4655F5 || #00000A&lt;br /&gt;
|-&lt;br /&gt;
| Neon Purple / ネオンパープル || #B400E6 || #140014&lt;br /&gt;
|-&lt;br /&gt;
| Neon Orange / ネオンオレンジ || #FAA005 || #0F0A00&lt;br /&gt;
|-&lt;br /&gt;
| White / ホワイト || #E6E6E6 || #323232&lt;br /&gt;
|-&lt;br /&gt;
! Special Edition Joy-Con Color || Body HEX || Button HEX&lt;br /&gt;
|-&lt;br /&gt;
| Super Smash Bros. Ultimate Edition Gray Joy-Con / 大乱闘スマッシュブラザーズ SPECIAL || #828282 || #0F0F0F&lt;br /&gt;
|-&lt;br /&gt;
| Pokemon: Let&#039;s Go! Eevee-Brown Left Joy-Con / ポケットモンスター Let&#039;s Go! イーブイ || #C88C32 || #281900&lt;br /&gt;
|-&lt;br /&gt;
| Pokemon: Let&#039;s Go! Pikachu-Yellow Right Joy-Con / ポケットモンスター Let&#039;s Go! ピカチュウ || #FFDC00 || #322800&lt;br /&gt;
|-&lt;br /&gt;
| *Nintendo Labo Creators Contest Edition &amp;quot;Cardboard&amp;quot;-Colored Joy-Con || #D7AA73 || #1E1914&lt;br /&gt;
|-&lt;br /&gt;
| **Dragon Quest XI S Lotto Edition Royal-Blue Joy-Con / ドラゴン クエスト XI S （ロト版） || #1473FA || #00000F&lt;br /&gt;
|-&lt;br /&gt;
| **Disney Tsum Tsum Festival Neon-Purple Left Joy-Con / ディズニー ツムツム フェスティバル || #B400E6 || #140014&lt;br /&gt;
|-&lt;br /&gt;
| **Disney Tsum Tsum Festival Neon-Pink Right Joy-Con / ディズニー ツムツム フェスティバル || #FF3278 || #28001E&lt;br /&gt;
|-&lt;br /&gt;
| Animal Crossing: New Horizons Pastel-Green Left Joy-Con / あつまれ どうぶつの森 || #82FF96 || #0A1E0A&lt;br /&gt;
|-&lt;br /&gt;
| Animal Crossing: New Horizons Pastel-Blue Right Joy-Con / あつまれ どうぶつの森 || #96F5F5 || #0A1E28&lt;br /&gt;
|-&lt;br /&gt;
| Fortnite Wildcat Edition Yellow Left Joy-Con || #FFCC00 || #1A1100&lt;br /&gt;
|-&lt;br /&gt;
| Fortnite Wildcat Edition Dark-Blue Right Joy-Con || #0084FF || #000F1E&lt;br /&gt;
|-&lt;br /&gt;
| Mario Red &amp;amp; Blue Edition Red Joy-Con / マリオ レッド × ブルー || #F04614 || #1E1914&lt;br /&gt;
|-&lt;br /&gt;
| Monster Hunter Rise Edition Gray Joy-Con / モンスターハンターライズ || #818282 || #0F0F0F&lt;br /&gt;
|-&lt;br /&gt;
| Fortnite Fleet Force Edition Dark-Blue Left Joy-Con || #0084FF || #000F1E&lt;br /&gt;
|-&lt;br /&gt;
| Fortnite Fleet Force Edition Yellow Right Joy-Con || #FFCC00 || #1A1100&lt;br /&gt;
|-&lt;br /&gt;
| Legend of Zelda: Skyward Sword Dark-Blue Left Joy-Con / ゼルダの伝説 スカイウォードソード || #2D50F0 || #1E0F46&lt;br /&gt;
|-&lt;br /&gt;
| Legend of Zelda: Skyward Sword Dark-Purple Right Joy-Con / ゼルダの伝説 スカイウォードソード || #500FC8 || #00051E&lt;br /&gt;
|-&lt;br /&gt;
| // *(Prize Awarded for Labo Contest - No Retail) // **(Available Japan Only)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Additional Links ==&lt;br /&gt;
[https://github.com/dekuNukem/Nintendo_Switch_Reverse_Engineering Reverse Engineering of the Joy-Con by Github user dekuNukem]&lt;/div&gt;</summary>
		<author><name>Imp Uhrfik Simone</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Joy-Con&amp;diff=11067</id>
		<title>Joy-Con</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Joy-Con&amp;diff=11067"/>
		<updated>2021-07-18T12:32:12Z</updated>

		<summary type="html">&lt;p&gt;Imp Uhrfik Simone: /* Colors */ ...Legend of Zelda: Skyward Sword Color Relabeled Dark-Purple (...instead of Navy-Blue) ...White Joy-Con Hex Values Still Place-Holders, Only&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Joy-Con is the name for the Switch&#039;s primary game controllers. The controllers communicate to the console through bluetooth and can be disconnected from the main unit.&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
The controllers themselves are simple to disassemble and identify.&lt;br /&gt;
[[File:JoyconFront.jpg|400px|thumb|The front of the Joy-Con internal[https://www.ifixit.com/Teardown/Nintendo+Switch+Teardown/78263]]]&lt;br /&gt;
[[File:JoyconRear.jpg|400px|thumb|The rear of the Joy-Con internal[https://www.ifixit.com/Teardown/Nintendo+Switch+Teardown/78263]]]&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Color || Item&lt;br /&gt;
|-&lt;br /&gt;
| Red || Broadcom BCM20734 Bluetooth 4.1/2.4 GHz Transceiver&lt;br /&gt;
|-&lt;br /&gt;
| Orange || STMicroelectronics NFCBEA 812006 33 (Likely NFC reader IC)&lt;br /&gt;
|-&lt;br /&gt;
| Yellow|| Macronix International MX25U4033E 4 Mb CMOS Flash&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Firmware ==&lt;br /&gt;
&#039;&#039;See also: [[Joy-Con Firmware]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The firmware of the Joy-Cons seems to be generic across all instances. Details such as the handedness of the controller and the color is just indicated in a configuration part of the flash. Judging by quick glance at the firmware, it&#039;s probably identical to that used on the Pro Controller as well.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Controller || 1.0.0&lt;br /&gt;
|-&lt;br /&gt;
| Joy-Con Left (Blue) || [[:File:pad.L.bin|flash dump]]&lt;br /&gt;
|-&lt;br /&gt;
| Joy-Con Right (Red) || [[:File:pad.R.bin|flash dump]]&lt;br /&gt;
|}&lt;br /&gt;
The flash is in a patch-ram format. Tools for dealing with it are available [https://github.com/shuffle2/nxpad].&lt;br /&gt;
A dump of the ROM region (taken while firmware was running) can be found [[:File:bcm20734_rom.bin|here]]. Note this is the same SoC used on the other controller models, as well.&lt;br /&gt;
&lt;br /&gt;
== Bluetooth HID ==&lt;br /&gt;
=== Commands ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || PairingOut&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || GetDeviceInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || SetDataFormat&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || LRButtonDetection&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || Page&lt;br /&gt;
|-&lt;br /&gt;
| 0x06 || Reset&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || ClearPairingInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || Shipment&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || SerialFlashRead&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || SerialFlashWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || SerialFlashSectorErase&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || McuReset&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || McuWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || McuResume&lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || McuPollingEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || McuPollingDisable&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || AttachmentWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || AttachmentEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || &lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || SetIndicatorLed&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || GetIndicatorLed&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || SetNotificationLed&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || SensorSleep&lt;br /&gt;
|-&lt;br /&gt;
| 0x41 || SensorConfig&lt;br /&gt;
|-&lt;br /&gt;
| 0x42 || SensorWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x43 || SensorRead&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || MotorEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || GetBatteryVoltage&lt;br /&gt;
|-&lt;br /&gt;
| 0x51 || WriteChargeSetting&lt;br /&gt;
|-&lt;br /&gt;
| 0x52 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || ExtDevWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x59 || GetExtDevInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x5A || ExtDevPollingEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x5B || ExtDevPollingDisable&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C || ExtDevInFormatConfig&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || InternalAttachmentWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x61 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x62 || InternalAttachmentEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x63 || InternalAttachmentPollingEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x64 || InternalAttachmentPollingDisable&lt;br /&gt;
|-&lt;br /&gt;
| 0x80 || Ack&lt;br /&gt;
|-&lt;br /&gt;
| 0x81 || PairingIn&lt;br /&gt;
|-&lt;br /&gt;
| 0x82 || DeviceInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x83 || LRButtonElapsedTime&lt;br /&gt;
|-&lt;br /&gt;
| 0x90 || SerialFlashData&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0 || McuData&lt;br /&gt;
|-&lt;br /&gt;
| 0xA8 || AttachmentData&lt;br /&gt;
|-&lt;br /&gt;
| 0xAA || InternalAttachmentRead&lt;br /&gt;
|-&lt;br /&gt;
| 0xB0 || IndicatorLed&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0 || SensorData&lt;br /&gt;
|-&lt;br /&gt;
| 0xD0 || BatteryVoltage&lt;br /&gt;
|-&lt;br /&gt;
| 0xD8 || ExtDevRead&lt;br /&gt;
|-&lt;br /&gt;
| 0xD9 || ExtDevInfo&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Left &amp;amp; Right Separate Joy-con ===&lt;br /&gt;
When paired directly to a computer over bluetooth, the joy-con both provide identical HID input report descriptor. This does not appear to include motion controls, IR data, or NFC. They both behave as detached single-player controllers.&lt;br /&gt;
&lt;br /&gt;
HID Input Report Descriptor (Hexadecimal):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
00000000: 05010905 A1010601 FF852109 21750895  ....¡...ÿ…!.!u.•&lt;br /&gt;
00000010: 30810285 30093075 08953081 02853109  0..…0.0u.•0..…1.&lt;br /&gt;
00000020: 31750896 69018102 85320932 75089669  1u.–i...…2.2u.–i&lt;br /&gt;
00000030: 01810285 33093375 08966901 8102853F  ...…3.3u.–i...…?&lt;br /&gt;
00000040: 05091901 29101500 25017501 95108102  ....)...%.u.•...&lt;br /&gt;
00000050: 05010939 15002507 75049501 81420509  ...9..%.u.•..B..&lt;br /&gt;
00000060: 75049501 81010501 09300931 09330934  u.•......0.1.3.4&lt;br /&gt;
00000070: 16000027 FFFF0000 75109504 81020601  ...&#039;ÿÿ..u.•.....&lt;br /&gt;
00000080: FF850109 01750895 30910285 10091075  ÿ…...u.•0‘.…...u&lt;br /&gt;
00000090: 08953091 02851109 11750895 30910285  .•0‘.…...u.•0‘.…&lt;br /&gt;
000000A0: 12091275 08953091 02C0               ...u.•0‘.À&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Parsed Bytes || Description&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x01,        || Usage Page (Generic Desktop Ctrls)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x05,        || Usage (Game Pad)&lt;br /&gt;
|-&lt;br /&gt;
|0xA1, 0x01,        || Collection (Application)&lt;br /&gt;
|-&lt;br /&gt;
|0x06, 0x01, 0xFF,  ||   Usage Page (Vendor Defined 0xFF01)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x21,        ||   Report ID (33)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x21,        ||   Usage (0x21)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x30,        ||   Report ID (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x30,        ||   Usage (0x30)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x31,        ||   Report ID (49)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x31,        ||   Usage (0x31)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x96, 0x69, 0x01,  ||   Report Count (361)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x32,        ||   Report ID (50)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x32,        ||   Usage (0x32)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x96, 0x69, 0x01,  ||   Report Count (361)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x33,        ||   Report ID (51)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x33,        ||   Usage (0x33)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x96, 0x69, 0x01,  ||   Report Count (361)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x3F,        ||   Report ID (63)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x09,        ||   Usage Page (Button)&lt;br /&gt;
|-&lt;br /&gt;
|0x19, 0x01,        ||   Usage Minimum (0x01)&lt;br /&gt;
|-&lt;br /&gt;
|0x29, 0x10,        ||   Usage Maximum (0x10)&lt;br /&gt;
|-&lt;br /&gt;
|0x15, 0x00,        ||   Logical Minimum (0)&lt;br /&gt;
|-&lt;br /&gt;
|0x25, 0x01,        ||   Logical Maximum (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x01,        ||   Report Size (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x10,        ||   Report Count (16)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x01,        ||   Usage Page (Generic Desktop Ctrls)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x39,        ||   Usage (Hat switch)&lt;br /&gt;
|-&lt;br /&gt;
|0x15, 0x00,        ||   Logical Minimum (0)&lt;br /&gt;
|-&lt;br /&gt;
|0x25, 0x07,        ||   Logical Maximum (7)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x04,        ||   Report Size (4)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x01,        ||   Report Count (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x42,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,Null State)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x09,        ||   Usage Page (Button)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x04,        ||   Report Size (4)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x01,        ||   Report Count (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x01,        ||   Input (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x01,        ||   Usage Page (Generic Desktop Ctrls)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x30,        ||   Usage (X)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x31,        ||   Usage (Y)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x33,        ||   Usage (Rx)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x34,        ||   Usage (Ry)&lt;br /&gt;
|-&lt;br /&gt;
|0x16, 0x00, 0x00,  ||   Logical Minimum (0)&lt;br /&gt;
|-&lt;br /&gt;
|0x27, 0xFF, 0xFF, 0x00, 0x00,  ||   Logical Maximum (65534)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x10,        ||   Report Size (16)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x04,        ||   Report Count (4)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x06, 0x01, 0xFF,  ||   Usage Page (Vendor Defined 0xFF01)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x01,        ||   Report ID (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x01,        ||   Usage (0x01)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x10,        ||   Report ID (16)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x10,        ||   Usage (0x10)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x11,        ||   Report ID (17)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x11,        ||   Usage (0x11)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x12,        ||   Report ID (18)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x12,        ||   Usage (0x12)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0xC0,              || End Collection&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Colors ==&lt;br /&gt;
HEX codes for the colors shown in the &amp;quot;Controllers&amp;quot; menu of the Switch UI can be found in a Joy-con SPI dump starting at offset 0x6050. Body color is first followed by button color and each is 3 bytes long. These values are able to be re-written with any HEX color value to make the Joy-cons show up as different colors in the UI. The following is a list of official HEX colors recovered from SPI dumps.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Retail Color || Body HEX || Button HEX&lt;br /&gt;
|-&lt;br /&gt;
| Black / ブラック || #313131 || #0F0F0F&lt;br /&gt;
|-&lt;br /&gt;
| Gray / グレー || #828282 || #0F0F0F&lt;br /&gt;
|-&lt;br /&gt;
| Neon Red / ネオンレッド || #FF3C28 || #1E0A0A&lt;br /&gt;
|-&lt;br /&gt;
| Neon Blue / ネオンブルー || #0AB9E6 || #001E1E&lt;br /&gt;
|-&lt;br /&gt;
| Neon Yellow / ネオンイエロー || #E6FF00 || #142800&lt;br /&gt;
|-&lt;br /&gt;
| Neon Green / ネオングリーン || #1EDC00 || #002800&lt;br /&gt;
|-&lt;br /&gt;
| Neon Pink / ネオンピンク || #FF3278 || #28001E&lt;br /&gt;
|-&lt;br /&gt;
| Red / レッド || #E10F00 || #280A0A&lt;br /&gt;
|-&lt;br /&gt;
| Blue / ブルー || #4655F5 || #00000A&lt;br /&gt;
|-&lt;br /&gt;
| Neon Purple / ネオンパープル || #B400E6 || #140014&lt;br /&gt;
|-&lt;br /&gt;
| Neon Orange / ネオンオレンジ || #FAA005 || #0F0A00&lt;br /&gt;
|-&lt;br /&gt;
| White / ホワイト || #FFFFFF || #323232&lt;br /&gt;
|-&lt;br /&gt;
! Special Edition Color || Body HEX || Button HEX&lt;br /&gt;
|-&lt;br /&gt;
| Super Smash Bros. Ultimate Edition Gray Joy-Con / 大乱闘スマッシュブラザーズ SPECIAL || #828282 || #0F0F0F&lt;br /&gt;
|-&lt;br /&gt;
| Pokemon: Let&#039;s Go! Eevee-Brown Left Joy-Con / ポケットモンスター Let&#039;s Go! イーブイ || #C88C32 || #281900&lt;br /&gt;
|-&lt;br /&gt;
| Pokemon: Let&#039;s Go! Pikachu-Yellow Right Joy-Con / ポケットモンスター Let&#039;s Go! ピカチュウ || #FFDC00 || #322800&lt;br /&gt;
|-&lt;br /&gt;
| *Nintendo Labo Creators Contest Edition &amp;quot;Cardboard&amp;quot;-Colored Joy-Con || #D7AA73 || #1E1914&lt;br /&gt;
|-&lt;br /&gt;
| **Dragon Quest XI S Lotto Edition Royal-Blue Joy-Con / ドラゴン クエスト XI S （ロト版） || #1473FA || #00000F&lt;br /&gt;
|-&lt;br /&gt;
| **Disney Tsum Tsum Festival Neon-Purple Left Joy-Con / ディズニー ツムツム フェスティバル || #B400E6 || #140014&lt;br /&gt;
|-&lt;br /&gt;
| **Disney Tsum Tsum Festival Neon-Pink Right Joy-Con / ディズニー ツムツム フェスティバル || #FF3278 || #28001E&lt;br /&gt;
|-&lt;br /&gt;
| Animal Crossing: New Horizons Pastel-Green Left Joy-Con / あつまれ どうぶつの森 || #82FF96 || #0A1E0A&lt;br /&gt;
|-&lt;br /&gt;
| Animal Crossing: New Horizons Pastel-Blue Right Joy-Con / あつまれ どうぶつの森 || #96F5F5 || #0A1E28&lt;br /&gt;
|-&lt;br /&gt;
| Fortnite Wildcat Edition Yellow Left Joy-Con || #FFCC00 || #1A1100&lt;br /&gt;
|-&lt;br /&gt;
| Fortnite Wildcat Edition Dark-Blue Right Joy-Con || #0084FF || #000F1E&lt;br /&gt;
|-&lt;br /&gt;
| Mario Red &amp;amp; Blue Edition Red Joy-Con / マリオ レッド × ブルー || #F04614 || #1E1914&lt;br /&gt;
|-&lt;br /&gt;
| Monster Hunter Rise Edition Gray Joy-Con / モンスターハンターライズ || #828282 || #0F0F0F&lt;br /&gt;
|-&lt;br /&gt;
| Fortnite Fleet Force Edition Dark-Blue Left Joy-Con || #0084FF || #000F1E&lt;br /&gt;
|-&lt;br /&gt;
| Fortnite Fleet Force Edition Yellow Right Joy-Con || #FFCC00 || #1A1100&lt;br /&gt;
|-&lt;br /&gt;
| Legend of Zelda: Skyward Sword Dark-Blue Left Joy-Con / ゼルダの伝説 スカイウォードソード || #2D50F0 || #1E0F46&lt;br /&gt;
|-&lt;br /&gt;
| Legend of Zelda: Skyward Sword Dark-Purple Right Joy-Con / ゼルダの伝説 スカイウォードソード || #500FC8 || #00051E&lt;br /&gt;
|-&lt;br /&gt;
| // *(Prize Awarded for Labo Contest - No Retail) // **(Available Japan Only)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Additional Links ==&lt;br /&gt;
[https://github.com/dekuNukem/Nintendo_Switch_Reverse_Engineering Reverse Engineering of the Joy-Con by Github user dekuNukem]&lt;/div&gt;</summary>
		<author><name>Imp Uhrfik Simone</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Joy-Con&amp;diff=11066</id>
		<title>Joy-Con</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Joy-Con&amp;diff=11066"/>
		<updated>2021-07-18T12:12:22Z</updated>

		<summary type="html">&lt;p&gt;Imp Uhrfik Simone: /* Colors */ ...White Joy-Con Place-Holder Hex Values (...until actual White Jo-Con Hex Values are known)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Joy-Con is the name for the Switch&#039;s primary game controllers. The controllers communicate to the console through bluetooth and can be disconnected from the main unit.&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
The controllers themselves are simple to disassemble and identify.&lt;br /&gt;
[[File:JoyconFront.jpg|400px|thumb|The front of the Joy-Con internal[https://www.ifixit.com/Teardown/Nintendo+Switch+Teardown/78263]]]&lt;br /&gt;
[[File:JoyconRear.jpg|400px|thumb|The rear of the Joy-Con internal[https://www.ifixit.com/Teardown/Nintendo+Switch+Teardown/78263]]]&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Color || Item&lt;br /&gt;
|-&lt;br /&gt;
| Red || Broadcom BCM20734 Bluetooth 4.1/2.4 GHz Transceiver&lt;br /&gt;
|-&lt;br /&gt;
| Orange || STMicroelectronics NFCBEA 812006 33 (Likely NFC reader IC)&lt;br /&gt;
|-&lt;br /&gt;
| Yellow|| Macronix International MX25U4033E 4 Mb CMOS Flash&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Firmware ==&lt;br /&gt;
&#039;&#039;See also: [[Joy-Con Firmware]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The firmware of the Joy-Cons seems to be generic across all instances. Details such as the handedness of the controller and the color is just indicated in a configuration part of the flash. Judging by quick glance at the firmware, it&#039;s probably identical to that used on the Pro Controller as well.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Controller || 1.0.0&lt;br /&gt;
|-&lt;br /&gt;
| Joy-Con Left (Blue) || [[:File:pad.L.bin|flash dump]]&lt;br /&gt;
|-&lt;br /&gt;
| Joy-Con Right (Red) || [[:File:pad.R.bin|flash dump]]&lt;br /&gt;
|}&lt;br /&gt;
The flash is in a patch-ram format. Tools for dealing with it are available [https://github.com/shuffle2/nxpad].&lt;br /&gt;
A dump of the ROM region (taken while firmware was running) can be found [[:File:bcm20734_rom.bin|here]]. Note this is the same SoC used on the other controller models, as well.&lt;br /&gt;
&lt;br /&gt;
== Bluetooth HID ==&lt;br /&gt;
=== Commands ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || PairingOut&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || GetDeviceInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || SetDataFormat&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || LRButtonDetection&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || Page&lt;br /&gt;
|-&lt;br /&gt;
| 0x06 || Reset&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || ClearPairingInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || Shipment&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || SerialFlashRead&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || SerialFlashWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || SerialFlashSectorErase&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || McuReset&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || McuWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || McuResume&lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || McuPollingEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || McuPollingDisable&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || AttachmentWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || AttachmentEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || &lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || SetIndicatorLed&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || GetIndicatorLed&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || SetNotificationLed&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || SensorSleep&lt;br /&gt;
|-&lt;br /&gt;
| 0x41 || SensorConfig&lt;br /&gt;
|-&lt;br /&gt;
| 0x42 || SensorWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x43 || SensorRead&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || MotorEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || GetBatteryVoltage&lt;br /&gt;
|-&lt;br /&gt;
| 0x51 || WriteChargeSetting&lt;br /&gt;
|-&lt;br /&gt;
| 0x52 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || ExtDevWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x59 || GetExtDevInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x5A || ExtDevPollingEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x5B || ExtDevPollingDisable&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C || ExtDevInFormatConfig&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || InternalAttachmentWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x61 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x62 || InternalAttachmentEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x63 || InternalAttachmentPollingEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x64 || InternalAttachmentPollingDisable&lt;br /&gt;
|-&lt;br /&gt;
| 0x80 || Ack&lt;br /&gt;
|-&lt;br /&gt;
| 0x81 || PairingIn&lt;br /&gt;
|-&lt;br /&gt;
| 0x82 || DeviceInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x83 || LRButtonElapsedTime&lt;br /&gt;
|-&lt;br /&gt;
| 0x90 || SerialFlashData&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0 || McuData&lt;br /&gt;
|-&lt;br /&gt;
| 0xA8 || AttachmentData&lt;br /&gt;
|-&lt;br /&gt;
| 0xAA || InternalAttachmentRead&lt;br /&gt;
|-&lt;br /&gt;
| 0xB0 || IndicatorLed&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0 || SensorData&lt;br /&gt;
|-&lt;br /&gt;
| 0xD0 || BatteryVoltage&lt;br /&gt;
|-&lt;br /&gt;
| 0xD8 || ExtDevRead&lt;br /&gt;
|-&lt;br /&gt;
| 0xD9 || ExtDevInfo&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Left &amp;amp; Right Separate Joy-con ===&lt;br /&gt;
When paired directly to a computer over bluetooth, the joy-con both provide identical HID input report descriptor. This does not appear to include motion controls, IR data, or NFC. They both behave as detached single-player controllers.&lt;br /&gt;
&lt;br /&gt;
HID Input Report Descriptor (Hexadecimal):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
00000000: 05010905 A1010601 FF852109 21750895  ....¡...ÿ…!.!u.•&lt;br /&gt;
00000010: 30810285 30093075 08953081 02853109  0..…0.0u.•0..…1.&lt;br /&gt;
00000020: 31750896 69018102 85320932 75089669  1u.–i...…2.2u.–i&lt;br /&gt;
00000030: 01810285 33093375 08966901 8102853F  ...…3.3u.–i...…?&lt;br /&gt;
00000040: 05091901 29101500 25017501 95108102  ....)...%.u.•...&lt;br /&gt;
00000050: 05010939 15002507 75049501 81420509  ...9..%.u.•..B..&lt;br /&gt;
00000060: 75049501 81010501 09300931 09330934  u.•......0.1.3.4&lt;br /&gt;
00000070: 16000027 FFFF0000 75109504 81020601  ...&#039;ÿÿ..u.•.....&lt;br /&gt;
00000080: FF850109 01750895 30910285 10091075  ÿ…...u.•0‘.…...u&lt;br /&gt;
00000090: 08953091 02851109 11750895 30910285  .•0‘.…...u.•0‘.…&lt;br /&gt;
000000A0: 12091275 08953091 02C0               ...u.•0‘.À&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Parsed Bytes || Description&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x01,        || Usage Page (Generic Desktop Ctrls)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x05,        || Usage (Game Pad)&lt;br /&gt;
|-&lt;br /&gt;
|0xA1, 0x01,        || Collection (Application)&lt;br /&gt;
|-&lt;br /&gt;
|0x06, 0x01, 0xFF,  ||   Usage Page (Vendor Defined 0xFF01)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x21,        ||   Report ID (33)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x21,        ||   Usage (0x21)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x30,        ||   Report ID (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x30,        ||   Usage (0x30)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x31,        ||   Report ID (49)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x31,        ||   Usage (0x31)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x96, 0x69, 0x01,  ||   Report Count (361)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x32,        ||   Report ID (50)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x32,        ||   Usage (0x32)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x96, 0x69, 0x01,  ||   Report Count (361)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x33,        ||   Report ID (51)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x33,        ||   Usage (0x33)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x96, 0x69, 0x01,  ||   Report Count (361)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x3F,        ||   Report ID (63)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x09,        ||   Usage Page (Button)&lt;br /&gt;
|-&lt;br /&gt;
|0x19, 0x01,        ||   Usage Minimum (0x01)&lt;br /&gt;
|-&lt;br /&gt;
|0x29, 0x10,        ||   Usage Maximum (0x10)&lt;br /&gt;
|-&lt;br /&gt;
|0x15, 0x00,        ||   Logical Minimum (0)&lt;br /&gt;
|-&lt;br /&gt;
|0x25, 0x01,        ||   Logical Maximum (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x01,        ||   Report Size (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x10,        ||   Report Count (16)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x01,        ||   Usage Page (Generic Desktop Ctrls)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x39,        ||   Usage (Hat switch)&lt;br /&gt;
|-&lt;br /&gt;
|0x15, 0x00,        ||   Logical Minimum (0)&lt;br /&gt;
|-&lt;br /&gt;
|0x25, 0x07,        ||   Logical Maximum (7)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x04,        ||   Report Size (4)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x01,        ||   Report Count (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x42,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,Null State)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x09,        ||   Usage Page (Button)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x04,        ||   Report Size (4)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x01,        ||   Report Count (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x01,        ||   Input (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x01,        ||   Usage Page (Generic Desktop Ctrls)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x30,        ||   Usage (X)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x31,        ||   Usage (Y)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x33,        ||   Usage (Rx)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x34,        ||   Usage (Ry)&lt;br /&gt;
|-&lt;br /&gt;
|0x16, 0x00, 0x00,  ||   Logical Minimum (0)&lt;br /&gt;
|-&lt;br /&gt;
|0x27, 0xFF, 0xFF, 0x00, 0x00,  ||   Logical Maximum (65534)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x10,        ||   Report Size (16)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x04,        ||   Report Count (4)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x06, 0x01, 0xFF,  ||   Usage Page (Vendor Defined 0xFF01)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x01,        ||   Report ID (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x01,        ||   Usage (0x01)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x10,        ||   Report ID (16)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x10,        ||   Usage (0x10)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x11,        ||   Report ID (17)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x11,        ||   Usage (0x11)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x12,        ||   Report ID (18)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x12,        ||   Usage (0x12)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0xC0,              || End Collection&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Colors ==&lt;br /&gt;
HEX codes for the colors shown in the &amp;quot;Controllers&amp;quot; menu of the Switch UI can be found in a Joy-con SPI dump starting at offset 0x6050. Body color is first followed by button color and each is 3 bytes long. These values are able to be re-written with any HEX color value to make the Joy-cons show up as different colors in the UI. The following is a list of official HEX colors recovered from SPI dumps.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Retail Color || Body HEX || Button HEX&lt;br /&gt;
|-&lt;br /&gt;
| Black / ブラック || #313131 || #0F0F0F&lt;br /&gt;
|-&lt;br /&gt;
| Gray / グレー || #828282 || #0F0F0F&lt;br /&gt;
|-&lt;br /&gt;
| Neon Red / ネオンレッド || #FF3C28 || #1E0A0A&lt;br /&gt;
|-&lt;br /&gt;
| Neon Blue / ネオンブルー || #0AB9E6 || #001E1E&lt;br /&gt;
|-&lt;br /&gt;
| Neon Yellow / ネオンイエロー || #E6FF00 || #142800&lt;br /&gt;
|-&lt;br /&gt;
| Neon Green / ネオングリーン || #1EDC00 || #002800&lt;br /&gt;
|-&lt;br /&gt;
| Neon Pink / ネオンピンク || #FF3278 || #28001E&lt;br /&gt;
|-&lt;br /&gt;
| Red / レッド || #E10F00 || #280A0A&lt;br /&gt;
|-&lt;br /&gt;
| Blue / ブルー || #4655F5 || #00000A&lt;br /&gt;
|-&lt;br /&gt;
| Neon Purple / ネオンパープル || #B400E6 || #140014&lt;br /&gt;
|-&lt;br /&gt;
| Neon Orange / ネオンオレンジ || #FAA005 || #0F0A00&lt;br /&gt;
|-&lt;br /&gt;
| White / ホワイト || #FFFFFF || #323232&lt;br /&gt;
|-&lt;br /&gt;
! Special Edition Color || Body HEX || Button HEX&lt;br /&gt;
|-&lt;br /&gt;
| Super Smash Bros. Ultimate Edition Gray Joy-Con / 大乱闘スマッシュブラザーズ SPECIAL || #828282 || #0F0F0F&lt;br /&gt;
|-&lt;br /&gt;
| Pokemon: Let&#039;s Go! Eevee-Brown Left Joy-Con / ポケットモンスター Let&#039;s Go! イーブイ || #C88C32 || #281900&lt;br /&gt;
|-&lt;br /&gt;
| Pokemon: Let&#039;s Go! Pikachu-Yellow Right Joy-Con / ポケットモンスター Let&#039;s Go! ピカチュウ || #FFDC00 || #322800&lt;br /&gt;
|-&lt;br /&gt;
| *Nintendo Labo Creators Contest Edition &amp;quot;Cardboard&amp;quot;-Colored Joy-Con || #D7AA73 || #1E1914&lt;br /&gt;
|-&lt;br /&gt;
| **Dragon Quest XI S Lotto Edition Royal-Blue Joy-Con / ドラゴン クエスト XI S （ロト版） || #1473FA || #00000F&lt;br /&gt;
|-&lt;br /&gt;
| **Disney Tsum Tsum Festival Neon-Purple Left Joy-Con / ディズニー ツムツム フェスティバル || #B400E6 || #140014&lt;br /&gt;
|-&lt;br /&gt;
| **Disney Tsum Tsum Festival Neon-Pink Right Joy-Con / ディズニー ツムツム フェスティバル || #FF3278 || #28001E&lt;br /&gt;
|-&lt;br /&gt;
| Animal Crossing: New Horizons Pastel-Green Left Joy-Con / あつまれ どうぶつの森 || #82FF96 || #0A1E0A&lt;br /&gt;
|-&lt;br /&gt;
| Animal Crossing: New Horizons Pastel-Blue Right Joy-Con / あつまれ どうぶつの森 || #96F5F5 || #0A1E28&lt;br /&gt;
|-&lt;br /&gt;
| Fortnite Wildcat Edition Yellow Left Joy-Con || #FFCC00 || #1A1100&lt;br /&gt;
|-&lt;br /&gt;
| Fortnite Wildcat Edition Blue Right Joy-Con || #0084FF || #000F1E&lt;br /&gt;
|-&lt;br /&gt;
| Mario Red &amp;amp; Blue Edition Red Joy-Con / マリオ レッド × ブルー || #F04614 || #1E1914&lt;br /&gt;
|-&lt;br /&gt;
| Monster Hunter Rise Edition Gray Joy-Con / モンスターハンターライズ || #828282 || #0F0F0F&lt;br /&gt;
|-&lt;br /&gt;
| Fortnite Fleet Force Edition Blue Left Joy-Con || #0084FF || #000F1E&lt;br /&gt;
|-&lt;br /&gt;
| Fortnite Fleet Force Edition Yellow Right Joy-Con || #FFCC00 || #1A1100&lt;br /&gt;
|-&lt;br /&gt;
| Legend of Zelda: Skyward Sword Dark-Blue Left Joy-Con / ゼルダの伝説 スカイウォードソード || #2D50F0 || #1E0F46&lt;br /&gt;
|-&lt;br /&gt;
| Legend of Zelda: Skyward Sword Navy-Blue Right Joy-Con / ゼルダの伝説 スカイウォードソード || #500FC8 || #00051E&lt;br /&gt;
|-&lt;br /&gt;
| // *(Prize Awarded for Labo Contest - No Retail) // **(Available Japan Only)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Additional Links ==&lt;br /&gt;
[https://github.com/dekuNukem/Nintendo_Switch_Reverse_Engineering Reverse Engineering of the Joy-Con by Github user dekuNukem]&lt;/div&gt;</summary>
		<author><name>Imp Uhrfik Simone</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Joy-Con&amp;diff=11065</id>
		<title>Joy-Con</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Joy-Con&amp;diff=11065"/>
		<updated>2021-07-16T05:19:46Z</updated>

		<summary type="html">&lt;p&gt;Imp Uhrfik Simone: /* Colors */ ...temporary Hex-Value Place-Holders for upcoming LoZ:Skyward Sword Joy-Con &amp;amp; NS-OLED White Joy-Con&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Joy-Con is the name for the Switch&#039;s primary game controllers. The controllers communicate to the console through bluetooth and can be disconnected from the main unit.&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
The controllers themselves are simple to disassemble and identify.&lt;br /&gt;
[[File:JoyconFront.jpg|400px|thumb|The front of the Joy-Con internal[https://www.ifixit.com/Teardown/Nintendo+Switch+Teardown/78263]]]&lt;br /&gt;
[[File:JoyconRear.jpg|400px|thumb|The rear of the Joy-Con internal[https://www.ifixit.com/Teardown/Nintendo+Switch+Teardown/78263]]]&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Color || Item&lt;br /&gt;
|-&lt;br /&gt;
| Red || Broadcom BCM20734 Bluetooth 4.1/2.4 GHz Transceiver&lt;br /&gt;
|-&lt;br /&gt;
| Orange || STMicroelectronics NFCBEA 812006 33 (Likely NFC reader IC)&lt;br /&gt;
|-&lt;br /&gt;
| Yellow|| Macronix International MX25U4033E 4 Mb CMOS Flash&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Firmware ==&lt;br /&gt;
&#039;&#039;See also: [[Joy-Con Firmware]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The firmware of the Joy-Cons seems to be generic across all instances. Details such as the handedness of the controller and the color is just indicated in a configuration part of the flash. Judging by quick glance at the firmware, it&#039;s probably identical to that used on the Pro Controller as well.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Controller || 1.0.0&lt;br /&gt;
|-&lt;br /&gt;
| Joy-Con Left (Blue) || [[:File:pad.L.bin|flash dump]]&lt;br /&gt;
|-&lt;br /&gt;
| Joy-Con Right (Red) || [[:File:pad.R.bin|flash dump]]&lt;br /&gt;
|}&lt;br /&gt;
The flash is in a patch-ram format. Tools for dealing with it are available [https://github.com/shuffle2/nxpad].&lt;br /&gt;
A dump of the ROM region (taken while firmware was running) can be found [[:File:bcm20734_rom.bin|here]]. Note this is the same SoC used on the other controller models, as well.&lt;br /&gt;
&lt;br /&gt;
== Bluetooth HID ==&lt;br /&gt;
=== Commands ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || PairingOut&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || GetDeviceInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || SetDataFormat&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || LRButtonDetection&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || Page&lt;br /&gt;
|-&lt;br /&gt;
| 0x06 || Reset&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || ClearPairingInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || Shipment&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || SerialFlashRead&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || SerialFlashWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || SerialFlashSectorErase&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || McuReset&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || McuWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || McuResume&lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || McuPollingEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || McuPollingDisable&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || AttachmentWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || AttachmentEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || &lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || SetIndicatorLed&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || GetIndicatorLed&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || SetNotificationLed&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || SensorSleep&lt;br /&gt;
|-&lt;br /&gt;
| 0x41 || SensorConfig&lt;br /&gt;
|-&lt;br /&gt;
| 0x42 || SensorWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x43 || SensorRead&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || MotorEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || GetBatteryVoltage&lt;br /&gt;
|-&lt;br /&gt;
| 0x51 || WriteChargeSetting&lt;br /&gt;
|-&lt;br /&gt;
| 0x52 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || ExtDevWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x59 || GetExtDevInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x5A || ExtDevPollingEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x5B || ExtDevPollingDisable&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C || ExtDevInFormatConfig&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || InternalAttachmentWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x61 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x62 || InternalAttachmentEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x63 || InternalAttachmentPollingEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x64 || InternalAttachmentPollingDisable&lt;br /&gt;
|-&lt;br /&gt;
| 0x80 || Ack&lt;br /&gt;
|-&lt;br /&gt;
| 0x81 || PairingIn&lt;br /&gt;
|-&lt;br /&gt;
| 0x82 || DeviceInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x83 || LRButtonElapsedTime&lt;br /&gt;
|-&lt;br /&gt;
| 0x90 || SerialFlashData&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0 || McuData&lt;br /&gt;
|-&lt;br /&gt;
| 0xA8 || AttachmentData&lt;br /&gt;
|-&lt;br /&gt;
| 0xAA || InternalAttachmentRead&lt;br /&gt;
|-&lt;br /&gt;
| 0xB0 || IndicatorLed&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0 || SensorData&lt;br /&gt;
|-&lt;br /&gt;
| 0xD0 || BatteryVoltage&lt;br /&gt;
|-&lt;br /&gt;
| 0xD8 || ExtDevRead&lt;br /&gt;
|-&lt;br /&gt;
| 0xD9 || ExtDevInfo&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Left &amp;amp; Right Separate Joy-con ===&lt;br /&gt;
When paired directly to a computer over bluetooth, the joy-con both provide identical HID input report descriptor. This does not appear to include motion controls, IR data, or NFC. They both behave as detached single-player controllers.&lt;br /&gt;
&lt;br /&gt;
HID Input Report Descriptor (Hexadecimal):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
00000000: 05010905 A1010601 FF852109 21750895  ....¡...ÿ…!.!u.•&lt;br /&gt;
00000010: 30810285 30093075 08953081 02853109  0..…0.0u.•0..…1.&lt;br /&gt;
00000020: 31750896 69018102 85320932 75089669  1u.–i...…2.2u.–i&lt;br /&gt;
00000030: 01810285 33093375 08966901 8102853F  ...…3.3u.–i...…?&lt;br /&gt;
00000040: 05091901 29101500 25017501 95108102  ....)...%.u.•...&lt;br /&gt;
00000050: 05010939 15002507 75049501 81420509  ...9..%.u.•..B..&lt;br /&gt;
00000060: 75049501 81010501 09300931 09330934  u.•......0.1.3.4&lt;br /&gt;
00000070: 16000027 FFFF0000 75109504 81020601  ...&#039;ÿÿ..u.•.....&lt;br /&gt;
00000080: FF850109 01750895 30910285 10091075  ÿ…...u.•0‘.…...u&lt;br /&gt;
00000090: 08953091 02851109 11750895 30910285  .•0‘.…...u.•0‘.…&lt;br /&gt;
000000A0: 12091275 08953091 02C0               ...u.•0‘.À&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Parsed Bytes || Description&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x01,        || Usage Page (Generic Desktop Ctrls)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x05,        || Usage (Game Pad)&lt;br /&gt;
|-&lt;br /&gt;
|0xA1, 0x01,        || Collection (Application)&lt;br /&gt;
|-&lt;br /&gt;
|0x06, 0x01, 0xFF,  ||   Usage Page (Vendor Defined 0xFF01)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x21,        ||   Report ID (33)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x21,        ||   Usage (0x21)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x30,        ||   Report ID (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x30,        ||   Usage (0x30)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x31,        ||   Report ID (49)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x31,        ||   Usage (0x31)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x96, 0x69, 0x01,  ||   Report Count (361)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x32,        ||   Report ID (50)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x32,        ||   Usage (0x32)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x96, 0x69, 0x01,  ||   Report Count (361)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x33,        ||   Report ID (51)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x33,        ||   Usage (0x33)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x96, 0x69, 0x01,  ||   Report Count (361)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x3F,        ||   Report ID (63)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x09,        ||   Usage Page (Button)&lt;br /&gt;
|-&lt;br /&gt;
|0x19, 0x01,        ||   Usage Minimum (0x01)&lt;br /&gt;
|-&lt;br /&gt;
|0x29, 0x10,        ||   Usage Maximum (0x10)&lt;br /&gt;
|-&lt;br /&gt;
|0x15, 0x00,        ||   Logical Minimum (0)&lt;br /&gt;
|-&lt;br /&gt;
|0x25, 0x01,        ||   Logical Maximum (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x01,        ||   Report Size (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x10,        ||   Report Count (16)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x01,        ||   Usage Page (Generic Desktop Ctrls)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x39,        ||   Usage (Hat switch)&lt;br /&gt;
|-&lt;br /&gt;
|0x15, 0x00,        ||   Logical Minimum (0)&lt;br /&gt;
|-&lt;br /&gt;
|0x25, 0x07,        ||   Logical Maximum (7)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x04,        ||   Report Size (4)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x01,        ||   Report Count (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x42,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,Null State)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x09,        ||   Usage Page (Button)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x04,        ||   Report Size (4)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x01,        ||   Report Count (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x01,        ||   Input (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x01,        ||   Usage Page (Generic Desktop Ctrls)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x30,        ||   Usage (X)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x31,        ||   Usage (Y)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x33,        ||   Usage (Rx)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x34,        ||   Usage (Ry)&lt;br /&gt;
|-&lt;br /&gt;
|0x16, 0x00, 0x00,  ||   Logical Minimum (0)&lt;br /&gt;
|-&lt;br /&gt;
|0x27, 0xFF, 0xFF, 0x00, 0x00,  ||   Logical Maximum (65534)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x10,        ||   Report Size (16)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x04,        ||   Report Count (4)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x06, 0x01, 0xFF,  ||   Usage Page (Vendor Defined 0xFF01)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x01,        ||   Report ID (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x01,        ||   Usage (0x01)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x10,        ||   Report ID (16)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x10,        ||   Usage (0x10)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x11,        ||   Report ID (17)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x11,        ||   Usage (0x11)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x12,        ||   Report ID (18)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x12,        ||   Usage (0x12)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0xC0,              || End Collection&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Colors ==&lt;br /&gt;
HEX codes for the colors shown in the &amp;quot;Controllers&amp;quot; menu of the Switch UI can be found in a Joy-con SPI dump starting at offset 0x6050. Body color is first followed by button color and each is 3 bytes long. These values are able to be re-written with any HEX color value to make the Joy-cons show up as different colors in the UI. The following is a list of official HEX colors recovered from SPI dumps.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Color Name || Body HEX || Button HEX&lt;br /&gt;
|-&lt;br /&gt;
| Black / ブラック || #313131 || #0F0F0F&lt;br /&gt;
|-&lt;br /&gt;
| Gray / グレー || #828282 || #0F0F0F&lt;br /&gt;
|-&lt;br /&gt;
| Neon Red / ネオンレッド || #FF3C28 || #1E0A0A&lt;br /&gt;
|-&lt;br /&gt;
| Neon Blue / ネオンブルー || #0AB9E6 || #001E1E&lt;br /&gt;
|-&lt;br /&gt;
| Neon Yellow / ネオンイエロー || #E6FF00 || #142800&lt;br /&gt;
|-&lt;br /&gt;
| Neon Green / ネオングリーン || #1EDC00 || #002800&lt;br /&gt;
|-&lt;br /&gt;
| Neon Pink / ネオンピンク || #FF3278 || #28001E&lt;br /&gt;
|-&lt;br /&gt;
| Red / レッド || #E10F00 || #280A0A&lt;br /&gt;
|-&lt;br /&gt;
| Blue / ブルー || #4655F5 || #00000A&lt;br /&gt;
|-&lt;br /&gt;
| Neon Purple / ネオンパープル || #B400E6 || #140014&lt;br /&gt;
|-&lt;br /&gt;
| Neon Orange / ネオンオレンジ || #FAA005 || #0F0A00&lt;br /&gt;
|-&lt;br /&gt;
| White / ホワイト || #FFFFFF || #323232&lt;br /&gt;
|-&lt;br /&gt;
| Pokemon: Let&#039;s Go! Eevee-Brown Left Joy-Con / ポケットモンスター Let&#039;s Go! イーブイ || #C88C32 || #281900&lt;br /&gt;
|-&lt;br /&gt;
| Pokemon: Let&#039;s Go! Pikachu-Yellow Right Joy-Con / ポケットモンスター Let&#039;s Go! ピカチュウ || #FFDC00 || #322800&lt;br /&gt;
|-&lt;br /&gt;
| Nintendo Labo Creators Contest Edition &amp;quot;Cardboard&amp;quot;-Colored Joy-Con || #D7AA73 || #1E1914&lt;br /&gt;
|-&lt;br /&gt;
| Animal Crossing: New Horizons Pastel-Green Left Joy-Con / あつまれ どうぶつの森 || #82FF96 || #0A1E0A&lt;br /&gt;
|-&lt;br /&gt;
| Animal Crossing: New Horizons Pastel-Blue Right Joy-Con / あつまれ どうぶつの森 || #96F5F5 || #0A1E28&lt;br /&gt;
|-&lt;br /&gt;
| Fortnite Wildcat Nana-Yellow Left Joy-Con || #FFCC00 || #1A1100&lt;br /&gt;
|-&lt;br /&gt;
| Fortnite Wildcat Dark-Blue Right Joy-Con || #0084FF || #000F1E&lt;br /&gt;
|-&lt;br /&gt;
| Mario Red &amp;amp; Blue Edition Red Joy-Con || #F04614 || #1E1914&lt;br /&gt;
|-&lt;br /&gt;
| Fortnite Fleet Force Dark-Blue Left Joy-Con || #0084FF || #000F1E&lt;br /&gt;
|-&lt;br /&gt;
| Fortnite Fleet Force Nana-Yellow Right Joy-Con || #FFCC00 || #1A1100&lt;br /&gt;
|-&lt;br /&gt;
| Legend of Zelda: Skyward Sword Dark-Blue Left Joy-Con || #1473FA || #00000F&lt;br /&gt;
|-&lt;br /&gt;
| Legend of Zelda: Skyward Sword Navy-Blue Right Joy-Con || #4655F5 || #00000A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Additional Links ==&lt;br /&gt;
[https://github.com/dekuNukem/Nintendo_Switch_Reverse_Engineering Reverse Engineering of the Joy-Con by Github user dekuNukem]&lt;/div&gt;</summary>
		<author><name>Imp Uhrfik Simone</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Joy-Con&amp;diff=10969</id>
		<title>Joy-Con</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Joy-Con&amp;diff=10969"/>
		<updated>2021-06-04T23:45:01Z</updated>

		<summary type="html">&lt;p&gt;Imp Uhrfik Simone: /* Colors */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Joy-Con is the name for the Switch&#039;s primary game controllers. The controllers communicate to the console through bluetooth and can be disconnected from the main unit.&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
The controllers themselves are simple to disassemble and identify.&lt;br /&gt;
[[File:JoyconFront.jpg|400px|thumb|The front of the Joy-Con internal[https://www.ifixit.com/Teardown/Nintendo+Switch+Teardown/78263]]]&lt;br /&gt;
[[File:JoyconRear.jpg|400px|thumb|The rear of the Joy-Con internal[https://www.ifixit.com/Teardown/Nintendo+Switch+Teardown/78263]]]&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Color || Item&lt;br /&gt;
|-&lt;br /&gt;
| Red || Broadcom BCM20734 Bluetooth 4.1/2.4 GHz Transceiver&lt;br /&gt;
|-&lt;br /&gt;
| Orange || STMicroelectronics NFCBEA 812006 33 (Likely NFC reader IC)&lt;br /&gt;
|-&lt;br /&gt;
| Yellow|| Macronix International MX25U4033E 4 Mb CMOS Flash&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Firmware ==&lt;br /&gt;
&#039;&#039;See also: [[Joy-Con Firmware]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The firmware of the Joy-Cons seems to be generic across all instances. Details such as the handedness of the controller and the color is just indicated in a configuration part of the flash. Judging by quick glance at the firmware, it&#039;s probably identical to that used on the Pro Controller as well.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Controller || 1.0.0&lt;br /&gt;
|-&lt;br /&gt;
| Joy-Con Left (Blue) || [[:File:pad.L.bin|flash dump]]&lt;br /&gt;
|-&lt;br /&gt;
| Joy-Con Right (Red) || [[:File:pad.R.bin|flash dump]]&lt;br /&gt;
|}&lt;br /&gt;
The flash is in a patch-ram format. Tools for dealing with it are available [https://github.com/shuffle2/nxpad].&lt;br /&gt;
A dump of the ROM region (taken while firmware was running) can be found [[:File:bcm20734_rom.bin|here]]. Note this is the same SoC used on the other controller models, as well.&lt;br /&gt;
&lt;br /&gt;
== Bluetooth HID ==&lt;br /&gt;
=== Commands ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || PairingOut&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || GetDeviceInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || SetDataFormat&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || LRButtonDetection&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || Page&lt;br /&gt;
|-&lt;br /&gt;
| 0x06 || Reset&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || ClearPairingInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || Shipment&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || SerialFlashRead&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || SerialFlashWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || SerialFlashSectorErase&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || McuReset&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || McuWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || McuResume&lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || McuPollingEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || McuPollingDisable&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || AttachmentWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || AttachmentEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || &lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || SetIndicatorLed&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || GetIndicatorLed&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || SetNotificationLed&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || SensorSleep&lt;br /&gt;
|-&lt;br /&gt;
| 0x41 || SensorConfig&lt;br /&gt;
|-&lt;br /&gt;
| 0x42 || SensorWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x43 || SensorRead&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || MotorEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || GetBatteryVoltage&lt;br /&gt;
|-&lt;br /&gt;
| 0x51 || WriteChargeSetting&lt;br /&gt;
|-&lt;br /&gt;
| 0x52 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || ExtDevWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x59 || GetExtDevInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x5A || ExtDevPollingEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x5B || ExtDevPollingDisable&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C || ExtDevInFormatConfig&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || InternalAttachmentWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x61 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x62 || InternalAttachmentEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x63 || InternalAttachmentPollingEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x64 || InternalAttachmentPollingDisable&lt;br /&gt;
|-&lt;br /&gt;
| 0x80 || Ack&lt;br /&gt;
|-&lt;br /&gt;
| 0x81 || PairingIn&lt;br /&gt;
|-&lt;br /&gt;
| 0x82 || DeviceInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x83 || LRButtonElapsedTime&lt;br /&gt;
|-&lt;br /&gt;
| 0x90 || SerialFlashData&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0 || McuData&lt;br /&gt;
|-&lt;br /&gt;
| 0xA8 || AttachmentData&lt;br /&gt;
|-&lt;br /&gt;
| 0xAA || InternalAttachmentRead&lt;br /&gt;
|-&lt;br /&gt;
| 0xB0 || IndicatorLed&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0 || SensorData&lt;br /&gt;
|-&lt;br /&gt;
| 0xD0 || BatteryVoltage&lt;br /&gt;
|-&lt;br /&gt;
| 0xD8 || ExtDevRead&lt;br /&gt;
|-&lt;br /&gt;
| 0xD9 || ExtDevInfo&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Left &amp;amp; Right Separate Joy-con ===&lt;br /&gt;
When paired directly to a computer over bluetooth, the joy-con both provide identical HID input report descriptor. This does not appear to include motion controls, IR data, or NFC. They both behave as detached single-player controllers.&lt;br /&gt;
&lt;br /&gt;
HID Input Report Descriptor (Hexadecimal):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
00000000: 05010905 A1010601 FF852109 21750895  ....¡...ÿ…!.!u.•&lt;br /&gt;
00000010: 30810285 30093075 08953081 02853109  0..…0.0u.•0..…1.&lt;br /&gt;
00000020: 31750896 69018102 85320932 75089669  1u.–i...…2.2u.–i&lt;br /&gt;
00000030: 01810285 33093375 08966901 8102853F  ...…3.3u.–i...…?&lt;br /&gt;
00000040: 05091901 29101500 25017501 95108102  ....)...%.u.•...&lt;br /&gt;
00000050: 05010939 15002507 75049501 81420509  ...9..%.u.•..B..&lt;br /&gt;
00000060: 75049501 81010501 09300931 09330934  u.•......0.1.3.4&lt;br /&gt;
00000070: 16000027 FFFF0000 75109504 81020601  ...&#039;ÿÿ..u.•.....&lt;br /&gt;
00000080: FF850109 01750895 30910285 10091075  ÿ…...u.•0‘.…...u&lt;br /&gt;
00000090: 08953091 02851109 11750895 30910285  .•0‘.…...u.•0‘.…&lt;br /&gt;
000000A0: 12091275 08953091 02C0               ...u.•0‘.À&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Parsed Bytes || Description&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x01,        || Usage Page (Generic Desktop Ctrls)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x05,        || Usage (Game Pad)&lt;br /&gt;
|-&lt;br /&gt;
|0xA1, 0x01,        || Collection (Application)&lt;br /&gt;
|-&lt;br /&gt;
|0x06, 0x01, 0xFF,  ||   Usage Page (Vendor Defined 0xFF01)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x21,        ||   Report ID (33)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x21,        ||   Usage (0x21)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x30,        ||   Report ID (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x30,        ||   Usage (0x30)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x31,        ||   Report ID (49)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x31,        ||   Usage (0x31)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x96, 0x69, 0x01,  ||   Report Count (361)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x32,        ||   Report ID (50)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x32,        ||   Usage (0x32)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x96, 0x69, 0x01,  ||   Report Count (361)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x33,        ||   Report ID (51)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x33,        ||   Usage (0x33)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x96, 0x69, 0x01,  ||   Report Count (361)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x3F,        ||   Report ID (63)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x09,        ||   Usage Page (Button)&lt;br /&gt;
|-&lt;br /&gt;
|0x19, 0x01,        ||   Usage Minimum (0x01)&lt;br /&gt;
|-&lt;br /&gt;
|0x29, 0x10,        ||   Usage Maximum (0x10)&lt;br /&gt;
|-&lt;br /&gt;
|0x15, 0x00,        ||   Logical Minimum (0)&lt;br /&gt;
|-&lt;br /&gt;
|0x25, 0x01,        ||   Logical Maximum (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x01,        ||   Report Size (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x10,        ||   Report Count (16)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x01,        ||   Usage Page (Generic Desktop Ctrls)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x39,        ||   Usage (Hat switch)&lt;br /&gt;
|-&lt;br /&gt;
|0x15, 0x00,        ||   Logical Minimum (0)&lt;br /&gt;
|-&lt;br /&gt;
|0x25, 0x07,        ||   Logical Maximum (7)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x04,        ||   Report Size (4)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x01,        ||   Report Count (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x42,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,Null State)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x09,        ||   Usage Page (Button)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x04,        ||   Report Size (4)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x01,        ||   Report Count (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x01,        ||   Input (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x01,        ||   Usage Page (Generic Desktop Ctrls)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x30,        ||   Usage (X)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x31,        ||   Usage (Y)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x33,        ||   Usage (Rx)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x34,        ||   Usage (Ry)&lt;br /&gt;
|-&lt;br /&gt;
|0x16, 0x00, 0x00,  ||   Logical Minimum (0)&lt;br /&gt;
|-&lt;br /&gt;
|0x27, 0xFF, 0xFF, 0x00, 0x00,  ||   Logical Maximum (65534)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x10,        ||   Report Size (16)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x04,        ||   Report Count (4)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x06, 0x01, 0xFF,  ||   Usage Page (Vendor Defined 0xFF01)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x01,        ||   Report ID (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x01,        ||   Usage (0x01)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x10,        ||   Report ID (16)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x10,        ||   Usage (0x10)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x11,        ||   Report ID (17)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x11,        ||   Usage (0x11)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x12,        ||   Report ID (18)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x12,        ||   Usage (0x12)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0xC0,              || End Collection&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Colors ==&lt;br /&gt;
HEX codes for the colors shown in the &amp;quot;Controllers&amp;quot; menu of the Switch UI can be found in a Joy-con SPI dump starting at offset 0x6050. Body color is first followed by button color and each is 3 bytes long. These values are able to be re-written with any HEX color value to make the Joy-cons show up as different colors in the UI. The following is a list of official HEX colors recovered from SPI dumps.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Color Name || Body HEX || Button HEX&lt;br /&gt;
|-&lt;br /&gt;
| Black || #313131 || #0F0F0F&lt;br /&gt;
|-&lt;br /&gt;
| Gray / グレー || #828282 || #0F0F0F&lt;br /&gt;
|-&lt;br /&gt;
| Neon Red / ネオンレッド || #FF3C28 || #1E0A0A&lt;br /&gt;
|-&lt;br /&gt;
| Neon Blue / ネオンブルー || #0AB9E6 || #001E1E&lt;br /&gt;
|-&lt;br /&gt;
| Neon Yellow / ネオンイエロー || #E6FF00 || #142800&lt;br /&gt;
|-&lt;br /&gt;
| Neon Green / ネオングリーン || #1EDC00 || #002800&lt;br /&gt;
|-&lt;br /&gt;
| Neon Pink / ネオンピンク || #FF3278 || #28001E&lt;br /&gt;
|-&lt;br /&gt;
| Red / レッド || #E10F00 || #280A0A&lt;br /&gt;
|-&lt;br /&gt;
| Blue / ブルー || #4655F5 || #00000A&lt;br /&gt;
|-&lt;br /&gt;
| Neon Purple / ネオンパープル || #B400E6 || #140014&lt;br /&gt;
|-&lt;br /&gt;
| Neon Orange / ネオンオレンジ || #FAA005 || #0F0A00&lt;br /&gt;
|-&lt;br /&gt;
| Pokemon: Let&#039;s Go! Eevee Left Joy-Con / ポケットモンスター Let&#039;s Go! イーブイ || #C88C32 || #281900&lt;br /&gt;
|-&lt;br /&gt;
| Pokemon: Let&#039;s Go! Pikachu Right Joy-Con / ポケットモンスター Let&#039;s Go! ピカチュウ || #FFDC00 || #322800&lt;br /&gt;
|-&lt;br /&gt;
| Nintendo Labo Creators Contest Edition Joy-Con || #D7AA73 || #1E1914&lt;br /&gt;
|-&lt;br /&gt;
| Animal Crossing: New Horizons Green Left Joy-Con || #82FF96 || #0A1E0A&lt;br /&gt;
|-&lt;br /&gt;
| Animal Crossing: New Horizons Blue Right Joy-Con || #96F5F5 || #0A1E28&lt;br /&gt;
|-&lt;br /&gt;
| Fortnite Wildcat Yellow Left Joy-Con || #FFCC00 || #1A1100&lt;br /&gt;
|-&lt;br /&gt;
| Fortnite Wildcat Blue Right Joy-Con || #0084FF || #000F1E&lt;br /&gt;
|-&lt;br /&gt;
| Mario Red &amp;amp; Blue Edition Joy-Con || #F04614 || #1E1914&lt;br /&gt;
|-&lt;br /&gt;
| Fortnite Fleet Force Blue Left Joy-Con || #0084FF || #000F1E&lt;br /&gt;
|-&lt;br /&gt;
| Fortnite Fleet Force Yellow Right Joy-Con || #FFCC00 || #1A1100&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Additional Links ==&lt;br /&gt;
[https://github.com/dekuNukem/Nintendo_Switch_Reverse_Engineering Reverse Engineering of the Joy-Con by Github user dekuNukem]&lt;/div&gt;</summary>
		<author><name>Imp Uhrfik Simone</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Joy-Con&amp;diff=10968</id>
		<title>Joy-Con</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Joy-Con&amp;diff=10968"/>
		<updated>2021-06-04T23:43:46Z</updated>

		<summary type="html">&lt;p&gt;Imp Uhrfik Simone: /* Colors */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Joy-Con is the name for the Switch&#039;s primary game controllers. The controllers communicate to the console through bluetooth and can be disconnected from the main unit.&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
The controllers themselves are simple to disassemble and identify.&lt;br /&gt;
[[File:JoyconFront.jpg|400px|thumb|The front of the Joy-Con internal[https://www.ifixit.com/Teardown/Nintendo+Switch+Teardown/78263]]]&lt;br /&gt;
[[File:JoyconRear.jpg|400px|thumb|The rear of the Joy-Con internal[https://www.ifixit.com/Teardown/Nintendo+Switch+Teardown/78263]]]&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Color || Item&lt;br /&gt;
|-&lt;br /&gt;
| Red || Broadcom BCM20734 Bluetooth 4.1/2.4 GHz Transceiver&lt;br /&gt;
|-&lt;br /&gt;
| Orange || STMicroelectronics NFCBEA 812006 33 (Likely NFC reader IC)&lt;br /&gt;
|-&lt;br /&gt;
| Yellow|| Macronix International MX25U4033E 4 Mb CMOS Flash&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Firmware ==&lt;br /&gt;
&#039;&#039;See also: [[Joy-Con Firmware]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The firmware of the Joy-Cons seems to be generic across all instances. Details such as the handedness of the controller and the color is just indicated in a configuration part of the flash. Judging by quick glance at the firmware, it&#039;s probably identical to that used on the Pro Controller as well.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Controller || 1.0.0&lt;br /&gt;
|-&lt;br /&gt;
| Joy-Con Left (Blue) || [[:File:pad.L.bin|flash dump]]&lt;br /&gt;
|-&lt;br /&gt;
| Joy-Con Right (Red) || [[:File:pad.R.bin|flash dump]]&lt;br /&gt;
|}&lt;br /&gt;
The flash is in a patch-ram format. Tools for dealing with it are available [https://github.com/shuffle2/nxpad].&lt;br /&gt;
A dump of the ROM region (taken while firmware was running) can be found [[:File:bcm20734_rom.bin|here]]. Note this is the same SoC used on the other controller models, as well.&lt;br /&gt;
&lt;br /&gt;
== Bluetooth HID ==&lt;br /&gt;
=== Commands ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || PairingOut&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || GetDeviceInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || SetDataFormat&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || LRButtonDetection&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || Page&lt;br /&gt;
|-&lt;br /&gt;
| 0x06 || Reset&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || ClearPairingInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || Shipment&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || SerialFlashRead&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || SerialFlashWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || SerialFlashSectorErase&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || McuReset&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || McuWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || McuResume&lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || McuPollingEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || McuPollingDisable&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || AttachmentWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || AttachmentEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || &lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || SetIndicatorLed&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || GetIndicatorLed&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || SetNotificationLed&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || SensorSleep&lt;br /&gt;
|-&lt;br /&gt;
| 0x41 || SensorConfig&lt;br /&gt;
|-&lt;br /&gt;
| 0x42 || SensorWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x43 || SensorRead&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || MotorEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || GetBatteryVoltage&lt;br /&gt;
|-&lt;br /&gt;
| 0x51 || WriteChargeSetting&lt;br /&gt;
|-&lt;br /&gt;
| 0x52 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || ExtDevWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x59 || GetExtDevInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x5A || ExtDevPollingEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x5B || ExtDevPollingDisable&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C || ExtDevInFormatConfig&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || InternalAttachmentWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x61 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x62 || InternalAttachmentEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x63 || InternalAttachmentPollingEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x64 || InternalAttachmentPollingDisable&lt;br /&gt;
|-&lt;br /&gt;
| 0x80 || Ack&lt;br /&gt;
|-&lt;br /&gt;
| 0x81 || PairingIn&lt;br /&gt;
|-&lt;br /&gt;
| 0x82 || DeviceInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x83 || LRButtonElapsedTime&lt;br /&gt;
|-&lt;br /&gt;
| 0x90 || SerialFlashData&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0 || McuData&lt;br /&gt;
|-&lt;br /&gt;
| 0xA8 || AttachmentData&lt;br /&gt;
|-&lt;br /&gt;
| 0xAA || InternalAttachmentRead&lt;br /&gt;
|-&lt;br /&gt;
| 0xB0 || IndicatorLed&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0 || SensorData&lt;br /&gt;
|-&lt;br /&gt;
| 0xD0 || BatteryVoltage&lt;br /&gt;
|-&lt;br /&gt;
| 0xD8 || ExtDevRead&lt;br /&gt;
|-&lt;br /&gt;
| 0xD9 || ExtDevInfo&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Left &amp;amp; Right Separate Joy-con ===&lt;br /&gt;
When paired directly to a computer over bluetooth, the joy-con both provide identical HID input report descriptor. This does not appear to include motion controls, IR data, or NFC. They both behave as detached single-player controllers.&lt;br /&gt;
&lt;br /&gt;
HID Input Report Descriptor (Hexadecimal):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
00000000: 05010905 A1010601 FF852109 21750895  ....¡...ÿ…!.!u.•&lt;br /&gt;
00000010: 30810285 30093075 08953081 02853109  0..…0.0u.•0..…1.&lt;br /&gt;
00000020: 31750896 69018102 85320932 75089669  1u.–i...…2.2u.–i&lt;br /&gt;
00000030: 01810285 33093375 08966901 8102853F  ...…3.3u.–i...…?&lt;br /&gt;
00000040: 05091901 29101500 25017501 95108102  ....)...%.u.•...&lt;br /&gt;
00000050: 05010939 15002507 75049501 81420509  ...9..%.u.•..B..&lt;br /&gt;
00000060: 75049501 81010501 09300931 09330934  u.•......0.1.3.4&lt;br /&gt;
00000070: 16000027 FFFF0000 75109504 81020601  ...&#039;ÿÿ..u.•.....&lt;br /&gt;
00000080: FF850109 01750895 30910285 10091075  ÿ…...u.•0‘.…...u&lt;br /&gt;
00000090: 08953091 02851109 11750895 30910285  .•0‘.…...u.•0‘.…&lt;br /&gt;
000000A0: 12091275 08953091 02C0               ...u.•0‘.À&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Parsed Bytes || Description&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x01,        || Usage Page (Generic Desktop Ctrls)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x05,        || Usage (Game Pad)&lt;br /&gt;
|-&lt;br /&gt;
|0xA1, 0x01,        || Collection (Application)&lt;br /&gt;
|-&lt;br /&gt;
|0x06, 0x01, 0xFF,  ||   Usage Page (Vendor Defined 0xFF01)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x21,        ||   Report ID (33)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x21,        ||   Usage (0x21)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x30,        ||   Report ID (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x30,        ||   Usage (0x30)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x31,        ||   Report ID (49)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x31,        ||   Usage (0x31)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x96, 0x69, 0x01,  ||   Report Count (361)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x32,        ||   Report ID (50)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x32,        ||   Usage (0x32)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x96, 0x69, 0x01,  ||   Report Count (361)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x33,        ||   Report ID (51)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x33,        ||   Usage (0x33)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x96, 0x69, 0x01,  ||   Report Count (361)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x3F,        ||   Report ID (63)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x09,        ||   Usage Page (Button)&lt;br /&gt;
|-&lt;br /&gt;
|0x19, 0x01,        ||   Usage Minimum (0x01)&lt;br /&gt;
|-&lt;br /&gt;
|0x29, 0x10,        ||   Usage Maximum (0x10)&lt;br /&gt;
|-&lt;br /&gt;
|0x15, 0x00,        ||   Logical Minimum (0)&lt;br /&gt;
|-&lt;br /&gt;
|0x25, 0x01,        ||   Logical Maximum (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x01,        ||   Report Size (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x10,        ||   Report Count (16)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x01,        ||   Usage Page (Generic Desktop Ctrls)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x39,        ||   Usage (Hat switch)&lt;br /&gt;
|-&lt;br /&gt;
|0x15, 0x00,        ||   Logical Minimum (0)&lt;br /&gt;
|-&lt;br /&gt;
|0x25, 0x07,        ||   Logical Maximum (7)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x04,        ||   Report Size (4)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x01,        ||   Report Count (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x42,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,Null State)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x09,        ||   Usage Page (Button)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x04,        ||   Report Size (4)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x01,        ||   Report Count (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x01,        ||   Input (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x01,        ||   Usage Page (Generic Desktop Ctrls)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x30,        ||   Usage (X)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x31,        ||   Usage (Y)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x33,        ||   Usage (Rx)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x34,        ||   Usage (Ry)&lt;br /&gt;
|-&lt;br /&gt;
|0x16, 0x00, 0x00,  ||   Logical Minimum (0)&lt;br /&gt;
|-&lt;br /&gt;
|0x27, 0xFF, 0xFF, 0x00, 0x00,  ||   Logical Maximum (65534)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x10,        ||   Report Size (16)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x04,        ||   Report Count (4)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x06, 0x01, 0xFF,  ||   Usage Page (Vendor Defined 0xFF01)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x01,        ||   Report ID (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x01,        ||   Usage (0x01)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x10,        ||   Report ID (16)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x10,        ||   Usage (0x10)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x11,        ||   Report ID (17)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x11,        ||   Usage (0x11)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x12,        ||   Report ID (18)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x12,        ||   Usage (0x12)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0xC0,              || End Collection&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Colors ==&lt;br /&gt;
HEX codes for the colors shown in the &amp;quot;Controllers&amp;quot; menu of the Switch UI can be found in a Joy-con SPI dump starting at offset 0x6050. Body color is first followed by button color and each is 3 bytes long. These values are able to be re-written with any HEX color value to make the Joy-cons show up as different colors in the UI. The following is a list of official HEX colors recovered from SPI dumps.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Color Name || Body HEX || Button HEX&lt;br /&gt;
|-&lt;br /&gt;
| Black || #313131 || #0F0F0F&lt;br /&gt;
|-&lt;br /&gt;
| Gray / グレー || #828282 || #0F0F0F&lt;br /&gt;
|-&lt;br /&gt;
| Neon Red / ネオンレッド || #FF3C28 || #1E0A0A&lt;br /&gt;
|-&lt;br /&gt;
| Neon Blue / ネオンブルー || #0AB9E6 || #001E1E&lt;br /&gt;
|-&lt;br /&gt;
| Neon Yellow / ネオンイエロー || #E6FF00 || #142800&lt;br /&gt;
|-&lt;br /&gt;
| Neon Green / ネオングリーン || #1EDC00 || #002800&lt;br /&gt;
|-&lt;br /&gt;
| Neon Pink / ネオンピンク || #FF3278 || #28001E&lt;br /&gt;
|-&lt;br /&gt;
| Red / レッド || #E10F00 || #280A0A&lt;br /&gt;
|-&lt;br /&gt;
| Blue / ブルー || #4655F5 || #00000A&lt;br /&gt;
|-&lt;br /&gt;
| Neon Purple / ネオンパープル || #B400E6 || #140014&lt;br /&gt;
|-&lt;br /&gt;
| Neon Orange / ネオンオレンジ || #FAA005 || #0F0A00&lt;br /&gt;
|-&lt;br /&gt;
| Pokemon: Let&#039;s Go! Eevee Left Joy-Con / ポケットモンスター Let&#039;s Go! イーブイ || #C88C32 || #281900&lt;br /&gt;
|-&lt;br /&gt;
| Pokemon: Let&#039;s Go! Pikachu Right Joy-Con / ポケットモンスター Let&#039;s Go! ピカチュウ || #FFDC00 || #322800&lt;br /&gt;
|-&lt;br /&gt;
| Nintendo Labo Creators Contest Edition || #D7AA73 || #1E1914&lt;br /&gt;
|-&lt;br /&gt;
| Animal Crossing: New Horizons Green Left Joy-Con || #82FF96 || #0A1E0A&lt;br /&gt;
|-&lt;br /&gt;
| Animal Crossing: New Horizons Blue Right Joy-Con || #96F5F5 || #0A1E28&lt;br /&gt;
|-&lt;br /&gt;
| Fortnite Wildcat Yellow Left Joy-Con || #FFCC00 || #1A1100&lt;br /&gt;
|-&lt;br /&gt;
| Fortnite Wildcat Blue Right Joy-Con || #0084FF || #000F1E&lt;br /&gt;
|-&lt;br /&gt;
| Mario Red &amp;amp; Blue Edition Joy-Con || #F04614 || #1E1914&lt;br /&gt;
|-&lt;br /&gt;
| Fortnite Fleet Force Blue Left Joy-Con || #0084FF || #000F1E&lt;br /&gt;
|-&lt;br /&gt;
| Fortnite Fleet Force Yellow Right Joy-Con || #FFCC00 || #1A1100&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Additional Links ==&lt;br /&gt;
[https://github.com/dekuNukem/Nintendo_Switch_Reverse_Engineering Reverse Engineering of the Joy-Con by Github user dekuNukem]&lt;/div&gt;</summary>
		<author><name>Imp Uhrfik Simone</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Joy-Con&amp;diff=10967</id>
		<title>Joy-Con</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Joy-Con&amp;diff=10967"/>
		<updated>2021-06-04T23:41:14Z</updated>

		<summary type="html">&lt;p&gt;Imp Uhrfik Simone: /* Colors */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Joy-Con is the name for the Switch&#039;s primary game controllers. The controllers communicate to the console through bluetooth and can be disconnected from the main unit.&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
The controllers themselves are simple to disassemble and identify.&lt;br /&gt;
[[File:JoyconFront.jpg|400px|thumb|The front of the Joy-Con internal[https://www.ifixit.com/Teardown/Nintendo+Switch+Teardown/78263]]]&lt;br /&gt;
[[File:JoyconRear.jpg|400px|thumb|The rear of the Joy-Con internal[https://www.ifixit.com/Teardown/Nintendo+Switch+Teardown/78263]]]&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Color || Item&lt;br /&gt;
|-&lt;br /&gt;
| Red || Broadcom BCM20734 Bluetooth 4.1/2.4 GHz Transceiver&lt;br /&gt;
|-&lt;br /&gt;
| Orange || STMicroelectronics NFCBEA 812006 33 (Likely NFC reader IC)&lt;br /&gt;
|-&lt;br /&gt;
| Yellow|| Macronix International MX25U4033E 4 Mb CMOS Flash&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Firmware ==&lt;br /&gt;
&#039;&#039;See also: [[Joy-Con Firmware]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The firmware of the Joy-Cons seems to be generic across all instances. Details such as the handedness of the controller and the color is just indicated in a configuration part of the flash. Judging by quick glance at the firmware, it&#039;s probably identical to that used on the Pro Controller as well.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Controller || 1.0.0&lt;br /&gt;
|-&lt;br /&gt;
| Joy-Con Left (Blue) || [[:File:pad.L.bin|flash dump]]&lt;br /&gt;
|-&lt;br /&gt;
| Joy-Con Right (Red) || [[:File:pad.R.bin|flash dump]]&lt;br /&gt;
|}&lt;br /&gt;
The flash is in a patch-ram format. Tools for dealing with it are available [https://github.com/shuffle2/nxpad].&lt;br /&gt;
A dump of the ROM region (taken while firmware was running) can be found [[:File:bcm20734_rom.bin|here]]. Note this is the same SoC used on the other controller models, as well.&lt;br /&gt;
&lt;br /&gt;
== Bluetooth HID ==&lt;br /&gt;
=== Commands ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || PairingOut&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || GetDeviceInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || SetDataFormat&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || LRButtonDetection&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || Page&lt;br /&gt;
|-&lt;br /&gt;
| 0x06 || Reset&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || ClearPairingInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || Shipment&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || SerialFlashRead&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || SerialFlashWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || SerialFlashSectorErase&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || McuReset&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || McuWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || McuResume&lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || McuPollingEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || McuPollingDisable&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || AttachmentWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || AttachmentEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || &lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || SetIndicatorLed&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || GetIndicatorLed&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || SetNotificationLed&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || SensorSleep&lt;br /&gt;
|-&lt;br /&gt;
| 0x41 || SensorConfig&lt;br /&gt;
|-&lt;br /&gt;
| 0x42 || SensorWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x43 || SensorRead&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || MotorEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || GetBatteryVoltage&lt;br /&gt;
|-&lt;br /&gt;
| 0x51 || WriteChargeSetting&lt;br /&gt;
|-&lt;br /&gt;
| 0x52 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || ExtDevWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x59 || GetExtDevInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x5A || ExtDevPollingEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x5B || ExtDevPollingDisable&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C || ExtDevInFormatConfig&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || InternalAttachmentWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x61 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x62 || InternalAttachmentEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x63 || InternalAttachmentPollingEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x64 || InternalAttachmentPollingDisable&lt;br /&gt;
|-&lt;br /&gt;
| 0x80 || Ack&lt;br /&gt;
|-&lt;br /&gt;
| 0x81 || PairingIn&lt;br /&gt;
|-&lt;br /&gt;
| 0x82 || DeviceInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x83 || LRButtonElapsedTime&lt;br /&gt;
|-&lt;br /&gt;
| 0x90 || SerialFlashData&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0 || McuData&lt;br /&gt;
|-&lt;br /&gt;
| 0xA8 || AttachmentData&lt;br /&gt;
|-&lt;br /&gt;
| 0xAA || InternalAttachmentRead&lt;br /&gt;
|-&lt;br /&gt;
| 0xB0 || IndicatorLed&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0 || SensorData&lt;br /&gt;
|-&lt;br /&gt;
| 0xD0 || BatteryVoltage&lt;br /&gt;
|-&lt;br /&gt;
| 0xD8 || ExtDevRead&lt;br /&gt;
|-&lt;br /&gt;
| 0xD9 || ExtDevInfo&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Left &amp;amp; Right Separate Joy-con ===&lt;br /&gt;
When paired directly to a computer over bluetooth, the joy-con both provide identical HID input report descriptor. This does not appear to include motion controls, IR data, or NFC. They both behave as detached single-player controllers.&lt;br /&gt;
&lt;br /&gt;
HID Input Report Descriptor (Hexadecimal):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
00000000: 05010905 A1010601 FF852109 21750895  ....¡...ÿ…!.!u.•&lt;br /&gt;
00000010: 30810285 30093075 08953081 02853109  0..…0.0u.•0..…1.&lt;br /&gt;
00000020: 31750896 69018102 85320932 75089669  1u.–i...…2.2u.–i&lt;br /&gt;
00000030: 01810285 33093375 08966901 8102853F  ...…3.3u.–i...…?&lt;br /&gt;
00000040: 05091901 29101500 25017501 95108102  ....)...%.u.•...&lt;br /&gt;
00000050: 05010939 15002507 75049501 81420509  ...9..%.u.•..B..&lt;br /&gt;
00000060: 75049501 81010501 09300931 09330934  u.•......0.1.3.4&lt;br /&gt;
00000070: 16000027 FFFF0000 75109504 81020601  ...&#039;ÿÿ..u.•.....&lt;br /&gt;
00000080: FF850109 01750895 30910285 10091075  ÿ…...u.•0‘.…...u&lt;br /&gt;
00000090: 08953091 02851109 11750895 30910285  .•0‘.…...u.•0‘.…&lt;br /&gt;
000000A0: 12091275 08953091 02C0               ...u.•0‘.À&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Parsed Bytes || Description&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x01,        || Usage Page (Generic Desktop Ctrls)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x05,        || Usage (Game Pad)&lt;br /&gt;
|-&lt;br /&gt;
|0xA1, 0x01,        || Collection (Application)&lt;br /&gt;
|-&lt;br /&gt;
|0x06, 0x01, 0xFF,  ||   Usage Page (Vendor Defined 0xFF01)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x21,        ||   Report ID (33)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x21,        ||   Usage (0x21)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x30,        ||   Report ID (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x30,        ||   Usage (0x30)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x31,        ||   Report ID (49)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x31,        ||   Usage (0x31)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x96, 0x69, 0x01,  ||   Report Count (361)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x32,        ||   Report ID (50)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x32,        ||   Usage (0x32)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x96, 0x69, 0x01,  ||   Report Count (361)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x33,        ||   Report ID (51)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x33,        ||   Usage (0x33)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x96, 0x69, 0x01,  ||   Report Count (361)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x3F,        ||   Report ID (63)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x09,        ||   Usage Page (Button)&lt;br /&gt;
|-&lt;br /&gt;
|0x19, 0x01,        ||   Usage Minimum (0x01)&lt;br /&gt;
|-&lt;br /&gt;
|0x29, 0x10,        ||   Usage Maximum (0x10)&lt;br /&gt;
|-&lt;br /&gt;
|0x15, 0x00,        ||   Logical Minimum (0)&lt;br /&gt;
|-&lt;br /&gt;
|0x25, 0x01,        ||   Logical Maximum (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x01,        ||   Report Size (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x10,        ||   Report Count (16)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x01,        ||   Usage Page (Generic Desktop Ctrls)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x39,        ||   Usage (Hat switch)&lt;br /&gt;
|-&lt;br /&gt;
|0x15, 0x00,        ||   Logical Minimum (0)&lt;br /&gt;
|-&lt;br /&gt;
|0x25, 0x07,        ||   Logical Maximum (7)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x04,        ||   Report Size (4)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x01,        ||   Report Count (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x42,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,Null State)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x09,        ||   Usage Page (Button)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x04,        ||   Report Size (4)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x01,        ||   Report Count (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x01,        ||   Input (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x01,        ||   Usage Page (Generic Desktop Ctrls)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x30,        ||   Usage (X)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x31,        ||   Usage (Y)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x33,        ||   Usage (Rx)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x34,        ||   Usage (Ry)&lt;br /&gt;
|-&lt;br /&gt;
|0x16, 0x00, 0x00,  ||   Logical Minimum (0)&lt;br /&gt;
|-&lt;br /&gt;
|0x27, 0xFF, 0xFF, 0x00, 0x00,  ||   Logical Maximum (65534)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x10,        ||   Report Size (16)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x04,        ||   Report Count (4)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x06, 0x01, 0xFF,  ||   Usage Page (Vendor Defined 0xFF01)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x01,        ||   Report ID (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x01,        ||   Usage (0x01)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x10,        ||   Report ID (16)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x10,        ||   Usage (0x10)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x11,        ||   Report ID (17)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x11,        ||   Usage (0x11)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x12,        ||   Report ID (18)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x12,        ||   Usage (0x12)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0xC0,              || End Collection&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Colors ==&lt;br /&gt;
HEX codes for the colors shown in the &amp;quot;Controllers&amp;quot; menu of the Switch UI can be found in a Joy-con SPI dump starting at offset 0x6050. Body color is first followed by button color and each is 3 bytes long. These values are able to be re-written with any HEX color value to make the Joy-cons show up as different colors in the UI. The following is a list of official HEX colors recovered from SPI dumps.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Color Name || Body HEX || Button HEX&lt;br /&gt;
|-&lt;br /&gt;
| Black || #313131 || #0F0F0F&lt;br /&gt;
|-&lt;br /&gt;
| Gray / グレー || #828282 || #0F0F0F&lt;br /&gt;
|-&lt;br /&gt;
| Neon Red / ネオンレッド || #FF3C28 || #1E0A0A&lt;br /&gt;
|-&lt;br /&gt;
| Neon Blue / ネオンブルー || #0AB9E6 || #001E1E&lt;br /&gt;
|-&lt;br /&gt;
| Neon Yellow / ネオンイエロー || #E6FF00 || #142800&lt;br /&gt;
|-&lt;br /&gt;
| Neon Green / ネオングリーン || #1EDC00 || #002800&lt;br /&gt;
|-&lt;br /&gt;
| Neon Pink / ネオンピンク || #FF3278 || #28001E&lt;br /&gt;
|-&lt;br /&gt;
| Red / レッド || #E10F00 || #280A0A&lt;br /&gt;
|-&lt;br /&gt;
| Blue / ブルー || #4655F5 || #00000A&lt;br /&gt;
|-&lt;br /&gt;
| Neon Purple / ネオンパープル || #B400E6 || #140014&lt;br /&gt;
|-&lt;br /&gt;
| Neon Orange / ネオンオレンジ || #FAA005 || #0F0A00&lt;br /&gt;
|-&lt;br /&gt;
| Pokemon: Let&#039;s Go! Left Eevee Joy-Con / ポケットモンスター Let&#039;s Go! イーブイ || #C88C32 || #281900&lt;br /&gt;
|-&lt;br /&gt;
| Pokemon: Let&#039;s Go! Right Pikachu Joy-Con / ポケットモンスター Let&#039;s Go! ピカチュウ || #FFDC00 || #322800&lt;br /&gt;
|-&lt;br /&gt;
| Nintendo Labo Creators Contest Edition || #D7AA73 || #1E1914&lt;br /&gt;
|-&lt;br /&gt;
| Animal Crossing: New Horizons Green Left Joy-Con || #82FF96 || #0A1E0A&lt;br /&gt;
|-&lt;br /&gt;
| Animal Crossing: New Horizons Blue Right Joy-Con || #96F5F5 || #0A1E28&lt;br /&gt;
|-&lt;br /&gt;
| Fortnite Wildcat Yellow Left Joy-Con || #FFCC00 || #1A1100&lt;br /&gt;
|-&lt;br /&gt;
| Fortnite Wildcat Blue Right Joy-Con || #0084FF || #000F1E&lt;br /&gt;
|-&lt;br /&gt;
| Mario Red &amp;amp; Blue Edition Joy-Con || #F04614 || #1E1914&lt;br /&gt;
|-&lt;br /&gt;
| Fortnite Fleet Force Blue Left Joy-Con || #0084FF || #000F1E&lt;br /&gt;
|-&lt;br /&gt;
| Fortnite Fleet Force Yellow Right Joy-Con || #FFCC00 || #1A1100&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Additional Links ==&lt;br /&gt;
[https://github.com/dekuNukem/Nintendo_Switch_Reverse_Engineering Reverse Engineering of the Joy-Con by Github user dekuNukem]&lt;/div&gt;</summary>
		<author><name>Imp Uhrfik Simone</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Joy-Con&amp;diff=10966</id>
		<title>Joy-Con</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Joy-Con&amp;diff=10966"/>
		<updated>2021-06-04T23:31:30Z</updated>

		<summary type="html">&lt;p&gt;Imp Uhrfik Simone: /* Colors */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Joy-Con is the name for the Switch&#039;s primary game controllers. The controllers communicate to the console through bluetooth and can be disconnected from the main unit.&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
The controllers themselves are simple to disassemble and identify.&lt;br /&gt;
[[File:JoyconFront.jpg|400px|thumb|The front of the Joy-Con internal[https://www.ifixit.com/Teardown/Nintendo+Switch+Teardown/78263]]]&lt;br /&gt;
[[File:JoyconRear.jpg|400px|thumb|The rear of the Joy-Con internal[https://www.ifixit.com/Teardown/Nintendo+Switch+Teardown/78263]]]&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Color || Item&lt;br /&gt;
|-&lt;br /&gt;
| Red || Broadcom BCM20734 Bluetooth 4.1/2.4 GHz Transceiver&lt;br /&gt;
|-&lt;br /&gt;
| Orange || STMicroelectronics NFCBEA 812006 33 (Likely NFC reader IC)&lt;br /&gt;
|-&lt;br /&gt;
| Yellow|| Macronix International MX25U4033E 4 Mb CMOS Flash&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Firmware ==&lt;br /&gt;
&#039;&#039;See also: [[Joy-Con Firmware]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The firmware of the Joy-Cons seems to be generic across all instances. Details such as the handedness of the controller and the color is just indicated in a configuration part of the flash. Judging by quick glance at the firmware, it&#039;s probably identical to that used on the Pro Controller as well.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Controller || 1.0.0&lt;br /&gt;
|-&lt;br /&gt;
| Joy-Con Left (Blue) || [[:File:pad.L.bin|flash dump]]&lt;br /&gt;
|-&lt;br /&gt;
| Joy-Con Right (Red) || [[:File:pad.R.bin|flash dump]]&lt;br /&gt;
|}&lt;br /&gt;
The flash is in a patch-ram format. Tools for dealing with it are available [https://github.com/shuffle2/nxpad].&lt;br /&gt;
A dump of the ROM region (taken while firmware was running) can be found [[:File:bcm20734_rom.bin|here]]. Note this is the same SoC used on the other controller models, as well.&lt;br /&gt;
&lt;br /&gt;
== Bluetooth HID ==&lt;br /&gt;
=== Commands ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || PairingOut&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || GetDeviceInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || SetDataFormat&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || LRButtonDetection&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || Page&lt;br /&gt;
|-&lt;br /&gt;
| 0x06 || Reset&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || ClearPairingInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || Shipment&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || SerialFlashRead&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || SerialFlashWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || SerialFlashSectorErase&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || McuReset&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || McuWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || McuResume&lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || McuPollingEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || McuPollingDisable&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || AttachmentWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || AttachmentEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || &lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || SetIndicatorLed&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || GetIndicatorLed&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || SetNotificationLed&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || SensorSleep&lt;br /&gt;
|-&lt;br /&gt;
| 0x41 || SensorConfig&lt;br /&gt;
|-&lt;br /&gt;
| 0x42 || SensorWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x43 || SensorRead&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || MotorEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || GetBatteryVoltage&lt;br /&gt;
|-&lt;br /&gt;
| 0x51 || WriteChargeSetting&lt;br /&gt;
|-&lt;br /&gt;
| 0x52 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || ExtDevWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x59 || GetExtDevInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x5A || ExtDevPollingEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x5B || ExtDevPollingDisable&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C || ExtDevInFormatConfig&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || InternalAttachmentWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x61 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x62 || InternalAttachmentEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x63 || InternalAttachmentPollingEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x64 || InternalAttachmentPollingDisable&lt;br /&gt;
|-&lt;br /&gt;
| 0x80 || Ack&lt;br /&gt;
|-&lt;br /&gt;
| 0x81 || PairingIn&lt;br /&gt;
|-&lt;br /&gt;
| 0x82 || DeviceInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x83 || LRButtonElapsedTime&lt;br /&gt;
|-&lt;br /&gt;
| 0x90 || SerialFlashData&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0 || McuData&lt;br /&gt;
|-&lt;br /&gt;
| 0xA8 || AttachmentData&lt;br /&gt;
|-&lt;br /&gt;
| 0xAA || InternalAttachmentRead&lt;br /&gt;
|-&lt;br /&gt;
| 0xB0 || IndicatorLed&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0 || SensorData&lt;br /&gt;
|-&lt;br /&gt;
| 0xD0 || BatteryVoltage&lt;br /&gt;
|-&lt;br /&gt;
| 0xD8 || ExtDevRead&lt;br /&gt;
|-&lt;br /&gt;
| 0xD9 || ExtDevInfo&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Left &amp;amp; Right Separate Joy-con ===&lt;br /&gt;
When paired directly to a computer over bluetooth, the joy-con both provide identical HID input report descriptor. This does not appear to include motion controls, IR data, or NFC. They both behave as detached single-player controllers.&lt;br /&gt;
&lt;br /&gt;
HID Input Report Descriptor (Hexadecimal):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
00000000: 05010905 A1010601 FF852109 21750895  ....¡...ÿ…!.!u.•&lt;br /&gt;
00000010: 30810285 30093075 08953081 02853109  0..…0.0u.•0..…1.&lt;br /&gt;
00000020: 31750896 69018102 85320932 75089669  1u.–i...…2.2u.–i&lt;br /&gt;
00000030: 01810285 33093375 08966901 8102853F  ...…3.3u.–i...…?&lt;br /&gt;
00000040: 05091901 29101500 25017501 95108102  ....)...%.u.•...&lt;br /&gt;
00000050: 05010939 15002507 75049501 81420509  ...9..%.u.•..B..&lt;br /&gt;
00000060: 75049501 81010501 09300931 09330934  u.•......0.1.3.4&lt;br /&gt;
00000070: 16000027 FFFF0000 75109504 81020601  ...&#039;ÿÿ..u.•.....&lt;br /&gt;
00000080: FF850109 01750895 30910285 10091075  ÿ…...u.•0‘.…...u&lt;br /&gt;
00000090: 08953091 02851109 11750895 30910285  .•0‘.…...u.•0‘.…&lt;br /&gt;
000000A0: 12091275 08953091 02C0               ...u.•0‘.À&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Parsed Bytes || Description&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x01,        || Usage Page (Generic Desktop Ctrls)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x05,        || Usage (Game Pad)&lt;br /&gt;
|-&lt;br /&gt;
|0xA1, 0x01,        || Collection (Application)&lt;br /&gt;
|-&lt;br /&gt;
|0x06, 0x01, 0xFF,  ||   Usage Page (Vendor Defined 0xFF01)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x21,        ||   Report ID (33)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x21,        ||   Usage (0x21)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x30,        ||   Report ID (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x30,        ||   Usage (0x30)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x31,        ||   Report ID (49)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x31,        ||   Usage (0x31)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x96, 0x69, 0x01,  ||   Report Count (361)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x32,        ||   Report ID (50)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x32,        ||   Usage (0x32)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x96, 0x69, 0x01,  ||   Report Count (361)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x33,        ||   Report ID (51)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x33,        ||   Usage (0x33)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x96, 0x69, 0x01,  ||   Report Count (361)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x3F,        ||   Report ID (63)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x09,        ||   Usage Page (Button)&lt;br /&gt;
|-&lt;br /&gt;
|0x19, 0x01,        ||   Usage Minimum (0x01)&lt;br /&gt;
|-&lt;br /&gt;
|0x29, 0x10,        ||   Usage Maximum (0x10)&lt;br /&gt;
|-&lt;br /&gt;
|0x15, 0x00,        ||   Logical Minimum (0)&lt;br /&gt;
|-&lt;br /&gt;
|0x25, 0x01,        ||   Logical Maximum (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x01,        ||   Report Size (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x10,        ||   Report Count (16)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x01,        ||   Usage Page (Generic Desktop Ctrls)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x39,        ||   Usage (Hat switch)&lt;br /&gt;
|-&lt;br /&gt;
|0x15, 0x00,        ||   Logical Minimum (0)&lt;br /&gt;
|-&lt;br /&gt;
|0x25, 0x07,        ||   Logical Maximum (7)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x04,        ||   Report Size (4)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x01,        ||   Report Count (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x42,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,Null State)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x09,        ||   Usage Page (Button)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x04,        ||   Report Size (4)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x01,        ||   Report Count (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x01,        ||   Input (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x01,        ||   Usage Page (Generic Desktop Ctrls)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x30,        ||   Usage (X)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x31,        ||   Usage (Y)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x33,        ||   Usage (Rx)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x34,        ||   Usage (Ry)&lt;br /&gt;
|-&lt;br /&gt;
|0x16, 0x00, 0x00,  ||   Logical Minimum (0)&lt;br /&gt;
|-&lt;br /&gt;
|0x27, 0xFF, 0xFF, 0x00, 0x00,  ||   Logical Maximum (65534)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x10,        ||   Report Size (16)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x04,        ||   Report Count (4)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x06, 0x01, 0xFF,  ||   Usage Page (Vendor Defined 0xFF01)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x01,        ||   Report ID (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x01,        ||   Usage (0x01)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x10,        ||   Report ID (16)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x10,        ||   Usage (0x10)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x11,        ||   Report ID (17)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x11,        ||   Usage (0x11)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x12,        ||   Report ID (18)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x12,        ||   Usage (0x12)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0xC0,              || End Collection&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Colors ==&lt;br /&gt;
HEX codes for the colors shown in the &amp;quot;Controllers&amp;quot; menu of the Switch UI can be found in a Joy-con SPI dump starting at offset 0x6050. Body color is first followed by button color and each is 3 bytes long. These values are able to be re-written with any HEX color value to make the Joy-cons show up as different colors in the UI. The following is a list of official HEX colors recovered from SPI dumps.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Color Name || Body HEX || Button HEX&lt;br /&gt;
|-&lt;br /&gt;
| Black || #313131 || #0F0F0F&lt;br /&gt;
|-&lt;br /&gt;
| Gray / グレー || #828282 || #0F0F0F&lt;br /&gt;
|-&lt;br /&gt;
| Neon Red / ネオンレッド || #FF3C28 || #1E0A0A&lt;br /&gt;
|-&lt;br /&gt;
| Neon Blue / ネオンブルー || #0AB9E6 || #001E1E&lt;br /&gt;
|-&lt;br /&gt;
| Neon Yellow / ネオンイエロー || #E6FF00 || #142800&lt;br /&gt;
|-&lt;br /&gt;
| Neon Green / ネオングリーン || #1EDC00 || #002800&lt;br /&gt;
|-&lt;br /&gt;
| Neon Pink / ネオンピンク || #FF3278 || #28001E&lt;br /&gt;
|-&lt;br /&gt;
| Red / レッド || #E10F00 || #280A0A&lt;br /&gt;
|-&lt;br /&gt;
| Blue / ブルー || #4655F5 || #00000A&lt;br /&gt;
|-&lt;br /&gt;
| Neon Purple / ネオンパープル || #B400E6 || #140014&lt;br /&gt;
|-&lt;br /&gt;
| Neon Orange / ネオンオレンジ || #FAA005 || #0F0A00&lt;br /&gt;
|-&lt;br /&gt;
| Pokemon Let&#039;s Go! Pikachu / ポケットモンスター Let&#039;s Go! ピカチュウ || #FFDC00 || #322800&lt;br /&gt;
|-&lt;br /&gt;
| Pokemon Let&#039;s Go! Eevee / ポケットモンスター Let&#039;s Go! イーブイ || #C88C32 || #281900&lt;br /&gt;
|-&lt;br /&gt;
| Nintendo Labo Creators Contest Edition || #D7AA73 || #1E1914&lt;br /&gt;
|-&lt;br /&gt;
| Animal Crossing Special Edition Left Joy-Con || #82FF96 || #0A1E0A&lt;br /&gt;
|-&lt;br /&gt;
| Animal Crossing Special Edition Right Joy-Con || #96F5F5 || #0A1E28&lt;br /&gt;
|-&lt;br /&gt;
| Fortnite Wildcat Yellow Left Joy-Con || #FFCC00 || #1A1100&lt;br /&gt;
|-&lt;br /&gt;
| Fortnite Wildcat Blue Right Joy-Con || #0084FF || #000F1E&lt;br /&gt;
|-&lt;br /&gt;
| Mario Red &amp;amp; Blue Edition Joy-Con || #F04614 || #1E1914&lt;br /&gt;
|-&lt;br /&gt;
| Fortnite Fleet Force Blue Left Joy-Con || #0084FF || #000F1E&lt;br /&gt;
|-&lt;br /&gt;
| Fortnite Fleet Force Yellow Right Joy-Con || #FFCC00 || #1A1100&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Additional Links ==&lt;br /&gt;
[https://github.com/dekuNukem/Nintendo_Switch_Reverse_Engineering Reverse Engineering of the Joy-Con by Github user dekuNukem]&lt;/div&gt;</summary>
		<author><name>Imp Uhrfik Simone</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Joy-Con&amp;diff=8139</id>
		<title>Joy-Con</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Joy-Con&amp;diff=8139"/>
		<updated>2019-10-23T18:59:49Z</updated>

		<summary type="html">&lt;p&gt;Imp Uhrfik Simone: /* Colors */ ...added KATAKANA translations of all colors from Japanese retail boxes (...except Labo Creators Contest &amp;quot;cardboard&amp;quot; Joy-Con) ...and put the ten Japanese retail colors in order of release&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Joy-Con is the name for the Switch&#039;s primary game controllers. The controllers communicate to the console through bluetooth and can be disconnected from the main unit.&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
The controllers themselves are simple to disassemble and identify.&lt;br /&gt;
[[File:JoyconFront.jpg|400px|thumb|The front of the Joy-Con internal[https://www.ifixit.com/Teardown/Nintendo+Switch+Teardown/78263]]]&lt;br /&gt;
[[File:JoyconRear.jpg|400px|thumb|The rear of the Joy-Con internal[https://www.ifixit.com/Teardown/Nintendo+Switch+Teardown/78263]]]&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Color || Item&lt;br /&gt;
|-&lt;br /&gt;
| Red || Broadcom BCM20734 Bluetooth 4.1/2.4 GHz Transceiver&lt;br /&gt;
|-&lt;br /&gt;
| Orange || STMicroelectronics NFCBEA 812006 33 (Likely NFC reader IC)&lt;br /&gt;
|-&lt;br /&gt;
| Yellow|| Macronix International MX25U4033E 4 Mb CMOS Flash&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Firmware==&lt;br /&gt;
&#039;&#039;See also: [[Joy-Con Firmware]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The firmware of the Joy-Cons seems to be generic across all instances. Details such as the handedness of the controller and the color is just indicated in a configuration part of the flash. Judging by quick glance at the firmware, it&#039;s probably identical to that used on the Pro Controller as well.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Controller || 1.0.0&lt;br /&gt;
|-&lt;br /&gt;
| Joy-Con Left (Blue) || [[:File:pad.L.bin|flash dump]]&lt;br /&gt;
|-&lt;br /&gt;
| Joy-Con Right (Red) || [[:File:pad.R.bin|flash dump]]&lt;br /&gt;
|}&lt;br /&gt;
The flash is in a patch-ram format. Tools for dealing with it are available [https://github.com/shuffle2/nxpad].&lt;br /&gt;
A dump of the ROM region (taken while firmware was running) can be found [[:File:bcm20734_rom.bin|here]]. Note this is the same SoC used on the other controller models, as well.&lt;br /&gt;
&lt;br /&gt;
== Left &amp;amp; Right Separate Joy-con ==&lt;br /&gt;
&lt;br /&gt;
When paired directly to a computer over bluetooth, the joy-con both provide identical HID input report descriptor. This does not appear to include motion controls, IR data, or NFC. They both behave as detached single-player controllers.&lt;br /&gt;
&lt;br /&gt;
HID Input Report Descriptor (Hexadecimal):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
00000000: 05010905 A1010601 FF852109 21750895  ....¡...ÿ…!.!u.•&lt;br /&gt;
00000010: 30810285 30093075 08953081 02853109  0..…0.0u.•0..…1.&lt;br /&gt;
00000020: 31750896 69018102 85320932 75089669  1u.–i...…2.2u.–i&lt;br /&gt;
00000030: 01810285 33093375 08966901 8102853F  ...…3.3u.–i...…?&lt;br /&gt;
00000040: 05091901 29101500 25017501 95108102  ....)...%.u.•...&lt;br /&gt;
00000050: 05010939 15002507 75049501 81420509  ...9..%.u.•..B..&lt;br /&gt;
00000060: 75049501 81010501 09300931 09330934  u.•......0.1.3.4&lt;br /&gt;
00000070: 16000027 FFFF0000 75109504 81020601  ...&#039;ÿÿ..u.•.....&lt;br /&gt;
00000080: FF850109 01750895 30910285 10091075  ÿ…...u.•0‘.…...u&lt;br /&gt;
00000090: 08953091 02851109 11750895 30910285  .•0‘.…...u.•0‘.…&lt;br /&gt;
000000A0: 12091275 08953091 02C0               ...u.•0‘.À&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Parsed Bytes || Description&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x01,        || Usage Page (Generic Desktop Ctrls)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x05,        || Usage (Game Pad)&lt;br /&gt;
|-&lt;br /&gt;
|0xA1, 0x01,        || Collection (Application)&lt;br /&gt;
|-&lt;br /&gt;
|0x06, 0x01, 0xFF,  ||   Usage Page (Vendor Defined 0xFF01)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x21,        ||   Report ID (33)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x21,        ||   Usage (0x21)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x30,        ||   Report ID (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x30,        ||   Usage (0x30)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x31,        ||   Report ID (49)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x31,        ||   Usage (0x31)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x96, 0x69, 0x01,  ||   Report Count (361)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x32,        ||   Report ID (50)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x32,        ||   Usage (0x32)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x96, 0x69, 0x01,  ||   Report Count (361)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x33,        ||   Report ID (51)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x33,        ||   Usage (0x33)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x96, 0x69, 0x01,  ||   Report Count (361)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x3F,        ||   Report ID (63)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x09,        ||   Usage Page (Button)&lt;br /&gt;
|-&lt;br /&gt;
|0x19, 0x01,        ||   Usage Minimum (0x01)&lt;br /&gt;
|-&lt;br /&gt;
|0x29, 0x10,        ||   Usage Maximum (0x10)&lt;br /&gt;
|-&lt;br /&gt;
|0x15, 0x00,        ||   Logical Minimum (0)&lt;br /&gt;
|-&lt;br /&gt;
|0x25, 0x01,        ||   Logical Maximum (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x01,        ||   Report Size (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x10,        ||   Report Count (16)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x01,        ||   Usage Page (Generic Desktop Ctrls)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x39,        ||   Usage (Hat switch)&lt;br /&gt;
|-&lt;br /&gt;
|0x15, 0x00,        ||   Logical Minimum (0)&lt;br /&gt;
|-&lt;br /&gt;
|0x25, 0x07,        ||   Logical Maximum (7)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x04,        ||   Report Size (4)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x01,        ||   Report Count (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x42,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,Null State)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x09,        ||   Usage Page (Button)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x04,        ||   Report Size (4)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x01,        ||   Report Count (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x01,        ||   Input (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x01,        ||   Usage Page (Generic Desktop Ctrls)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x30,        ||   Usage (X)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x31,        ||   Usage (Y)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x33,        ||   Usage (Rx)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x34,        ||   Usage (Ry)&lt;br /&gt;
|-&lt;br /&gt;
|0x16, 0x00, 0x00,  ||   Logical Minimum (0)&lt;br /&gt;
|-&lt;br /&gt;
|0x27, 0xFF, 0xFF, 0x00, 0x00,  ||   Logical Maximum (65534)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x10,        ||   Report Size (16)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x04,        ||   Report Count (4)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x06, 0x01, 0xFF,  ||   Usage Page (Vendor Defined 0xFF01)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x01,        ||   Report ID (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x01,        ||   Usage (0x01)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x10,        ||   Report ID (16)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x10,        ||   Usage (0x10)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x11,        ||   Report ID (17)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x11,        ||   Usage (0x11)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x12,        ||   Report ID (18)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x12,        ||   Usage (0x12)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0xC0,              || End Collection&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Colors==&lt;br /&gt;
HEX codes for the colors shown in the &amp;quot;Controllers&amp;quot; menu of the Switch UI can be found in a Joy-con SPI dump starting at offset 0x6050. Body color is first followed by button color and each is 3 bytes long. These values are able to be re-written with any HEX color value to make the Joy-cons show up as different colors in the UI. The following is a list of official HEX colors recovered from SPI dumps.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Color Name || Body HEX || Button HEX&lt;br /&gt;
|-&lt;br /&gt;
| Gray / グレー || #828282 || #0F0F0F&lt;br /&gt;
|-&lt;br /&gt;
| Neon Red / ネオンレッド || #FF3C28 || #1E0A0A&lt;br /&gt;
|-&lt;br /&gt;
| Neon Blue / ネオンブルー || #0AB9E6 || #001E1E&lt;br /&gt;
|-&lt;br /&gt;
| Neon Yellow / ネオンイエロー || #E6FF00 || #142800&lt;br /&gt;
|-&lt;br /&gt;
| Neon Green / ネオングリーン || #1EDC00 || #002800&lt;br /&gt;
|-&lt;br /&gt;
| Neon Pink / ネオンピンク || #FF3278 || #28001E&lt;br /&gt;
|-&lt;br /&gt;
| Red / レッド || #E10F00 || #280A0A&lt;br /&gt;
|-&lt;br /&gt;
| Blue / ブルー || #4655F5 || #00000A&lt;br /&gt;
|-&lt;br /&gt;
| Neon Purple / ネオンパープル || #B400E6 || #140014&lt;br /&gt;
|-&lt;br /&gt;
| Neon Orange / ネオンオレンジ || #FAA005 || #0F0A00&lt;br /&gt;
|-&lt;br /&gt;
| Pokemon Let&#039;s Go! Pikachu / ポケットモンスター Let&#039;s Go! ピカチュウ || #FFDC00 || #322800&lt;br /&gt;
|-&lt;br /&gt;
| Pokemon Let&#039;s Go! Eevee / ポケットモンスター Let&#039;s Go! イーブイ || #C88C32 || #281900&lt;br /&gt;
|-&lt;br /&gt;
| Nintendo Labo Creators Contest Edition || #D7AA73 || #1E1914&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Additional Links==&lt;br /&gt;
[https://github.com/dekuNukem/Nintendo_Switch_Reverse_Engineering Reverse Engineering of the Joy-Con by Github user dekuNukem]&lt;/div&gt;</summary>
		<author><name>Imp Uhrfik Simone</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Joy-Con&amp;diff=8063</id>
		<title>Joy-Con</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Joy-Con&amp;diff=8063"/>
		<updated>2019-10-05T14:10:26Z</updated>

		<summary type="html">&lt;p&gt;Imp Uhrfik Simone: /* Colors */ ...added Hex values for Neon Purple, Neon Orange, &amp;amp; Blue (...unofficially named &amp;quot;Royal&amp;quot; Blue to easier differenciate from &amp;quot;Neon&amp;quot; Blue)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Joy-Con is the name for the Switch&#039;s primary game controllers. The controllers communicate to the console through bluetooth and can be disconnected from the main unit.&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
The controllers themselves are simple to disassemble and identify.&lt;br /&gt;
[[File:JoyconFront.jpg|400px|thumb|The front of the Joy-Con internal[https://www.ifixit.com/Teardown/Nintendo+Switch+Teardown/78263]]]&lt;br /&gt;
[[File:JoyconRear.jpg|400px|thumb|The rear of the Joy-Con internal[https://www.ifixit.com/Teardown/Nintendo+Switch+Teardown/78263]]]&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Color || Item&lt;br /&gt;
|-&lt;br /&gt;
| Red || Broadcom BCM20734 Bluetooth 4.1/2.4 GHz Transceiver&lt;br /&gt;
|-&lt;br /&gt;
| Orange || STMicroelectronics NFCBEA 812006 33 (Likely NFC reader IC)&lt;br /&gt;
|-&lt;br /&gt;
| Yellow|| Macronix International MX25U4033E 4 Mb CMOS Flash&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Firmware==&lt;br /&gt;
&#039;&#039;See also: [[Joy-Con Firmware]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The firmware of the Joy-Cons seems to be generic across all instances. Details such as the handedness of the controller and the color is just indicated in a configuration part of the flash. Judging by quick glance at the firmware, it&#039;s probably identical to that used on the Pro Controller as well.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Controller || 1.0.0&lt;br /&gt;
|-&lt;br /&gt;
| Joy-Con Left (Blue) || [[:File:pad.L.bin|flash dump]]&lt;br /&gt;
|-&lt;br /&gt;
| Joy-Con Right (Red) || [[:File:pad.R.bin|flash dump]]&lt;br /&gt;
|}&lt;br /&gt;
The flash is in a patch-ram format. Tools for dealing with it are available [https://github.com/shuffle2/nxpad].&lt;br /&gt;
A dump of the ROM region (taken while firmware was running) can be found [[:File:bcm20734_rom.bin|here]]. Note this is the same SoC used on the other controller models, as well.&lt;br /&gt;
&lt;br /&gt;
== Left &amp;amp; Right Separate Joy-con ==&lt;br /&gt;
&lt;br /&gt;
When paired directly to a computer over bluetooth, the joy-con both provide identical HID input report descriptor. This does not appear to include motion controls, IR data, or NFC. They both behave as detached single-player controllers.&lt;br /&gt;
&lt;br /&gt;
HID Input Report Descriptor (Hexadecimal):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
00000000: 05010905 A1010601 FF852109 21750895  ....¡...ÿ…!.!u.•&lt;br /&gt;
00000010: 30810285 30093075 08953081 02853109  0..…0.0u.•0..…1.&lt;br /&gt;
00000020: 31750896 69018102 85320932 75089669  1u.–i...…2.2u.–i&lt;br /&gt;
00000030: 01810285 33093375 08966901 8102853F  ...…3.3u.–i...…?&lt;br /&gt;
00000040: 05091901 29101500 25017501 95108102  ....)...%.u.•...&lt;br /&gt;
00000050: 05010939 15002507 75049501 81420509  ...9..%.u.•..B..&lt;br /&gt;
00000060: 75049501 81010501 09300931 09330934  u.•......0.1.3.4&lt;br /&gt;
00000070: 16000027 FFFF0000 75109504 81020601  ...&#039;ÿÿ..u.•.....&lt;br /&gt;
00000080: FF850109 01750895 30910285 10091075  ÿ…...u.•0‘.…...u&lt;br /&gt;
00000090: 08953091 02851109 11750895 30910285  .•0‘.…...u.•0‘.…&lt;br /&gt;
000000A0: 12091275 08953091 02C0               ...u.•0‘.À&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Parsed Bytes || Description&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x01,        || Usage Page (Generic Desktop Ctrls)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x05,        || Usage (Game Pad)&lt;br /&gt;
|-&lt;br /&gt;
|0xA1, 0x01,        || Collection (Application)&lt;br /&gt;
|-&lt;br /&gt;
|0x06, 0x01, 0xFF,  ||   Usage Page (Vendor Defined 0xFF01)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x21,        ||   Report ID (33)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x21,        ||   Usage (0x21)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x30,        ||   Report ID (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x30,        ||   Usage (0x30)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x31,        ||   Report ID (49)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x31,        ||   Usage (0x31)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x96, 0x69, 0x01,  ||   Report Count (361)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x32,        ||   Report ID (50)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x32,        ||   Usage (0x32)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x96, 0x69, 0x01,  ||   Report Count (361)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x33,        ||   Report ID (51)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x33,        ||   Usage (0x33)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x96, 0x69, 0x01,  ||   Report Count (361)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x3F,        ||   Report ID (63)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x09,        ||   Usage Page (Button)&lt;br /&gt;
|-&lt;br /&gt;
|0x19, 0x01,        ||   Usage Minimum (0x01)&lt;br /&gt;
|-&lt;br /&gt;
|0x29, 0x10,        ||   Usage Maximum (0x10)&lt;br /&gt;
|-&lt;br /&gt;
|0x15, 0x00,        ||   Logical Minimum (0)&lt;br /&gt;
|-&lt;br /&gt;
|0x25, 0x01,        ||   Logical Maximum (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x01,        ||   Report Size (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x10,        ||   Report Count (16)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x01,        ||   Usage Page (Generic Desktop Ctrls)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x39,        ||   Usage (Hat switch)&lt;br /&gt;
|-&lt;br /&gt;
|0x15, 0x00,        ||   Logical Minimum (0)&lt;br /&gt;
|-&lt;br /&gt;
|0x25, 0x07,        ||   Logical Maximum (7)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x04,        ||   Report Size (4)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x01,        ||   Report Count (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x42,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,Null State)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x09,        ||   Usage Page (Button)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x04,        ||   Report Size (4)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x01,        ||   Report Count (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x01,        ||   Input (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x01,        ||   Usage Page (Generic Desktop Ctrls)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x30,        ||   Usage (X)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x31,        ||   Usage (Y)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x33,        ||   Usage (Rx)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x34,        ||   Usage (Ry)&lt;br /&gt;
|-&lt;br /&gt;
|0x16, 0x00, 0x00,  ||   Logical Minimum (0)&lt;br /&gt;
|-&lt;br /&gt;
|0x27, 0xFF, 0xFF, 0x00, 0x00,  ||   Logical Maximum (65534)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x10,        ||   Report Size (16)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x04,        ||   Report Count (4)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x06, 0x01, 0xFF,  ||   Usage Page (Vendor Defined 0xFF01)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x01,        ||   Report ID (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x01,        ||   Usage (0x01)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x10,        ||   Report ID (16)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x10,        ||   Usage (0x10)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x11,        ||   Report ID (17)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x11,        ||   Usage (0x11)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x12,        ||   Report ID (18)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x12,        ||   Usage (0x12)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0xC0,              || End Collection&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Colors==&lt;br /&gt;
HEX codes for the colors shown in the &amp;quot;Controllers&amp;quot; menu of the Switch UI can be found in a Joy-con SPI dump starting at offset 0x6050. Body color is first followed by button color and each is 3 bytes long. These values are able to be re-written with any HEX color value to make the Joy-cons show up as different colors in the UI. The following is a list of official HEX colors recovered from SPI dumps.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Color Name || Body HEX || Button HEX&lt;br /&gt;
|-&lt;br /&gt;
| Gray || #828282 || #0F0F0F&lt;br /&gt;
|-&lt;br /&gt;
| Neon Red || #FF3C28 || #1E0A0A&lt;br /&gt;
|-&lt;br /&gt;
| Neon Blue || #0AB9E6 || #001E1E&lt;br /&gt;
|-&lt;br /&gt;
| Neon Yellow || #E6FF00 || #142800&lt;br /&gt;
|-&lt;br /&gt;
| Neon Pink || #FF3278 || #28001E&lt;br /&gt;
|-&lt;br /&gt;
| Neon Green || #1EDC00 || #002800&lt;br /&gt;
|-&lt;br /&gt;
| Neon Orange || #FAA005 || #0F0A00&lt;br /&gt;
|-&lt;br /&gt;
| Neon Purple || #B400E6 || #140014&lt;br /&gt;
|-&lt;br /&gt;
| Mario Red || #E10F00 || #280A0A&lt;br /&gt;
|-&lt;br /&gt;
| Royal Blue || #4655F5 || #00000A&lt;br /&gt;
|-&lt;br /&gt;
| Eevee Brown || #C88C32 || #281900&lt;br /&gt;
|-&lt;br /&gt;
| Pikachu Yellow || #FFDC00 || #322800&lt;br /&gt;
|-&lt;br /&gt;
| Nintendo Labo &amp;quot;creators contest&amp;quot; || #D7AA73 || #1E1914&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Additional Links==&lt;br /&gt;
[https://github.com/dekuNukem/Nintendo_Switch_Reverse_Engineering Reverse Engineering of the Joy-Con by Github user dekuNukem]&lt;/div&gt;</summary>
		<author><name>Imp Uhrfik Simone</name></author>
	</entry>
</feed>