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]] |
| |} | | |} |
| | | |