Line 7,281: |
Line 7,281: |
| | "MY" || [[#DeviceTypeInternal|DeviceType]] 4 and [[#DeviceTypeInternal|DeviceType]] 5 | | | "MY" || [[#DeviceTypeInternal|DeviceType]] 4 and [[#DeviceTypeInternal|DeviceType]] 5 |
| |- | | |- |
− | | "LC" || [[#DeviceTypeInternal|DeviceType]] 6 and [[#DeviceTypeInternal|DeviceType]] 30 | + | | "LC" || "Tarragon" ([[#DeviceTypeInternal|DeviceType]] 6) and [[#DeviceTypeInternal|DeviceType]] 30 |
| |- | | |- |
| | "HL" || Famicom left controller | | | "HL" || Famicom left controller |
Line 7,477: |
Line 7,477: |
| | 2 || Rail | | | 2 || Rail |
| |- | | |- |
− | | 3 || USB | + | | 3 || Usb |
| |- | | |- |
| | 4 || Embedded | | | 4 || Embedded |
Line 7,723: |
Line 7,723: |
| | 5 || JoyRight || RightController || || | | | 5 || JoyRight || RightController || || |
| |- | | |- |
− | | 6 || FullKey || FullKeyController || || | + | | 6 || FullKey || FullKeyController || || "Tarragon" controller |
| |- | | |- |
| | 7 || LarkHvcLeft, HandheldLarkHvcLeft || LeftController || LarkHvc1, HandheldLarkHvc1Only, HandheldLarkHvc1JoyConRight, HandheldLarkHvc1LarkHvc2, HandheldLarkHvc1LarkNesRight, HandheldNone || Famicom left controller | | | 7 || LarkHvcLeft, HandheldLarkHvcLeft || LeftController || LarkHvc1, HandheldLarkHvc1Only, HandheldLarkHvc1JoyConRight, HandheldLarkHvc1LarkHvc2, HandheldLarkHvc1LarkNesRight, HandheldNone || Famicom left controller |
Line 7,774: |
Line 7,774: |
| |} | | |} |
| | | |
− | = NpadPowerInfo = | + | = VidPidDefinition = |
− | This is "nn::hid::system::NpadPowerInfo". | + | This is "nn::hidtypes::VidPidDefinition". |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 7,784: |
Line 7,784: |
| |- | | |- |
| | 0x0 | | | 0x0 |
− | | 0x1 | + | | 0x2 |
− | | IsPowered | + | | Vid |
| |- | | |- |
− | | 0x1 | + | | 0x2 |
− | | 0x1 | + | | 0x2 |
− | | IsCharging | + | | PidRangeMax |
| |- | | |- |
| + | | 0x4 |
| | 0x2 | | | 0x2 |
| + | | PidRangeMin |
| + | |- |
| | 0x6 | | | 0x6 |
| + | | 0x1 |
| + | | [[#DeviceTypeInternal|DeviceType]] |
| + | |- |
| + | | 0x7 |
| + | | 0x1 |
| | Reserved | | | Reserved |
− | |-
| |
− | | 0x8
| |
− | | 0x6
| |
− | | [[#BatteryLevel|BatteryLevel]]
| |
| |} | | |} |
| | | |
− | = BatteryLevel = | + | = VidPidDefinitions = |
− | This is "nn::hid::system::NpadBatteryLevel". This is a 4 byte value. | + | This is "nn::hidtypes::detail::VidPidDefinitions". This is a list of [[#VidPidDefinition|VidPidDefinition]] objects maintained by the hid-sysmodule. |
− | | |
− | = ConsoleSixAxisSensorHandle =
| |
− | This is "nn::hid::ConsoleSixAxisSensorHandle". This is a 4-byte struct with 4-byte alignment.
| |
− | | |
− | sdknso GetConsoleSixAxisSensorHandle always returns a handle with value 0x13.
| |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
− | ! Offset || Size || Description | + | ! Vid || PidRangeMax || PidRangeMin || [[#DeviceTypeInternal|DeviceType]] |
| |- | | |- |
− | | 0x0 || 0x4 || TypeValue | + | | 0x57E || 0x2006 || 0x2006 || 2 |
| |- | | |- |
− | | 0x0 || 0x1 || | + | | 0x57E || 0x2007 || 0x2007 || 1 |
| |- | | |- |
− | | 0x1 || 0x1 || | + | | 0x57E || 0x2009 || 0x2009 || 3 |
− | |} | |
− | | |
− | = SixAxisSensorHandle =
| |
− | This is "nn::hid::SixAxisSensorHandle". This is a 4-byte struct with 4-byte alignment.
| |
− | | |
− | {| class="wikitable" border="1"
| |
| |- | | |- |
− | ! Offset || Size || Description
| + | | 0x57E || 0x200F || 0x200F || 24 |
| |- | | |- |
− | | 0x0 || 0x4 || TypeValue | + | | 0x57E || 0x200E || 0x200E || 23 |
| |- | | |- |
− | | 0x0 || 0x1 || NpadStyleIndex | + | | 0x57E || 0x2008 || 0x2008 || 25 |
| |- | | |- |
− | | 0x1 || 0x1 || [[#NpadIdType|PlayerNumber]] | + | | 0x57E || 0x2017 || 0x2017 || 11 |
| |- | | |- |
− | | 0x2 || 0x1 || DeviceIdx | + | | 0x57E || 0x2018 || 0x2018 || 26 |
− | |} | |
− | | |
− | = VibrationDeviceHandle =
| |
− | This is "nn::hid::VibrationDeviceHandle". This is a 4-byte struct with 4-byte alignment.
| |
− | | |
− | {| class="wikitable" border="1"
| |
| |- | | |- |
− | ! Offset || Size || Description
| + | | 0x57E || 0x2019 || 0x2019 || 22 |
| |- | | |- |
− | | 0x0 || 0x4 || TypeValue | + | | 0x57E || 0x201A || 0x201A || 27 |
| |- | | |- |
− | | 0x0 || 0x1 || NpadStyleIndex | + | | 0x57E || 0x201E || 0x201E || 28 |
| |- | | |- |
− | | 0x1 || 0x1 || [[#NpadIdType|PlayerNumber]] | + | | 0x57E || 0x201F || 0x201F || 29 |
| |- | | |- |
− | | 0x2 || 0x1 || DeviceIdx | + | | 0x57E || 0x337 || 0x337 || 13 |
− | |} | |
− | | |
− | = VibrationDeviceInfo =
| |
− | This is "nn::hid::VibrationDeviceInfo" / "nn::hid::VibrationDeviceInfoForIpc". This is a 0x8-byte struct.
| |
− | | |
− | {| class="wikitable" border="1"
| |
| |- | | |- |
− | ! Offset || Size || Description
| + | | 0xF0D || 0x92 || 0x92 || 15 |
| + | |- |
| + | | 0xF0D || 0xAB || 0xAA || 15 |
| + | |- |
| + | | 0xF0D || 0xC1 || 0xC1 || 15 |
| |- | | |- |
− | | 0x0 || 0x4 || [[#VibrationDeviceType|DeviceType]] | + | | 0xF0D || 0xFF || 0xF0 || 15 |
| |- | | |- |
− | | 0x4 || 0x4 || [[#VibrationDevicePosition|Position]] | + | | 0xF0D || 0x22F || 0x200 || 15 |
− | |} | |
− | | |
− | = VibrationDeviceType =
| |
− | This is "nn::hid::VibrationDeviceType".
| |
− | | |
− | {| class="wikitable" border="1"
| |
− | ! Value
| |
− | ! Description
| |
| |- | | |- |
− | | 0 || Unknown | + | | 0xE6F || 0x193 || 0x180 || 15 |
| |- | | |- |
− | | 1 || LinearResonantActuator | + | | 0x20D6 || 0xA719 || 0xA710 || 15 |
| |- | | |- |
− | | 2 || GcErm | + | | 0x20D6 || 0xA729 || 0xA720 || 15 |
| |- | | |- |
− | | 3 || Erm | + | | 0x33DD || 0xB || 0x1 || 15 |
| |} | | |} |
| | | |
− | = VibrationDevicePosition = | + | = NpadPowerInfo = |
− | This is "nn::hid::VibrationDevicePosition". | + | This is "nn::hid::system::NpadPowerInfo". |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
− | ! Value
| |
− | ! Description
| |
| |- | | |- |
− | | 0 || None
| + | ! Offset |
| + | ! Size |
| + | ! Description |
| |- | | |- |
− | | 1 || Left | + | | 0x0 |
| + | | 0x1 |
| + | | IsPowered |
| + | |- |
| + | | 0x1 |
| + | | 0x1 |
| + | | IsCharging |
| |- | | |- |
− | | 2 || Right | + | | 0x2 |
| + | | 0x6 |
| + | | Reserved |
| + | |- |
| + | | 0x8 |
| + | | 0x6 |
| + | | [[#BatteryLevel|BatteryLevel]] |
| |} | | |} |
| | | |
− | = VibrationValue = | + | = BatteryLevel = |
− | This is "nn::hid::VibrationValue". This is a 0x10-byte struct, which contains 4 float values. | + | This is "nn::hid::system::NpadBatteryLevel". This is a 4 byte value. |
| + | |
| + | = ConsoleSixAxisSensorHandle = |
| + | This is "nn::hid::ConsoleSixAxisSensorHandle". This is a 4-byte struct with 4-byte alignment. |
| + | |
| + | sdknso GetConsoleSixAxisSensorHandle always returns a handle with value 0x13. |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
− | ! Offset | + | ! Offset || Size || Description |
− | ! Size
| |
− | ! Description
| |
| |- | | |- |
− | | 0x0 | + | | 0x0 || 0x4 || TypeValue |
− | | 0x4 | |
− | | AmplitudeLow | |
| |- | | |- |
− | | 0x4 | + | | 0x0 || 0x1 || |
− | | 0x4 | |
− | | FrequencyLow | |
| |- | | |- |
− | | 0x8 | + | | 0x1 || 0x1 || |
− | | 0x4 | |
− | | AmplitudeHigh | |
− | |- | |
− | | 0xC | |
− | | 0x4
| |
− | | FrequencyHigh
| |
| |} | | |} |
| | | |
− | = VibrationGcErmCommand = | + | = SixAxisSensorHandle = |
− | This is "nn::hid::VibrationGcErmCommand". | + | This is "nn::hid::SixAxisSensorHandle". This is a 4-byte struct with 4-byte alignment. |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
− | ! Value
| |
− | ! Name
| |
− | ! Description
| |
| |- | | |- |
− | | 0 || Stop || Stops the vibration with a decay phase. | + | ! Offset || Size || Description |
| + | |- |
| + | | 0x0 || 0x4 || TypeValue |
| |- | | |- |
− | | 1 || Start || Starts the vibration. | + | | 0x0 || 0x1 || NpadStyleIndex |
| |- | | |- |
− | | 2 || StopHard || Stops the vibration immediately, with no decay phase. | + | | 0x1 || 0x1 || [[#NpadIdType|PlayerNumber]] |
− | |} | + | |- |
| + | | 0x2 || 0x1 || DeviceIdx |
| + | |} |
| | | |
− | = AccelerometerPlayMode = | + | = VibrationDeviceHandle = |
− | This is "nn::hid::debug::AccelerometerPlayMode" (pre-10.0.0 this is "nn::hid::AccelerometerPlayMode"). | + | This is "nn::hid::VibrationDeviceHandle". This is a 4-byte struct with 4-byte alignment. |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
− | ! Value
| |
− | ! Description
| |
| |- | | |- |
− | | 0 || Loose | + | ! Offset || Size || Description |
| + | |- |
| + | | 0x0 || 0x4 || TypeValue |
| + | |- |
| + | | 0x0 || 0x1 || NpadStyleIndex |
| + | |- |
| + | | 0x1 || 0x1 || [[#NpadIdType|PlayerNumber]] |
| |- | | |- |
− | | 1 || Tight | + | | 0x2 || 0x1 || DeviceIdx |
| |} | | |} |
| | | |
− | = GyroscopeZeroDriftMode = | + | = VibrationDeviceInfo = |
− | This is "nn::hid::GyroscopeZeroDriftMode". | + | This is "nn::hid::VibrationDeviceInfo" / "nn::hid::VibrationDeviceInfoForIpc". This is a 0x8-byte struct. |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
− | ! Value
| |
− | ! Description
| |
| |- | | |- |
− | | 0 || Loose | + | ! Offset || Size || Description |
| |- | | |- |
− | | 1 || Standard | + | | 0x0 || 0x4 || [[#VibrationDeviceType|DeviceType]] |
| |- | | |- |
− | | 2 || Tight | + | | 0x4 || 0x4 || [[#VibrationDevicePosition|Position]] |
| |} | | |} |
| | | |
− | = PalmaConnectionHandle = | + | = VibrationDeviceType = |
− | This is "nn::hid::PalmaConnectionHandle". This is a 0x8-byte struct with 8-byte alignment. | + | This is "nn::hid::VibrationDeviceType". |
− | | |
− | = PalmaOperationInfo =
| |
− | This is "nn::hid::PalmaOperationInfo". This is a 0x148-byte struct.
| |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| + | ! Value |
| + | ! Description |
| |- | | |- |
− | ! Offset || Size || Description
| + | | 0 || Unknown |
| |- | | |- |
− | | 0x0 || 0x4 || [[#PalmaOperationType]] | + | | 1 || LinearResonantActuator |
| |- | | |- |
− | | 0x4 || 0x4 || Result | + | | 2 || GcErm |
| |- | | |- |
− | | 0x8 || 0x140 || Buffer for [[#GetPalmaOperationInfo]]. | + | | 3 || Erm |
| |} | | |} |
| | | |
− | = PalmaOperationType = | + | = VibrationDevicePosition = |
− | This is "nn::hid::PalmaOperationType". | + | This is "nn::hid::VibrationDevicePosition". |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 7,984: |
Line 7,968: |
| ! Description | | ! Description |
| |- | | |- |
− | | 0 || PlayActivity | + | | 0 || None |
| |- | | |- |
− | | 1 || SetFrModeType | + | | 1 || Left |
| |- | | |- |
− | | 2 || ReadStep | + | | 2 || Right |
| + | |} |
| + | |
| + | = VibrationValue = |
| + | This is "nn::hid::VibrationValue". This is a 0x10-byte struct, which contains 4 float values. |
| + | |
| + | {| class="wikitable" border="1" |
| |- | | |- |
− | | 3 || EnableStep
| + | ! Offset |
| + | ! Size |
| + | ! Description |
| |- | | |- |
− | | 4 || ResetStep | + | | 0x0 |
| + | | 0x4 |
| + | | AmplitudeLow |
| |- | | |- |
− | | 5 || ReadApplicationSection | + | | 0x4 |
| + | | 0x4 |
| + | | FrequencyLow |
| |- | | |- |
− | | 6 || WriteApplicationSection | + | | 0x8 |
| + | | 0x4 |
| + | | AmplitudeHigh |
| |- | | |- |
− | | 7 || ReadUniqueCode | + | | 0xC |
− | |- | + | | 0x4 |
− | | 8 || SetUniqueCodeInvalid | + | | FrequencyHigh |
| + | |} |
| + | |
| + | = VibrationGcErmCommand = |
| + | This is "nn::hid::VibrationGcErmCommand". |
| + | |
| + | {| class="wikitable" border="1" |
| + | ! Value |
| + | ! Name |
| + | ! Description |
| |- | | |- |
− | | 9 || WriteActivityEntry | + | | 0 || Stop || Stops the vibration with a decay phase. |
| |- | | |- |
− | | 10 || WriteRgbLedPatternEntry | + | | 1 || Start || Starts the vibration. |
| |- | | |- |
− | | 11 || WriteWaveEntry | + | | 2 || StopHard || Stops the vibration immediately, with no decay phase. |
− | |- | |
− | | 12 || ReadDataBaseIdentificationVersion | |
− | |-
| |
− | | 13 || WriteDataBaseIdentificationVersion
| |
− | |-
| |
− | | 14 || SuspendFeature
| |
− | |-
| |
− | | 15 || [5.1.0+] ReadPlayLog
| |
− | |-
| |
− | | 16 || [5.1.0+] ResetPlayLog
| |
| |} | | |} |
| | | |
− | = PalmaFrModeType = | + | = AccelerometerPlayMode = |
− | This is "nn::hid::PalmaFrModeType". | + | This is "nn::hid::debug::AccelerometerPlayMode" (pre-10.0.0 this is "nn::hid::AccelerometerPlayMode"). |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 8,026: |
Line 8,023: |
| ! Description | | ! Description |
| |- | | |- |
− | | 0 || Off | + | | 0 || Loose |
| |- | | |- |
− | | 1 || B01 | + | | 1 || Tight |
| + | |} |
| + | |
| + | = GyroscopeZeroDriftMode = |
| + | This is "nn::hid::GyroscopeZeroDriftMode". |
| + | |
| + | {| class="wikitable" border="1" |
| + | ! Value |
| + | ! Description |
| |- | | |- |
− | | 2 || B02 | + | | 0 || Loose |
| |- | | |- |
− | | 3 || B03 | + | | 1 || Standard |
| |- | | |- |
− | | 4 || Downloaded | + | | 2 || Tight |
| |} | | |} |
| | | |
− | = PalmaApplicationSectionAccessBuffer = | + | = PalmaConnectionHandle = |
− | This is "nn::hid::PalmaApplicationSectionAccessBuffer". This is a 0x100-byte struct. | + | This is "nn::hid::PalmaConnectionHandle". This is a 0x8-byte struct with 8-byte alignment. |
| | | |
− | = PalmaActivityEntry = | + | = PalmaOperationInfo = |
− | This is "nn::hid::PalmaActivityEntry". | + | This is "nn::hid::PalmaOperationInfo". This is a 0x148-byte struct. |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 8,047: |
Line 8,052: |
| ! Offset || Size || Description | | ! Offset || Size || Description |
| |- | | |- |
− | | 0x0 || 0x2 || RgbLedPatternIndex. | + | | 0x0 || 0x4 || [[#PalmaOperationType]] |
| |- | | |- |
− | | 0x2 || 0x2 || Padding | + | | 0x4 || 0x4 || Result |
| |- | | |- |
− | | 0x4 || 0x4 || [[#PalmaWaveSet|WaveSet]]. | + | | 0x8 || 0x140 || Buffer for [[#GetPalmaOperationInfo]]. |
− | |-
| |
− | | 0x8 || 0x2 || WaveIndex.
| |
| |} | | |} |
| | | |
− | = PalmaWaveSet = | + | = PalmaOperationType = |
− | This is "nn::hid::PalmaWaveSet". | + | This is "nn::hid::PalmaOperationType". |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 8,063: |
Line 8,066: |
| ! Description | | ! Description |
| |- | | |- |
− | | 0 || Small | + | | 0 || PlayActivity |
| |- | | |- |
− | | 1 || Medium | + | | 1 || SetFrModeType |
| |- | | |- |
− | | 2 || Large | + | | 2 || ReadStep |
− | |}
| |
− | | |
− | = PalmaFeature =
| |
− | This is "nn::hid::PalmaFeature".
| |
− | | |
− | {| class="wikitable" border="1"
| |
| |- | | |- |
− | ! Bit
| + | | 3 || EnableStep |
− | ! Description
| |
| |- | | |- |
− | | 0 | + | | 4 || ResetStep |
− | | FrMode | |
| |- | | |- |
− | | 1 | + | | 5 || ReadApplicationSection |
− | | RumbleFeedback | |
| |- | | |- |
− | | 2 | + | | 6 || WriteApplicationSection |
− | | Step | |
| |- | | |- |
− | | 3 | + | | 7 || ReadUniqueCode |
− | | MuteSwitch | |
| |- | | |- |
− | |} | + | | 8 || SetUniqueCodeInvalid |
− | | |
− | = AbstractedPadState =
| |
− | {| class="wikitable" border="1"
| |
| |- | | |- |
− | ! Offset || Size || Description
| + | | 9 || WriteActivityEntry |
| |- | | |- |
− | | 0x0 || 0x4 || Type, only 1 bit can be set. Converted to [[#HdlsDeviceInfo]]::type internally by [[#SetAutoPilotVirtualPadState]]. | + | | 10 || WriteRgbLedPatternEntry |
| |- | | |- |
− | | 0x4 || 0x1 || Flags. [[#SetAutoPilotVirtualPadState]] only uses bit0: when clear it will skip using the rest of the input and run [[#UnsetAutoPilotVirtualPadState]] internally. | + | | 11 || WriteWaveEntry |
| |- | | |- |
− | | 0x5 || 0x3 || Padding | + | | 12 || ReadDataBaseIdentificationVersion |
| |- | | |- |
− | | 0x8 || 0x4 || RGBA Single Body Color | + | | 13 || WriteDataBaseIdentificationVersion |
| |- | | |- |
− | | 0xC || 0x4 || RGBA Single Buttons Color | + | | 14 || SuspendFeature |
| |- | | |- |
− | | 0x10 || 0x1 || See [[#HiddbgHdlsDeviceInfo]]::[[#NpadInterfaceType]]. | + | | 15 || [5.1.0+] ReadPlayLog |
| |- | | |- |
− | | 0x11 || 0x3 || Padding | + | | 16 || [5.1.0+] ResetPlayLog |
− | |-
| + | |} |
− | | 0x14 || 0x24 || [[#HdlsState]]. Unknown if the last 4-bytes are included in this struct, [[#SetAutoPilotVirtualPadState]]/[[#hiddbgGetAbstractedPadsState]] only uses the first 0x20-bytes.
| |
− | |-
| |
− | | 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.
| + | = PalmaFrModeType = |
| + | This is "nn::hid::PalmaFrModeType". |
| | | |
− | Type:
| |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
− | ! Bits | + | ! Value |
− | ! [[#HdlsDeviceInfo]]::type bits
| |
| ! Description | | ! Description |
− | ! Notes
| |
| |- | | |- |
− | | 0 || 0 || || | + | | 0 || Off |
| |- | | |- |
− | | 1 || 15 || || [[#DeviceType]] |= BIT(1) | + | | 1 || B01 |
| |- | | |- |
− | | 2 || 1 || || | + | | 2 || B02 |
| |- | | |- |
− | | 3 || 2 || || | + | | 3 || B03 |
| |- | | |- |
− | | 4 || 1 || || | + | | 4 || Downloaded |
− | |-
| + | |} |
− | | 5 || 2 || ||
| + | |
− | |-
| + | = PalmaApplicationSectionAccessBuffer = |
− | | 6 || 3 || || | + | This is "nn::hid::PalmaApplicationSectionAccessBuffer". This is a 0x100-byte struct. |
| + | |
| + | = PalmaActivityEntry = |
| + | This is "nn::hid::PalmaActivityEntry". |
| + | |
| + | {| class="wikitable" border="1" |
| |- | | |- |
− | | 7 || 11 || || [[#DeviceType]] |= BIT(11) | + | ! Offset || Size || Description |
| |- | | |- |
− | | 8 || 12 || || [[#DeviceType]] |= BIT(12) | + | | 0x0 || 0x2 || RgbLedPatternIndex. |
| |- | | |- |
− | | 9 || 13 || || [[#DeviceType]] |= BIT(13) | + | | 0x2 || 0x2 || Padding |
| |- | | |- |
− | | 10 || 14 || || [[#DeviceType]] |= BIT(14) | + | | 0x4 || 0x4 || [[#PalmaWaveSet|WaveSet]]. |
| |- | | |- |
− | | 11 || 15 || || [[#DeviceType]] |= BIT(11) | + | | 0x8 || 0x2 || WaveIndex. |
| + | |} |
| + | |
| + | = PalmaWaveSet = |
| + | This is "nn::hid::PalmaWaveSet". |
| + | |
| + | {| class="wikitable" border="1" |
| + | ! Value |
| + | ! Description |
| |- | | |- |
− | | 12 || 12 || || [[#DeviceType]] |= BIT(12) | + | | 0 || Small |
| |- | | |- |
− | | 13 || 13 || || [[#DeviceType]] |= BIT(13) | + | | 1 || Medium |
− | |-
| |
− | | 14 || 14 || || [[#DeviceType]] |= BIT(14)
| |
− | |-
| |
− | | 15 || 17 || ||
| |
− | |-
| |
− | | 31 || 21 || || [[#DeviceType]] = BIT(31)
| |
| |- | | |- |
| + | | 2 || Large |
| |} | | |} |
| | | |
− | The above "[[#DeviceType]] |=" notes only apply when type2 is 0x2.
| + | = PalmaFeature = |
− | | + | This is "nn::hid::PalmaFeature". |
− | = DebugPadAutoPilotState = | |
− | This is "nn::hid::debug::DebugPadAutoPilotState" | |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
− | ! Offset | + | ! Bit |
− | ! Size
| |
| ! Description | | ! Description |
| |- | | |- |
− | | 0x0 | + | | 0 |
− | | 0x4 | + | | FrMode |
− | | [[#DebugPadAttributeSet|Attributes]]
| |
| |- | | |- |
− | | 0x4 | + | | 1 |
− | | 0x4 | + | | RumbleFeedback |
− | | [[#DebugPadButtonSet|Buttons]]
| |
| |- | | |- |
− | | 0x8 | + | | 2 |
− | | 0x8 | + | | Step |
− | | [[#AnalogStickState|AnalogStickL]] | + | |- |
| + | | 3 |
| + | | MuteSwitch |
| |- | | |- |
− | | 0x10
| |
− | | 0x8
| |
− | | [[#AnalogStickState|AnalogStickR]]
| |
| |} | | |} |
| | | |
− | = MouseAutoPilotState = | + | = AbstractedPadState = |
− | This is "nn::hid::debug::MouseAutoPilotState".
| |
− | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
− | ! Offset | + | ! Offset || Size || Description |
− | ! Size
| |
− | ! Description
| |
| |- | | |- |
− | | 0x0 | + | | 0x0 || 0x4 || Type, only 1 bit can be set. Converted to [[#HdlsDeviceInfo]]::type internally by [[#SetAutoPilotVirtualPadState]]. |
− | | 0x4 | |
− | | X | |
| |- | | |- |
− | | 0x4 | + | | 0x4 || 0x1 || Flags. [[#SetAutoPilotVirtualPadState]] only uses bit0: when clear it will skip using the rest of the input and run [[#UnsetAutoPilotVirtualPadState]] internally. |
− | | 0x4 | |
− | | Y | |
| |- | | |- |
− | | 0x8 | + | | 0x5 || 0x3 || Padding |
− | | 0x4 | |
− | | DeltaX | |
| |- | | |- |
− | | 0xC | + | | 0x8 || 0x4 || RGBA Single Body Color |
− | | 0x4 | + | |- |
− | | DeltaY | + | | 0xC || 0x4 || RGBA Single Buttons Color |
| + | |- |
| + | | 0x10 || 0x1 || See [[#HiddbgHdlsDeviceInfo]]::[[#NpadInterfaceType]]. |
| |- | | |- |
− | | 0x10 | + | | 0x11 || 0x3 || Padding |
− | | 0x4 | |
− | | WheelDelta | |
| |- | | |- |
− | | 0x14 | + | | 0x14 || 0x24 || [[#HdlsState]]. Unknown if the last 4-bytes are included in this struct, [[#SetAutoPilotVirtualPadState]]/[[#hiddbgGetAbstractedPadsState]] only uses the first 0x20-bytes. |
− | | 0x4 | |
− | | [[#MouseButtonSet|Buttons]] | |
| |- | | |- |
− | | 0x18 | + | | 0x38 || 0x60 || Unused with [[#SetAutoPilotVirtualPadState]]/[[#GetAbstractedPadsState]]. |
− | | 0x4 | |
− | | [[#MouseAttributeSet|Attributes]] | |
| |} | | |} |
| | | |
− | = KeyboardAutoPilotState = | + | 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. |
− | This is "nn::hid::debug::KeyboardAutoPilotState".
| |
| | | |
| + | Type: |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| + | ! Bits |
| + | ! [[#HdlsDeviceInfo]]::type bits |
| + | ! Description |
| + | ! Notes |
| |- | | |- |
− | ! Offset
| + | | 0 || 0 || || |
− | ! Size
| |
− | ! Description
| |
| |- | | |- |
− | | 0x0 | + | | 1 || 15 || || [[#DeviceType]] |= BIT(1) |
− | | 0x8 | |
− | | [[#KeyboardModifierSet|Modifiers]] | |
| |- | | |- |
− | | 0x8 | + | | 2 || 1 || || |
− | | 0x20 | |
− | | [[#KeyboardKeySet|Keys]] | |
− | |} | |
− | | |
− | = SleepButtonAutoPilotState =
| |
− | This is "nn::hid::debug::SleepButtonAutoPilotState". This is a 0x8-byte struct with 8-byte alignment.
| |
− | | |
− | {| class="wikitable" border="1"
| |
| |- | | |- |
− | ! Offset
| + | | 3 || 2 || || |
− | ! Size
| |
− | ! Description
| |
| |- | | |- |
− | | 0x0 || 0x8 || Buttons (only bit0 is used) | + | | 4 || 1 || || |
− | |} | |
− | | |
− | = PowerInfo =
| |
− | This is "nn::hidtypes::PowerInfo".
| |
− | | |
− | {| class="wikitable" border="1"
| |
| |- | | |- |
− | ! Offset
| + | | 5 || 2 || || |
− | ! Size
| + | |- |
− | ! Description
| + | | 6 || 3 || || |
| + | |- |
| + | | 7 || 11 || || [[#DeviceType]] |= BIT(11) |
| + | |- |
| + | | 8 || 12 || || [[#DeviceType]] |= BIT(12) |
| + | |- |
| + | | 9 || 13 || || [[#DeviceType]] |= BIT(13) |
| + | |- |
| + | | 10 || 14 || || [[#DeviceType]] |= BIT(14) |
| + | |- |
| + | | 11 || 15 || || [[#DeviceType]] |= BIT(11) |
| + | |- |
| + | | 12 || 12 || || [[#DeviceType]] |= BIT(12) |
| + | |- |
| + | | 13 || 13 || || [[#DeviceType]] |= BIT(13) |
| + | |- |
| + | | 14 || 14 || || [[#DeviceType]] |= BIT(14) |
| + | |- |
| + | | 15 || 17 || || |
| |- | | |- |
− | | 0x0 || 0x4 || BatteryLevel | + | | 31 || 21 || || [[#DeviceType]] = BIT(31) |
| |- | | |- |
− | | 0x4 || 0x4 || [[#PowerAttribute]]
| |
| |} | | |} |
| | | |
− | = PowerAttribute = | + | The above "[[#DeviceType]] |=" notes only apply when type2 is 0x2. |
− | This is "nn::hidtypes::PowerAttribute". This is a 32-bit flag. | + | |
| + | = DebugPadAutoPilotState = |
| + | This is "nn::hid::debug::DebugPadAutoPilotState" |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
− | ! Bits
| |
− | ! Description
| |
| |- | | |- |
− | | 0 | + | ! Offset |
− | | IsPowered | + | ! Size |
| + | ! Description |
| + | |- |
| + | | 0x0 |
| + | | 0x4 |
| + | | [[#DebugPadAttributeSet|Attributes]] |
| + | |- |
| + | | 0x4 |
| + | | 0x4 |
| + | | [[#DebugPadButtonSet|Buttons]] |
| + | |- |
| + | | 0x8 |
| + | | 0x8 |
| + | | [[#AnalogStickState|AnalogStickL]] |
| |- | | |- |
− | | 1 | + | | 0x10 |
− | | IsCharging | + | | 0x8 |
| + | | [[#AnalogStickState|AnalogStickR]] |
| |} | | |} |
| | | |
− | = HdlsAttribute = | + | = MouseAutoPilotState = |
− | This is "nn::hidtypes::HdlsAttribute". This is a 32-bit flag. | + | This is "nn::hid::debug::MouseAutoPilotState". |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
− | ! Bits
| |
− | ! Description
| |
| |- | | |- |
− | | 0
| + | ! Offset |
− | | HasVirtualSixAxisSensorAcceleration
| + | ! Size |
| + | ! Description |
| |- | | |- |
− | | 1 | + | | 0x0 |
− | | HasVirtualSixAxisSensorAngle | + | | 0x4 |
− | |} | + | | X |
− | | |
− | = HdlsHandle =
| |
− | This is "nn::hid::debug::HdlsHandle". This is a 0x8-byte struct with 8-byte alignment.
| |
− | | |
− | = HdlsSessionId =
| |
− | This is "nn::hid::debug::detail::HdlsSessionId". This is a 0x8-byte struct with 8-byte alignment.
| |
− | | |
− | = HdlsNpadAssignment =
| |
− | This is a 0x208-byte struct.
| |
− | | |
− | {| class="wikitable" border="1"
| |
| |- | | |- |
− | ! Offset || Size || Description
| + | | 0x4 |
| + | | 0x4 |
| + | | Y |
| + | |- |
| + | | 0x8 |
| + | | 0x4 |
| + | | DeltaX |
| |- | | |- |
− | | 0x0 || 0x4 || s32 Total entries | + | | 0xC |
| + | | 0x4 |
| + | | DeltaY |
| + | |- |
| + | | 0x10 |
| + | | 0x4 |
| + | | WheelDelta |
| |- | | |- |
− | | 0x4 || 0x4 || Padding | + | | 0x14 |
| + | | 0x4 |
| + | | [[#MouseButtonSet|Buttons]] |
| |- | | |- |
− | | 0x8 || 0x200(0x20*0x10) || Array of [[#HdlsNpadAssignmentEntry]]. | + | | 0x18 |
| + | | 0x4 |
| + | | [[#MouseAttributeSet|Attributes]] |
| |} | | |} |
| | | |
− | = HdlsNpadAssignmentEntry = | + | = KeyboardAutoPilotState = |
− | This is a 0x20-byte struct. | + | This is "nn::hid::debug::KeyboardAutoPilotState". |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
− | ! Offset || Size || Description | + | ! Offset |
| + | ! Size |
| + | ! Description |
| |- | | |- |
− | | 0x0 || 0x8 || [[#HdlsHandle]] | + | | 0x0 |
| + | | 0x8 |
| + | | [[#KeyboardModifierSet|Modifiers]] |
| |- | | |- |
− | | 0x8 || 0x4 || ? | + | | 0x8 |
− | |-
| + | | 0x20 |
− | | 0xC || 0x4 || ?
| + | | [[#KeyboardKeySet|Keys]] |
− | |- | |
− | | 0x10 || 0x8 || ? | |
− | |-
| |
− | | 0x18 || 0x1 || ?
| |
− | |-
| |
− | | 0x19 || 0x7 || Padding
| |
| |} | | |} |
| | | |
− | = HdlsStateList = | + | = SleepButtonAutoPilotState = |
− | This is a 0x408-byte struct. | + | This is "nn::hid::debug::SleepButtonAutoPilotState". This is a 0x8-byte struct with 8-byte alignment. |
− | | |
− | [9.0.0+] This is a 0x488-byte struct.
| |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
− | ! Offset || Size || Description | + | ! Offset |
| + | ! Size |
| + | ! Description |
| |- | | |- |
− | | 0x0 || 0x4 || s32 Total entries | + | | 0x0 || 0x8 || Buttons (only bit0 is used) |
− | |-
| + | |} |
− | | 0x4 || 0x4 || Padding
| |
− | |-
| |
− | | 0x8 || <[[#HdlsStateListEntry]] size>*0x10 || Array of [[#HdlsStateListEntry]]. | |
− | |} | |
| | | |
− | This contains a list of all controllers, including non-virtual controllers.
| + | = PowerInfo = |
− | | + | This is "nn::hidtypes::PowerInfo". |
− | = HdlsStateListEntry = | |
− | This is a 0x40-byte struct. | |
− | | |
− | [9.0.0+] This is a 0x48-byte struct.
| |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
− | ! Offset || Size || Description | + | ! Offset |
| + | ! Size |
| + | ! Description |
| |- | | |- |
− | | 0x0 || 0x8 || [[#HdlsHandle]] | + | | 0x0 || 0x4 || BatteryLevel |
| |- | | |- |
− | | 0x8 || [[#HdlsDeviceInfo]] size || [[#HdlsDeviceInfo]]. With [[#ApplyHdlsStateList]] this is only used when creating new devices. | + | | 0x4 || 0x4 || [[#PowerAttribute]] |
− | |-
| |
− | | 0x8 + [[#HdlsDeviceInfo]] size, with 8-byte alignment || 0x24 || [[#HdlsState]]
| |
− | |-
| |
− | | <Immediately following the above> || 0x4 || Padding
| |
| |} | | |} |
| | | |
− | = HdlsDeviceInfo = | + | = PowerAttribute = |
− | This is "nn::hid::debug::HdlsDeviceInfo". This is a 0x10-byte struct. | + | This is "nn::hidtypes::PowerAttribute". This is a 32-bit flag. |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| + | ! Bits |
| + | ! Description |
| |- | | |- |
− | ! Offset || Size || Description
| + | | 0 |
| + | | IsPowered |
| |- | | |- |
− | | 0x0 || 0x4 || [[#DeviceTypeInternal]] | + | | 1 |
− | |-
| + | | IsCharging |
− | | 0x4 || 0x4 || RGBA Single Body Color
| |
− | |-
| |
− | | 0x8 || 0x4 || RGBA Single Buttons Color
| |
− | |- | |
− | | 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.
| + | = HdlsAttribute = |
| + | This is "nn::hidtypes::HdlsAttribute". This is a 32-bit flag. |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| + | ! Bits |
| + | ! Description |
| |- | | |- |
− | ! Offset || Size || Description
| + | | 0 |
| + | | HasVirtualSixAxisSensorAcceleration |
| |- | | |- |
− | | 0x0 || 0x1 || [[#DeviceTypeInternal]] | + | | 1 |
− | |-
| + | | HasVirtualSixAxisSensorAngle |
− | | 0x1 || 0x1 || [[#NpadInterfaceType]]. Similar to the field from the old struct.
| + | |} |
| + | |
| + | = HdlsHandle = |
| + | This is "nn::hid::debug::HdlsHandle". This is a 0x8-byte struct with 8-byte alignment. |
| + | |
| + | = HdlsSessionId = |
| + | This is "nn::hid::debug::detail::HdlsSessionId". This is a 0x8-byte struct with 8-byte alignment. |
| + | |
| + | = HdlsNpadAssignment = |
| + | This is a 0x208-byte struct. |
| + | |
| + | {| class="wikitable" border="1" |
| |- | | |- |
− | | 0x2 || 0x2 || Padding | + | ! Offset || Size || Description |
| |- | | |- |
− | | 0x4 || 0x4 || RGBA Single Body Color | + | | 0x0 || 0x4 || s32 Total entries |
| |- | | |- |
− | | 0x8 || 0x4 || RGBA Single Buttons Color | + | | 0x4 || 0x4 || Padding |
| |- | | |- |
− | | 0xC || 0x4 || RGBA Left Grip Color | + | | 0x8 || 0x200(0x20*0x10) || Array of [[#HdlsNpadAssignmentEntry]]. |
− | |-
| |
− | | 0x10 || 0x4 || RGBA Right Grip Color
| |
| |} | | |} |
| | | |
− | = HdlsState = | + | = HdlsNpadAssignmentEntry = |
− | This is "nn::hid::debug::HdlsState". This is a 0x24-byte struct.
| + | This is a 0x20-byte struct. |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 8,421: |
Line 8,408: |
| ! Offset || Size || Description | | ! Offset || Size || Description |
| |- | | |- |
− | | 0x0 || 0x1 || IsPowered for the main PowerInfo. | + | | 0x0 || 0x8 || [[#HdlsHandle]] |
| |- | | |- |
− | | 0x1 || 0x1 || ORRed with IsPowered to set the value of the first byte for the controller [[#NpadSystemProperties]]. | + | | 0x8 || 0x4 || ? |
| |- | | |- |
− | | 0x2 || 0x6 || Unknown | + | | 0xC || 0x4 || ? |
| |- | | |- |
− | | 0x8 || 0x4 || BatteryLevel for the main PowerInfo. | + | | 0x10 || 0x8 || ? |
| |- | | |- |
− | | 0xC || 0x4 || [[#NpadButton|Buttons]]. Bit18 = HOME and bit19 = Capture. | + | | 0x18 || 0x1 || ? |
| |- | | |- |
− | | 0x10 || 0x10(4*2*2) || Joystick data. | + | | 0x19 || 0x7 || Padding |
− | |-
| |
− | | 0x20 || 0x1 || Indicator. Unused for input. Set with output from [[#DumpHdlsStates]] (zero in some cases).
| |
− | |-
| |
− | | 0x21 || 0x3 || Padding
| |
| |} | | |} |
| | | |
− | [9.0.0+] (0x28-bytes): | + | = HdlsStateList = |
| + | This is a 0x408-byte struct. |
| + | |
| + | [9.0.0+] This is a 0x488-byte struct. |
| + | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
| ! Offset || Size || Description | | ! Offset || Size || Description |
| |- | | |- |
− | | 0x0 || 0x8 || [[#PowerInfo]] | + | | 0x0 || 0x4 || s32 Total entries |
| |- | | |- |
− | | 0x8 || 0x8 || [[#NpadButton|Buttons]], masked with 0xfffffffff00fffff. See above table regarding HOME/Capture buttons. | + | | 0x4 || 0x4 || Padding |
| |- | | |- |
− | | 0x10 || 0x10(4*2*2) || Joystick data. | + | | 0x8 || <[[#HdlsStateListEntry]] size>*0x10 || Array of [[#HdlsStateListEntry]]. |
− | |-
| |
− | | 0x20 || 0x1 || Indicator. Unused for input. Set with output from [[#DumpHdlsStates]] (zero in some cases).
| |
− | |-
| |
− | | 0x21 || 0x7 || Padding
| |
| |} | | |} |
| | | |
− | [12.0.0+] (0x40-bytes): | + | This contains a list of all controllers, including non-virtual controllers. |
| + | |
| + | = HdlsStateListEntry = |
| + | This is a 0x40-byte struct. |
| + | |
| + | [9.0.0+] This is a 0x48-byte struct. |
| + | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
| ! Offset || Size || Description | | ! Offset || Size || Description |
| |- | | |- |
− | | 0x0 || 0x8 || [[#PowerInfo]] | + | | 0x0 || 0x8 || [[#HdlsHandle]] |
| |- | | |- |
− | | 0x8 || 0x8 || [[#NpadButton|Buttons]], masked with 0xfffffffff00fffff. See above table regarding HOME/Capture buttons. | + | | 0x8 || [[#HdlsDeviceInfo]] size || [[#HdlsDeviceInfo]]. With [[#ApplyHdlsStateList]] this is only used when creating new devices. |
| |- | | |- |
− | | 0x10 || 0x10(4*2*2) || Joystick data. | + | | 0x8 + [[#HdlsDeviceInfo]] size, with 8-byte alignment || 0x24 || [[#HdlsState]] |
| |- | | |- |
− | | 0x20 || 0xC || VirtualSixAxisSensorAcceleration | + | | <Immediately following the above> || 0x4 || Padding |
| + | |} |
| + | |
| + | = HdlsDeviceInfo = |
| + | This is "nn::hid::debug::HdlsDeviceInfo". This is a 0x10-byte struct. |
| + | |
| + | {| class="wikitable" border="1" |
| |- | | |- |
− | | 0x2C || 0xC || VirtualSixAxisSensorAngle | + | ! Offset || Size || Description |
| |- | | |- |
− | | 0x38 || 0x4 || [[#HdlsAttribute]] | + | | 0x0 || 0x4 || [[#DeviceTypeInternal]] |
| |- | | |- |
− | | 0x3C || 0x1 || Indicator. Unused for input. | + | | 0x4 || 0x4 || RGBA Single Body Color |
| |- | | |- |
− | | 0x3D || 0x3 || Padding | + | | 0x8 || 0x4 || RGBA Single Buttons Color |
| + | |- |
| + | | 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 |
| |} | | |} |
| | | |
− | = DebugRegisteredDevice =
| + | [9.0.0+] This is a 0x14-byte struct. |
− | This is "nn::hid::debug::RegisteredDevice". This is a 0x58-byte struct with 2-byte alignment.
| |
− | | |
− | = RegisteredDevice =
| |
− | This is "nn::hid::system::RegisteredDevice". This is a 0x68-byte struct with 4-byte alignment.
| |
− | | |
− | = NotificationLedPattern =
| |
− | This is "nn::hid::system::NotificationLedPattern". This is a 0x48-byte struct.
| |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
− | ! Offset | + | ! Offset || Size || Description |
− | ! Size
| + | |- |
− | ! Description
| + | | 0x0 || 0x1 || [[#DeviceTypeInternal]] |
| |- | | |- |
− | | 0x0 | + | | 0x1 || 0x1 || [[#NpadInterfaceType]]. Similar to the field from the old struct. |
− | | 0x1 | |
− | | TimeUnit | |
| |- | | |- |
− | | 0x1 | + | | 0x2 || 0x2 || Padding |
− | | 0x1 | |
− | | FrameCount | |
| |- | | |- |
− | | 0x2 | + | | 0x4 || 0x4 || RGBA Single Body Color |
− | | 0x1 | |
− | | CycleCount | |
| |- | | |- |
− | | 0x3 | + | | 0x8 || 0x4 || RGBA Single Buttons Color |
− | | 0x1 | |
− | | InitialBrightness | |
| |- | | |- |
− | | 0x4 | + | | 0xC || 0x4 || RGBA Left Grip Color |
− | | 0x4 * 15 | |
− | | [[#Frame|Frames]] | |
| |- | | |- |
− | | 0x40 | + | | 0x10 || 0x4 || RGBA Right Grip Color |
− | | 0x1 | |
− | | FinalBrightness | |
− | |- | |
− | | 0x41 | |
− | | 0x1
| |
− | | TimeTowardsFinalBrightness
| |
− | |-
| |
− | | 0x42
| |
− | | 0x6
| |
− | | Reserved
| |
| |} | | |} |
| | | |
− | == Frame == | + | = HdlsState = |
| + | This is "nn::hid::debug::HdlsState". This is a 0x24-byte struct. |
| + | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
− | ! Offset | + | ! Offset || Size || Description |
− | ! Size
| + | |- |
− | ! Description
| + | | 0x0 || 0x1 || IsPowered for the main PowerInfo. |
| + | |- |
| + | | 0x1 || 0x1 || ORRed with IsPowered to set the value of the first byte for the controller [[#NpadSystemProperties]]. |
| + | |- |
| + | | 0x2 || 0x6 || Unknown |
| + | |- |
| + | | 0x8 || 0x4 || BatteryLevel for the main PowerInfo. |
| |- | | |- |
− | | 0x0 | + | | 0xC || 0x4 || [[#NpadButton|Buttons]]. Bit18 = HOME and bit19 = Capture. |
− | | 0x1 | |
− | | Brightness | |
| |- | | |- |
− | | 0x1 | + | | 0x10 || 0x10(4*2*2) || Joystick data. |
− | | 0x1 | |
− | | TimeTowards | |
| |- | | |- |
− | | 0x2 | + | | 0x20 || 0x1 || Indicator. Unused for input. Set with output from [[#DumpHdlsStates]] (zero in some cases). |
− | | 0x1 | |
− | | TimeToHold | |
| |- | | |- |
− | | 0x3 | + | | 0x21 || 0x3 || Padding |
− | | 0x1 | |
− | | Reserved | |
| |} | | |} |
| | | |
− | = SystemButtonConfigEmbedded =
| + | [9.0.0+] (0x28-bytes): |
− | This is "nn::hid::system::ButtonConfigEmbedded". This is a 0x2C8-byte struct.
| + | {| class="wikitable" border="1" |
− | | |
− | = SystemButtonConfigFull =
| |
− | This is "nn::hid::system::ButtonConfigFull". This is a 0x2C8-byte struct.
| |
− | | |
− | = SystemButtonConfigLeft =
| |
− | This is "nn::hid::system::ButtonConfigLeft". This is a 0x1C8-byte struct.
| |
− | | |
− | = SystemButtonConfigRight =
| |
− | This is "nn::hid::system::ButtonConfigRight". This is a 0x1A0-byte struct.
| |
− | | |
− | = ButtonConfigEmbedded =
| |
− | This is "nn::hidconfig::ButtonConfigEmbedded". This is a 0x54-byte struct.
| |
− | | |
− | {| class="wikitable" border="1" | |
| |- | | |- |
| ! Offset || Size || Description | | ! Offset || Size || Description |
| |- | | |- |
− | | 0x0 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonLeft]] | + | | 0x0 || 0x8 || [[#PowerInfo]] |
| |- | | |- |
− | | 0x4 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonUp]] | + | | 0x8 || 0x8 || [[#NpadButton|Buttons]], masked with 0xfffffffff00fffff. See above table regarding HOME/Capture buttons. |
| |- | | |- |
− | | 0x8 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonRight]] | + | | 0x10 || 0x10(4*2*2) || Joystick data. |
| |- | | |- |
− | | 0xC || 0x4 || [[#DigitalButtonAssignment|HardwareButtonDown]] | + | | 0x20 || 0x1 || Indicator. Unused for input. Set with output from [[#DumpHdlsStates]] (zero in some cases). |
| |- | | |- |
− | | 0x10 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonA]] | + | | 0x21 || 0x7 || Padding |
| + | |} |
| + | |
| + | [12.0.0+] (0x40-bytes): |
| + | {| class="wikitable" border="1" |
| |- | | |- |
− | | 0x14 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonB]] | + | ! Offset || Size || Description |
| |- | | |- |
− | | 0x18 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonX]] | + | | 0x0 || 0x8 || [[#PowerInfo]] |
| |- | | |- |
− | | 0x1C || 0x4 || [[#DigitalButtonAssignment|HardwareButtonY]] | + | | 0x8 || 0x8 || [[#NpadButton|Buttons]], masked with 0xfffffffff00fffff. See above table regarding HOME/Capture buttons. |
| |- | | |- |
− | | 0x20 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonStickL]] | + | | 0x10 || 0x10(4*2*2) || Joystick data. |
| |- | | |- |
− | | 0x24 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonStickR]] | + | | 0x20 || 0xC || VirtualSixAxisSensorAcceleration |
| |- | | |- |
− | | 0x28 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonL]] | + | | 0x2C || 0xC || VirtualSixAxisSensorAngle |
| |- | | |- |
− | | 0x2C || 0x4 || [[#DigitalButtonAssignment|HardwareButtonR]] | + | | 0x38 || 0x4 || [[#HdlsAttribute]] |
| |- | | |- |
− | | 0x30 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonZL]] | + | | 0x3C || 0x1 || Indicator. Unused for input. |
| |- | | |- |
− | | 0x34 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonZR]] | + | | 0x3D || 0x3 || Padding |
− | |-
| |
− | | 0x38 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonSelect]]
| |
− | |-
| |
− | | 0x3C || 0x4 || [[#DigitalButtonAssignment|HardwareButtonStart]]
| |
− | |-
| |
− | | 0x40 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonCapture]]
| |
− | |-
| |
− | | 0x44 || 0x8 || [[#AnalogStickAssignment|HardwareStickL]]
| |
− | |-
| |
− | | 0x4C || 0x8 || [[#AnalogStickAssignment|HardwareStickR]]
| |
| |} | | |} |
| | | |
− | == DigitalButtonAssignment == | + | = DebugRegisteredDevice = |
− | This is "nn::hidconfig::DigitalButtonAssignment". | + | This is "nn::hid::debug::RegisteredDevice". This is a 0x58-byte struct with 2-byte alignment. |
| + | |
| + | = RegisteredDevice = |
| + | This is "nn::hid::system::RegisteredDevice". This is a 0x68-byte struct with 4-byte alignment. |
| + | |
| + | = NotificationLedPattern = |
| + | This is "nn::hid::system::NotificationLedPattern". This is a 0x48-byte struct. |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
− | ! Value
| |
− | ! Description
| |
| |- | | |- |
− | | 0 || A
| + | ! Offset |
| + | ! Size |
| + | ! Description |
| |- | | |- |
− | | 1 || B | + | | 0x0 |
| + | | 0x1 |
| + | | TimeUnit |
| |- | | |- |
− | | 2 || X | + | | 0x1 |
| + | | 0x1 |
| + | | FrameCount |
| |- | | |- |
− | | 3 || Y | + | | 0x2 |
| + | | 0x1 |
| + | | CycleCount |
| |- | | |- |
− | | 4 || StickL | + | | 0x3 |
| + | | 0x1 |
| + | | InitialBrightness |
| |- | | |- |
− | | 5 || StickR | + | | 0x4 |
| + | | 0x4 * 15 |
| + | | [[#Frame|Frames]] |
| |- | | |- |
− | | 6 || L | + | | 0x40 |
| + | | 0x1 |
| + | | FinalBrightness |
| |- | | |- |
− | | 7 || R | + | | 0x41 |
| + | | 0x1 |
| + | | TimeTowardsFinalBrightness |
| |- | | |- |
− | | 8 || ZL | + | | 0x42 |
| + | | 0x6 |
| + | | Reserved |
| + | |} |
| + | |
| + | == Frame == |
| + | {| class="wikitable" border="1" |
| |- | | |- |
− | | 9 || ZR
| + | ! Offset |
| + | ! Size |
| + | ! Description |
| |- | | |- |
− | | 10 || Select | + | | 0x0 |
| + | | 0x1 |
| + | | Brightness |
| |- | | |- |
− | | 11 || Start | + | | 0x1 |
| + | | 0x1 |
| + | | TimeTowards |
| |- | | |- |
− | | 12 || Left | + | | 0x2 |
| + | | 0x1 |
| + | | TimeToHold |
| |- | | |- |
− | | 13 || Up | + | | 0x3 |
− | |- | + | | 0x1 |
− | | 14 || Right | + | | Reserved |
− | |-
| + | |} |
− | | 15 || Down
| + | |
− | |-
| + | = SystemButtonConfigEmbedded = |
− | | 16 || LeftSL
| + | This is "nn::hid::system::ButtonConfigEmbedded". This is a 0x2C8-byte struct. |
− | |-
| + | |
− | | 17 || LeftSR
| + | = SystemButtonConfigFull = |
− | |-
| + | This is "nn::hid::system::ButtonConfigFull". This is a 0x2C8-byte struct. |
− | | 18 || RightSL
| + | |
− | |-
| + | = SystemButtonConfigLeft = |
− | | 19 || RightSR
| + | This is "nn::hid::system::ButtonConfigLeft". This is a 0x1C8-byte struct. |
− | |-
| + | |
− | | 20 || HomeButton
| + | = SystemButtonConfigRight = |
− | |-
| + | This is "nn::hid::system::ButtonConfigRight". This is a 0x1A0-byte struct. |
− | | 21 || CaptureButton
| |
− | |-
| |
− | | 22 || Invalid
| |
− | |}
| |
| | | |
− | == AnalogStickAssignment == | + | = ButtonConfigEmbedded = |
− | This is "nn::hidconfig::AnalogStickAssignment". | + | This is "nn::hidconfig::ButtonConfigEmbedded". This is a 0x54-byte struct. |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 8,667: |
Line 8,649: |
| ! Offset || Size || Description | | ! Offset || Size || Description |
| |- | | |- |
− | | 0x0 || 0x4 || [[#AnalogStickRotation]] | + | | 0x0 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonLeft]] |
| + | |- |
| + | | 0x4 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonUp]] |
| |- | | |- |
− | | 0x4 || 0x1 || IsPairedStickAssigned | + | | 0x8 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonRight]] |
| |- | | |- |
− | | 0x5 || 0x3 || Reserved | + | | 0xC || 0x4 || [[#DigitalButtonAssignment|HardwareButtonDown]] |
− | |} | |
− | | |
− | == AnalogStickRotation ==
| |
− | This is "nn::hidconfig::AnalogStickRotation".
| |
− | | |
− | {| class="wikitable" border="1"
| |
− | ! Value
| |
− | ! Description
| |
| |- | | |- |
− | | 0 || None | + | | 0x10 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonA]] |
| |- | | |- |
− | | 1 || Clockwise90 | + | | 0x14 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonB]] |
| |- | | |- |
− | | 2 || Anticlockwise90 | + | | 0x18 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonX]] |
− | |} | |
− | | |
− | = ButtonConfigFull =
| |
− | This is "nn::hidconfig::ButtonConfigFull". This is a 0x54-byte struct.
| |
− | | |
− | This is identical to [[#ButtonConfigEmbedded]].
| |
− | | |
− | = ButtonConfigLeft =
| |
− | This is "nn::hidconfig::ButtonConfigLeft". This is a 0x34-byte struct.
| |
− | | |
− | {| class="wikitable" border="1"
| |
| |- | | |- |
− | ! Offset || Size || Description
| + | | 0x1C || 0x4 || [[#DigitalButtonAssignment|HardwareButtonY]] |
| |- | | |- |
− | | 0x0 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonLeft]] | + | | 0x20 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonStickL]] |
| |- | | |- |
− | | 0x4 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonUp]] | + | | 0x24 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonStickR]] |
| |- | | |- |
− | | 0x8 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonRight]] | + | | 0x28 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonL]] |
| |- | | |- |
− | | 0xC || 0x4 || [[#DigitalButtonAssignment|HardwareButtonDown]] | + | | 0x2C || 0x4 || [[#DigitalButtonAssignment|HardwareButtonR]] |
| |- | | |- |
− | | 0x10 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonStickL]] | + | | 0x30 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonZL]] |
| |- | | |- |
− | | 0x14 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonL]] | + | | 0x34 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonZR]] |
| |- | | |- |
− | | 0x18 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonZL]] | + | | 0x38 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonSelect]] |
| |- | | |- |
− | | 0x1C || 0x4 || [[#DigitalButtonAssignment|HardwareButtonSelect]] | + | | 0x3C || 0x4 || [[#DigitalButtonAssignment|HardwareButtonStart]] |
| |- | | |- |
− | | 0x20 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonLeftSL]] | + | | 0x40 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonCapture]] |
| |- | | |- |
− | | 0x24 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonLeftSR]] | + | | 0x44 || 0x8 || [[#AnalogStickAssignment|HardwareStickL]] |
| |- | | |- |
− | | 0x28 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonCapture]] | + | | 0x4C || 0x8 || [[#AnalogStickAssignment|HardwareStickR]] |
− | |-
| |
− | | 0x2C || 0x8 || [[#AnalogStickAssignment|HardwareStickL]]
| |
| |} | | |} |
| | | |
− | = ButtonConfigRight = | + | == DigitalButtonAssignment == |
− | This is "nn::hidconfig::ButtonConfigRight". This is a 0x30-byte struct. | + | This is "nn::hidconfig::DigitalButtonAssignment". |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| + | ! Value |
| + | ! Description |
| |- | | |- |
− | ! Offset || Size || Description
| + | | 0 || A |
| |- | | |- |
− | | 0x0 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonA]] | + | | 1 || B |
| + | |- |
| + | | 2 || X |
| + | |- |
| + | | 3 || Y |
| |- | | |- |
− | | 0x4 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonB]] | + | | 4 || StickL |
| |- | | |- |
− | | 0x8 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonX]] | + | | 5 || StickR |
| |- | | |- |
− | | 0xC || 0x4 || [[#DigitalButtonAssignment|HardwareButtonY]] | + | | 6 || L |
| |- | | |- |
− | | 0x10 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonStickR]] | + | | 7 || R |
| |- | | |- |
− | | 0x14 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonR]] | + | | 8 || ZL |
| |- | | |- |
− | | 0x18 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonZR]] | + | | 9 || ZR |
| |- | | |- |
− | | 0x1C || 0x4 || [[#DigitalButtonAssignment|HardwareButtonStart]] | + | | 10 || Select |
| |- | | |- |
− | | 0x20 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonRightSL]] | + | | 11 || Start |
| |- | | |- |
− | | 0x24 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonRightSR]] | + | | 12 || Left |
| |- | | |- |
− | | 0x28 || 0x8 || [[#AnalogStickAssignment|HardwareStickR]] | + | | 13 || Up |
− | |}
| |
− | | |
− | = StorageName =
| |
− | This is "nn::hidconfig::StorageName". This is a 0x81-byte struct.
| |
− | | |
− | This is an UTF-8 NUL-terminated name string.
| |
− | | |
− | = InterfaceType =
| |
− | This is "nn::hidtypes::InterfaceType".
| |
− | | |
− | {| class="wikitable" border="1"
| |
− | ! Value
| |
− | ! Description
| |
| |- | | |- |
− | | 1 || Bluetooth | + | | 14 || Right |
| |- | | |- |
− | | 2 || Rail | + | | 15 || Down |
| |- | | |- |
− | | 3 || USB | + | | 16 || LeftSL |
| |- | | |- |
− | | 4 || Embedded | + | | 17 || LeftSR |
− | |}
| |
− | | |
− | = DigitalButton =
| |
− | This is "nn::hidtypes::DigitalButton". This is a 64-bit flag.
| |
− | | |
− | {| class="wikitable" border="1"
| |
| |- | | |- |
− | ! Bit
| + | | 18 || RightSL |
− | ! Description
| |
| |- | | |- |
− | | 0 | + | | 19 || RightSR |
− | | A | |
| |- | | |- |
− | | 1 | + | | 20 || HomeButton |
− | | B | |
| |- | | |- |
− | | 2 | + | | 21 || CaptureButton |
− | | X | |
| |- | | |- |
− | | 3 | + | | 22 || Invalid |
− | | Y | + | |} |
| + | |
| + | == AnalogStickAssignment == |
| + | This is "nn::hidconfig::AnalogStickAssignment". |
| + | |
| + | {| class="wikitable" border="1" |
| |- | | |- |
− | | 4 | + | ! Offset || Size || Description |
− | | StickL | |
| |- | | |- |
− | | 5 | + | | 0x0 || 0x4 || [[#AnalogStickRotation]] |
− | | StickR | |
| |- | | |- |
− | | 6 | + | | 0x4 || 0x1 || IsPairedStickAssigned |
− | | L | |
| |- | | |- |
− | | 7 | + | | 0x5 || 0x3 || Reserved |
− | | R | + | |} |
| + | |
| + | == AnalogStickRotation == |
| + | This is "nn::hidconfig::AnalogStickRotation". |
| + | |
| + | {| class="wikitable" border="1" |
| + | ! Value |
| + | ! Description |
| |- | | |- |
− | | 8 | + | | 0 || None |
− | | ZL | |
| |- | | |- |
− | | 9 | + | | 1 || Clockwise90 |
− | | ZR | |
| |- | | |- |
− | | 10 | + | | 2 || Anticlockwise90 |
− | | Start | + | |} |
| + | |
| + | = ButtonConfigFull = |
| + | This is "nn::hidconfig::ButtonConfigFull". This is a 0x54-byte struct. |
| + | |
| + | This is identical to [[#ButtonConfigEmbedded]]. |
| + | |
| + | = ButtonConfigLeft = |
| + | This is "nn::hidconfig::ButtonConfigLeft". This is a 0x34-byte struct. |
| + | |
| + | {| class="wikitable" border="1" |
| |- | | |- |
− | | 11 | + | ! Offset || Size || Description |
− | | Select | |
| |- | | |- |
− | | 12 | + | | 0x0 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonLeft]] |
− | | Left | |
| |- | | |- |
− | | 13 | + | | 0x4 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonUp]] |
− | | Up | |
| |- | | |- |
− | | 14 | + | | 0x8 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonRight]] |
− | | Right | |
| |- | | |- |
− | | 15 | + | | 0xC || 0x4 || [[#DigitalButtonAssignment|HardwareButtonDown]] |
− | | Down | |
| |- | | |- |
− | | 16 | + | | 0x10 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonStickL]] |
− | | SL | |
| |- | | |- |
− | | 17 | + | | 0x14 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonL]] |
− | | SR | |
| |- | | |- |
− | | 18 | + | | 0x18 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonZL]] |
− | | Home | |
| |- | | |- |
− | | 19 | + | | 0x1C || 0x4 || [[#DigitalButtonAssignment|HardwareButtonSelect]] |
− | | Shot | |
| |- | | |- |
− | | 20 | + | | 0x20 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonLeftSL]] |
− | | StickLLeft | |
| |- | | |- |
− | | 21 | + | | 0x24 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonLeftSR]] |
− | | StickLUp | |
| |- | | |- |
− | | 22 | + | | 0x28 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonCapture]] |
− | | StickLRight | |
| |- | | |- |
− | | 23 | + | | 0x2C || 0x8 || [[#AnalogStickAssignment|HardwareStickL]] |
− | | StickLDown | + | |} |
| + | |
| + | = ButtonConfigRight = |
| + | This is "nn::hidconfig::ButtonConfigRight". This is a 0x30-byte struct. |
| + | |
| + | {| class="wikitable" border="1" |
| |- | | |- |
− | | 24 | + | ! Offset || Size || Description |
− | | StickRLeft | |
| |- | | |- |
− | | 25 | + | | 0x0 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonA]] |
− | | StickRUp | |
| |- | | |- |
− | | 26 | + | | 0x4 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonB]] |
− | | StickRRight | |
| |- | | |- |
− | | 27 | + | | 0x8 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonX]] |
− | | StickRDown | |
| |- | | |- |
− | | 28 | + | | 0xC || 0x4 || [[#DigitalButtonAssignment|HardwareButtonY]] |
− | | Palma | |
| |- | | |- |
− | | 29 | + | | 0x10 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonStickR]] |
− | | HandheldLeftB | |
| |- | | |- |
− | | 30 | + | | 0x14 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonR]] |
− | | Plus | |
| |- | | |- |
− | | 31 | + | | 0x18 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonZR]] |
− | | Minus | |
| |- | | |- |
− | | 32 | + | | 0x1C || 0x4 || [[#DigitalButtonAssignment|HardwareButtonStart]] |
− | | Z | |
| |- | | |- |
− | | 33 | + | | 0x20 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonRightSL]] |
− | | LeftSL | |
| |- | | |- |
− | | 34 | + | | 0x24 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonRightSR]] |
− | | LeftSR | |
| |- | | |- |
− | | 35 | + | | 0x28 || 0x8 || [[#AnalogStickAssignment|HardwareStickR]] |
− | | RightSL | + | |} |
− | |-
| + | |
− | | 36 | + | = StorageName = |
− | | RightSR
| + | This is "nn::hidconfig::StorageName". This is a 0x81-byte struct. |
− | |- | + | |
− | | 37 | + | This is an UTF-8 NUL-terminated name string. |
− | | LeftC | + | |
| + | = InterfaceType = |
| + | This is "nn::hidtypes::InterfaceType". |
| + | |
| + | {| class="wikitable" border="1" |
| + | ! Value |
| + | ! Description |
| + | |- |
| + | | 1 || Bluetooth |
| |- | | |- |
− | | 38 | + | | 2 || Rail |
− | | UpC | |
| |- | | |- |
− | | 39 | + | | 3 || Usb |
− | | RightC | |
| |- | | |- |
− | | 40 | + | | 4 || Embedded |
− | | DownC | |
| |} | | |} |
| | | |
− | = AssignmentStyle = | + | = DigitalButton = |
− | This is "nn::hidtypes::AssignmentStyle". This is a 32-bit flag. | + | This is "nn::hidtypes::DigitalButton". This is a 64-bit flag. |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 8,917: |
Line 8,867: |
| |- | | |- |
| | 0 | | | 0 |
− | | IsExternalAssigned | + | | A |
| |- | | |- |
| | 1 | | | 1 |
− | | IsExternalLeftAssigned | + | | B |
| |- | | |- |
| | 2 | | | 2 |
− | | IsExternalRightAssigned | + | | X |
| |- | | |- |
| | 3 | | | 3 |
− | | IsHandheldAssigned | + | | Y |
| |- | | |- |
| | 4 | | | 4 |
− | | IsHandheldLeftAssigned | + | | StickL |
| |- | | |- |
| | 5 | | | 5 |
− | | IsHandheldRightAssigned | + | | StickR |
− | |}
| |
− | | |
− | = FeatureType =
| |
− | This is "nn::hidtypes::FeatureType". This is a 64-bit flag.
| |
− | | |
− | {| class="wikitable" border="1"
| |
| |- | | |- |
− | ! Bit
| + | | 6 |
− | ! Description
| + | | L |
| |- | | |- |
− | | 0 | + | | 7 |
− | | HasLeftAnalogStick | + | | R |
| |- | | |- |
− | | 1 | + | | 8 |
− | | HasRightAnalogStick | + | | ZL |
| |- | | |- |
− | | 2
| + | | 9 |
− | | HasLeftSixAxisSensor
| + | | ZR |
− | |-
| |
− | | 3
| |
− | | HasRightSixAxisSensor
| |
− | |-
| |
− | | 4
| |
− | | HasExternalSixAxisSensor
| |
− | |-
| |
− | | 5
| |
− | | HasLeftLraVibrationDevice
| |
− | |-
| |
− | | 6
| |
− | | HasRightLraVibrationDevice
| |
− | |-
| |
− | | 7
| |
− | | HasGcVibrationDevice
| |
− | |-
| |
− | | 8
| |
− | | HasErmVibrationDevice
| |
− | |-
| |
− | | 9 | |
− | | HasLeftJoyRailBus | |
| |- | | |- |
| | 10 | | | 10 |
− | | HasRightJoyRailBus | + | | Start |
| |- | | |- |
| | 11 | | | 11 |
− | | HasInternalBus | + | | Select |
| |- | | |- |
| | 12 | | | 12 |
− | | HasPalmaIc | + | | Left |
| |- | | |- |
| | 13 | | | 13 |
− | | HasNfc | + | | Up |
| |- | | |- |
| | 14 | | | 14 |
− | | HasIrSensor | + | | Right |
| |- | | |- |
| | 15 | | | 15 |
− | | IsAnalogStickCalibrationSupported | + | | Down |
| |- | | |- |
| | 16 | | | 16 |
− | | IsSixAxisSensorUserCalibrationSupported | + | | SL |
| |- | | |- |
| | 17 | | | 17 |
− | | HasLeftRightBattery | + | | SR |
| |- | | |- |
| | 18 | | | 18 |
− | | HasStandardBattery | + | | Home |
| |- | | |- |
| | 19 | | | 19 |
− | | HasBattery | + | | Shot |
| |- | | |- |
| | 20 | | | 20 |
− | | HasMainColor | + | | StickLLeft |
| |- | | |- |
| | 21 | | | 21 |
− | | HasSubColor | + | | StickLUp |
| |- | | |- |
| | 22 | | | 22 |
− | | HasIdentificationCode | + | | StickLRight |
| |- | | |- |
| | 23 | | | 23 |
− | | HasBluetoothAddress | + | | StickLDown |
| |- | | |- |
| | 24 | | | 24 |
− | | HasMcu | + | | StickRLeft |
| |- | | |- |
| | 25 | | | 25 |
− | | HasNotificationLed | + | | StickRUp |
| |- | | |- |
| | 26 | | | 26 |
− | | HasDirectionalButtons | + | | StickRRight |
| |- | | |- |
| | 27 | | | 27 |
− | | HasIndicatorLed | + | | StickRDown |
| |- | | |- |
| | 28 | | | 28 |
− | | IsEmbeddedController | + | | Palma |
| |- | | |- |
| | 29 | | | 29 |
− | | IsFullController | + | | HandheldLeftB |
| |- | | |- |
| | 30 | | | 30 |
− | | IsLeftController | + | | Plus |
| |- | | |- |
| | 31 | | | 31 |
− | | IsRightController | + | | Minus |
| |- | | |- |
| | 32 | | | 32 |
− | | IsUsbHidDevice | + | | Z |
| |- | | |- |
| | 33 | | | 33 |
− | | IsKuinaDevice | + | | LeftSL |
| |- | | |- |
| | 34 | | | 34 |
− | | IsDirectUsbToBtSwitchingDevice | + | | LeftSR |
| |- | | |- |
| | 35 | | | 35 |
− | | NormalizeAnalogStickWithInnerCross | + | | RightSL |
− | |}
| |
− | | |
− | = Color =
| |
− | This is "nn::hidtypes::Color".
| |
− | | |
− | {| class="wikitable" border="1"
| |
| |- | | |- |
− | ! Offset || Size || Description
| + | | 36 |
| + | | RightSR |
| |- | | |- |
− | | 0x0 || 0x4 || BodyColor | + | | 37 |
| + | | LeftC |
| |- | | |- |
− | | 0x4 || 0x4 || ButtonColor | + | | 38 |
| + | | UpC |
| + | |- |
| + | | 39 |
| + | | RightC |
| + | |- |
| + | | 40 |
| + | | DownC |
| + | |} |
| + | |
| + | = AssignmentStyle = |
| + | This is "nn::hidtypes::AssignmentStyle". This is a 32-bit flag. |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Bit |
| + | ! Description |
| + | |- |
| + | | 0 |
| + | | IsExternalAssigned |
| + | |- |
| + | | 1 |
| + | | IsExternalLeftAssigned |
| + | |- |
| + | | 2 |
| + | | IsExternalRightAssigned |
| + | |- |
| + | | 3 |
| + | | IsHandheldAssigned |
| + | |- |
| + | | 4 |
| + | | IsHandheldLeftAssigned |
| + | |- |
| + | | 5 |
| + | | IsHandheldRightAssigned |
| + | |} |
| + | |
| + | = FeatureType = |
| + | This is "nn::hidtypes::FeatureType". This is a 64-bit flag. |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Bit |
| + | ! Description |
| + | |- |
| + | | 0 |
| + | | HasLeftAnalogStick |
| + | |- |
| + | | 1 |
| + | | HasRightAnalogStick |
| + | |- |
| + | | 2 |
| + | | HasLeftSixAxisSensor |
| + | |- |
| + | | 3 |
| + | | HasRightSixAxisSensor |
| + | |- |
| + | | 4 |
| + | | HasExternalSixAxisSensor |
| + | |- |
| + | | 5 |
| + | | HasLeftLraVibrationDevice |
| + | |- |
| + | | 6 |
| + | | HasRightLraVibrationDevice |
| + | |- |
| + | | 7 |
| + | | HasGcVibrationDevice |
| + | |- |
| + | | 8 |
| + | | HasErmVibrationDevice |
| + | |- |
| + | | 9 |
| + | | HasLeftJoyRailBus |
| + | |- |
| + | | 10 |
| + | | HasRightJoyRailBus |
| + | |- |
| + | | 11 |
| + | | HasInternalBus |
| + | |- |
| + | | 12 |
| + | | HasPalmaIc |
| + | |- |
| + | | 13 |
| + | | HasNfc |
| + | |- |
| + | | 14 |
| + | | HasIrSensor |
| + | |- |
| + | | 15 |
| + | | IsAnalogStickCalibrationSupported |
| + | |- |
| + | | 16 |
| + | | IsSixAxisSensorUserCalibrationSupported |
| + | |- |
| + | | 17 |
| + | | HasLeftRightBattery |
| + | |- |
| + | | 18 |
| + | | HasStandardBattery |
| + | |- |
| + | | 19 |
| + | | HasBattery |
| + | |- |
| + | | 20 |
| + | | HasMainColor |
| + | |- |
| + | | 21 |
| + | | HasSubColor |
| + | |- |
| + | | 22 |
| + | | HasIdentificationCode |
| + | |- |
| + | | 23 |
| + | | HasBluetoothAddress |
| + | |- |
| + | | 24 |
| + | | HasMcu |
| + | |- |
| + | | 25 |
| + | | HasNotificationLed |
| + | |- |
| + | | 26 |
| + | | HasDirectionalButtons |
| + | |- |
| + | | 27 |
| + | | HasIndicatorLed |
| + | |- |
| + | | 28 |
| + | | IsEmbeddedController |
| + | |- |
| + | | 29 |
| + | | IsFullController |
| + | |- |
| + | | 30 |
| + | | IsLeftController |
| + | |- |
| + | | 31 |
| + | | IsRightController |
| + | |- |
| + | | 32 |
| + | | IsUsbHidDevice |
| + | |- |
| + | | 33 |
| + | | IsKuinaDevice |
| + | |- |
| + | | 34 |
| + | | IsDirectUsbToBtSwitchingDevice |
| + | |- |
| + | | 35 |
| + | | NormalizeAnalogStickWithInnerCross |
| + | |} |
| + | |
| + | = Color = |
| + | This is "nn::hidtypes::Color". |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Offset || Size || Description |
| + | |- |
| + | | 0x0 || 0x4 || BodyColor |
| + | |- |
| + | | 0x4 || 0x4 || ButtonColor |
| |- | | |- |
| | 0x8 || 0x4 || LeftGripColor | | | 0x8 || 0x4 || LeftGripColor |
− | |- | + | |- |
− | | 0xC || 0x4 || RightGripColor | + | | 0xC || 0x4 || RightGripColor |
| + | |} |
| + | |
| + | = DeviceDescriptorType = |
| + | This is "nn::hidtypes::DeviceDescriptorType". |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Offset || Size || Description |
| + | |- |
| + | | 0x0 || 0x1 || [[#DeviceTypeInternal|DeviceType]] |
| + | |- |
| + | | 0x1 || 0x7 || Reserved |
| + | |- |
| + | | 0x8 || 0x8 || [[#FeatureType|FeatureType]] |
| + | |- |
| + | | 0x10 || 0x8 || [[#DigitalButton|DigitalButton]] |
| + | |- |
| + | | 0x18 || 0x4 || [[#AssignmentStyle|AssignmentStyle]] |
| + | |- |
| + | | 0x1C || 0x10 || [[#Color|DeviceColor]] |
| + | |- |
| + | | 0x2C || 0x4 || Reserved |
| + | |} |
| + | |
| + | = DeviceDescriptionList = |
| + | This is "nn::hidtypes::detail::DeviceDescriptionList". This is a list of [[#DeviceDescriptorType|DeviceDescriptorType]] objects maintained by the hid-sysmodule. |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! [[#DeviceTypeInternal|DeviceType]] || [[#FeatureType|FeatureType]] || [[#DigitalButton|DigitalButton]] || [[#AssignmentStyle|AssignmentStyle]] || [[#Color|DeviceColor]] |
| + | |- |
| + | | 1 || 0x18BDBE44A || 0x18F0406AF || 0x24 || 0xFF828282, 0xFF0F0F0F, 0x00000000, 0x00000000 |
| + | |- |
| + | | 2 || 0x14CDB8225 || 0x6F8F950 || 0x12 || 0xFF828282, 0xFF0F0F0F, 0x00000000, 0x00000000 |
| + | |- |
| + | | 3 || 0x72BBDA073 || 0xFFCFFFF || 0x1 || 0xFF2D2D2D, 0xFFE6E6E6, 0xFF464646, 0xFF464646 |
| + | |- |
| + | | 4 || 0x108000025 || 0x6F8F950 || 0x2 || 0xFF828282, 0xFF0F0F0F, 0x00000000, 0x00000000 |
| + | |- |
| + | | 5 || 0x10800004A || 0x18F0406AF || 0x4 || 0xFF828282, 0xFF0F0F0F, 0x00000000, 0x00000000 |
| + | |- |
| + | | 6 || 0x108800013 || 0xFFCFFFF || 0x1 || 0xFF2D2D2D, 0xFFE6E6E6, 0xFF464646, 0xFF464646 |
| + | |- |
| + | | 7 || 0x108CA0000 || 0x2008FCC3 || 0x11 || 0xFF322891, 0xFFFFFFFF, 0x00000000, 0x00000000 |
| + | |- |
| + | | 8 || 0x108CA0800 || 0x4F0C3 || 0x21 || 0xFF322891, 0xFFFFFFFF, 0x00000000, 0x00000000 |
| + | |- |
| + | | 9 || 0x108CA0000 || 0x2008FCC3 || 0x11 || 0xFFD9D7D7, 0xFFFFFFFF, 0x00000000, 0x00000000 |
| + | |- |
| + | | 10 || 0x108CA0000 || 0x4FCC3 || 0x21 || 0xFFD9D7D7, 0xFFFFFFFF, 0x00000000, 0x00000000 |
| + | |- |
| + | | 11 || 0x700CC0000 || 0xFFCF || 0x0 || 0xFF2D2D2D, 0xFFE6E6E6, 0xFF464646, 0xFF464646 |
| + | |- |
| + | | 12 || 0x841011 || 0x10000010 || 0x1 || 0xFF2D2D2D, 0xFFE6E6E6, 0xFF464646, 0xFF464646 |
| + | |- |
| + | | 13 || 0x83 || 0xFF0F6CF || 0x1 || 0xFF2D2D2D, 0xFFE6E6E6, 0xFF464646, 0xFF464646 |
| + | |- |
| + | | 14 || 0x1 || 0xF8F950 || 0x10 || 0xFF828282, 0xFF0F0F0F, 0x00000000, 0x00000000 |
| + | |- |
| + | | 15 || 0x3 || 0xFFCFFFF || 0x1 || 0xFF2D2D2D, 0xFFE6E6E6, 0xFF464646, 0xFF464646 |
| + | |- |
| + | | 16 || 0x3 || 0xFFCFFFF || 0x1 || 0xFF2D2D2D, 0xFFE6E6E6, 0xFF464646, 0xFF464646 |
| + | |- |
| + | | 17 || 0x1001A013 || 0xFFCFFFF || 0x8 || 0xFF2D2D2D, 0xFFE6E6E6, 0xFF464646, 0xFF464646 |
| + | |- |
| + | | 18 || 0x2 || 0xF0406AF || 0x20 || 0xFF828282, 0xFF0F0F0F, 0x00000000, 0x00000000 |
| + | |- |
| + | | 19 || 0x1088DA073 || 0xFFCF3FF || 0x1 || 0xFF2D2D2D, 0xFFE6E6E6, 0xFF464646, 0xFF464646 |
| + | |- |
| + | | 20 || 0x108CA0025 || 0x6F8F150 || 0x12 || 0xFF828282, 0xFF0F0F0F, 0x00000000, 0x00000000 |
| + | |- |
| + | | 21 || 0x108CA604A || 0x18F0402AF || 0x24 || 0xFF828282, 0xFF0F0F0F, 0x00000000, 0x00000000 |
| + | |- |
| + | | [12.0.0+] 22 || 0xF00CC8101 || 0x1E1FCF6C3 || 0x1 || 0xFF2D2D2D, 0xFFE6E6E6, 0xFF464646, 0xFF464646 |
| + | |- |
| + | | [12.0.0+] 23 || 0x100000000 || 0x0 || 0x0 || 0x00000000, 0x00000000, 0x00000000, 0x00000000 |
| + | |- |
| + | | [13.0.0+] 28 || 0x700CC0000 || 0xCF6CF || 0x1 || 0xFF2D2D2D, 0xFFE6E6E6, 0xFF464646, 0xFF464646 |
| + | |- |
| + | | [14.0.0+] 30 || 0x108800003 || 0xFFCFFFF || 0x1 || 0xFF2D2D2D, 0xFFE6E6E6, 0xFF464646, 0xFF464646 |
| + | |} |
| + | |
| + | = UnmaskFeatureDescriptorType = |
| + | This is "nn::hid::server::UnmaskFeatureDescriptorType". |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Offset || Size || Description |
| + | |- |
| + | | 0x0 || 0x1 || [[#DeviceTypeInternal|DeviceType]] |
| + | |- |
| + | | 0x1 || 0x1 || [[#InterfaceType|InterfaceType]] |
| + | |- |
| + | | 0x2 || 0x6 || Reserved |
| + | |- |
| + | | 0x8 || 0x8 || [[#FeatureType|FeatureType]] |
| |} | | |} |
| | | |
− | = DeviceDescriptorType = | + | = UnmaskFeatureDescriptorList = |
− | This is "nn::hidtypes::DeviceDescriptorType". | + | This is "nn::hid::server::UnmaskFeatureDescriptorList". This is a list of [[#UnmaskFeatureDescriptorType|UnmaskFeatureDescriptorType]] objects maintained by the hid-sysmodule. |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
− | ! Offset || Size || Description | + | ! [[#DeviceTypeInternal|DeviceType]] || [[#InterfaceType|InterfaceType]] || [[#FeatureType|FeatureType]] |
| |- | | |- |
− | | 0x0 || 0x1 || [[#DeviceTypeInternal|DeviceType]] | + | | 3 || 3 || 0x2000 |
| |- | | |- |
− | | 0x1 || 0x7 || Reserved | + | | 2 || 2 || 0x200 |
| |- | | |- |
− | | 0x8 || 0x8 || [[#FeatureType|FeatureType]] | + | | 1 || 2 || 0x400 |
| |- | | |- |
− | | 0x10 || 0x8 || [[#DigitalButton|DigitalButton]] | + | | 19 || 3 || 0x2000 |
− | |-
| |
− | | 0x18 || 0x4 || [[#AssignmentStyle|AssignmentStyle]]
| |
| |- | | |- |
− | | 0x1C || 0x10 || [[#Color|DeviceColor]] | + | | 2 || 3 || 0x200 |
| |- | | |- |
− | | 0x2C || 0x4 || Reserved | + | | 1 || 3 || 0x6400 |
− | |}
| |
− | | |
− | = UnmaskFeatureDescriptorType =
| |
− | This is "nn::hid::server::UnmaskFeatureDescriptorType".
| |
− | | |
− | {| class="wikitable" border="1"
| |
− | |-
| |
− | ! Offset || Size || Description
| |
− | |-
| |
− | | 0x0 || 0x1 || [[#DeviceTypeInternal|DeviceType]]
| |
− | |-
| |
− | | 0x1 || 0x1 || [[#InterfaceType|InterfaceType]]
| |
− | |-
| |
− | | 0x2 || 0x6 || Reserved
| |
− | |-
| |
− | | 0x8 || 0x8 || [[#FeatureType|FeatureType]]
| |
| |} | | |} |
| | | |