HID services: Difference between revisions
No edit summary |
|||
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 || | | 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: | ||
|} | |} | ||
= | = VidPidDefinition = | ||
This is "nn:: | This is "nn::hidtypes::VidPidDefinition". | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 7,784: | Line 7,784: | ||
|- | |- | ||
| 0x0 | | 0x0 | ||
| | | 0x2 | ||
| | | Vid | ||
|- | |- | ||
| | | 0x2 | ||
| | | 0x2 | ||
| | | PidRangeMax | ||
|- | |- | ||
| 0x4 | |||
| 0x2 | | 0x2 | ||
| PidRangeMin | |||
|- | |||
| 0x6 | | 0x6 | ||
| 0x1 | |||
| [[#DeviceTypeInternal|DeviceType]] | |||
|- | |||
| 0x7 | |||
| 0x1 | |||
| Reserved | | Reserved | ||
|} | |} | ||
= | = VidPidDefinitions = | ||
This is "nn:: | This is "nn::hidtypes::detail::VidPidDefinitions". This is a list of [[#VidPidDefinition|VidPidDefinition]] objects maintained by the hid-sysmodule. | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! | ! Vid || PidRangeMax || PidRangeMin || [[#DeviceTypeInternal|DeviceType]] | ||
|- | |- | ||
| | | 0x57E || 0x2006 || 0x2006 || 2 | ||
|- | |- | ||
| | | 0x57E || 0x2007 || 0x2007 || 1 | ||
|- | |- | ||
| | | 0x57E || 0x2009 || 0x2009 || 3 | ||
| | |||
|- | |- | ||
| 0x57E || 0x200F || 0x200F || 24 | |||
|- | |- | ||
| | | 0x57E || 0x200E || 0x200E || 23 | ||
|- | |- | ||
| | | 0x57E || 0x2008 || 0x2008 || 25 | ||
|- | |- | ||
| | | 0x57E || 0x2017 || 0x2017 || 11 | ||
|- | |- | ||
| | | 0x57E || 0x2018 || 0x2018 || 26 | ||
| | |||
|- | |- | ||
| 0x57E || 0x2019 || 0x2019 || 22 | |||
|- | |- | ||
| | | 0x57E || 0x201A || 0x201A || 27 | ||
|- | |- | ||
| | | 0x57E || 0x201E || 0x201E || 28 | ||
|- | |- | ||
| | | 0x57E || 0x201F || 0x201F || 29 | ||
|- | |- | ||
| | | 0x57E || 0x337 || 0x337 || 13 | ||
| | |||
|- | |- | ||
| 0xF0D || 0x92 || 0x92 || 15 | |||
|- | |||
| 0xF0D || 0xAB || 0xAA || 15 | |||
|- | |||
| 0xF0D || 0xC1 || 0xC1 || 15 | |||
|- | |- | ||
| | | 0xF0D || 0xFF || 0xF0 || 15 | ||
|- | |- | ||
| | | 0xF0D || 0x22F || 0x200 || 15 | ||
| | |||
|- | |- | ||
| | | 0xE6F || 0x193 || 0x180 || 15 | ||
|- | |- | ||
| | | 0x20D6 || 0xA719 || 0xA710 || 15 | ||
|- | |- | ||
| | | 0x20D6 || 0xA729 || 0xA720 || 15 | ||
|- | |- | ||
| | | 0x33DD || 0xB || 0x1 || 15 | ||
|} | |} | ||
= | = NpadPowerInfo = | ||
This is "nn::hid:: | This is "nn::hid::system::NpadPowerInfo". | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! Offset | |||
! Size | |||
! Description | |||
|- | |- | ||
| | | 0x0 | ||
| 0x1 | |||
| IsPowered | |||
|- | |||
| 0x1 | |||
| 0x1 | |||
| IsCharging | |||
|- | |- | ||
| | | 0x2 | ||
| 0x6 | |||
| Reserved | |||
|- | |||
| 0x8 | |||
| 0x6 | |||
| [[#BatteryLevel|BatteryLevel]] | |||
|} | |} | ||
= | = BatteryLevel = | ||
This is "nn::hid:: | 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 | ||
|- | |- | ||
| 0x0 | | 0x0 || 0x4 || TypeValue | ||
| 0x4 | |||
| | |||
|- | |- | ||
| | | 0x0 || 0x1 || | ||
| | |||
| | |||
|- | |- | ||
| | | 0x1 || 0x1 || | ||
| | |||
| | |||
| | |||
| | |||
|} | |} | ||
= | = SixAxisSensorHandle = | ||
This is "nn::hid:: | This is "nn::hid::SixAxisSensorHandle". This is a 4-byte struct with 4-byte alignment. | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
| | ! Offset || Size || Description | ||
|- | |||
| 0x0 || 0x4 || TypeValue | |||
|- | |- | ||
| | | 0x0 || 0x1 || NpadStyleIndex | ||
|- | |- | ||
| | | 0x1 || 0x1 || [[#NpadIdType|PlayerNumber]] | ||
|} | |- | ||
| 0x2 || 0x1 || DeviceIdx | |||
|} | |||
= | = VibrationDeviceHandle = | ||
This is "nn::hid:: | This is "nn::hid::VibrationDeviceHandle". This is a 4-byte struct with 4-byte alignment. | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
| | ! Offset || Size || Description | ||
|- | |||
| 0x0 || 0x4 || TypeValue | |||
|- | |||
| 0x0 || 0x1 || NpadStyleIndex | |||
|- | |||
| 0x1 || 0x1 || [[#NpadIdType|PlayerNumber]] | |||
|- | |- | ||
| | | 0x2 || 0x1 || DeviceIdx | ||
|} | |} | ||
= | = VibrationDeviceInfo = | ||
This is "nn::hid:: | This is "nn::hid::VibrationDeviceInfo" / "nn::hid::VibrationDeviceInfoForIpc". This is a 0x8-byte struct. | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
| | ! Offset || Size || Description | ||
|- | |- | ||
| | | 0x0 || 0x4 || [[#VibrationDeviceType|DeviceType]] | ||
|- | |- | ||
| | | 0x4 || 0x4 || [[#VibrationDevicePosition|Position]] | ||
|} | |} | ||
= | = VibrationDeviceType = | ||
This is "nn::hid:: | This is "nn::hid::VibrationDeviceType". | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Value | |||
! Description | |||
|- | |- | ||
| 0 || Unknown | |||
|- | |- | ||
| | | 1 || LinearResonantActuator | ||
|- | |- | ||
| | | 2 || GcErm | ||
|- | |- | ||
| | | 3 || Erm | ||
|} | |} | ||
= | = VibrationDevicePosition = | ||
This is "nn::hid:: | This is "nn::hid::VibrationDevicePosition". | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 7,984: | Line 7,968: | ||
! Description | ! Description | ||
|- | |- | ||
| 0 || | | 0 || None | ||
|- | |- | ||
| 1 || | | 1 || Left | ||
|- | |- | ||
| 2 || | | 2 || Right | ||
|} | |||
= VibrationValue = | |||
This is "nn::hid::VibrationValue". This is a 0x10-byte struct, which contains 4 float values. | |||
{| class="wikitable" border="1" | |||
|- | |- | ||
! Offset | |||
! Size | |||
! Description | |||
|- | |- | ||
| | | 0x0 | ||
| 0x4 | |||
| AmplitudeLow | |||
|- | |- | ||
| | | 0x4 | ||
| 0x4 | |||
| FrequencyLow | |||
|- | |- | ||
| | | 0x8 | ||
| 0x4 | |||
| AmplitudeHigh | |||
|- | |- | ||
| | | 0xC | ||
| | | 0x4 | ||
| | | FrequencyHigh | ||
|} | |||
= VibrationGcErmCommand = | |||
This is "nn::hid::VibrationGcErmCommand". | |||
{| class="wikitable" border="1" | |||
! Value | |||
! Name | |||
! Description | |||
|- | |- | ||
| | | 0 || Stop || Stops the vibration with a decay phase. | ||
|- | |- | ||
| | | 1 || Start || Starts the vibration. | ||
|- | |- | ||
| | | 2 || StopHard || Stops the vibration immediately, with no decay phase. | ||
| | |||
| | |||
|} | |} | ||
= | = AccelerometerPlayMode = | ||
This is "nn::hid:: | 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 || | | 0 || Loose | ||
|- | |- | ||
| 1 || | | 1 || Tight | ||
|} | |||
= GyroscopeZeroDriftMode = | |||
This is "nn::hid::GyroscopeZeroDriftMode". | |||
{| class="wikitable" border="1" | |||
! Value | |||
! Description | |||
|- | |- | ||
| | | 0 || Loose | ||
|- | |- | ||
| | | 1 || Standard | ||
|- | |- | ||
| | | 2 || Tight | ||
|} | |} | ||
= | = PalmaConnectionHandle = | ||
This is "nn::hid:: | This is "nn::hid::PalmaConnectionHandle". This is a 0x8-byte struct with 8-byte alignment. | ||
= | = PalmaOperationInfo = | ||
This is "nn::hid:: | 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 || | | 0x0 || 0x4 || [[#PalmaOperationType]] | ||
|- | |- | ||
| | | 0x4 || 0x4 || Result | ||
|- | |- | ||
| | | 0x8 || 0x140 || Buffer for [[#GetPalmaOperationInfo]]. | ||
|} | |} | ||
= | = PalmaOperationType = | ||
This is "nn::hid:: | This is "nn::hid::PalmaOperationType". | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 8,063: | Line 8,066: | ||
! Description | ! Description | ||
|- | |- | ||
| 0 || | | 0 || PlayActivity | ||
|- | |- | ||
| 1 || | | 1 || SetFrModeType | ||
|- | |- | ||
| 2 || | | 2 || ReadStep | ||
|- | |- | ||
| 3 || EnableStep | |||
|- | |- | ||
| | | 4 || ResetStep | ||
| | |||
|- | |- | ||
| | | 5 || ReadApplicationSection | ||
| | |||
|- | |- | ||
| | | 6 || WriteApplicationSection | ||
| | |||
|- | |- | ||
| | | 7 || ReadUniqueCode | ||
| | |||
|- | |- | ||
| | | 8 || SetUniqueCodeInvalid | ||
|- | |- | ||
| 9 || WriteActivityEntry | |||
|- | |- | ||
| | | 10 || WriteRgbLedPatternEntry | ||
|- | |- | ||
| | | 11 || WriteWaveEntry | ||
|- | |- | ||
| | | 12 || ReadDataBaseIdentificationVersion | ||
|- | |- | ||
| | | 13 || WriteDataBaseIdentificationVersion | ||
|- | |- | ||
| | | 14 || SuspendFeature | ||
|- | |- | ||
| | | 15 || [5.1.0+] ReadPlayLog | ||
|- | |- | ||
| | | 16 || [5.1.0+] ResetPlayLog | ||
|} | |||
|} | |||
= PalmaFrModeType = | |||
This is "nn::hid::PalmaFrModeType". | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! | ! Value | ||
! Description | ! Description | ||
|- | |- | ||
| 0 || | | 0 || Off | ||
|- | |- | ||
| 1 || | | 1 || B01 | ||
|- | |- | ||
| 2 || | | 2 || B02 | ||
|- | |- | ||
| 3 || | | 3 || B03 | ||
|- | |- | ||
| 4 || | | 4 || Downloaded | ||
|} | |||
= PalmaApplicationSectionAccessBuffer = | |||
| | This is "nn::hid::PalmaApplicationSectionAccessBuffer". This is a 0x100-byte struct. | ||
= PalmaActivityEntry = | |||
This is "nn::hid::PalmaActivityEntry". | |||
{| class="wikitable" border="1" | |||
|- | |- | ||
| | ! Offset || Size || Description | ||
|- | |- | ||
| | | 0x0 || 0x2 || RgbLedPatternIndex. | ||
|- | |- | ||
| | | 0x2 || 0x2 || Padding | ||
|- | |- | ||
| | | 0x4 || 0x4 || [[#PalmaWaveSet|WaveSet]]. | ||
|- | |- | ||
| | | 0x8 || 0x2 || WaveIndex. | ||
|} | |||
= PalmaWaveSet = | |||
This is "nn::hid::PalmaWaveSet". | |||
{| class="wikitable" border="1" | |||
! Value | |||
! Description | |||
|- | |- | ||
| | | 0 || Small | ||
|- | |- | ||
| | | 1 || Medium | ||
|- | |- | ||
| 2 || Large | |||
|} | |} | ||
= PalmaFeature = | |||
This is "nn::hid::PalmaFeature". | |||
= | |||
This is "nn::hid:: | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! | ! Bit | ||
! Description | ! Description | ||
|- | |- | ||
| | | 0 | ||
| | | FrMode | ||
|- | |- | ||
| | | 1 | ||
| | | RumbleFeedback | ||
|- | |- | ||
| | | 2 | ||
| | | Step | ||
| | |- | ||
| 3 | |||
| MuteSwitch | |||
|- | |- | ||
|} | |} | ||
= | = AbstractedPadState = | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! Offset | ! Offset || Size || Description | ||
|- | |- | ||
| 0x0 | | 0x0 || 0x4 || Type, only 1 bit can be set. Converted to [[#HdlsDeviceInfo]]::type internally by [[#SetAutoPilotVirtualPadState]]. | ||
| 0x4 | |||
| | |||
|- | |- | ||
| 0x4 | | 0x4 || 0x1 || Flags. [[#SetAutoPilotVirtualPadState]] only uses bit0: when clear it will skip using the rest of the input and run [[#UnsetAutoPilotVirtualPadState]] internally. | ||
| | |||
| | |||
|- | |- | ||
| | | 0x5 || 0x3 || Padding | ||
| | |||
| | |||
|- | |- | ||
| 0xC | | 0x8 || 0x4 || RGBA Single Body Color | ||
| | |- | ||
| | | 0xC || 0x4 || RGBA Single Buttons Color | ||
|- | |||
| 0x10 || 0x1 || See [[#HiddbgHdlsDeviceInfo]]::[[#NpadInterfaceType]]. | |||
|- | |- | ||
| | | 0x11 || 0x3 || Padding | ||
| | |||
| | |||
|- | |- | ||
| 0x14 | | 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. | ||
Type: | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Bits | |||
! [[#HdlsDeviceInfo]]::type bits | |||
! Description | |||
! Notes | |||
|- | |- | ||
| 0 || 0 || || | |||
|- | |- | ||
| | | 1 || 15 || || [[#DeviceType]] |= BIT(1) | ||
| | |||
| [[# | |||
|- | |- | ||
| | | 2 || 1 || || | ||
| | |||
| | |||
| | |||
|- | |- | ||
| 3 || 2 || || | |||
|- | |- | ||
| | | 4 || 1 || || | ||
| | |||
|- | |- | ||
| 5 || 2 || || | |||
|- | |||
| 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 || || | |||
|- | |- | ||
| | | 31 || 21 || || [[#DeviceType]] = BIT(31) | ||
|- | |- | ||
|} | |} | ||
= | The above "[[#DeviceType]] |=" notes only apply when type2 is 0x2. | ||
This is "nn:: | |||
= DebugPadAutoPilotState = | |||
This is "nn::hid::debug::DebugPadAutoPilotState" | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
| | ! Offset | ||
| | ! Size | ||
! Description | |||
|- | |||
| 0x0 | |||
| 0x4 | |||
| [[#DebugPadAttributeSet|Attributes]] | |||
|- | |||
| 0x4 | |||
| 0x4 | |||
| [[#DebugPadButtonSet|Buttons]] | |||
|- | |||
| 0x8 | |||
| 0x8 | |||
| [[#AnalogStickState|AnalogStickL]] | |||
|- | |- | ||
| | | 0x10 | ||
| | | 0x8 | ||
| [[#AnalogStickState|AnalogStickR]] | |||
|} | |} | ||
= | = MouseAutoPilotState = | ||
This is "nn:: | This is "nn::hid::debug::MouseAutoPilotState". | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! Offset | |||
! Size | |||
! Description | |||
|- | |- | ||
| | | 0x0 | ||
| | | 0x4 | ||
| | | X | ||
|- | |- | ||
| 0x4 | |||
| 0x4 | |||
| Y | |||
|- | |||
| 0x8 | |||
| 0x4 | |||
| DeltaX | |||
|- | |- | ||
| | | 0xC | ||
| 0x4 | |||
| DeltaY | |||
|- | |||
| 0x10 | |||
| 0x4 | |||
| WheelDelta | |||
|- | |- | ||
| | | 0x14 | ||
| 0x4 | |||
| [[#MouseButtonSet|Buttons]] | |||
|- | |- | ||
| | | 0x18 | ||
| 0x4 | |||
| [[#MouseAttributeSet|Attributes]] | |||
|} | |} | ||
= | = KeyboardAutoPilotState = | ||
This is | This is "nn::hid::debug::KeyboardAutoPilotState". | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! Offset | ! Offset | ||
! Size | |||
! Description | |||
|- | |- | ||
| 0x0 | | 0x0 | ||
| 0x8 | |||
| [[#KeyboardModifierSet|Modifiers]] | |||
|- | |- | ||
| 0x8 | | 0x8 | ||
| 0x20 | |||
| [[#KeyboardKeySet|Keys]] | |||
| | |||
| | |||
|} | |} | ||
= | = SleepButtonAutoPilotState = | ||
This is | This is "nn::hid::debug::SleepButtonAutoPilotState". This is a 0x8-byte struct with 8-byte alignment. | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! Offset | ! Offset | ||
! Size | |||
! Description | |||
|- | |- | ||
| 0x0 | | | 0x0 || 0x8 || Buttons (only bit0 is used) | ||
|} | |||
| 0x8 || | |||
|} | |||
= PowerInfo = | |||
This is "nn::hidtypes::PowerInfo". | |||
= | |||
This is | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! Offset | ! Offset | ||
! Size | |||
! Description | |||
|- | |- | ||
| 0x0 || | | 0x0 || 0x4 || BatteryLevel | ||
|- | |- | ||
| | | 0x4 || 0x4 || [[#PowerAttribute]] | ||
|} | |} | ||
= | = PowerAttribute = | ||
This is "nn:: | This is "nn::hidtypes::PowerAttribute". This is a 32-bit flag. | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Bits | |||
! Description | |||
|- | |- | ||
| 0 | |||
| IsPowered | |||
|- | |- | ||
| | | 1 | ||
| IsCharging | |||
| | |||
|} | |} | ||
= HdlsAttribute = | |||
This is "nn::hidtypes::HdlsAttribute". This is a 32-bit flag. | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Bits | |||
! Description | |||
|- | |- | ||
| 0 | |||
| HasVirtualSixAxisSensorAcceleration | |||
|- | |- | ||
| | | 1 | ||
| HasVirtualSixAxisSensorAngle | |||
|} | |||
= 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 | ||
|- | |- | ||
| | | 0x0 || 0x4 || s32 Total entries | ||
|- | |- | ||
| | | 0x4 || 0x4 || Padding | ||
|- | |- | ||
| | | 0x8 || 0x200(0x20*0x10) || Array of [[#HdlsNpadAssignmentEntry]]. | ||
|} | |} | ||
= | = HdlsNpadAssignmentEntry = | ||
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 || | | 0x0 || 0x8 || [[#HdlsHandle]] | ||
|- | |- | ||
| | | 0x8 || 0x4 || ? | ||
|- | |- | ||
| | | 0xC || 0x4 || ? | ||
|- | |- | ||
| | | 0x10 || 0x8 || ? | ||
|- | |- | ||
| | | 0x18 || 0x1 || ? | ||
|- | |- | ||
| | | 0x19 || 0x7 || Padding | ||
|} | |} | ||
[9.0.0+] | = 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 || | | 0x0 || 0x4 || s32 Total entries | ||
|- | |- | ||
| | | 0x4 || 0x4 || Padding | ||
|- | |- | ||
| | | 0x8 || <[[#HdlsStateListEntry]] size>*0x10 || Array of [[#HdlsStateListEntry]]. | ||
|} | |} | ||
[ | 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 || [[# | | 0x0 || 0x8 || [[#HdlsHandle]] | ||
|- | |- | ||
| 0x8 || | | 0x8 || [[#HdlsDeviceInfo]] size || [[#HdlsDeviceInfo]]. With [[#ApplyHdlsStateList]] this is only used when creating new devices. | ||
|- | |- | ||
| | | 0x8 + [[#HdlsDeviceInfo]] size, with 8-byte alignment || 0x24 || [[#HdlsState]] | ||
|- | |- | ||
| | | <Immediately following the above> || 0x4 || Padding | ||
|} | |||
= HdlsDeviceInfo = | |||
This is "nn::hid::debug::HdlsDeviceInfo". This is a 0x10-byte struct. | |||
{| class="wikitable" border="1" | |||
|- | |- | ||
| | ! Offset || Size || Description | ||
|- | |- | ||
| | | 0x0 || 0x4 || [[#DeviceTypeInternal]] | ||
|- | |- | ||
| | | 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. | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! Offset | ! Offset || Size || Description | ||
|- | |||
| 0x0 || 0x1 || [[#DeviceTypeInternal]] | |||
|- | |- | ||
| | | 0x1 || 0x1 || [[#NpadInterfaceType]]. Similar to the field from the old struct. | ||
| 0x1 | |||
| | |||
|- | |- | ||
| | | 0x2 || 0x2 || Padding | ||
| | |||
| | |||
|- | |- | ||
| | | 0x4 || 0x4 || RGBA Single Body Color | ||
| | |||
| | |||
|- | |- | ||
| | | 0x8 || 0x4 || RGBA Single Buttons Color | ||
| | |||
| | |||
|- | |- | ||
| | | 0xC || 0x4 || RGBA Left Grip Color | ||
| 0x4 | |||
| | |||
|- | |- | ||
| | | 0x10 || 0x4 || RGBA Right Grip Color | ||
| | |||
| | |||
| | |||
| | |||
|} | |} | ||
== | = 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 | ||
|- | |||
| 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. | |||
|- | |- | ||
| | | 0xC || 0x4 || [[#NpadButton|Buttons]]. Bit18 = HOME and bit19 = Capture. | ||
| | |||
| | |||
|- | |- | ||
| | | 0x10 || 0x10(4*2*2) || Joystick data. | ||
| | |||
| | |||
|- | |- | ||
| | | 0x20 || 0x1 || Indicator. Unused for input. Set with output from [[#DumpHdlsStates]] (zero in some cases). | ||
| 0x1 | |||
| | |||
|- | |- | ||
| 0x3 | | 0x21 || 0x3 || Padding | ||
| | |||
| | |||
|} | |} | ||
[9.0.0+] (0x28-bytes): | |||
{| class="wikitable" border="1" | |||
{| class="wikitable" border="1" | |||
|- | |- | ||
! Offset || Size || Description | ! Offset || Size || Description | ||
|- | |- | ||
| 0x0 || | | 0x0 || 0x8 || [[#PowerInfo]] | ||
|- | |- | ||
| | | 0x8 || 0x8 || [[#NpadButton|Buttons]], masked with 0xfffffffff00fffff. See above table regarding HOME/Capture buttons. | ||
|- | |- | ||
| | | 0x10 || 0x10(4*2*2) || Joystick data. | ||
|- | |- | ||
| | | 0x20 || 0x1 || Indicator. Unused for input. Set with output from [[#DumpHdlsStates]] (zero in some cases). | ||
|- | |- | ||
| | | 0x21 || 0x7 || Padding | ||
|} | |||
[12.0.0+] (0x40-bytes): | |||
{| class="wikitable" border="1" | |||
|- | |- | ||
| | ! Offset || Size || Description | ||
|- | |- | ||
| | | 0x0 || 0x8 || [[#PowerInfo]] | ||
|- | |- | ||
| | | 0x8 || 0x8 || [[#NpadButton|Buttons]], masked with 0xfffffffff00fffff. See above table regarding HOME/Capture buttons. | ||
|- | |- | ||
| | | 0x10 || 0x10(4*2*2) || Joystick data. | ||
|- | |- | ||
| | | 0x20 || 0xC || VirtualSixAxisSensorAcceleration | ||
|- | |- | ||
| | | 0x2C || 0xC || VirtualSixAxisSensorAngle | ||
|- | |- | ||
| | | 0x38 || 0x4 || [[#HdlsAttribute]] | ||
|- | |- | ||
| | | 0x3C || 0x1 || Indicator. Unused for input. | ||
|- | |- | ||
| | | 0x3D || 0x3 || Padding | ||
|} | |} | ||
== | = DebugRegisteredDevice = | ||
This is "nn:: | 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 | |||
! Size | |||
! Description | |||
|- | |- | ||
| | | 0x0 | ||
| 0x1 | |||
| TimeUnit | |||
|- | |- | ||
| | | 0x1 | ||
| 0x1 | |||
| FrameCount | |||
|- | |- | ||
| | | 0x2 | ||
| 0x1 | |||
| CycleCount | |||
|- | |- | ||
| | | 0x3 | ||
| 0x1 | |||
| InitialBrightness | |||
|- | |- | ||
| | | 0x4 | ||
| 0x4 * 15 | |||
| [[#Frame|Frames]] | |||
|- | |- | ||
| | | 0x40 | ||
| 0x1 | |||
| FinalBrightness | |||
|- | |- | ||
| | | 0x41 | ||
| 0x1 | |||
| TimeTowardsFinalBrightness | |||
|- | |- | ||
| | | 0x42 | ||
| 0x6 | |||
| Reserved | |||
|} | |||
== Frame == | |||
{| class="wikitable" border="1" | |||
|- | |- | ||
! Offset | |||
! Size | |||
! Description | |||
|- | |- | ||
| | | 0x0 | ||
| 0x1 | |||
| Brightness | |||
|- | |- | ||
| | | 0x1 | ||
| 0x1 | |||
| TimeTowards | |||
|- | |- | ||
| | | 0x2 | ||
| 0x1 | |||
| TimeToHold | |||
|- | |- | ||
| | | 0x3 | ||
| | | 0x1 | ||
| | | Reserved | ||
|} | |||
= SystemButtonConfigEmbedded = | |||
This is "nn::hid::system::ButtonConfigEmbedded". This is a 0x2C8-byte struct. | |||
= 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:: | 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 || [[# | | 0x0 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonLeft]] | ||
|- | |||
| 0x4 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonUp]] | |||
|- | |- | ||
| 0x4 || | | 0x8 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonRight]] | ||
|- | |- | ||
| | | 0xC || 0x4 || [[#DigitalButtonAssignment|HardwareButtonDown]] | ||
| | |||
|- | |- | ||
| | | 0x10 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonA]] | ||
|- | |- | ||
| | | 0x14 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonB]] | ||
|- | |- | ||
| | | 0x18 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonX]] | ||
| | |||
|- | |- | ||
| 0x1C || 0x4 || [[#DigitalButtonAssignment|HardwareButtonY]] | |||
|- | |- | ||
| | | 0x20 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonStickL]] | ||
|- | |- | ||
| | | 0x24 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonStickR]] | ||
|- | |- | ||
| | | 0x28 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonL]] | ||
|- | |- | ||
| | | 0x2C || 0x4 || [[#DigitalButtonAssignment|HardwareButtonR]] | ||
|- | |- | ||
| | | 0x30 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonZL]] | ||
|- | |- | ||
| | | 0x34 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonZR]] | ||
|- | |- | ||
| | | 0x38 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonSelect]] | ||
|- | |- | ||
| | | 0x3C || 0x4 || [[#DigitalButtonAssignment|HardwareButtonStart]] | ||
|- | |- | ||
| | | 0x40 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonCapture]] | ||
|- | |- | ||
| | | 0x44 || 0x8 || [[#AnalogStickAssignment|HardwareStickL]] | ||
|- | |- | ||
| | | 0x4C || 0x8 || [[#AnalogStickAssignment|HardwareStickR]] | ||
|} | |} | ||
= | == DigitalButtonAssignment == | ||
This is "nn::hidconfig:: | This is "nn::hidconfig::DigitalButtonAssignment". | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Value | |||
! Description | |||
|- | |- | ||
| 0 || A | |||
|- | |- | ||
| | | 1 || B | ||
|- | |||
| 2 || X | |||
|- | |||
| 3 || Y | |||
|- | |- | ||
| | | 4 || StickL | ||
|- | |- | ||
| | | 5 || StickR | ||
|- | |- | ||
| | | 6 || L | ||
|- | |- | ||
| | | 7 || R | ||
|- | |- | ||
| | | 8 || ZL | ||
|- | |- | ||
| | | 9 || ZR | ||
|- | |- | ||
| | | 10 || Select | ||
|- | |- | ||
| | | 11 || Start | ||
|- | |- | ||
| | | 12 || Left | ||
|- | |- | ||
| | | 13 || Up | ||
|- | |- | ||
| | | 14 || Right | ||
|- | |- | ||
| | | 15 || Down | ||
|- | |- | ||
| | | 16 || LeftSL | ||
|- | |- | ||
| | | 17 || LeftSR | ||
|- | |- | ||
| 18 || RightSL | |||
|- | |- | ||
| | | 19 || RightSR | ||
| | |||
|- | |- | ||
| | | 20 || HomeButton | ||
| | |||
|- | |- | ||
| | | 21 || CaptureButton | ||
| | |||
|- | |- | ||
| | | 22 || Invalid | ||
| | |} | ||
== AnalogStickAssignment == | |||
This is "nn::hidconfig::AnalogStickAssignment". | |||
{| class="wikitable" border="1" | |||
|- | |- | ||
| | ! Offset || Size || Description | ||
| | |||
|- | |- | ||
| | | 0x0 || 0x4 || [[#AnalogStickRotation]] | ||
| | |||
|- | |- | ||
| | | 0x4 || 0x1 || IsPairedStickAssigned | ||
| | |||
|- | |- | ||
| | | 0x5 || 0x3 || Reserved | ||
| | |} | ||
== AnalogStickRotation == | |||
This is "nn::hidconfig::AnalogStickRotation". | |||
{| class="wikitable" border="1" | |||
! Value | |||
! Description | |||
|- | |- | ||
| | | 0 || None | ||
| | |||
|- | |- | ||
| | | 1 || Clockwise90 | ||
| | |||
|- | |- | ||
| | | 2 || Anticlockwise90 | ||
| | |} | ||
= 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 | ||
| | |||
|- | |- | ||
| | | 0x0 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonLeft]] | ||
| | |||
|- | |- | ||
| | | 0x4 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonUp]] | ||
| | |||
|- | |- | ||
| | | 0x8 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonRight]] | ||
| | |||
|- | |- | ||
| | | 0xC || 0x4 || [[#DigitalButtonAssignment|HardwareButtonDown]] | ||
| | |||
|- | |- | ||
| | | 0x10 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonStickL]] | ||
| | |||
|- | |- | ||
| | | 0x14 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonL]] | ||
| | |||
|- | |- | ||
| | | 0x18 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonZL]] | ||
| | |||
|- | |- | ||
| | | 0x1C || 0x4 || [[#DigitalButtonAssignment|HardwareButtonSelect]] | ||
| | |||
|- | |- | ||
| | | 0x20 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonLeftSL]] | ||
| | |||
|- | |- | ||
| | | 0x24 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonLeftSR]] | ||
| | |||
|- | |- | ||
| | | 0x28 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonCapture]] | ||
| | |||
|- | |- | ||
| | | 0x2C || 0x8 || [[#AnalogStickAssignment|HardwareStickL]] | ||
| | |} | ||
= ButtonConfigRight = | |||
This is "nn::hidconfig::ButtonConfigRight". This is a 0x30-byte struct. | |||
{| class="wikitable" border="1" | |||
|- | |- | ||
| | ! Offset || Size || Description | ||
| | |||
|- | |- | ||
| | | 0x0 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonA]] | ||
| | |||
|- | |- | ||
| | | 0x4 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonB]] | ||
| | |||
|- | |- | ||
| | | 0x8 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonX]] | ||
| | |||
|- | |- | ||
| | | 0xC || 0x4 || [[#DigitalButtonAssignment|HardwareButtonY]] | ||
| | |||
|- | |- | ||
| | | 0x10 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonStickR]] | ||
| | |||
|- | |- | ||
| | | 0x14 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonR]] | ||
| | |||
|- | |- | ||
| | | 0x18 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonZR]] | ||
| | |||
|- | |- | ||
| | | 0x1C || 0x4 || [[#DigitalButtonAssignment|HardwareButtonStart]] | ||
| | |||
|- | |- | ||
| | | 0x20 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonRightSL]] | ||
| | |||
|- | |- | ||
| | | 0x24 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonRightSR]] | ||
| | |||
|- | |- | ||
| | | 0x28 || 0x8 || [[#AnalogStickAssignment|HardwareStickR]] | ||
| | |} | ||
| | = 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 | |||
|- | |- | ||
| | | 2 || Rail | ||
| | |||
|- | |- | ||
| | | 3 || Usb | ||
| | |||
|- | |- | ||
| | | 4 || Embedded | ||
| | |||
|} | |} | ||
= | = DigitalButton = | ||
This is "nn::hidtypes:: | 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 | ||
| | | A | ||
|- | |- | ||
| 1 | | 1 | ||
| | | B | ||
|- | |- | ||
| 2 | | 2 | ||
| | | X | ||
|- | |- | ||
| 3 | | 3 | ||
| | | Y | ||
|- | |- | ||
| 4 | | 4 | ||
| | | StickL | ||
|- | |- | ||
| 5 | | 5 | ||
| | | StickR | ||
|- | |- | ||
| 6 | |||
| L | |||
|- | |- | ||
| | | 7 | ||
| | | R | ||
|- | |- | ||
| | | 8 | ||
| | | ZL | ||
|- | |- | ||
| 9 | |||
| ZR | |||
| 9 | |||
| | |||
|- | |- | ||
| 10 | | 10 | ||
| | | Start | ||
|- | |- | ||
| 11 | | 11 | ||
| | | Select | ||
|- | |- | ||
| 12 | | 12 | ||
| | | Left | ||
|- | |- | ||
| 13 | | 13 | ||
| | | Up | ||
|- | |- | ||
| 14 | | 14 | ||
| | | Right | ||
|- | |- | ||
| 15 | | 15 | ||
| | | Down | ||
|- | |- | ||
| 16 | | 16 | ||
| | | SL | ||
|- | |- | ||
| 17 | | 17 | ||
| | | SR | ||
|- | |- | ||
| 18 | | 18 | ||
| | | Home | ||
|- | |- | ||
| 19 | | 19 | ||
| | | Shot | ||
|- | |- | ||
| 20 | | 20 | ||
| | | StickLLeft | ||
|- | |- | ||
| 21 | | 21 | ||
| | | StickLUp | ||
|- | |- | ||
| 22 | | 22 | ||
| | | StickLRight | ||
|- | |- | ||
| 23 | | 23 | ||
| | | StickLDown | ||
|- | |- | ||
| 24 | | 24 | ||
| | | StickRLeft | ||
|- | |- | ||
| 25 | | 25 | ||
| | | StickRUp | ||
|- | |- | ||
| 26 | | 26 | ||
| | | StickRRight | ||
|- | |- | ||
| 27 | | 27 | ||
| | | StickRDown | ||
|- | |- | ||
| 28 | | 28 | ||
| | | Palma | ||
|- | |- | ||
| 29 | | 29 | ||
| | | HandheldLeftB | ||
|- | |- | ||
| 30 | | 30 | ||
| | | Plus | ||
|- | |- | ||
| 31 | | 31 | ||
| | | Minus | ||
|- | |- | ||
| 32 | | 32 | ||
| | | Z | ||
|- | |- | ||
| 33 | | 33 | ||
| | | LeftSL | ||
|- | |- | ||
| 34 | | 34 | ||
| | | LeftSR | ||
|- | |- | ||
| 35 | | 35 | ||
| | | RightSL | ||
|- | |- | ||
| 36 | |||
| RightSR | |||
|- | |- | ||
| | | 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]] | |||
|} | |} | ||
= | = UnmaskFeatureDescriptorList = | ||
This is "nn:: | 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" | ||
|- | |- | ||
! | ! [[#DeviceTypeInternal|DeviceType]] || [[#InterfaceType|InterfaceType]] || [[#FeatureType|FeatureType]] | ||
|- | |- | ||
| | | 3 || 3 || 0x2000 | ||
|- | |- | ||
| | | 2 || 2 || 0x200 | ||
|- | |- | ||
| | | 1 || 2 || 0x400 | ||
|- | |- | ||
| | | 19 || 3 || 0x2000 | ||
|- | |- | ||
| | | 2 || 3 || 0x200 | ||
|- | |- | ||
| | | 1 || 3 || 0x6400 | ||
|} | |} | ||