Line 3,527: |
Line 3,527: |
| | 0x10 | | | 0x10 |
| | 0x8 | | | 0x8 |
− | | Stage | + | | [[#AnalogStickManualCalibrationStage|Stage]] |
| |- | | |- |
| | 0x18 | | | 0x18 |
Line 3,601: |
Line 3,601: |
| | 0x8 | | | 0x8 |
| | 0x8 | | | 0x8 |
− | | Stage | + | | [[#SixAxisSensorUserCalibrationStage|Stage]] |
| |- | | |- |
| | 0x10 | | | 0x10 |
Line 3,747: |
Line 3,747: |
| | 0x419C | | | 0x419C |
| | 0x4 | | | 0x4 |
− | | BatteryLevel0 | + | | [[#BatteryLevel|BatteryLevelJoyDual]] |
| |- | | |- |
| | 0x41A0 | | | 0x41A0 |
| | 0x4 | | | 0x4 |
− | | BatteryLevel1 | + | | [[#BatteryLevel|BatteryLevelJoyLeft]] |
| |- | | |- |
| | 0x41A4 | | | 0x41A4 |
| | 0x4 | | | 0x4 |
− | | BatteryLevel2 | + | | [[#BatteryLevel|BatteryLevelJoyRight]] |
| |- | | |- |
| | 0x41A8 | | | 0x41A8 |
Line 4,417: |
Line 4,417: |
| | 0x8 | | | 0x8 |
| | 0x28 | | | 0x28 |
− | | [[#NpadSystemState]] | + | | [[#NpadSystemExtState]] |
| |} | | |} |
| | | |
Line 5,094: |
Line 5,094: |
| = DebugPadAttributeSet = | | = DebugPadAttributeSet = |
| This is "nn::hid::DebugPadAttributeSet". This is a BitFlagSet object for [[#DebugPadAttribute]]. | | This is "nn::hid::DebugPadAttributeSet". This is a BitFlagSet object for [[#DebugPadAttribute]]. |
| + | |
| + | = DebugPadAttribute = |
| + | This is "nn::hid::DebugPadAttribute". This is a 32-bit flag. |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Bit |
| + | ! Description |
| + | |- |
| + | | 0 |
| + | | IsConnected |
| + | |} |
| | | |
| = TouchAttributeSet = | | = TouchAttributeSet = |
| This is "nn::hid::TouchAttributeSet". This is a BitFlagSet object for [[#TouchAttribute]]. | | This is "nn::hid::TouchAttributeSet". This is a BitFlagSet object for [[#TouchAttribute]]. |
| + | |
| + | = TouchAttribute = |
| + | This is "nn::hid::TouchAttribute". This is a 32-bit flag. |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Bit |
| + | ! Description |
| + | |- |
| + | | 0 |
| + | | Start |
| + | |- |
| + | | 1 |
| + | | End |
| + | |} |
| | | |
| = MouseAttributeSet = | | = MouseAttributeSet = |
| This is "nn::hid::MouseAttributeSet". This is a BitFlagSet object for [[#MouseAttribute]]. | | This is "nn::hid::MouseAttributeSet". This is a BitFlagSet object for [[#MouseAttribute]]. |
| + | |
| + | = MouseAttribute = |
| + | This is "nn::hid::MouseAttribute". This is a 32-bit flag. |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Bit |
| + | ! Description |
| + | |- |
| + | | 0 |
| + | | Transferable |
| + | |- |
| + | | 1 |
| + | | IsConnected |
| + | |} |
| | | |
| = BasicXpadAttributeSet = | | = BasicXpadAttributeSet = |
Line 5,107: |
Line 5,149: |
| This is "nn::hid::NpadAttributesSet". This is a BitFlagSet object for [[#NpadAttribute]]. | | This is "nn::hid::NpadAttributesSet". This is a BitFlagSet object for [[#NpadAttribute]]. |
| | | |
− | = SixAxisSensorAttributeSet = | + | = NpadAttribute = |
− | This is "nn::hid::SixAxisSensorAttributeSet". This is a BitFlagSet object for [[#SixAxisSensorAttribute]]. | + | This is "nn::hid::NpadAttribute". This is a 32-bit flag. |
| | | |
− | = GestureAttributeSet = | + | {| class="wikitable" border="1" |
− | This is "nn::hid::GestureAttributeSet". This is a BitFlagSet object for [[#GestureAttribute]].
| + | |- |
| + | ! Bit |
| + | ! Description |
| + | |- |
| + | | 0 |
| + | | IsConnected |
| + | |- |
| + | | 1 |
| + | | IsWired |
| + | |- |
| + | | 2 |
| + | | IsLeftConnected |
| + | |- |
| + | | 3 |
| + | | IsLeftWired |
| + | |- |
| + | | 4 |
| + | | IsRightConnected |
| + | |- |
| + | | 5 |
| + | | IsRightWired |
| + | |} |
| | | |
− | = DebugPadButtonSet = | + | = SixAxisSensorAttributeSet = |
− | This is "nn::hid::DebugPadButtonSet". This is a BitFlagSet object for [[#DebugPadButton]]. | + | This is "nn::hid::SixAxisSensorAttributeSet". This is a BitFlagSet object for [[#SixAxisSensorAttribute]]. |
| | | |
− | = MouseButtonSet = | + | = SixAxisSensorAttribute = |
− | This is "nn::hid::MouseButtonSet". This is a BitFlagSet object for [[#MouseButton]]. | + | This is "nn::hid::SixAxisSensorAttribute". This is a 32-bit flag. |
| | | |
− | = KeyboardModifierSet = | + | {| class="wikitable" border="1" |
− | This is "nn::hid::KeyboardModifierSet". This is a BitFlagSet object for [[#KeyboardModifier]].
| + | |- |
| + | ! Bit |
| + | ! Description |
| + | |- |
| + | | 0 |
| + | | IsConnected |
| + | |- |
| + | | 1 |
| + | | IsInterpolated |
| + | |} |
| | | |
− | = KeyboardKeySet = | + | = GestureAttributeSet = |
− | This is "nn::hid::KeyboardKeySet". This is a BitFlagSet object for [[#KeyboardKey]]. | + | This is "nn::hid::GestureAttributeSet". This is a BitFlagSet object for [[#GestureAttribute]]. |
| | | |
− | = BasicXpadButtonSet = | + | = GestureAttribute = |
− | This is "nn::hid::BasicXpadButtonSet". This is a BitFlagSet object for [[#BasicXpadButton]]. | + | This is "nn::hid::GestureAttribute". This is a 32-bit flag. |
| | | |
− | = HomeButtonSet = | + | {| class="wikitable" border="1" |
− | This is "nn::hid::system::HomeButtonSet". This is a BitFlagSet object for [[#HomeButton]].
| + | |- |
| + | ! Bit |
| + | ! Description |
| + | |- |
| + | | 4 |
| + | | IsNewTouch |
| + | |- |
| + | | 8 |
| + | | IsDoubleTap |
| + | |} |
| | | |
− | = SleepButtonSet = | + | = DebugPadButtonSet = |
− | This is "nn::hid::system::SleepButtonSet". This is a BitFlagSet object for [[#SleepButton]]. | + | This is "nn::hid::DebugPadButtonSet". This is a BitFlagSet object for [[#DebugPadButton]]. |
| | | |
− | = CaptureButtonSet = | + | = DebugPadButton = |
− | This is "nn::hid::system::CaptureButtonSet". This is a BitFlagSet object for [[#CaptureButton]]. | + | This is "nn::hid::DebugPadButton". This is a 32-bit flag. |
− | | |
− | = NpadButtonSet =
| |
− | This is "nn::hid::NpadButtonSet". This is a BitFlagSet object for [[#NpadButton]].
| |
− | | |
− | = AnalogStickCalibrationFlagsSet =
| |
− | This is "nn::hid::detail::AnalogStickCalibrationFlagsSet". This is a BitFlagSet object for [[#AnalogStickCalibrationFlags]].
| |
− | | |
− | = SixAxisSensorUserCalibrationFlagsSet =
| |
− | This is "nn::hid::detail::SixAxisSensorUserCalibrationFlagsSet". This is a BitFlagSet object for [[#SixAxisSensorUserCalibrationFlags]].
| |
− | | |
− | = NpadStyleSet =
| |
− | This is "nn::hid::NpadStyleSet". This is a BitFlagSet object for [[#NpadStyleTag]].
| |
− | | |
− | = NpadStyleTag =
| |
− | This is "nn::hid::NpadStyleTag".
| |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
− | ! Bits | + | |- |
− | ! Description | + | ! Bit |
− | ! Notes
| + | ! Description |
| |- | | |- |
| | 0 | | | 0 |
− | | NpadFullKey | + | | A |
− | | Pro Controller
| |
| |- | | |- |
| | 1 | | | 1 |
− | | NpadHandheld | + | | B |
− | | Joy-Con controller in handheld mode
| |
| |- | | |- |
| | 2 | | | 2 |
− | | NpadJoyDual | + | | X |
− | | Joy-Con controller in dual mode
| |
| |- | | |- |
| | 3 | | | 3 |
− | | NpadJoyLeft | + | | Y |
− | | Joy-Con left controller in single mode
| |
| |- | | |- |
| | 4 | | | 4 |
− | | NpadJoyRight | + | | L |
− | | Joy-Con right controller in single mode
| |
| |- | | |- |
| | 5 | | | 5 |
− | | NpadGc | + | | R |
− | | GameCube controller
| |
| |- | | |- |
| | 6 | | | 6 |
− | | NpadPalma | + | | ZL |
− | | Poké Ball Plus controller
| |
| |- | | |- |
| | 7 | | | 7 |
− | | NpadLark | + | | ZR |
− | | NES/Famicom controller
| |
| |- | | |- |
| | 8 | | | 8 |
− | | NpadHandheldLark | + | | Start |
− | | NES/Famicom controller in handheld mode
| |
| |- | | |- |
| | 9 | | | 9 |
− | | NpadLucia | + | | Select |
− | | SNES controller
| |
| |- | | |- |
− | | 10-28 | + | | 10 |
− | | Reserved
| + | | Left |
− | | | |
| |- | | |- |
− | | 29 | + | | 11 |
− | | NpadSystemExt | + | | Up |
− | | Generic external controller
| |
| |- | | |- |
− | | 30 | + | | 12 |
− | | NpadSystem | + | | Right |
− | | Generic controller
| |
| |- | | |- |
− | | 31 | + | | 13 |
− | | Reserved
| + | | Down |
− | | | |
| |} | | |} |
| | | |
− | = NpadDeviceTypeSet = | + | = MouseButtonSet = |
− | This is "nn::hid::system::NpadDeviceType". This is a BitFlagSet object for [[#NpadDeviceType]]. | + | This is "nn::hid::MouseButtonSet". This is a BitFlagSet object for [[#MouseButton]]. |
| | | |
− | = NpadSystemPropertiesSet = | + | = MouseButton = |
− | This is "nn::hid::detail::NpadSystemPropertiesSet". This is a BitFlagSet object for [[#NpadSystemProperties]]. | + | This is "nn::hid::MouseButton". This is a 32-bit flag. |
− | | |
− | = NpadSystemButtonPropertiesSet =
| |
− | This is "nn::hid::detail::NpadSystemButtonPropertiesSet". This is a BitFlagSet object for [[#NpadSystemButtonProperties]].
| |
− | | |
− | = AppletFooterUiAttributesSet =
| |
− | This is "nn::hid::system::AppletFooterUiAttributesSet". This is a BitFlagSet object for [[#AppletFooterUiAttribute]].
| |
− | | |
− | = UniquePadType =
| |
− | This is "nn::hid::system::UniquePadType".
| |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
− | ! Value
| |
− | ! Description
| |
| |- | | |- |
− | | 0 || Embedded | + | ! Bit |
| + | ! Description |
| + | |- |
| + | | 0 |
| + | | Left |
| + | |- |
| + | | 1 |
| + | | Right |
| |- | | |- |
− | | 1 || FullKeyController | + | | 2 |
| + | | Middle |
| |- | | |- |
− | | 2 || RightController | + | | 3 |
| + | | Forward |
| |- | | |- |
− | | 3 || LeftController | + | | 4 |
| + | | Back |
| |} | | |} |
| | | |
− | = UniquePadInterface = | + | = KeyboardModifierSet = |
− | This is "nn::hid::system::UniquePadInterface". | + | This is "nn::hid::KeyboardModifierSet". This is a BitFlagSet object for [[#KeyboardModifier]]. |
| + | |
| + | = KeyboardModifier = |
| + | This is "nn::hid::KeyboardModifier". This is a 32-bit flag. |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
− | ! Value
| |
− | ! Description
| |
| |- | | |- |
− | | 0 || Embedded
| + | ! Bit |
| + | ! Description |
| |- | | |- |
− | | 1 || Rail | + | | 0 |
| + | | Control |
| |- | | |- |
− | | 2 || Bluetooth | + | | 1 |
| + | | Shift |
| |- | | |- |
− | | 3 || Usb | + | | 2 |
− | |} | + | | LeftAlt |
− | | |
− | = UniquePadSerialNumber =
| |
− | This is "nn::hid::system::UniquePadSerialNumber". This is a 0x10 byte value.
| |
− | | |
− | = AnalogStickManualCalibrationStage =
| |
− | This is "nn::hid::system::AnalogStickManualCalibrationStage".
| |
− | | |
− | {| class="wikitable" border="1"
| |
− | ! Value
| |
− | ! Description
| |
| |- | | |- |
− | | 0 || ReleaseFromRight | + | | 3 |
| + | | RightAlt |
| |- | | |- |
− | | 1 || ReleaseFromBottom | + | | 4 |
| + | | Gui |
| |- | | |- |
− | | 2 || ReleaseFromLeft | + | | 8 |
| + | | CapsLock |
| |- | | |- |
− | | 3 || ReleaseFromTop | + | | 9 |
| + | | ScrollLock |
| |- | | |- |
− | | 4 || Rotate | + | | 10 |
| + | | NumLock |
| |- | | |- |
− | | 5 || Update | + | | 11 |
| + | | Katakana |
| |- | | |- |
− | | 6 || Completed | + | | 12 |
− | |-
| + | | Hiragana |
− | | 7 || Clear
| + | |} |
− | |-
| + | |
− | | 8 || ClearCompleted
| + | = KeyboardKeySet = |
− | |}
| + | This is "nn::hid::KeyboardKeySet". This is a BitFlagSet object for [[#KeyboardKey]]. |
| + | |
| + | = BasicXpadButtonSet = |
| + | This is "nn::hid::BasicXpadButtonSet". This is a BitFlagSet object for [[#BasicXpadButton]]. |
| + | |
| + | = HomeButtonSet = |
| + | This is "nn::hid::system::HomeButtonSet". This is a BitFlagSet object for [[#HomeButton]]. |
| + | |
| + | = SleepButtonSet = |
| + | This is "nn::hid::system::SleepButtonSet". This is a BitFlagSet object for [[#SleepButton]]. |
| + | |
| + | = CaptureButtonSet = |
| + | This is "nn::hid::system::CaptureButtonSet". This is a BitFlagSet object for [[#CaptureButton]]. |
| + | |
| + | = NpadButtonSet = |
| + | This is "nn::hid::NpadButtonSet". This is a BitFlagSet object for [[#NpadButton]]. |
| | | |
− | = SixAxisSensorUserCalibrationStage = | + | = NpadButton = |
− | This is "nn::hid::system::SixAxisSensorUserCalibrationStage". | + | This is "nn::hid::NpadButton". This is a 64-bit flag. |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
− | ! Value
| |
− | ! Description
| |
| |- | | |- |
− | | 0 || Measuring | + | ! Bit |
| + | ! Description |
| + | |- |
| + | | 0 |
| + | | A |
| |- | | |- |
− | | 1 || Update | + | | 1 |
| + | | B |
| |- | | |- |
− | | 2 || Completed | + | | 2 |
− | |}
| + | | X |
− | | |
− | = NpadJoyAssignmentMode =
| |
− | This is "nn::hid::NpadJoyAssignmentMode".
| |
− | | |
− | {| class="wikitable" border="1"
| |
− | ! Value
| |
− | ! Description
| |
| |- | | |- |
− | | 0 || Dual | + | | 3 |
| + | | Y |
| |- | | |- |
− | | 1 || Single | + | | 4 |
− | |}
| + | | StickL |
− | | |
− | = AppletFooterUiType =
| |
− | This is "nn::hid::system::AppletFooterUiType".
| |
− | | |
− | {| class="wikitable" border="1"
| |
− | ! Value
| |
− | ! Description
| |
| |- | | |- |
− | | 0 || None | + | | 5 |
| + | | StickR |
| |- | | |- |
− | | 1 || HandheldNone | + | | 6 |
| + | | L |
| |- | | |- |
− | | 2 || HandheldJoyConLeftOnly | + | | 7 |
| + | | R |
| |- | | |- |
− | | 3 || HandheldJoyConRightOnly | + | | 8 |
| + | | ZL |
| |- | | |- |
− | | 4 || HandheldJoyConLeftJoyConRight | + | | 9 |
| + | | ZR |
| |- | | |- |
− | | 5 || JoyDual | + | | 10 |
| + | | Plus |
| |- | | |- |
− | | 6 || JoyDualLeftOnly | + | | 11 |
| + | | Minus |
| |- | | |- |
− | | 7 || JoyDualRightOnly | + | | 12 |
| + | | Left |
| |- | | |- |
− | | 8 || JoyLeftHorizontal | + | | 13 |
| + | | Up |
| |- | | |- |
− | | 9 || JoyLeftVertical | + | | 14 |
| + | | Right |
| |- | | |- |
− | | 10 || JoyRightHorizontal | + | | 15 |
| + | | Down |
| |- | | |- |
− | | 11 || JoyRightVertical | + | | 16 |
| + | | StickLLeft |
| |- | | |- |
− | | 12 || SwitchProController | + | | 17 |
| + | | StickLUp |
| |- | | |- |
− | | 13 || CompatibleProController | + | | 18 |
| + | | StickLRight |
| |- | | |- |
− | | 14 || CompatibleJoyCon | + | | 19 |
| + | | StickLDown |
| |- | | |- |
− | | 15 || LarkHvc1 | + | | 20 |
| + | | StickRLeft |
| |- | | |- |
− | | 16 || LarkHvc2 | + | | 21 |
| + | | StickRUp |
| |- | | |- |
− | | 17 || LarkNesLeft | + | | 22 |
| + | | StickRRight |
| |- | | |- |
− | | 18 || LarkNesRight | + | | 23 |
| + | | StickRDown |
| |- | | |- |
− | | 19 || Lucia | + | | 24 |
| + | | LeftSL |
| |- | | |- |
− | | 20 || Verification | + | | 25 |
− | |}
| + | | LeftSR |
− | | |
− | = NpadLarkType =
| |
− | This is "nn::hid::NpadLarkType".
| |
− | | |
− | {| class="wikitable" border="1"
| |
− | ! Value
| |
− | ! Description
| |
| |- | | |- |
− | | 0 || Invalid | + | | 26 |
| + | | RightSL |
| |- | | |- |
− | | 1 || H1 | + | | 27 |
| + | | RightSR |
| |- | | |- |
− | | 2 || H2 | + | | 28 |
| + | | Palma |
| |- | | |- |
− | | 3 || NL | + | | 29 |
| + | | |
| |- | | |- |
− | | 4 || NR | + | | 30 |
| + | | HandheldLeftB (Left B button on NES controllers in Handheld mode) |
| |} | | |} |
| | | |
− | = NpadLuciaType = | + | = AnalogStickCalibrationFlagsSet = |
− | This is "nn::hid::NpadLuciaType". | + | This is "nn::hid::detail::AnalogStickCalibrationFlagsSet". This is a BitFlagSet object for [[#AnalogStickCalibrationFlags]]. |
| + | |
| + | = SixAxisSensorUserCalibrationFlagsSet = |
| + | This is "nn::hid::detail::SixAxisSensorUserCalibrationFlagsSet". This is a BitFlagSet object for [[#SixAxisSensorUserCalibrationFlags]]. |
| + | |
| + | = NpadStyleSet = |
| + | This is "nn::hid::NpadStyleSet". This is a BitFlagSet object for [[#NpadStyleTag]]. |
| + | |
| + | = NpadStyleTag = |
| + | This is "nn::hid::NpadStyleTag". |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
− | ! Value | + | ! Bits |
| ! Description | | ! Description |
| + | ! Notes |
| |- | | |- |
− | | 0 || Invalid | + | | 0 |
| + | | NpadStyleFullKey |
| + | | Pro Controller |
| |- | | |- |
− | | 1 || J | + | | 1 |
| + | | NpadStyleHandheld |
| + | | Joy-Con controller in handheld mode |
| |- | | |- |
− | | 2 || E | + | | 2 |
| + | | NpadStyleJoyDual |
| + | | Joy-Con controller in dual mode |
| |- | | |- |
− | | 3 || U | + | | 3 |
− | |} | + | | NpadStyleJoyLeft |
− | | + | | Joy-Con left controller in single mode |
− | = DeviceHandle =
| |
− | This is "nn::xcd::DeviceHandle". This is a 8 byte value.
| |
− | | |
− | = GestureDirection =
| |
− | This is "nn::hid::GestureDirection".
| |
− | | |
− | {| class="wikitable" border="1"
| |
− | ! Value
| |
− | ! Description
| |
| |- | | |- |
− | | 0 || None | + | | 4 |
| + | | NpadStyleJoyRight |
| + | | Joy-Con right controller in single mode |
| |- | | |- |
− | | 1 || Left | + | | 5 |
| + | | NpadStyleGc |
| + | | GameCube controller |
| |- | | |- |
− | | 2 || Up | + | | 6 |
| + | | NpadStylePalma |
| + | | Poké Ball Plus controller |
| |- | | |- |
− | | 3 || Right | + | | 7 |
| + | | NpadStyleLark |
| + | | NES/Famicom controller |
| |- | | |- |
− | | 4 || Down | + | | 8 |
− | |} | + | | NpadStyleHandheldLark |
− | | + | | NES/Famicom controller in handheld mode |
− | = GestureType =
| |
− | This is "nn::hid::GestureType".
| |
− | | |
− | {| class="wikitable" border="1"
| |
− | ! Value
| |
− | ! Description
| |
| |- | | |- |
− | | 0 || Idle | + | | 9 |
| + | | NpadStyleLucia |
| + | | SNES controller |
| |- | | |- |
− | | 1 || Complete | + | | 10-28 |
| + | | Reserved |
| + | | |
| |- | | |- |
− | | 2 || Cancel | + | | 29 |
| + | | NpadStyleSystemExt |
| + | | Generic external controller |
| |- | | |- |
− | | 3 || Touch | + | | 30 |
| + | | NpadStyleSystem |
| + | | Generic controller |
| |- | | |- |
− | | 4 || Press | + | | 31 |
| + | | Reserved |
| + | | |
| + | |} |
| + | |
| + | = NpadDeviceTypeSet = |
| + | This is "nn::hid::system::NpadDeviceType". This is a BitFlagSet object for [[#NpadDeviceType]]. |
| + | |
| + | = NpadSystemPropertiesSet = |
| + | This is "nn::hid::detail::NpadSystemPropertiesSet". This is a BitFlagSet object for [[#NpadSystemProperties]]. |
| + | |
| + | = NpadSystemProperties = |
| + | This is "nn::hid::NpadSystemProperties". This is a 64-bit flag. |
| + | |
| + | {| class="wikitable" border="1" |
| |- | | |- |
− | | 5 || Tap
| + | ! Bit |
| + | ! Description |
| |- | | |- |
− | | 6 || Pan | + | | 0 |
| + | | IsChargingJoyDual |
| |- | | |- |
− | | 7 || Swipe | + | | 1 |
| + | | IsChargingJoyLeft |
| |- | | |- |
− | | 8 || Pinch | + | | 2 |
| + | | IsChargingJoyRight |
| |- | | |- |
− | | 9 || Rotate | + | | 3 |
− | |}
| + | | IsPoweredJoyDual |
− | | |
− | = GyroscopeZeroDriftMode =
| |
− | This is "nn::hid::GyroscopeZeroDriftMode".
| |
− | | |
− | {| class="wikitable" border="1"
| |
− | ! Value
| |
− | ! Description
| |
| |- | | |- |
− | | 0 || Loose | + | | 4 |
| + | | IsPoweredJoyLeft |
| |- | | |- |
− | | 1 || Standard | + | | 5 |
| + | | IsPoweredJoyRight |
| |- | | |- |
− | | 2 || Tight | + | | 9 |
− | |}
| + | | IsUnsupportedButtonPressedNpadSystem |
− | | |
− | = NpadIdType =
| |
− | This is "nn::hid::NpadIdType". This is the controller index used in [[#SharedMemoryFormat|sharedmem]].
| |
− | | |
− | {| class="wikitable" border="1"
| |
− | ! Value
| |
− | ! Description
| |
| |- | | |- |
− | | 0x0 || No1 | + | | 10 |
| + | | IsUnsupportedButtonPressedNpadSystemExt |
| |- | | |- |
− | | 0x1 || No2 | + | | 11 |
| + | | IsAbxyButtonOriented |
| |- | | |- |
− | | 0x2 || No3 | + | | 12 |
| + | | IsSlSrButtonOriented |
| |- | | |- |
− | | 0x3 || No4 | + | | 13 |
| + | | [4.0.0+] HasPlusButtonCapability |
| |- | | |- |
− | | 0x4 || No5 | + | | 14 |
| + | | [4.0.0+] HasMinusButtonCapability |
| |- | | |- |
− | | 0x5 || No6 | + | | 15 |
− | |-
| + | | [8.0.0+] IsDirectionalButtonsSupported |
− | | 0x6 || No7
| |
− | |-
| |
− | | 0x7 || No8
| |
− | |-
| |
− | | 0x10 || Other
| |
− | |-
| |
− | | 0x20 || Handheld | |
| |} | | |} |
| | | |
− | = NpadJoyAssignmentMode = | + | = NpadSystemButtonPropertiesSet = |
− | This is u32 enum "nn::hid::NpadJoyAssignmentMode". | + | This is "nn::hid::detail::NpadSystemButtonPropertiesSet". This is a BitFlagSet object for [[#NpadSystemButtonProperties]]. |
| + | |
| + | = NpadSystemButtonProperties = |
| + | This is "nn::hid::NpadSystemButtonProperties". This is a 32-bit flag. |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
− | ! Value
| |
− | ! Description
| |
| |- | | |- |
− | | 0 || Dual (Set by [[#SetNpadJoyAssignmentModeDual]])
| + | ! Bit |
| + | ! Description |
| |- | | |- |
− | | 1 || Single (Set by [[#SetNpadJoyAssignmentModeSingleByDefault]]/[[#SetNpadJoyAssignmentModeSingle]]/[[#SetNpadJoyAssignmentModeSingleWithDestination]]) | + | | 0 |
| + | | IsUnintendedHomeButtonInputProtectionEnabled |
| |} | | |} |
| | | |
− | = AppletFooterUiAttribute = | + | = AppletFooterUiAttributesSet = |
− | This is nn::util::BitFlagSet "nn::hid::system::AppletFooterUiAttribute". | + | This is "nn::hid::system::AppletFooterUiAttributesSet". This is a BitFlagSet object for [[#AppletFooterUiAttribute]]. |
| | | |
− | = AppletFooterUiType = | + | = UniquePadType = |
− | This is enum "nn::hid::system::AppletFooterUiType". | + | This is "nn::hid::system::UniquePadType". |
− | | |
− | = NpadInterfaceType =
| |
− | This is "nn::hid::NpadInterfaceType".
| |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 5,513: |
Line 5,608: |
| ! Description | | ! Description |
| |- | | |- |
− | | 1 || Bluetooth | + | | 0 || Embedded |
| + | |- |
| + | | 1 || FullKeyController |
| |- | | |- |
− | | 2 || Rail | + | | 2 || RightController |
| |- | | |- |
− | | 3 || USB | + | | 3 || LeftController |
| |- | | |- |
− | | 4 || Unknown | + | | 4 || DebugPadController |
| |} | | |} |
| | | |
− | = AbstractedPadState = | + | = UniquePadInterface = |
| + | This is "nn::hid::system::UniquePadInterface". |
| + | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| + | ! Value |
| + | ! Description |
| |- | | |- |
− | ! Offset || Size || Description
| + | | 0 || Embedded |
| |- | | |- |
− | | 0x0 || 0x4 || Type, only 1 bit can be set. Converted to [[#HdlsDeviceInfo]]::type internally by [[#SetAutoPilotVirtualPadState]]. | + | | 1 || Rail |
| |- | | |- |
− | | 0x4 || 0x1 || Flags. [[#SetAutoPilotVirtualPadState]] only uses bit0: when clear it will skip using the rest of the input and run [[#UnsetAutoPilotVirtualPadState]] internally. | + | | 2 || Bluetooth |
| |- | | |- |
− | | 0x5 || 0x3 || Padding | + | | 3 || Usb |
| + | |} |
| + | |
| + | = UniquePadSerialNumber = |
| + | This is "nn::hid::system::UniquePadSerialNumber". This is a 0x10 byte value. |
| + | |
| + | = UniquePadId = |
| + | This is "nn::hid::system::UniquePadId". This is a 8 byte value. |
| + | |
| + | = AnalogStickManualCalibrationStage = |
| + | This is "nn::hid::system::AnalogStickManualCalibrationStage". |
| + | |
| + | {| class="wikitable" border="1" |
| + | ! Value |
| + | ! Description |
| |- | | |- |
− | | 0x8 || 0x4 || RGBA Single Body Color | + | | 0 || ReleaseFromRight |
| |- | | |- |
− | | 0xC || 0x4 || RGBA Single Buttons Color | + | | 1 || ReleaseFromBottom |
| |- | | |- |
− | | 0x10 || 0x1 || See [[#HiddbgHdlsDeviceInfo]]::[[#NpadInterfaceType]]. | + | | 2 || ReleaseFromLeft |
| |- | | |- |
− | | 0x11 || 0x3 || Padding | + | | 3 || ReleaseFromTop |
| + | |- |
| + | | 4 || Rotate |
| + | |- |
| + | | 5 || Update |
| + | |- |
| + | | 6 || Completed |
| |- | | |- |
− | | 0x14 || 0x24 || [[#HdlsState]]. Unknown if the last 4-bytes are included in this struct, [[#SetAutoPilotVirtualPadState]]/[[#hiddbgGetAbstractedPadsState]] only uses the first 0x20-bytes. | + | | 7 || Clear |
| |- | | |- |
− | | 0x38 || 0x60 || Unused with [[#SetAutoPilotVirtualPadState]]/[[#GetAbstractedPadsState]]. | + | | 8 || ClearCompleted |
| |} | | |} |
| | | |
− | Normally the input state is merged with an existing controller selected by Type. However in some cases (BIT(2-5) with type2!=0x2 and BIT(31)) it's detected as a dedicated controller.
| + | = SixAxisSensorUserCalibrationStage = |
| + | This is "nn::hid::system::SixAxisSensorUserCalibrationStage". |
| | | |
− | Type:
| |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
− | ! Bits | + | ! Value |
− | ! [[#HdlsDeviceInfo]]::type bits
| |
| ! Description | | ! Description |
− | ! Notes
| |
| |- | | |- |
− | | 0 || 0 || || | + | | 0 || Measuring |
| |- | | |- |
− | | 1 || 15 || || [[#DeviceType]] |= BIT(1) | + | | 1 || Update |
| |- | | |- |
− | | 2 || 1 || || | + | | 2 || Completed |
| + | |} |
| + | |
| + | = NpadJoyAssignmentMode = |
| + | This is "nn::hid::NpadJoyAssignmentMode". |
| + | |
| + | {| class="wikitable" border="1" |
| + | ! Value |
| + | ! Description |
| |- | | |- |
− | | 3 || 2 || || | + | | 0 || Dual |
| |- | | |- |
− | | 4 || 1 || ||
| + | | 1 || Single |
| + | |} |
| + | |
| + | = AppletFooterUiType = |
| + | This is "nn::hid::system::AppletFooterUiType". |
| + | |
| + | {| class="wikitable" border="1" |
| + | ! Value |
| + | ! Description |
| |- | | |- |
− | | 5 || 2 || || | + | | 0 || None |
| |- | | |- |
− | | 6 || 3 || || | + | | 1 || HandheldNone |
| |- | | |- |
− | | 7 || 11 || || [[#DeviceType]] |= BIT(11) | + | | 2 || HandheldJoyConLeftOnly |
| |- | | |- |
− | | 8 || 12 || || [[#DeviceType]] |= BIT(12) | + | | 3 || HandheldJoyConRightOnly |
| |- | | |- |
− | | 9 || 13 || || [[#DeviceType]] |= BIT(13) | + | | 4 || HandheldJoyConLeftJoyConRight |
| |- | | |- |
− | | 10 || 14 || || [[#DeviceType]] |= BIT(14) | + | | 5 || JoyDual |
| |- | | |- |
− | | 11 || 15 || || [[#DeviceType]] |= BIT(11) | + | | 6 || JoyDualLeftOnly |
| |- | | |- |
− | | 12 || 12 || || [[#DeviceType]] |= BIT(12) | + | | 7 || JoyDualRightOnly |
| |- | | |- |
− | | 13 || 13 || || [[#DeviceType]] |= BIT(13) | + | | 8 || JoyLeftHorizontal |
| |- | | |- |
− | | 14 || 14 || || [[#DeviceType]] |= BIT(14) | + | | 9 || JoyLeftVertical |
| |- | | |- |
− | | 15 || 17 || || | + | | 10 || JoyRightHorizontal |
| |- | | |- |
− | | 31 || 21 || || [[#DeviceType]] = BIT(31) | + | | 11 || JoyRightVertical |
| + | |- |
| + | | 12 || SwitchProController |
| + | |- |
| + | | 13 || CompatibleProController |
| + | |- |
| + | | 14 || CompatibleJoyCon |
| + | |- |
| + | | 15 || LarkHvc1 |
| |- | | |- |
− | |} | + | | 16 || LarkHvc2 |
− | | |
− | The above "[[#DeviceType]] |=" notes only apply when type2 is 0x2.
| |
− | | |
− | = HdlsNpadAssignment =
| |
− | This is a 0x208-byte struct.
| |
− | | |
− | {| class="wikitable" border="1"
| |
| |- | | |- |
− | ! Offset || Size || Description
| + | | 17 || LarkNesLeft |
| |- | | |- |
− | | 0x0 || 0x4 || s32 Total entries | + | | 18 || LarkNesRight |
| |- | | |- |
− | | 0x4 || 0x4 || Padding | + | | 19 || Lucia |
| |- | | |- |
− | | 0x8 || 0x200(0x20*0x10) || Array of [[#HdlsNpadAssignmentEntry]]. | + | | 20 || Verification |
| |} | | |} |
| | | |
− | = HdlsNpadAssignmentEntry = | + | = NpadIdType = |
− | This is a 0x20-byte struct. | + | This is "nn::hid::NpadIdType". This is the controller index used in [[#SharedMemoryFormat|sharedmem]]. |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| + | ! Value |
| + | ! Description |
| |- | | |- |
− | ! Offset || Size || Description
| + | | 0x0 || No1 |
| |- | | |- |
− | | 0x0 || 0x8 || HdlsHandle | + | | 0x1 || No2 |
| + | |- |
| + | | 0x2 || No3 |
| + | |- |
| + | | 0x3 || No4 |
| + | |- |
| + | | 0x4 || No5 |
| |- | | |- |
− | | 0x8 || 0x4 || ? | + | | 0x5 || No6 |
| |- | | |- |
− | | 0xC || 0x4 || ? | + | | 0x6 || No7 |
| |- | | |- |
− | | 0x10 || 0x8 || ? | + | | 0x7 || No8 |
| |- | | |- |
− | | 0x18 || 0x1 || ? | + | | 0x10 || Other |
| |- | | |- |
− | | 0x19 || 0x7 || Padding | + | | 0x20 || Handheld |
| |} | | |} |
| | | |
− | = HdlsStateList = | + | = NpadInterfaceType = |
− | This is a 0x408-byte struct. | + | This is "nn::hid::NpadInterfaceType". |
− | | |
− | [9.0.0+] This is a 0x488-byte struct.
| |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| + | ! Value |
| + | ! Description |
| |- | | |- |
− | ! Offset || Size || Description
| + | | 1 || Bluetooth |
| |- | | |- |
− | | 0x0 || 0x4 || s32 Total entries | + | | 2 || Rail |
| |- | | |- |
− | | 0x4 || 0x4 || Padding | + | | 3 || USB |
| |- | | |- |
− | | 0x8 || <[[#HdlsStateListEntry]] size>*0x10 || Array of [[#HdlsStateListEntry]]. | + | | 4 || Unknown |
| |} | | |} |
| | | |
− | This contains a list of all controllers, including non-virtual controllers.
| + | = NpadLarkType = |
− | | + | This is "nn::hid::NpadLarkType". |
− | = HdlsStateListEntry = | |
− | This is a 0x40-byte struct. | |
− | | |
− | [9.0.0+] This is a 0x48-byte struct.
| |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| + | ! Value |
| + | ! Description |
| |- | | |- |
− | ! Offset || Size || Description
| + | | 0 || Invalid |
| |- | | |- |
− | | 0x0 || 0x8 || HdlsHandle | + | | 1 || H1 |
| |- | | |- |
− | | 0x8 || [[#HdlsDeviceInfo]] size || [[#HdlsDeviceInfo]]. With [[#ApplyHdlsStateList]] this is only used when creating new devices. | + | | 2 || H2 |
| |- | | |- |
− | | 0x8 + [[#HdlsDeviceInfo]] size, with 8-byte alignment || 0x24 || [[#HdlsState]] | + | | 3 || NL |
| |- | | |- |
− | | <Immediately following the above> || 0x4 || Padding | + | | 4 || NR |
| |} | | |} |
| | | |
− | = HdlsDeviceInfo = | + | = NpadLuciaType = |
− | This is a 0x10-byte struct. | + | This is "nn::hid::NpadLuciaType". |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| + | ! Value |
| + | ! Description |
| |- | | |- |
− | ! Offset || Size || Description
| + | | 0 || Invalid |
| |- | | |- |
− | | 0x0 || 0x4 || [[#DeviceTypeInternal]] | + | | 1 || J |
| |- | | |- |
− | | 0x4 || 0x4 || RGBA Single Body Color | + | | 2 || E |
| |- | | |- |
− | | 0x8 || 0x4 || RGBA Single Buttons Color | + | | 3 || U |
− | |-
| |
− | | 0xC || 0x1 || [[#NpadInterfaceType]]. Additional type field used with the above type field, if the value doesn't match one of the following a default is used. Type Pro-Controller: value 0x3 indicates that the controller is connected via USB. Type bit21: value 0x3 = unknown. When value is 0x2, state is merged with an existing controller (when the type value is compatible with this). Otherwise, it's a dedicated controller.
| |
− | |-
| |
− | | 0xD || 0x3 || Padding
| |
| |} | | |} |
| | | |
− | [9.0.0+] This is a 0x14-byte struct.
| + | = GestureDirection = |
| + | This is "nn::hid::GestureDirection". |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| + | ! Value |
| + | ! Description |
| |- | | |- |
− | ! Offset || Size || Description
| + | | 0 || None |
| |- | | |- |
− | | 0x0 || 0x1 || [[#DeviceTypeInternal]] | + | | 1 || Left |
| |- | | |- |
− | | 0x1 || 0x1 || [[#NpadInterfaceType]]. Similar to the field from the old struct. | + | | 2 || Up |
| |- | | |- |
− | | 0x2 || 0x2 || Padding | + | | 3 || Right |
| |- | | |- |
− | | 0x4 || 0x4 || RGBA Single Body Color | + | | 4 || Down |
− | |-
| |
− | | 0x8 || 0x4 || RGBA Single Buttons Color
| |
− | |-
| |
− | | 0xC || 0x4 || RGBA Unknown Body Color
| |
− | |-
| |
− | | 0x10 || 0x4 || RGBA Unknown Buttons Color
| |
| |} | | |} |
| | | |
− | = DeviceTypeInternal = | + | = GestureType = |
− | This is "nn::hid::detail::DeviceTypeInternal". | + | This is "nn::hid::GestureType". |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
− | ! Bits | + | ! Value |
| ! Description | | ! Description |
| |- | | |- |
− | | 0-7 | + | | 0 || Idle |
− | | BIT(N*4+0) = Pro Controller, BIT(N*4+1) = Joy-Con Left, BIT(N*4+2) = Joy-Con Right, BIT(N*4+3) = invalid. Where N is 0-1. | |
| |- | | |- |
− | | 8-10 | + | | 1 || Complete |
− | | Pro Controller | |
| |- | | |- |
− | | 11 | + | | 2 || Cancel |
− | | Famicom left controller | |
| |- | | |- |
− | | 12 | + | | 3 || Touch |
− | | Famicom right controller (with microphone) | |
| |- | | |- |
− | | 13 | + | | 4 || Press |
− | | NES left controller | |
| |- | | |- |
− | | 14 | + | | 5 || Tap |
− | | NES right controller | |
| |- | | |- |
− | | 15-16 | + | | 6 || Pan |
− | | Invalid | |
| |- | | |- |
− | | 17 | + | | 7 || Swipe |
− | | Generic external controller | |
| |- | | |- |
− | | 18-20 | + | | 8 || Pinch |
− | | Invalid | |
| |- | | |- |
− | | 21-23 | + | | 9 || Rotate |
− | | Generic controller | |
| |} | | |} |
| | | |
− | [9.0.0+] This is "nn::hidtypes::DeviceType".
| + | = DeviceHandle = |
| + | This is "nn::xcd::DeviceHandle". This is a 8 byte value. |
| + | |
| + | = DeviceType = |
| + | This is "nn::hid::system::DeviceType". |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
− | ! Value | + | ! Bits |
− | ! [[#DeviceType|DeviceType]]
| |
− | ! [[#UniquePadType|UniquePadType]]
| |
| ! Description | | ! Description |
| |- | | |- |
− | | 1 || JoyRight, HandheldRight || JoyRight || Joy-Con right controller | + | | 0 |
| + | | FullKey |
| |- | | |- |
− | | 2 || JoyLeft, HandheldLeft || JoyLeft || Joy-Con left controller | + | | 1 |
| + | | DebugPad |
| |- | | |- |
− | | 3 || FullKey || FullKey || Pro Controller | + | | 2 |
| + | | HandheldLeft |
| |- | | |- |
− | | 4 || JoyLeft || JoyLeft || Reserved | + | | 3 |
| + | | HandheldRight |
| |- | | |- |
− | | 5 || JoyRight || JoyRight || Reserved | + | | 4 |
| + | | JoyLeft |
| |- | | |- |
− | | 6 || FullKey || FullKey || Reserved | + | | 5 |
| + | | JoyRight |
| |- | | |- |
− | | 7 || LarkHvcLeft, HandheldLarkHvcLeft || JoyLeft || Famicom left controller | + | | 6 |
| + | | Palma |
| |- | | |- |
− | | 8 || LarkHvcRight, HandheldLarkHvcRight || JoyRight || Famicom right controller (with microphone) | + | | 7 |
| + | | LarkHvcLeft |
| |- | | |- |
− | | 9 || LarkNesLeft, HandheldLarkNesLeft || JoyLeft || NES left controller | + | | 8 |
| + | | LarkHvcRight |
| |- | | |- |
− | | 10 || LarkNesRight, HandheldLarkNesRight || JoyRight || NES right controller | + | | 9 |
| + | | LarkNesLeft |
| |- | | |- |
− | | 11 || Lucia || FullKey || SNES controller | + | | 10 |
| + | | LarkNesRight |
| |- | | |- |
− | | 12 || Palma || Other || Poké Ball Plus controller | + | | 11 |
| + | | HandheldLarkHvcLeft |
| |- | | |- |
− | | 13 || FullKey || FullKey || Gc controller | + | | 12 |
| + | | HandheldLarkHvcRight |
| |- | | |- |
− | | 14 || HandheldLeft || JoyLeft || Reserved | + | | 13 |
| + | | HandheldLarkNesLeft |
| |- | | |- |
− | | 15 || FullKey || FullKey || Reserved | + | | 14 |
| + | | HandheldLarkNesRight |
| |- | | |- |
− | | 16 || FullKey || FullKey || Reserved | + | | 15 |
| + | | Lucia |
| |- | | |- |
− | | 17 || DebugPad || DebugPad || Debug controller | + | | 16-30 |
| + | | Reserved |
| |- | | |- |
− | | 18 || HandheldRight || JoyRight || Reserved | + | | 31 |
− | |-
| + | | System |
− | | 19 || System || Other || Unknown (has [[#NpadStyleTag|NpadFullKey]] style tag)
| |
− | |-
| |
− | | 20 || System || Other || Unknown (has [[#NpadStyleTag|NpadJoyDual]] style tag)
| |
− | |-
| |
− | | 21 || System || Other || Unknown (has [[#NpadStyleTag|NpadJoyDual]] style tag)
| |
| |} | | |} |
| | | |
− | = HdlsState = | + | = DeviceTypeInternal = |
− | This is a 0x24-byte struct. | + | This is "nn::hid::detail::DeviceTypeInternal". |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| + | ! Bits |
| + | ! Description |
| |- | | |- |
− | ! Offset || Size || Description
| + | | 0-7 |
| + | | BIT(N*4+0) = Pro Controller, BIT(N*4+1) = Joy-Con Left, BIT(N*4+2) = Joy-Con Right, BIT(N*4+3) = invalid. Where N is 0-1. |
| + | |- |
| + | | 8-10 |
| + | | Pro Controller |
| |- | | |- |
− | | 0x0 || 0x1 || powerConnected for the main PowerInfo. | + | | 11 |
| + | | Famicom left controller |
| |- | | |- |
− | | 0x1 || 0x1 || ORRed with powerConnected to set the value of the first byte for the controller [[HID_Shared_Memory#Flags|flags]]. | + | | 12 |
| + | | Famicom right controller (with microphone) |
| |- | | |- |
− | | 0x2 || 0x6 || Unknown | + | | 13 |
| + | | NES left controller |
| |- | | |- |
− | | 0x8 || 0x4 || batteryCharge for the main PowerInfo. | + | | 14 |
| + | | NES right controller |
| |- | | |- |
− | | 0xC || 0x4 || [[HID_Shared_Memory#Button_State|Buttons]]. Bit18 = HOME and bit19 = Capture. | + | | 15-16 |
| + | | Invalid |
| |- | | |- |
− | | 0x10 || 0x10(4*2*2) || Joystick data. | + | | 17 |
| + | | Generic external controller |
| |- | | |- |
− | | 0x20 || 0x1 || Unused for input. Set with output from [[#DumpHdlsStates]] (zero in some cases). | + | | 18-20 |
| + | | Invalid |
| |- | | |- |
− | | 0x21 || 0x3 || Padding | + | | 21-23 |
| + | | Generic controller |
| |} | | |} |
| | | |
− | [9.0.0+]: | + | [9.0.0+] This is "nn::hidtypes::DeviceType". |
| + | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| + | ! Value |
| + | ! [[#DeviceType|DeviceType]] |
| + | ! [[#UniquePadType|UniquePadType]] |
| + | ! Description |
| |- | | |- |
− | ! Offset || Size || Description
| + | | 1 || JoyRight, HandheldRight || JoyRight || Joy-Con right controller |
| |- | | |- |
− | | 0x0 || 0x4 || batteryCharge for the main PowerInfo. | + | | 2 || JoyLeft, HandheldLeft || JoyLeft || Joy-Con left controller |
| |- | | |- |
− | | 0x4 || 0x4 || Unknown | + | | 3 || FullKey || FullKey || Pro Controller |
| |- | | |- |
− | | 0x8 || 0x8 || Buttons, masked with 0xfffffffff00fffff. See above table regarding HOME/Capture buttons. | + | | 4 || JoyLeft || JoyLeft || Reserved |
| |- | | |- |
− | | 0x10 || 0x10(4*2*2) || Joystick data. | + | | 5 || JoyRight || JoyRight || Reserved |
| |- | | |- |
− | | 0x20 || 0x1 || Unused for input. Set with output from [[#DumpHdlsStates]] (zero in some cases). | + | | 6 || FullKey || FullKey || Reserved |
| |- | | |- |
− | | 0x21 || 0x3 || Padding | + | | 7 || LarkHvcLeft, HandheldLarkHvcLeft || JoyLeft || Famicom left controller |
− | |} | |
− | | |
− | = NotificationLedPattern =
| |
− | {| class="wikitable" border="1"
| |
| |- | | |- |
− | ! Offset || Size || Subcommand argdata bytepos || Subcommand argdata nibble || Description
| + | | 8 || LarkHvcRight, HandheldLarkHvcRight || JoyRight || Famicom right controller (with microphone) |
| |- | | |- |
− | | 0x0 || 0x1 || 0x0 || Low || Mini Cycle Base Duration. Value 0x1-0xF: 12.5ms - 187.5ms. Value 0x0 = 0ms/OFF. | + | | 9 || LarkNesLeft, HandheldLarkNesLeft || JoyLeft || NES left controller |
| |- | | |- |
− | | 0x1 || 0x1 || 0x0 || High || Number of Mini Cycles + 1. Value 0x0-0xF: 1 - 16 mini cycles. | + | | 10 || LarkNesRight, HandheldLarkNesRight || JoyRight || NES right controller |
| |- | | |- |
− | | 0x2 || 0x1 || 0x1 || Low || Number of Full Cycles. Value 0x1-0xF: 1 - 15 full cycles. Value 0x0 is repeat forever, but if Mini Cycle Base Duration is set to 0x0, it does the 1st Mini Cycle with a 12.5ms base duration and then the LED stays on with LED Start Intensity. | + | | 11 || Lucia || FullKey || SNES controller |
| |- | | |- |
− | | 0x3 || 0x1 || 0x1 || High || LED Start Intensity. Value 0x0-0xF: 0% - 100%. (In HW, 1 - 241 duty) | + | | 12 || Palma || Other || Poké Ball Plus controller |
| |- | | |- |
− | | 0x4 || 0x1 || 0x2 || High || Mini Cycle 1 LED Intensity. Value 0x0-0xF: 0% - 100%. (In HW, 1 - 241 duty) | + | | 13 || FullKey || FullKey || Gc controller |
| |- | | |- |
− | | 0x5 || 0x1 || 0x3 || High || Fading Transition Steps to Mini Cycle 1 (Uses PWM). Value 0x0: Instant. Each step duration is based on Mini Cycle Step Duration Multiplier. | + | | 14 || HandheldLeft || JoyLeft || Reserved |
| |- | | |- |
− | | 0x6 || 0x1 || 0x3 || Low || Final Step Duration Multiplier of Mini Cycle 1. Value is a Multiplier of Mini Cycle Base Duration. Value 0x0: 12.5ms, 0x1 - xF: 1x - 15x. | + | | 15 || FullKey || FullKey || Reserved |
| |- | | |- |
− | | 0x7 || 0x1 || || || Unused | + | | 16 || FullKey || FullKey || Reserved |
| |- | | |- |
− | | 0x8 || 0x1 || 0x2 || Low || Mini Cycle 2 LED Intensity. | + | | 17 || DebugPad || DebugPad || Debug controller |
| |- | | |- |
− | | 0x9 || 0x1 || 0x4 || High || Fading Transition Steps to Mini Cycle 2 (see above). | + | | 18 || HandheldRight || JoyRight || Reserved |
| |- | | |- |
− | | 0xA || 0x1 || 0x4 || Low || Final Step Duration Multiplier of Mini Cycle 2 (see above). | + | | 19 || System || Other || Unknown (has [[#NpadStyleTag|NpadFullKey]] style tag) |
| |- | | |- |
− | | 0xB || 0x1 || || || Unused | + | | 20 || System || Other || Unknown (has [[#NpadStyleTag|NpadJoyDual]] style tag) |
| |- | | |- |
− | | 0xC || 0x1 || 0x5 || High || Mini Cycle 3 LED Intensity. | + | | 21 || System || Other || Unknown (has [[#NpadStyleTag|NpadJoyDual]] style tag) |
| + | |} |
| + | |
| + | = NpadPowerInfo = |
| + | This is "nn::hid::system::NpadPowerInfo". |
| + | |
| + | {| class="wikitable" border="1" |
| |- | | |- |
− | | 0xD || 0x1 || 0x6 || High || Fading Transition Steps to Mini Cycle 3 (see above).
| + | ! Offset |
| + | ! Size |
| + | ! Description |
| |- | | |- |
− | | 0xE || 0x1 || 0x6 || Low || Final Step Duration Multiplier of Mini Cycle 3 (see above). | + | | 0x0 |
| + | | 0x1 |
| + | | IsPowered |
| |- | | |- |
− | | 0xF || 0x1 || || || Unused | + | | 0x1 |
| + | | 0x1 |
| + | | IsCharging |
| |- | | |- |
− | | 0x10 || 0x1 || 0x5 || Low || Mini Cycle 4 LED Intensity. | + | | 0x2 |
| + | | 0x6 |
| + | | Reserved |
| |- | | |- |
− | | 0x11 || 0x1 || 0x7 || High || Fading Transition Duration to Mini Cycle 4 (see above). | + | | 0x8 |
| + | | 0x6 |
| + | | [[#BatteryLevel|BatteryLevel]] |
| + | |} |
| + | |
| + | = BatteryLevel = |
| + | This is "nn::hid::system::NpadBatteryLevel". This is a 4 byte value. |
| + | |
| + | = GyroscopeZeroDriftMode = |
| + | This is "nn::hid::GyroscopeZeroDriftMode". |
| + | |
| + | {| class="wikitable" border="1" |
| + | ! Value |
| + | ! Description |
| |- | | |- |
− | | 0x12 || 0x1 || 0x7 || Low || Final Step Duration Multiplier of Mini Cycle 4 (see above). | + | | 0 || Loose |
| |- | | |- |
− | | 0x13 || 0x1 || || || Unused | + | | 1 || Standard |
| |- | | |- |
− | | 0x14 || 0x1 || 0x8 || High || Mini Cycle 5 LED Intensity. | + | | 2 || Tight |
| + | |} |
| + | |
| + | = AbstractedPadState = |
| + | {| class="wikitable" border="1" |
| |- | | |- |
− | | 0x15 || 0x1 || 0x9 || High || Fading Transition Steps to Mini Cycle 5 (see above). | + | ! Offset || Size || Description |
| |- | | |- |
− | | 0x16 || 0x1 || 0x9 || Low || Final Step Duration Multiplier of Mini Cycle 5 (see above). | + | | 0x0 || 0x4 || Type, only 1 bit can be set. Converted to [[#HdlsDeviceInfo]]::type internally by [[#SetAutoPilotVirtualPadState]]. |
| |- | | |- |
− | | 0x17 || 0x1 || || || Unused | + | | 0x4 || 0x1 || Flags. [[#SetAutoPilotVirtualPadState]] only uses bit0: when clear it will skip using the rest of the input and run [[#UnsetAutoPilotVirtualPadState]] internally. |
| |- | | |- |
− | | 0x18 || 0x1 || 0x8 || Low || Mini Cycle 6 LED Intensity. | + | | 0x5 || 0x3 || Padding |
| |- | | |- |
− | | 0x19 || 0x1 || 0xA || High || Fading Transition Steps to Mini Cycle 6 (see above). | + | | 0x8 || 0x4 || RGBA Single Body Color |
| |- | | |- |
− | | 0x1A || 0x1 || 0xA || Low || Final Step Duration Multiplier of Mini Cycle 6 (see above). | + | | 0xC || 0x4 || RGBA Single Buttons Color |
| |- | | |- |
− | | 0x1B || 0x1 || || || Unused | + | | 0x10 || 0x1 || See [[#HiddbgHdlsDeviceInfo]]::[[#NpadInterfaceType]]. |
| |- | | |- |
− | | 0x1C || 0x1 || 0xB || High || Mini Cycle 7 LED Intensity. | + | | 0x11 || 0x3 || Padding |
| |- | | |- |
− | | 0x1D || 0x1 || 0xC || High || Fading Transition Steps to Mini Cycle 7 (see above). | + | | 0x14 || 0x24 || [[#HdlsState]]. Unknown if the last 4-bytes are included in this struct, [[#SetAutoPilotVirtualPadState]]/[[#hiddbgGetAbstractedPadsState]] only uses the first 0x20-bytes. |
| |- | | |- |
− | | 0x1E || 0x1 || 0xC || Low || Final Step Duration Multiplier of Mini Cycle 7 (see above). | + | | 0x38 || 0x60 || Unused with [[#SetAutoPilotVirtualPadState]]/[[#GetAbstractedPadsState]]. |
| + | |} |
| + | |
| + | Normally the input state is merged with an existing controller selected by Type. However in some cases (BIT(2-5) with type2!=0x2 and BIT(31)) it's detected as a dedicated controller. |
| + | |
| + | Type: |
| + | {| class="wikitable" border="1" |
| + | ! Bits |
| + | ! [[#HdlsDeviceInfo]]::type bits |
| + | ! Description |
| + | ! Notes |
| |- | | |- |
− | | 0x1F || 0x1 || || || Unused | + | | 0 || 0 || || |
| |- | | |- |
− | | 0x20 || 0x1 || 0xB || Low || Mini Cycle 8 LED Intensity. | + | | 1 || 15 || || [[#DeviceType]] |= BIT(1) |
| |- | | |- |
− | | 0x21 || 0x1 || 0xD || Low || Fading Transition Steps to Mini Cycle 8 (see above). | + | | 2 || 1 || || |
| |- | | |- |
− | | 0x22 || 0x1 || 0xD || High || Final Step Duration Multiplier of Mini Cycle 8 (see above). | + | | 3 || 2 || || |
| |- | | |- |
− | | 0x23 || 0x1 || || || Unused | + | | 4 || 1 || || |
| |- | | |- |
− | | 0x24 || 0x1 || 0xE || High || Mini Cycle 9 LED Intensity. | + | | 5 || 2 || || |
| |- | | |- |
− | | 0x25 || 0x1 || 0xF || High || Fading Transition Steps to Mini Cycle 9 (see above). | + | | 6 || 3 || || |
| |- | | |- |
− | | 0x26 || 0x1 || 0xF || Low || Final Step Duration Multiplier of Mini Cycle 9 (see above). | + | | 7 || 11 || || [[#DeviceType]] |= BIT(11) |
| |- | | |- |
− | | 0x27 || 0x1 || || || Unused | + | | 8 || 12 || || [[#DeviceType]] |= BIT(12) |
| |- | | |- |
− | | 0x28 || 0x1 || 0xE || Low || Mini Cycle 10 LED Intensity. | + | | 9 || 13 || || [[#DeviceType]] |= BIT(13) |
| |- | | |- |
− | | 0x29 || 0x1 || 0x10 || High || Fading Transition Steps to Mini Cycle 10 (see above). | + | | 10 || 14 || || [[#DeviceType]] |= BIT(14) |
| |- | | |- |
− | | 0x2A || 0x1 || 0x10 || Low || Final Step Duration Multiplier of Mini Cycle 10 (see above). | + | | 11 || 15 || || [[#DeviceType]] |= BIT(11) |
| |- | | |- |
− | | 0x2B || 0x1 || || || Unused | + | | 12 || 12 || || [[#DeviceType]] |= BIT(12) |
| |- | | |- |
− | | 0x2C || 0x1 || 0x11 || High || Mini Cycle 11 LED Intensity. | + | | 13 || 13 || || [[#DeviceType]] |= BIT(13) |
| |- | | |- |
− | | 0x2D || 0x1 || 0x12 || High || Fading Transition Steps to Mini Cycle 11 (see above). | + | | 14 || 14 || || [[#DeviceType]] |= BIT(14) |
| |- | | |- |
− | | 0x2E || 0x1 || 0x12 || Low || Final Step Duration Multiplier of Mini Cycle 11 (see above). | + | | 15 || 17 || || |
| |- | | |- |
− | | 0x2F || 0x1 || || || Unused | + | | 31 || 21 || || [[#DeviceType]] = BIT(31) |
| |- | | |- |
− | | 0x30 || 0x1 || 0x11 || Low || Mini Cycle 12 LED Intensity. | + | |} |
| + | |
| + | The above "[[#DeviceType]] |=" notes only apply when type2 is 0x2. |
| + | |
| + | = HdlsNpadAssignment = |
| + | This is a 0x208-byte struct. |
| + | |
| + | {| class="wikitable" border="1" |
| |- | | |- |
− | | 0x31 || 0x1 || 0x13 || High || Fading Transition Steps to Mini Cycle 12 (see above). | + | ! Offset || Size || Description |
| |- | | |- |
− | | 0x32 || 0x1 || 0x13 || Low || Final Step Duration Multiplier of Mini Cycle 12 (see above). | + | | 0x0 || 0x4 || s32 Total entries |
| |- | | |- |
− | | 0x33 || 0x1 || || || Unused | + | | 0x4 || 0x4 || Padding |
| |- | | |- |
− | | 0x34 || 0x1 || 0x14 || High || Mini Cycle 13 LED Intensity. | + | | 0x8 || 0x200(0x20*0x10) || Array of [[#HdlsNpadAssignmentEntry]]. |
| + | |} |
| + | |
| + | = HdlsNpadAssignmentEntry = |
| + | This is a 0x20-byte struct. |
| + | |
| + | {| class="wikitable" border="1" |
| |- | | |- |
− | | 0x35 || 0x1 || 0x15 || High || Fading Transition Steps to Mini Cycle 13 (see above). | + | ! Offset || Size || Description |
| |- | | |- |
− | | 0x36 || 0x1 || 0x15 || Low || Final Step Duration Multiplier of Mini Cycle 13 (see above). | + | | 0x0 || 0x8 || HdlsHandle |
| |- | | |- |
− | | 0x37 || 0x1 || || || Unused | + | | 0x8 || 0x4 || ? |
| |- | | |- |
− | | 0x38 || 0x1 || 0x14 || Low || Mini Cycle 14 LED Intensity. | + | | 0xC || 0x4 || ? |
| |- | | |- |
− | | 0x39 || 0x1 || 0x16 || High || Fading Transition Steps to Mini Cycle 14 (see above). | + | | 0x10 || 0x8 || ? |
| |- | | |- |
− | | 0x3A || 0x1 || 0x16 || Low || Final Step Duration Multiplier of Mini Cycle 14 (see above). | + | | 0x18 || 0x1 || ? |
| |- | | |- |
− | | 0x3B || 0x1 || || || Unused | + | | 0x19 || 0x7 || Padding |
| + | |} |
| + | |
| + | = HdlsStateList = |
| + | This is a 0x408-byte struct. |
| + | |
| + | [9.0.0+] This is a 0x488-byte struct. |
| + | |
| + | {| class="wikitable" border="1" |
| |- | | |- |
− | | 0x3C || 0x1 || 0x17 || High || Mini Cycle 15 LED Intensity. | + | ! Offset || Size || Description |
| |- | | |- |
− | | 0x3D || 0x1 || 0x18 || High || Fading Transition Steps to Mini Cycle 15 (see above). | + | | 0x0 || 0x4 || s32 Total entries |
| |- | | |- |
− | | 0x3E || 0x1 || 0x18 || Low || Final Step Duration Multiplier of Mini Cycle 15 (see above). | + | | 0x4 || 0x4 || Padding |
− | |-
| |
− | | 0x3F || 0x1 || || || Unused
| |
− | |-
| |
− | | 0x40 || 0x1 || 0x17 || Low || Mini Cycle 16 LED Intensity.
| |
− | |-
| |
− | | 0x41 || 0x1 || 0x19 || High || Fading Transition Steps to Mini Cycle 16 (see above). (Unused in older Joy-Con / Pro-Con FW. Unknown for new.)
| |
− | |-
| |
− | | 0x42 || 0x1 || 0x19 || Low || Final Step Duration Multiplier of Mini Cycle 16 (see above). (Unused in older Joy-Con / Pro-Con FW. Unknown for new.)
| |
− | |-
| |
− | | 0x43 || 0x1 || || || Unused
| |
− | |-
| |
− | | 0x44 || 0x1 || 0x1A || High || Unknown (Unused in older Joy-Con / Pro-Con FW. Unknown for new.)
| |
− | |-
| |
− | | 0x45 || 0x1 || 0x1A || Low || Unknown (Unused in older Joy-Con / Pro-Con FW. Unknown for new.)
| |
− | |-
| |
− | | 0x46 || 0x1 || || || Padding
| |
− | |-
| |
− | | 0x47 || 0x1 || || || Padding
| |
| |- | | |- |
| + | | 0x8 || <[[#HdlsStateListEntry]] size>*0x10 || Array of [[#HdlsStateListEntry]]. |
| |} | | |} |
| | | |
− | This is "nn::hid::system::NotificationLedPattern". | + | This contains a list of all controllers, including non-virtual controllers. |
| | | |
− | This is a 0x48-byte struct. | + | = HdlsStateListEntry = |
| + | This is a 0x40-byte struct. |
| | | |
− | The above descriptions in the table are based on the info from [https://github.com/dekuNukem/Nintendo_Switch_Reverse_Engineering/blob/master/bluetooth_hid_subcommands_notes.md here].
| + | [9.0.0+] This is a 0x48-byte struct. |
− | | |
− | argdata in the subcommand is initialized as follows: <code>((u8*)cmd_argdata)[pos] = u8_in[pos2] | u8_in[pos3]<<4;</code> Hence, 4bits from pairs of 2-bytes of the input struct are combined to write to the subcommand. Only the low 4bits of each used byte in the struct is used. This is written to stack initially, then copied to the actual cmd_argdata (the data immediately following the subcommandID byte). There's a total of 0x1B-bytes of cmd_argdata initialized from this.
| |
| | | |
− | The layout of cmd_argdata is as follows:
| |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
| ! Offset || Size || Description | | ! Offset || Size || Description |
| |- | | |- |
− | | 0x0 || 0x1B || See above. | + | | 0x0 || 0x8 || HdlsHandle |
| |- | | |- |
− | | 0x1B || 0xB || Cleared to zero. | + | | 0x8 || [[#HdlsDeviceInfo]] size || [[#HdlsDeviceInfo]]. With [[#ApplyHdlsStateList]] this is only used when creating new devices. |
| |- | | |- |
− | | 0x26 || 0x5 || Unused | + | | 0x8 + [[#HdlsDeviceInfo]] size, with 8-byte alignment || 0x24 || [[#HdlsState]] |
| |- | | |- |
− | | 0x2B || 0x8 || Set to an input value, which is hard-coded 0. | + | | <Immediately following the above> || 0x4 || Padding |
− | |-
| |
− | | 0x33 || 0x2 || Set to value 0.
| |
− | |-
| |
− | | 0x35 || 0x1 || Set to value 1.
| |
| |} | | |} |
| | | |
− | = DeviceType = | + | = HdlsDeviceInfo = |
− | This is "nn::hid::system::DeviceType". | + | This is a 0x10-byte struct. |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
− | ! Bits
| |
− | ! Description
| |
| |- | | |- |
− | | 0 | + | ! Offset || Size || Description |
− | | FullKey | |
| |- | | |- |
− | | 1 | + | | 0x0 || 0x4 || [[#DeviceTypeInternal]] |
− | | DebugPad | |
| |- | | |- |
− | | 2 | + | | 0x4 || 0x4 || RGBA Single Body Color |
− | | HandheldLeft | |
| |- | | |- |
− | | 3 | + | | 0x8 || 0x4 || RGBA Single Buttons Color |
− | | HandheldRight | |
| |- | | |- |
− | | 4 | + | | 0xC || 0x1 || [[#NpadInterfaceType]]. Additional type field used with the above type field, if the value doesn't match one of the following a default is used. Type Pro-Controller: value 0x3 indicates that the controller is connected via USB. Type bit21: value 0x3 = unknown. When value is 0x2, state is merged with an existing controller (when the type value is compatible with this). Otherwise, it's a dedicated controller. |
− | | JoyLeft | |
| |- | | |- |
− | | 5 | + | | 0xD || 0x3 || Padding |
− | | JoyRight | + | |} |
| + | |
| + | [9.0.0+] This is a 0x14-byte struct. |
| + | |
| + | {| class="wikitable" border="1" |
| |- | | |- |
− | | 6 | + | ! Offset || Size || Description |
− | | Palma | |
| |- | | |- |
− | | 7 | + | | 0x0 || 0x1 || [[#DeviceTypeInternal]] |
− | | LarkHvcLeft | |
| |- | | |- |
− | | 8 | + | | 0x1 || 0x1 || [[#NpadInterfaceType]]. Similar to the field from the old struct. |
− | | LarkHvcRight | |
| |- | | |- |
− | | 9 | + | | 0x2 || 0x2 || Padding |
− | | LarkNesLeft | |
| |- | | |- |
− | | 10 | + | | 0x4 || 0x4 || RGBA Single Body Color |
− | | LarkNesRight | |
| |- | | |- |
− | | 11 | + | | 0x8 || 0x4 || RGBA Single Buttons Color |
− | | HandheldLarkHvcLeft | |
| |- | | |- |
− | | 12 | + | | 0xC || 0x4 || RGBA Unknown Body Color |
− | | HandheldLarkHvcRight | |
| |- | | |- |
− | | 13 | + | | 0x10 || 0x4 || RGBA Unknown Buttons Color |
− | | HandheldLarkNesLeft | + | |} |
| + | |
| + | = HdlsState = |
| + | This is a 0x24-byte struct. |
| + | |
| + | {| class="wikitable" border="1" |
| |- | | |- |
− | | 14 | + | ! Offset || Size || Description |
− | | HandheldLarkNesRight | |
| |- | | |- |
− | | 15 | + | | 0x0 || 0x1 || powerConnected for the main PowerInfo. |
− | | Lucia | + | |- |
| + | | 0x1 || 0x1 || ORRed with powerConnected to set the value of the first byte for the controller [[HID_Shared_Memory#Flags|flags]]. |
| + | |- |
| + | | 0x2 || 0x6 || Unknown |
| + | |- |
| + | | 0x8 || 0x4 || batteryCharge for the main PowerInfo. |
| + | |- |
| + | | 0xC || 0x4 || Buttons. Bit18 = HOME and bit19 = Capture. |
| + | |- |
| + | | 0x10 || 0x10(4*2*2) || Joystick data. |
| |- | | |- |
− | | 16-30 | + | | 0x20 || 0x1 || Unused for input. Set with output from [[#DumpHdlsStates]] (zero in some cases). |
− | | Reserved | |
| |- | | |- |
− | | 31 | + | | 0x21 || 0x3 || Padding |
− | | System | |
| |} | | |} |
| | | |
− | = UniquePadId =
| + | [9.0.0+]: |
− | This is "nn::hid::system::UniquePadId". This struct contains an u64.
| |
− | | |
− | = UniquePadType =
| |
− | This is "nn::hid::system::UniquePadType".
| |
− | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
− | ! Value
| |
− | ! Description
| |
| |- | | |- |
− | | 0x0 || Other | + | ! Offset || Size || Description |
| + | |- |
| + | | 0x0 || 0x4 || batteryCharge for the main PowerInfo. |
| + | |- |
| + | | 0x4 || 0x4 || Unknown |
| |- | | |- |
− | | 0x1 || FullKey | + | | 0x8 || 0x8 || Buttons, masked with 0xfffffffff00fffff. See above table regarding HOME/Capture buttons. |
| |- | | |- |
− | | 0x2 || JoyRight | + | | 0x10 || 0x10(4*2*2) || Joystick data. |
| |- | | |- |
− | | 0x3 || JoyLeft | + | | 0x20 || 0x1 || Unused for input. Set with output from [[#DumpHdlsStates]] (zero in some cases). |
| |- | | |- |
− | | 0x4 || DebugPad | + | | 0x21 || 0x3 || Padding |
| + | |} |
| + | |
| + | = NotificationLedPattern = |
| + | This is "nn::hid::system::NotificationLedPattern". This is a 0x48-byte struct. |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Offset || Size || Subcommand argdata bytepos || Subcommand argdata nibble || Description |
| + | |- |
| + | | 0x0 || 0x1 || 0x0 || Low || Mini Cycle Base Duration. Value 0x1-0xF: 12.5ms - 187.5ms. Value 0x0 = 0ms/OFF. |
| + | |- |
| + | | 0x1 || 0x1 || 0x0 || High || Number of Mini Cycles + 1. Value 0x0-0xF: 1 - 16 mini cycles. |
| + | |- |
| + | | 0x2 || 0x1 || 0x1 || Low || Number of Full Cycles. Value 0x1-0xF: 1 - 15 full cycles. Value 0x0 is repeat forever, but if Mini Cycle Base Duration is set to 0x0, it does the 1st Mini Cycle with a 12.5ms base duration and then the LED stays on with LED Start Intensity. |
| + | |- |
| + | | 0x3 || 0x1 || 0x1 || High || LED Start Intensity. Value 0x0-0xF: 0% - 100%. (In HW, 1 - 241 duty) |
| + | |- |
| + | | 0x4 || 0x1 || 0x2 || High || Mini Cycle 1 LED Intensity. Value 0x0-0xF: 0% - 100%. (In HW, 1 - 241 duty) |
| + | |- |
| + | | 0x5 || 0x1 || 0x3 || High || Fading Transition Steps to Mini Cycle 1 (Uses PWM). Value 0x0: Instant. Each step duration is based on Mini Cycle Step Duration Multiplier. |
| + | |- |
| + | | 0x6 || 0x1 || 0x3 || Low || Final Step Duration Multiplier of Mini Cycle 1. Value is a Multiplier of Mini Cycle Base Duration. Value 0x0: 12.5ms, 0x1 - xF: 1x - 15x. |
| + | |- |
| + | | 0x7 || 0x1 || || || Unused |
| + | |- |
| + | | 0x8 || 0x1 || 0x2 || Low || Mini Cycle 2 LED Intensity. |
| + | |- |
| + | | 0x9 || 0x1 || 0x4 || High || Fading Transition Steps to Mini Cycle 2 (see above). |
| + | |- |
| + | | 0xA || 0x1 || 0x4 || Low || Final Step Duration Multiplier of Mini Cycle 2 (see above). |
| + | |- |
| + | | 0xB || 0x1 || || || Unused |
| + | |- |
| + | | 0xC || 0x1 || 0x5 || High || Mini Cycle 3 LED Intensity. |
| + | |- |
| + | | 0xD || 0x1 || 0x6 || High || Fading Transition Steps to Mini Cycle 3 (see above). |
| + | |- |
| + | | 0xE || 0x1 || 0x6 || Low || Final Step Duration Multiplier of Mini Cycle 3 (see above). |
| + | |- |
| + | | 0xF || 0x1 || || || Unused |
| + | |- |
| + | | 0x10 || 0x1 || 0x5 || Low || Mini Cycle 4 LED Intensity. |
| + | |- |
| + | | 0x11 || 0x1 || 0x7 || High || Fading Transition Duration to Mini Cycle 4 (see above). |
| + | |- |
| + | | 0x12 || 0x1 || 0x7 || Low || Final Step Duration Multiplier of Mini Cycle 4 (see above). |
| + | |- |
| + | | 0x13 || 0x1 || || || Unused |
| + | |- |
| + | | 0x14 || 0x1 || 0x8 || High || Mini Cycle 5 LED Intensity. |
| + | |- |
| + | | 0x15 || 0x1 || 0x9 || High || Fading Transition Steps to Mini Cycle 5 (see above). |
| + | |- |
| + | | 0x16 || 0x1 || 0x9 || Low || Final Step Duration Multiplier of Mini Cycle 5 (see above). |
| + | |- |
| + | | 0x17 || 0x1 || || || Unused |
| + | |- |
| + | | 0x18 || 0x1 || 0x8 || Low || Mini Cycle 6 LED Intensity. |
| + | |- |
| + | | 0x19 || 0x1 || 0xA || High || Fading Transition Steps to Mini Cycle 6 (see above). |
| + | |- |
| + | | 0x1A || 0x1 || 0xA || Low || Final Step Duration Multiplier of Mini Cycle 6 (see above). |
| + | |- |
| + | | 0x1B || 0x1 || || || Unused |
| + | |- |
| + | | 0x1C || 0x1 || 0xB || High || Mini Cycle 7 LED Intensity. |
| + | |- |
| + | | 0x1D || 0x1 || 0xC || High || Fading Transition Steps to Mini Cycle 7 (see above). |
| + | |- |
| + | | 0x1E || 0x1 || 0xC || Low || Final Step Duration Multiplier of Mini Cycle 7 (see above). |
| + | |- |
| + | | 0x1F || 0x1 || || || Unused |
| + | |- |
| + | | 0x20 || 0x1 || 0xB || Low || Mini Cycle 8 LED Intensity. |
| + | |- |
| + | | 0x21 || 0x1 || 0xD || Low || Fading Transition Steps to Mini Cycle 8 (see above). |
| + | |- |
| + | | 0x22 || 0x1 || 0xD || High || Final Step Duration Multiplier of Mini Cycle 8 (see above). |
| + | |- |
| + | | 0x23 || 0x1 || || || Unused |
| + | |- |
| + | | 0x24 || 0x1 || 0xE || High || Mini Cycle 9 LED Intensity. |
| + | |- |
| + | | 0x25 || 0x1 || 0xF || High || Fading Transition Steps to Mini Cycle 9 (see above). |
| + | |- |
| + | | 0x26 || 0x1 || 0xF || Low || Final Step Duration Multiplier of Mini Cycle 9 (see above). |
| + | |- |
| + | | 0x27 || 0x1 || || || Unused |
| + | |- |
| + | | 0x28 || 0x1 || 0xE || Low || Mini Cycle 10 LED Intensity. |
| + | |- |
| + | | 0x29 || 0x1 || 0x10 || High || Fading Transition Steps to Mini Cycle 10 (see above). |
| + | |- |
| + | | 0x2A || 0x1 || 0x10 || Low || Final Step Duration Multiplier of Mini Cycle 10 (see above). |
| + | |- |
| + | | 0x2B || 0x1 || || || Unused |
| + | |- |
| + | | 0x2C || 0x1 || 0x11 || High || Mini Cycle 11 LED Intensity. |
| + | |- |
| + | | 0x2D || 0x1 || 0x12 || High || Fading Transition Steps to Mini Cycle 11 (see above). |
| + | |- |
| + | | 0x2E || 0x1 || 0x12 || Low || Final Step Duration Multiplier of Mini Cycle 11 (see above). |
| + | |- |
| + | | 0x2F || 0x1 || || || Unused |
| + | |- |
| + | | 0x30 || 0x1 || 0x11 || Low || Mini Cycle 12 LED Intensity. |
| + | |- |
| + | | 0x31 || 0x1 || 0x13 || High || Fading Transition Steps to Mini Cycle 12 (see above). |
| + | |- |
| + | | 0x32 || 0x1 || 0x13 || Low || Final Step Duration Multiplier of Mini Cycle 12 (see above). |
| + | |- |
| + | | 0x33 || 0x1 || || || Unused |
| + | |- |
| + | | 0x34 || 0x1 || 0x14 || High || Mini Cycle 13 LED Intensity. |
| + | |- |
| + | | 0x35 || 0x1 || 0x15 || High || Fading Transition Steps to Mini Cycle 13 (see above). |
| + | |- |
| + | | 0x36 || 0x1 || 0x15 || Low || Final Step Duration Multiplier of Mini Cycle 13 (see above). |
| + | |- |
| + | | 0x37 || 0x1 || || || Unused |
| + | |- |
| + | | 0x38 || 0x1 || 0x14 || Low || Mini Cycle 14 LED Intensity. |
| + | |- |
| + | | 0x39 || 0x1 || 0x16 || High || Fading Transition Steps to Mini Cycle 14 (see above). |
| + | |- |
| + | | 0x3A || 0x1 || 0x16 || Low || Final Step Duration Multiplier of Mini Cycle 14 (see above). |
| + | |- |
| + | | 0x3B || 0x1 || || || Unused |
| + | |- |
| + | | 0x3C || 0x1 || 0x17 || High || Mini Cycle 15 LED Intensity. |
| + | |- |
| + | | 0x3D || 0x1 || 0x18 || High || Fading Transition Steps to Mini Cycle 15 (see above). |
| + | |- |
| + | | 0x3E || 0x1 || 0x18 || Low || Final Step Duration Multiplier of Mini Cycle 15 (see above). |
| + | |- |
| + | | 0x3F || 0x1 || || || Unused |
| + | |- |
| + | | 0x40 || 0x1 || 0x17 || Low || Mini Cycle 16 LED Intensity. |
| + | |- |
| + | | 0x41 || 0x1 || 0x19 || High || Fading Transition Steps to Mini Cycle 16 (see above). (Unused in older Joy-Con / Pro-Con FW. Unknown for new.) |
| + | |- |
| + | | 0x42 || 0x1 || 0x19 || Low || Final Step Duration Multiplier of Mini Cycle 16 (see above). (Unused in older Joy-Con / Pro-Con FW. Unknown for new.) |
| + | |- |
| + | | 0x43 || 0x1 || || || Unused |
| + | |- |
| + | | 0x44 || 0x1 || 0x1A || High || Unknown (Unused in older Joy-Con / Pro-Con FW. Unknown for new.) |
| + | |- |
| + | | 0x45 || 0x1 || 0x1A || Low || Unknown (Unused in older Joy-Con / Pro-Con FW. Unknown for new.) |
| + | |- |
| + | | 0x46 || 0x1 || || || Padding |
| + | |- |
| + | | 0x47 || 0x1 || || || Padding |
| + | |- |
| + | |} |
| + | |
| + | The above descriptions in the table are based on the info from [https://github.com/dekuNukem/Nintendo_Switch_Reverse_Engineering/blob/master/bluetooth_hid_subcommands_notes.md here]. |
| + | |
| + | argdata in the subcommand is initialized as follows: <code>((u8*)cmd_argdata)[pos] = u8_in[pos2] | u8_in[pos3]<<4;</code> Hence, 4bits from pairs of 2-bytes of the input struct are combined to write to the subcommand. Only the low 4bits of each used byte in the struct is used. This is written to stack initially, then copied to the actual cmd_argdata (the data immediately following the subcommandID byte). There's a total of 0x1B-bytes of cmd_argdata initialized from this. |
| + | |
| + | The layout of cmd_argdata is as follows: |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Offset || Size || Description |
| + | |- |
| + | | 0x0 || 0x1B || See above. |
| + | |- |
| + | | 0x1B || 0xB || Cleared to zero. |
| + | |- |
| + | | 0x26 || 0x5 || Unused |
| + | |- |
| + | | 0x2B || 0x8 || Set to an input value, which is hard-coded 0. |
| + | |- |
| + | | 0x33 || 0x2 || Set to value 0. |
| + | |- |
| + | | 0x35 || 0x1 || Set to value 1. |
| |} | | |} |
| | | |