Joy-Con Firmware: Difference between revisions

No edit summary
No edit summary
Line 1: Line 1:
The Joy-Con is internally called Ukyo. (Strings in the firmware) The firmware is written in C++. (Also found in strings in the firmware)
The Joy-Con are internally called Ukyo (Left) and Sakyo (Right). The firmware is written in C++.


= Joy-Con Firmware File =
= Joy-Con Firmware File =
The length of the firmware must be 524288 bytes.
The length of the firmware must be 524288 bytes.


Line 28: Line 27:


== Factory Configuration Sector ==
== Factory Configuration Sector ==
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
Line 36: Line 34:
! Description
! Description
|-
|-
| 0x00 || B || 0x10 || Serial number
| 0x00 || B || 0x10 || IdentificationCode
|-
| 0x12 || B || 0x01 || [[#Type|Type]]
|-
|-
| 0x10 || ? || 0x02 || Unknown
| 0x1B || B || 0x01 || FormatVersion
|-
|-
| 0x12 || B || 0x01 || Type descriptor (see [[#Type Descriptor|Type Descriptor]])
| 0x20 || B || 0x18 || Cal1
|-
|-
| 0x13 || ? || 0x3D || Unknown
| 0x3D || B || 0x19 || Cal2
|-
|-
| 0x50 || B || 0x03 || Body color of Controller in RGB Hex  (see [[Joy-Con#Colors|Joy-Con Colors]])
| 0x50 || B || 0x0D || [[#DesignInfo|DesignInfo]]
|-
|-
| 0x53 || B || 0x03 || Button color of Controller in RGB Hex (see [[Joy-Con#Colors|Joy-Con Colors]])
| 0x80 || B || 0x18 || Model1
|-
|-
| 0x56 || ? || 0xFAA || Unknown
| 0x98 || B || 0x12 || Model2
|}
|}


=== Type Descriptor ===
=== Type===
 
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
! Value
! Value
! Type Name
! Name
|-
|-
| 0x01 || Joy-Con Left
| 0x01 || Joy-Con Left
Line 65: Line 64:
|}
|}


== User Calibration Sector ==
=== DesignInfo ===
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x00 || 0x06 || [[#ControllerColor|ControllerColor]]
|-
| 0x06 || 0x07 || Unknown
|}


==== ControllerColor ====
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
! Offset
! Offset
! Endianness
! Size
! Size
! Description
! Description
|-
|-
| 0x00 || ? || 0x11 || Unknown
| 0x00 || 0x03 || Body color of controller in RGB Hex (see [[Joy-Con#Colors|Joy-Con Colors]])
|-
|-
| 0x10 || B || 0x0B || Left Stick Calibration (Factory 0xFF?)
| 0x03 || 0x03 || Button color of controller in RGB Hex (see [[Joy-Con#Colors|Joy-Con Colors]])
|}
 
== User Calibration Sector ==
{| class="wikitable" border="1"
|-
! Offset
! Endianness
! Size
! Description
|-
|-
| 0x1B || B || 0x0B || Right Stick Calibration (Factory 0xFF?)
| 0x10 || B || 0x0B || LeftAnalogStickUserCal
|-
|-
| 0x26 || B || 0x1A || Sensor Calibration (Factory 0xFF?)
| 0x1B || B || 0x0B || RightAnalogStickUserCal
|-
|-
| 0x40 || ? || 0xFBF || Unknown
| 0x26 || B || 0x1A || SixAxisSensorUserCal
|}
|}


= Firmware Chunks =
= Firmware Chunks =
The firmware itself is stored in PatchRAM chunks, located at the Factory Offset or the OTA Offset. Each chunk has a Record Type, Size and Data.
The firmware itself is stored in PatchRAM chunks, located at the Factory Offset or the OTA Offset. Each chunk has a Record Type, Size and Data.


Line 104: Line 121:


== Record Types ==
== Record Types ==
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
Line 121: Line 137:


=== Record 0x08 ===
=== Record 0x08 ===
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
Line 143: Line 158:


=== Record 0x0A ===
=== Record 0x0A ===
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
Line 158: Line 172:


=== Record 0x0B ===
=== Record 0x0B ===
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
Line 170: Line 183:


== Memory Regions ==
== Memory Regions ==
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-