Joy-Con: Difference between revisions
m →Colors: ...verified and added Hex-Values for Newly Released Pastel Colored Joy-Con (...Pastel-Pink, Pastel-Yellow, Pastel-Purple, & Pastel-Green) |
Clean up and merge in preparation for documentation |
||
Line 1: | Line 1: | ||
Joy-Con is the name for the Switch's primary game controllers. The | Joy-Con is the name for the Switch's primary game controllers. The Joy-Con are internally called Ukyo (Left) and Sakyo (Right). | ||
= Hardware = | = Hardware = | ||
== Ukyo == | |||
{| class="wikitable" | {| class="wikitable" | ||
! | ! Component || Description | ||
|- | |- | ||
| | | SoC || Broadcom BCM20734 | ||
|- | |- | ||
| | | IMU || STMicroelectronics LSM6DS3H | ||
|- | |- | ||
| | | PMIC || Texas Instruments BQ24072 | ||
|- | |||
| Storage || Macronix International MX25U4033E 4 Mb CMOS Flash | |||
|} | |} | ||
= | == Sakyo == | ||
{| class="wikitable" | {| class="wikitable" | ||
! | ! Component || Description | ||
|- | |- | ||
| | | SoC || Broadcom BCM20734 | ||
|- | |- | ||
| | | MCU || STMicroelectronics STM32P411 | ||
|- | |||
| NFC || STMicroelectronics ST21NFCB | |||
|- | |||
| IMU || STMicroelectronics LSM6DS3H | |||
|- | |||
| PMIC || Texas Instruments BQ24072 | |||
|- | |||
| Storage || Macronix International MX25U4033E 4 Mb CMOS Flash | |||
|} | |} | ||
= Protocol = | = Protocol = | ||
Line 295: | Line 297: | ||
|} | |} | ||
= | = Firmware = | ||
The firmware is stored inside the flash in Broadcom's PatchRAM format as follows: | |||
{| class="wikitable" border="1" | |||
{| class="wikitable" | |||
|- | |- | ||
! Offset | |||
! Size | |||
! Description | |||
|- | |- | ||
| | | 0x00 || 0x14 || Magic number?? | ||
|- | |- | ||
| | | 0x15 || 0x06 || Unique MAC Address of controller | ||
|- | |- | ||
| | | 0x3B3 || 0x04 || Offset to Factory Firmware | ||
|- | |- | ||
| | | 0x1FF4 || 0x08 || OTA Magic, if the controller is Over-The-Air updated. | ||
|- | |- | ||
| | | 0x1FFC || 0x04 || Offset to OTA Firmware, if OTA Magic is valid. | ||
|- | |- | ||
| | | 0x2000 || 0x1000 || PairingInfo | ||
|- | |- | ||
| | | 0x5000 || 0x1 || Shipment | ||
|- | |- | ||
| | | 0x6000 || 0x1000 || [[#FactoryConfiguration|FactoryConfiguration]] | ||
|- | |- | ||
| | | 0x8000 || 0x1000 || [[#UserCalibration|UserCalibration]] | ||
|} | |||
== FactoryConfiguration == | |||
{| class="wikitable" border="1" | |||
|- | |- | ||
! Offset | |||
! Size | |||
! Description | |||
|- | |- | ||
| | | 0x00 || 0x10 || IdentificationCode | ||
|- | |- | ||
| | | 0x12 || 0x01 || [[#Type|Type]] | ||
|- | |- | ||
| | | 0x1B || 0x01 || FormatVersion | ||
|- | |- | ||
| | | 0x20 || 0x18 || [[#Cal1|Cal1]] | ||
|- | |- | ||
| | | 0x3D || 0x12 || [[#Cal2|Cal2]] | ||
|- | |- | ||
| | | 0x4F || 0x01 || Reserved | ||
|- | |- | ||
| | | 0x50 || 0x0D || [[#Design|Design]] | ||
|- | |- | ||
| | | 0x80 || 0x18 || [[#Model1|Model1]] | ||
|- | |- | ||
| | | 0x98 || 0x12 || [[#Model2|Model2]] | ||
|} | |||
=== Type === | |||
{| class="wikitable" border="1" | |||
|- | |- | ||
! Value | |||
! Description | |||
|- | |- | ||
| | | 0x01 || JoyLeft | ||
|- | |- | ||
| | | 0x02 || JoyRight | ||
|- | |- | ||
| | | 0x03 || SwitchProController | ||
|- | |- | ||
| | | 0x04 || ([[HID_services#DeviceTypeInternal|DeviceType]] 4) | ||
|- | |- | ||
| | | 0x05 || ([[HID_services#DeviceTypeInternal|DeviceType]] 5) | ||
|- | |- | ||
| | | 0x06 || ([[HID_services#DeviceTypeInternal|DeviceType]] 6) | ||
|- | |- | ||
| | | 0x07 || LarkHvc1 | ||
|- | |- | ||
| | | 0x08 || LarkHvc2 | ||
|- | |- | ||
| | | 0x09 || LarkNesLeft | ||
|- | |- | ||
| | | 0x0A || LarkNesRight | ||
|- | |- | ||
| | | 0x0B || Lucia | ||
|- | |- | ||
| | | 0x0C || [12.0.0+] Lagon | ||
|- | |- | ||
| | | 0x0D || [13.0.0+] Lager | ||
|- | |- | ||
| | | 0x0E || [14.0.0+] ([[HID_services#DeviceTypeInternal|DeviceType]] 30) | ||
|- | |- | ||
| | | 0x21 || FiftyLeft ([[HID_services#DeviceTypeInternal|DeviceType]] 14) | ||
|- | |- | ||
| | | 0x22 || FiftyRight ([[HID_services#DeviceTypeInternal|DeviceType]] 18) | ||
|} | |||
=== Cal1 === | |||
{| class="wikitable" border="1" | |||
|- | |- | ||
! Offset | |||
! Size | |||
! Description | |||
|- | |- | ||
| | | 0x00 || 0x18 || SixAxisSensorCalibrationValue | ||
|} | |||
=== Cal2 === | |||
{| class="wikitable" border="1" | |||
|- | |- | ||
! Offset | |||
! Size | |||
! Description | |||
|- | |- | ||
| | | 0x00 || 0x09 || LeftAnalogStickCalibrationValue | ||
|- | |- | ||
| | | 0x09 || 0x09 || RightAnalogStickCalibrationValue | ||
|} | |||
=== Design === | |||
{| class="wikitable" border="1" | |||
|- | |- | ||
! Offset | |||
! Size | |||
! Description | |||
|- | |- | ||
| | | 0x00 || 0x0C || [[#ControllerColor|ControllerColor]] | ||
|- | |- | ||
| | | 0x0C || 0x01 || [[#DesignVariation|DesignVariation]] | ||
|} | |||
==== ControllerColor ==== | |||
{| class="wikitable" border="1" | |||
|- | |- | ||
! Offset | |||
! Size | |||
! Description | |||
|- | |- | ||
| | | 0x00 || 0x03 || Body color of controller in RGB Hex (see [[Joy-Con#Colors|Joy-Con Colors]]) | ||
|- | |- | ||
| | | 0x03 || 0x03 || Button color of controller in RGB Hex (see [[Joy-Con#Colors|Joy-Con Colors]]) | ||
|- | |- | ||
| | | 0x06 || 0x03 || Left grip color of controller in RGB Hex | ||
|- | |- | ||
| | | 0x09 || 0x03 || Right grip color of controller in RGB Hex | ||
|} | |||
==== DesignVariation ==== | |||
{| class="wikitable" border="1" | |||
|- | |- | ||
! Value | |||
! Name | |||
|- | |- | ||
| | | 0x00 || LuciaJ, LagerJ | ||
|- | |- | ||
| | | 0x01 || LuciaE, LagerE | ||
|- | |- | ||
| | | 0x02 || LuciaU, LagerU | ||
|} | |||
=== Model1 === | |||
{| class="wikitable" border="1" | |||
|- | |- | ||
! Offset | |||
! Size | |||
! Description | |||
|- | |- | ||
| | | 0x00 || 0x06 || SensorData | ||
|- | |- | ||
| | | 0x06 || 0x12 || AnalogStickModuleParam | ||
|} | |||
=== Model2 === | |||
{| class="wikitable" border="1" | |||
|- | |- | ||
! Offset | |||
! Size | |||
! Description | |||
|- | |- | ||
| | | 0x00 || 0x12 || AnalogStickModuleParam | ||
|} | |||
== UserCalibration == | |||
{| class="wikitable" border="1" | |||
|- | |- | ||
! Offset | |||
! Size | |||
! Description | |||
|- | |- | ||
| | | 0x10 || 0x18 || [[#UserCal1|UserCal1]] | ||
|- | |- | ||
| | | 0x28 || 0x18 || [[#UserCal2|UserCal2]] | ||
|} | |||
=== UserCal1 === | |||
{| class="wikitable" border="1" | |||
|- | |- | ||
! Offset | |||
! Size | |||
! Description | |||
|- | |- | ||
| | | 0x00 || 0x02 || UserCalMagicNumber | ||
|- | |- | ||
| | | 0x02 || 0x09 || LeftAnalogStickCalibrationValue | ||
|- | |- | ||
| | | 0x0B || 0x02 || UserCalMagicNumber | ||
|- | |- | ||
|0x09 | | 0x0D || 0x09 || RightAnalogStickCalibrationValue | ||
|- | |- | ||
| | | 0x16 || 0x02 || UserCalMagicNumber | ||
|} | |||
=== UserCal2 === | |||
{| class="wikitable" border="1" | |||
|- | |- | ||
! Offset | |||
! Size | |||
! Description | |||
|- | |- | ||
| | | 0x00 || 0x18 || SixAxisSensorCalibrationValue | ||
|} | |} | ||
== Colors == | == Colors == | ||
HEX codes for the colors shown in the "Controllers" 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. | HEX codes for the colors shown in the "Controllers" 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. | ||
{| class="wikitable" | {| class="wikitable" | ||
! Developer Kit Joy-Con || Release || Body HEX || Button HEX | ! Developer Kit Joy-Con || Release || Body HEX || Button HEX | ||
Line 580: | Line 617: | ||
| // *(Prize Awarded for Labo Contest - No Retail) // **(Available Japan Only) | | // *(Prize Awarded for Labo Contest - No Retail) // **(Available Japan Only) | ||
|} | |} | ||