Changes

4,598 bytes added ,  22:01, 4 September 2023
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 || 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]]
   
|}
 
|}