Changes

4,024 bytes added ,  02:46, 3 November 2023
Joy-Con codenames were reversed, can confirm this with prototype board labels and also Japanese history
Line 1: Line 1: −
Joy-Con is the name for the Switch's primary game controllers. The Joy-Con are internally called Ukyo (Left) and Sakyo (Right).
+
Joy-Con is the name for the Switch's primary game controllers. The Joy-Con are internally called Sakyo (Left) and Ukyo (Right).
    
= Hardware =
 
= Hardware =
== Ukyo ==
+
== Sakyo ==
 
{| class="wikitable"
 
{| class="wikitable"
 
! Component || Description
 
! Component || Description
Line 15: Line 15:  
|}
 
|}
   −
== Sakyo ==
+
== Ukyo ==
 
{| class="wikitable"
 
{| class="wikitable"
 
! Component || Description
 
! Component || Description
Line 639: Line 639:  
|-
 
|-
 
| 0x3F || GenericInputReport
 
| 0x3F || GenericInputReport
 +
|-
 +
| 0x70 || OtaEnableFwuReport
 +
|-
 +
| 0x71 || OtaSetupReadReport
 +
|-
 +
| 0x72 || OtaReadReport
 +
|-
 +
| 0x73 || OtaWriteReport
 +
|-
 +
| 0x74 || OtaEraseReport
 +
|-
 +
| 0x75 || OtaLaunchReport
 
|-
 
|-
 
| 0x80 || ExtGripOutputReport
 
| 0x80 || ExtGripOutputReport
 
|-
 
|-
 
| 0x81 || ExtGripInputReport
 
| 0x81 || ExtGripInputReport
 +
|-
 +
| 0x82 ||
 
|}
 
|}
   Line 799: Line 813:  
|-
 
|-
 
| 0xD9 || ExtDevInfo
 
| 0xD9 || ExtDevInfo
 +
|}
 +
 +
== ExtGripCommand ==
 +
{| class="wikitable" border="1"
 +
! Value
 +
! Description
 +
|-
 +
| 0x01 || Inquiry
 +
|-
 +
| 0x02 || CreateHidConnection
 +
|-
 +
| 0x03 || DeleteHidConnection
 +
|-
 +
| 0x04 || StartHidData
 +
|-
 +
| 0x05 || StopHidData
 +
|-
 +
| 0x06 ||
 +
|-
 +
| 0x07 || GetFirmwareVersion
 +
|-
 +
| 0x08 ||
 +
|-
 +
| 0x91 || LoopbackTest
 +
|-
 +
| 0x92 ||
 +
|-
 +
| 0xA0 || SetUartClockTrim
 
|}
 
|}
   Line 810: Line 852:  
! Description
 
! Description
 
|-
 
|-
| 0x00 || 0x14 || Magic number??
+
| 0x0 || 0x1000 || StaticSection
|-
  −
| 0x15 || 0x06 || Unique MAC Address of controller
   
|-
 
|-
| 0x3B3 || 0x04 || Offset to Factory Firmware
+
| 0x1000 || 0x1000 || [[#FailsafeSection|FailsafeSection]]
 
|-
 
|-
| 0x1FF4 || 0x08 || OTA Magic, if the controller is Over-The-Air updated.
+
| 0x2000 || 0x1000 || [[#VolatileSection|VolatileSection]]
 
|-
 
|-
| 0x1FFC || 0x04 || Offset to OTA Firmware, if OTA Magic is valid.
+
| 0x3000 || 0x1000 || VolatileSectionBackup1
 
|-
 
|-
| 0x2000 || 0x1000 || PairingInfo
+
| 0x4000 || 0x1000 || VolatileSectionBackup2
 
|-
 
|-
| 0x5000 || 0x1 || Shipment
+
| 0x5000 || 0x1000 || [[#ShipmentInfo|ShipmentInfo]]
 
|-
 
|-
 
| 0x6000 || 0x1000 || [[#FactoryConfiguration|FactoryConfiguration]]
 
| 0x6000 || 0x1000 || [[#FactoryConfiguration|FactoryConfiguration]]
 
|-
 
|-
 
| 0x8000 || 0x1000 || [[#UserCalibration|UserCalibration]]
 
| 0x8000 || 0x1000 || [[#UserCalibration|UserCalibration]]
 +
|-
 +
| 0x9000 || 0x7000 || Reserved
 +
|-
 +
| 0x10000 || 0x18000 || DynamicSection1
 +
|-
 +
| 0x28000 || 0x18000 || DynamicSection2
 +
|-
 +
| 0x40000 || 0x40000 || Reserved
 +
|}
 +
 +
== FailsafeSection ==
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0 || 0xFF4 || Reserved
 +
|-
 +
| 0xFF4 || 0x8 || Signature
 +
|-
 +
| 0xFFC || 0x4 || Ds2Offset
 +
|}
 +
 +
== VolatileSection ==
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0 || 0x26 ||
 +
|-
 +
| 0x26 || 0xFDA || Reserved
 +
|}
 +
 +
== ShipmentInfo ==
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0 || 0x1 || Shipment
 +
|-
 +
| 0x1 || 0xFFF || Reserved
 
|}
 
|}
   Line 836: Line 922:  
! Description
 
! Description
 
|-
 
|-
| 0x00 || 0x10 || IdentificationCode
+
| 0x0 || 0x10 || IdentificationCode
 +
|-
 +
| 0x10 || 0x2 || Reserved
 +
|-
 +
| 0x12 || 0x1 || [[#Type|Type]]
 +
|-
 +
| 0x13 || 0x1 || BoardRevision
 +
|-
 +
| 0x14 || 0x7 || Reserved
 
|-
 
|-
| 0x12 || 0x01 || [[#Type|Type]]
+
| 0x1B || 0x1 || FormatVersion
 
|-
 
|-
| 0x1B || 0x01 || FormatVersion
+
| 0x1C || 0x4 || Reserved
 
|-
 
|-
 
| 0x20 || 0x18 || [[#Cal1|Cal1]]
 
| 0x20 || 0x18 || [[#Cal1|Cal1]]
 +
|-
 +
| 0x38 || 0x5 || Reserved
 
|-
 
|-
 
| 0x3D || 0x12 || [[#Cal2|Cal2]]
 
| 0x3D || 0x12 || [[#Cal2|Cal2]]
 
|-
 
|-
| 0x4F || 0x01 || Reserved
+
| 0x4F || 0x1 || Reserved
 
|-
 
|-
| 0x50 || 0x0D || [[#Design|Design]]
+
| 0x50 || 0xD || [[#Design|Design]]
 +
|-
 +
| 0x5D || 0x23 || Reserved
 
|-
 
|-
 
| 0x80 || 0x18 || [[#Model1|Model1]]
 
| 0x80 || 0x18 || [[#Model1|Model1]]
 
|-
 
|-
 
| 0x98 || 0x12 || [[#Model2|Model2]]
 
| 0x98 || 0x12 || [[#Model2|Model2]]
 +
|-
 +
| 0xAA || 0x1 || Reserved
 +
|-
 +
| 0xAB || 0x1 || AccelerometerAxisAssignment
 +
|-
 +
| 0xAC || 0x1 || GyroscopeAxisAssignment
 +
|-
 +
| 0xAD || 0x1 || MainAnalogStickAxisAssignment
 +
|-
 +
| 0xAE || 0x1 || SubAnalogStickAxisAssignment
 +
|-
 +
| 0xAF || 0x151 || Reserved
 +
|-
 +
| 0x200 || 0x2 || BatteryVoltage
 +
|-
 +
| 0x202 || 0xB7E || Reserved
 +
|-
 +
| 0xD80 || 0x2 || TarragonVid
 +
|-
 +
| 0xD82 || 0x2 || TarragonPid
 +
|-
 +
| 0xD84 || 0x7C || Reserved
 +
|-
 +
| 0xE00 || 0x100 || InspectionLog
 
|}
 
|}
   Line 871: Line 993:  
| 0x05 || ([[HID_services#DeviceTypeInternal|DeviceType]] 5)
 
| 0x05 || ([[HID_services#DeviceTypeInternal|DeviceType]] 5)
 
|-
 
|-
| 0x06 || ([[HID_services#DeviceTypeInternal|DeviceType]] 6)
+
| 0x06 || Tarragon ([[HID_services#DeviceTypeInternal|DeviceType]] 6)
 
|-
 
|-
 
| 0x07 || LarkHvc1
 
| 0x07 || LarkHvc1
Line 901: Line 1,023:  
! Description
 
! Description
 
|-
 
|-
| 0x00 || 0x18 || SixAxisSensorCalibrationValue
+
| 0x0 || 0x18 || [[#SixAxisSensorCalibrationValue|SixAxisSensorCalibrationValue]]
 +
|}
 +
 
 +
==== SixAxisSensorCalibrationValue ====
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0 || 0x2 || Accelerometer0OffsetX
 +
|-
 +
| 0x2 || 0x2 || Accelerometer0OffsetY
 +
|-
 +
| 0x4 || 0x2 || Accelerometer0OffsetZ
 +
|-
 +
| 0x6 || 0x2 || Accelerometer1GScaleX
 +
|-
 +
| 0x8 || 0x2 || Accelerometer1GScaleY
 +
|-
 +
| 0xA || 0x2 || Accelerometer1GScaleZ
 +
|-
 +
| 0xC || 0x2 || Gyroscope0OffsetX
 +
|-
 +
| 0xE || 0x2 || Gyroscope0OffsetY
 +
|-
 +
| 0x10 || 0x2 || Gyroscope0OffsetZ
 +
|-
 +
| 0x12 || 0x2 || Gyroscope78RpmX
 +
|-
 +
| 0x14 || 0x2 || Gyroscope78RpmY
 +
|-
 +
| 0x16 || 0x2 || Gyroscope78RpmZ
 
|}
 
|}
   Line 911: Line 1,065:  
! Description
 
! Description
 
|-
 
|-
| 0x00 || 0x09 || LeftAnalogStickCalibrationValue
+
| 0x0 || 0x9 || [[#MainAnalogStickCalibrationValue|MainAnalogStickCalibrationValue]]
 +
|-
 +
| 0x9 || 0x9 || [[#SubAnalogStickCalibrationValue|SubAnalogStickCalibrationValue]]
 +
|}
 +
 
 +
==== MainAnalogStickCalibrationValue ====
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0 || 0x3 || AnalogStickCalXPositiveAndAnalogStickCalYPositive
 +
|-
 +
| 0x3 || 0x3 || AnalogStickCalX0AndAnalogStickCalY0
 +
|-
 +
| 0x6 || 0x3 || AnalogStickCalXNegativeAndAnalogStickCalYNegative
 +
|}
 +
 
 +
==== SubAnalogStickCalibrationValue ====
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0 || 0x3 || AnalogStickCalX0AndAnalogStickCalY0
 +
|-
 +
| 0x3 || 0x3 || AnalogStickCalXNegativeAndAnalogStickCalYNegative
 
|-
 
|-
| 0x09 || 0x09 || RightAnalogStickCalibrationValue
+
| 0x6 || 0x3 || AnalogStickCalXPositiveAndAnalogStickCalYPositive
 
|}
 
|}
   Line 923: Line 1,105:  
! Description
 
! Description
 
|-
 
|-
| 0x00 || 0x0C || [[#ControllerColor|ControllerColor]]
+
| 0x0 || 0xC || [[#ControllerColor|ControllerColor]]
 
|-
 
|-
| 0x0C || 0x01 || [[#DesignVariation|DesignVariation]]
+
| 0xC || 0x1 || [[#DesignVariation|DesignVariation]]
 
|}
 
|}
   Line 935: Line 1,117:  
! Description
 
! Description
 
|-
 
|-
| 0x00 || 0x03 || Body color of controller in RGB Hex (see [[Joy-Con#Colors|Joy-Con Colors]])
+
| 0x0 || 0x3 || MainColor (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]])
+
| 0x3 || 0x3 || SubColor (button color of controller in RGB Hex, see [[Joy-Con#Colors|Joy-Con Colors]])
 
|-
 
|-
| 0x06 || 0x03 || Left grip color of controller in RGB Hex
+
| 0x6 || 0x3 || 3rdColor (left grip color of controller in RGB Hex)
 
|-
 
|-
| 0x09 || 0x03 || Right grip color of controller in RGB Hex
+
| 0x9 || 0x3 || 4thColor (right grip color of controller in RGB Hex)
 
|}
 
|}
   Line 950: Line 1,132:  
! Name
 
! Name
 
|-
 
|-
| 0x00 || LuciaJ, LagerJ
+
| 0x0 || LuciaJ, LagerJ
 
|-
 
|-
| 0x01 || LuciaE, LagerE
+
| 0x1 || LuciaE, LagerE
 
|-
 
|-
| 0x02 || LuciaU, LagerU
+
| 0x2 || LuciaU, LagerU
 
|}
 
|}
   Line 964: Line 1,146:  
! Description
 
! Description
 
|-
 
|-
| 0x00 || 0x06 || SensorData
+
| 0x0 || 0x6 || [[#SixAxisSensorHorizontalOffset|SixAxisSensorHorizontalOffset]]
 +
|-
 +
| 0x6 || 0x12 || [[#AnalogStickModuleParam|MainAnalogStickModuleParam]]
 +
|}
 +
 
 +
==== SixAxisSensorHorizontalOffset ====
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0 || 0x2 || HorizontalOffsetX
 +
|-
 +
| 0x2 || 0x2 || HorizontalOffsetY
 +
|-
 +
| 0x4 || 0x2 || HorizontalOffsetZ
 +
|}
 +
 
 +
==== AnalogStickModuleParam ====
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0 || 0x3 || TypicalStrokeXAndTypicalStrokeY
 
|-
 
|-
| 0x06 || 0x12 || AnalogStickModuleParam
+
| 0x3 || 0x3 || CenterDeadZoneSizeAndCircuitDeadZoneScale
 +
|-
 +
| 0x6 || 0x3 || MinimumStrokeXPositiveAndMinimumStrokeYPositive
 +
|-
 +
| 0x9 || 0x3 || MinimumStrokeXNegativeAndMinimumStrokeYNegative
 +
|-
 +
| 0xC || 0x3 || CenterRangeXPositiveAndCenterRangeYPositive
 +
|-
 +
| 0xF || 0x3 || CenterRangeXNegativeAndCenterRangeYNegative
 
|}
 
|}
   Line 976: Line 1,192:  
! Description
 
! Description
 
|-
 
|-
| 0x00 || 0x12 || AnalogStickModuleParam
+
| 0x0 || 0x12 || [[#AnalogStickModuleParam|SubAnalogStickModuleParam]]
 
|}
 
|}
   Line 986: Line 1,202:  
! Description
 
! Description
 
|-
 
|-
| 0x10 || 0x18 || [[#UserCal1|UserCal1]]
+
| 0x0 || 0x10 || Reserved
 
|-
 
|-
| 0x28 || 0x18 || [[#UserCal2|UserCal2]]
+
| 0x10 || 0x16 || [[#UserCal1|UserCal1]]
 +
|-
 +
| 0x26 || 0x1A || [[#UserCal2|UserCal2]]
 +
|-
 +
| 0x40 || 0xFC0 || Reserved
 
|}
 
|}
   Line 998: Line 1,218:  
! Description
 
! Description
 
|-
 
|-
| 0x00 || 0x02 || UserCalMagicNumber
+
| 0x0 || 0x2 || MagicNumber
|-
  −
| 0x02 || 0x09 || LeftAnalogStickCalibrationValue
   
|-
 
|-
| 0x0B || 0x02 || UserCalMagicNumber
+
| 0x2 || 0x9 || [[#MainAnalogStickCalibrationValue|MainAnalogStickUserCalibrationValue]]
 
|-
 
|-
| 0x0D || 0x09 || RightAnalogStickCalibrationValue
+
| 0xB || 0x2 || MagicNumber
 
|-
 
|-
| 0x16 || 0x02 || UserCalMagicNumber
+
| 0xD || 0x9 || [[#SubAnalogStickCalibrationValue|SubAnalogStickUserCalibrationValue]]
 
|}
 
|}
   Line 1,016: Line 1,234:  
! Description
 
! Description
 
|-
 
|-
| 0x00 || 0x18 || SixAxisSensorCalibrationValue
+
| 0x0 || 0x2 || MagicNumber
 +
|-
 +
| 0x2 || 0x18 || [[#SixAxisSensorCalibrationValue|SixAxisSensorUserCalibrationValue]]
 
|}
 
|}