HID services: Difference between revisions

No edit summary
No edit summary
Line 1: Line 1:
See [[HID_Shared_Memory|here]] for the HID shared-memory.
= hid =
= hid =
This is "nn::hid::IHidServer".
This is "nn::hid::IHidServer".
Line 482: Line 480:


=== GetSharedMemoryHandle ===
=== GetSharedMemoryHandle ===
No input. Returned a [[HID_Shared_Memory|sharedmem]] handle.
No input. Returns a [[#SharedMemoryFormat|sharedmem]] handle.


== IActiveVibrationDeviceList ==
== IActiveVibrationDeviceList ==
Line 2,444: Line 2,442:
This is used by sdknso immediately after mapping [[#GetSharedMemoryHandle|sharedmem]] (before [[#Initialize]]) with hard-coded value 0x2.
This is used by sdknso immediately after mapping [[#GetSharedMemoryHandle|sharedmem]] (before [[#Initialize]]) with hard-coded value 0x2.


= GyroscopeZeroDriftMode =
= SharedMemoryFormat =
This is "nn::hid::GyroscopeZeroDriftMode".
This is "nn::hid::detail::SharedMemoryFormat".
 
The shared memory is a 0x40000 byte read-only segment of memory shared between applications for input. The segment contains structures for most if not all input methods available to applications.


{| class="wikitable" border="1"
{| class="wikitable" border="1"
!  Value
!  Description
|-
|-
| 0 || Loose
! Offset
! Size
! Description
|-
| 0x0
| 0x400
| [[#DebugPadSharedMemoryFormat|DebugPad]]
|-
| 0x400
| 0x3000
| [[#TouchScreenSharedMemoryFormat|TouchScreen]]
|-
| 0x3400
| 0x400
| [[#MouseSharedMemoryFormat|Mouse]]
|-
| 0x3800
| 0x400
| [[#KeyboardSharedMemoryFormat|Keyboard]]
|-
| 0x3C00
| 0x1000
| [[#DigitizerSharedMemoryFormat|Digitizer]] ([1.0.0-9.2.0] [[#BasicXpadSharedMemoryFormat|BasicXpad]])
|-
| 0x4C00
| 0x200
| [[#HomeButtonSharedMemoryFormat|HomeButton]]
|-
| 0x4E00
| 0x200
| [[#SleepButtonSharedMemoryFormat|SleepButton]]
|-
| 0x5000
| 0x200
| [[#CaptureButtonSharedMemoryFormat|CaptureButton]]
|-
| 0x5200
| 0x800 (0x80 * 0x10)
| [[#InputDetectorSharedMemoryFormat|InputDetector]]
|-
| 0x5A00
| 0x4000 (0x400 * 0x10)
| [1.0.0-4.1.0] [[#UniquePadSharedMemoryFormat|UniquePad]]
|-
| 0x9A00
| 0x32000 (0x5000 * 0x0A)
| [[#NpadSharedMemoryFormat|Npad]]
|-
|-
| 1 || Standard
| 0x3BA00
| 0x800
| [[#GestureSharedMemoryFormat|Gesture]]
|-
|-
| 2 || Tight
| 0x3C200
| 0x1C
| [5.0.0+] [[#ConsoleSixAxisSensorSharedMemoryFormat|ConsoleSixAxisSensor]]
|}
|}


= NpadStyleTag =
== DebugPadSharedMemoryFormat ==
This is "nn::hid::NpadStyleTag".
This is "nn::hid::detail::DebugPadSharedMemoryFormat".


{| class="wikitable" border="1"
{| class="wikitable" border="1"
!  Bits
!  Description
!  Notes
|-
|-
| 0
! Offset
| NpadFullKey
! Size
| Pro Controller
! Description
|-
|-
| 1
| 0x0
| NpadHandheld
| 0x2C8
| Joy-Con controller in handheld mode
| [[#DebugPadLifo]]
|}
 
=== DebugPadLifo ===
This is "nn::hid::detail::DebugPadLifo". This is a RingLifo object.
 
{| class="wikitable" border="1"
|-
|-
| 2
! Offset
| NpadJoyDual
! Size
| Joy-Con controller in dual mode
! Description
|-
|-
| 3
| 0x0
| NpadJoyLeft
| 0x8
| Joy-Con left controller in single mode
| RingLifoVptr
|-
| 0x8
| 0x8
| BufferCount
|-
| 0x10
| 0x8
| Tail
|-
| 0x18
| 0x8
| Count
|-
| 0x20
| 0x28 * 17
| Array of [[#DebugPadStateAtomicStorage]]
|}
 
==== DebugPadStateAtomicStorage ====
This is "nn::hid::detail::DebugPadStateAtomicStorage".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| SamplingNumber
|-
| 0x8
| 0x20
| [[#DebugPadState]]
|}
 
===== DebugPadState =====
This is "nn::hid::DebugPadState".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| SamplingNumber
|-
| 0x8
| 0x4
| [[#DebugPadAttributeSet|Attributes]]
|-
| 0xC
| 0x4
| [[#DebugPadButtonSet|Buttons]]
|-
| 0x10
| 0x8
| [[#AnalogStickState|AnalogStickR]]
|-
| 0x18
| 0x8
| [[#AnalogStickState|AnalogStickL]]
|}
 
== TouchScreenSharedMemoryFormat ==
This is "nn::hid::detail::TouchScreenSharedMemoryFormat".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x2C38
| [[#TouchScreenLifo]]
|}
 
=== TouchScreenLifo ===
This is "nn::hid::detail::TouchScreenLifo". This is a RingLifo object.
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| RingLifoVptr
|-
| 0x8
| 0x8
| BufferCount
|-
| 0x10
| 0x8
| Tail
|-
| 0x18
| 0x8
| Count
|-
|-
| 4
| 0x20
| NpadJoyRight
| 0x298 * 17
| Joy-Con right controller in single mode
| Array of [[#TouchScreenStateAtomicStorage]]
|-
|}
| 5
 
| NpadGc
==== TouchScreenStateAtomicStorage ====
| GameCube controller
This is "nn::hid::detail::TouchScreenStateAtomicStorage".
|-
 
| 6
{| class="wikitable" border="1"
| NpadPalma
|-
| Poké Ball Plus controller
! Offset
|-
! Size
| 7
! Description
| NpadLark
|-
| NES/Famicom controller
| 0x0
|-
| 0x8
| 8
| SamplingNumber
| NpadHandheldLark
|-
| NES/Famicom controller in handheld mode
| 0x8
|-
| 0x290
| 9
| [[#TouchScreenState]]
| NpadLucia
|}
| SNES controller
 
|-
===== TouchScreenState =====
| 10-28
This is "nn::hid::detail::TouchScreenState".
| Reserved
 
|
{| class="wikitable" border="1"
|-
|-
| 29
! Offset
| NpadSystemExt
! Size
| Generic external controller
! Description
|-
|-
| 30
| 0x0
| NpadSystem
| 0x8
| Generic controller
| SamplingNumber
|-
|-
| 31
| 0x8
| Reserved
| 0x4
|
| Count
|-
| 0xC
| 0x4
| Reserved
|-
| 0x10
| 0x28 * 16
| [[#TouchState|Touches]]
|}
 
== MouseSharedMemoryFormat ==
This is "nn::hid::detail::MouseSharedMemoryFormat".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x350
| [[#MouseLifo]]
|}
 
=== MouseLifo ===
This is "nn::hid::detail::MouseLifo". This is a RingLifo object.
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| RingLifoVptr
|-
| 0x8
| 0x8
| BufferCount
|-
| 0x10
| 0x8
| Tail
|-
| 0x18
| 0x8
| Count
|-
| 0x20
| 0x30 * 17
| Array of [[#MouseStateAtomicStorage]]
|}
 
==== MouseStateAtomicStorage ====
This is "nn::hid::detail::MouseStateAtomicStorage".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| SamplingNumber
|-
| 0x8
| 0x28
| [[#MouseState]]
|}
 
===== MouseState =====
This is "nn::hid::detail::MouseState".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| SamplingNumber
|-
| 0x8
| 0x4
| X
|-
| 0xC
| 0x4
| Y
|-
| 0x10
| 0x4
| DeltaX
|-
| 0x14
| 0x4
| DeltaY
|-
| 0x18
| 0x4
| WheelDeltaX
|-
| 0x1C
| 0x4
| WheelDeltaY
|-
| 0x20
| 0x4
| [[#MouseButtonSet|Buttons]]
|-
| 0x24
| 0x4
| [[#MouseAttributeSet|Attributes]]
|}
 
== KeyboardSharedMemoryFormat ==
This is "nn::hid::detail::KeyboardSharedMemoryFormat".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x3D8
| [[#KeyboardLifo]]
|}
 
=== KeyboardLifo ===
This is "nn::hid::detail::KeyboardLifo". This is a RingLifo object.
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| RingLifoVptr
|-
| 0x8
| 0x8
| BufferCount
|-
| 0x10
| 0x8
| Tail
|-
| 0x18
| 0x8
| Count
|-
| 0x20
| 0x38 * 17
| Array of [[#KeyboardStateAtomicStorage]]
|}
 
==== KeyboardStateAtomicStorage ====
This is "nn::hid::detail::KeyboardStateAtomicStorage".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| SamplingNumber
|-
| 0x8
| 0x30
| [[#KeyboardState]]
|}
 
===== KeyboardState =====
This is "nn::hid::detail::KeyboardState".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| SamplingNumber
|-
| 0x8
| 0x8
| [[#KeyboardModifierSet|Modifiers]]
|-
| 0x10
| 0x20
| [[#KeyboardKeySet|Keys]]
|}
 
== BasicXpadSharedMemoryFormat ==
This is "nn::hid::detail::BasicXpadSharedMemoryFormat".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x400 * 4
| Array of [[#BasicXpadSharedMemoryEntry]]
|}
 
=== BasicXpadSharedMemoryEntry ===
This is "nn::hid::detail::BasicXpadSharedMemoryEntry".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x2C8
| [[#BasicXpadLifo]]
|}
 
==== BasicXpadLifo ====
This is "nn::hid::detail::BasicXpadLifo". This is a RingLifo object.
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| RingLifoVptr
|-
| 0x8
| 0x8
| BufferCount
|-
| 0x10
| 0x8
| Tail
|-
| 0x18
| 0x8
| Count
|-
| 0x20
| 0x28 * 17
| Array of [[#BasicXpadStateAtomicStorage]]
|}
 
===== BasicXpadStateAtomicStorage =====
This is "nn::hid::detail::BasicXpadStateAtomicStorage".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| SamplingNumber
|-
| 0x8
| 0x20
| [[#BasicXpadState]]
|}
 
====== BasicXpadState ======
This is "nn::hid::detail::BasicXpadState".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| SamplingNumber
|-
| 0x8
| 0x4
| [[#BasicXpadAttributeSet|Attributes]]
|-
| 0xC
| 0x4
| [[#BasicXpadButtonSet|Buttons]]
|-
| 0x10
| 0x8
| [[#AnalogStickState|AnalogStickL]]
|-
| 0x18
| 0x8
| [[#AnalogStickState|AnalogStickR]]
|}
 
== HomeButtonSharedMemoryFormat ==
This is "nn::hid::detail::HomeButtonSharedMemoryFormat".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x1B8
| [[#HomeButtonLifo]]
|}
 
=== HomeButtonLifo ===
This is "nn::hid::detail::HomeButtonLifo". This is a RingLifo object.
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| RingLifoVptr
|-
| 0x8
| 0x8
| BufferCount
|-
| 0x10
| 0x8
| Tail
|-
| 0x18
| 0x8
| Count
|-
| 0x20
| 0x18 * 17
| Array of [[#HomeButtonStateAtomicStorage]]
|}
 
==== HomeButtonStateAtomicStorage ====
This is "nn::hid::detail::HomeButtonStateAtomicStorage".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| SamplingNumber
|-
| 0x8
| 0x10
| [[#HomeButtonState]]
|}
 
===== HomeButtonState =====
This is "nn::hid::system::HomeButtonState".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| SamplingNumber
|-
| 0x8
| 0x8
| [[#HomeButtonSet|Buttons]]
|}
 
== SleepButtonSharedMemoryFormat ==
This is "nn::hid::detail::SleepButtonSharedMemoryFormat".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x1B8
| [[#SleepButtonLifo]]
|}
 
=== SleepButtonLifo ===
This is "nn::hid::detail::SleepButtonLifo". This is a RingLifo object.
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| RingLifoVptr
|-
| 0x8
| 0x8
| BufferCount
|-
| 0x10
| 0x8
| Tail
|-
| 0x18
| 0x8
| Count
|-
| 0x20
| 0x18 * 17
| Array of [[#SleepButtonStateAtomicStorage]]
|}
 
==== SleepButtonStateAtomicStorage ====
This is "nn::hid::detail::SleepButtonStateAtomicStorage".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| SamplingNumber
|-
| 0x8
| 0x10
| [[#SleepButtonState]]
|}
 
===== SleepButtonState =====
This is "nn::hid::system::SleepButtonState".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| SamplingNumber
|-
| 0x8
| 0x8
| [[#SleepButtonSet|Buttons]]
|}
 
== CaptureButtonSharedMemoryFormat ==
This is "nn::hid::detail::CaptureButtonSharedMemoryFormat".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x1B8
| [[#CaptureButtonLifo]]
|}
 
=== CaptureButtonLifo ===
This is "nn::hid::detail::CaptureButtonLifo". This is a RingLifo object.
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| RingLifoVptr
|-
| 0x8
| 0x8
| BufferCount
|-
| 0x10
| 0x8
| Tail
|-
| 0x18
| 0x8
| Count
|-
| 0x20
| 0x18 * 17
| Array of [[#CaptureButtonStateAtomicStorage]]
|}
 
==== CaptureButtonStateAtomicStorage ====
This is "nn::hid::detail::CaptureButtonStateAtomicStorage".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| SamplingNumber
|-
| 0x8
| 0x10
| [[#CaptureButtonState]]
|}
 
===== CaptureButtonState =====
This is "nn::hid::system::CaptureButtonState".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| SamplingNumber
|-
| 0x8
| 0x8
| [[#CaptureButtonSet|Buttons]]
|}
 
== InputDetectorSharedMemoryFormat ==
This is "nn::hid::detail::InputDetectorSharedMemoryFormat".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x80 * 16
| Array of [[#InputDetectorSharedMemoryEntry]]
|}
 
=== InputDetectorSharedMemoryEntry ===
This is "nn::hid::detail::InputDetectorSharedMemoryEntry".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x50
| [[#InputDetectorLifo]]
|}
 
==== InputDetectorLifo ====
This is "nn::hid::detail::InputDetectorLifo". This is a RingLifo object.
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| RingLifoVptr
|-
| 0x8
| 0x8
| BufferCount
|-
| 0x10
| 0x8
| Tail
|-
| 0x18
| 0x8
| Count
|-
| 0x20
| 0x18 * 2
| Array of [[#InputDetectorStateAtomicStorage]]
|}
 
===== InputDetectorStateAtomicStorage =====
This is "nn::hid::detail::InputDetectorStateAtomicStorage".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| SamplingNumber
|-
| 0x8
| 0x10
| [[#InputDetectorState]]
|}
 
====== InputDetectorState ======
This is "nn::hid::detail::InputDetectorState".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| [[#InputSourceState|InputSourceState]]
|-
| 0x8
| 0x8
| SamplingNumber
|}
 
== UniquePadSharedMemoryFormat ==
This is "nn::hid::detail::UniquePadSharedMemoryFormat".
 
[5.0.0+] This section has been removed from [[#SharedMemoryFormat]]. [[#UniquePadSharedMemoryFormat]] is now a specialization of [[#NpadSharedMemoryFormat]].
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x400 * 16
| Array of [[#UniquePadSharedMemoryEntry]]
|}
 
== UniquePadSharedMemoryEntry ==
This is "nn::hid::detail::UniquePadSharedMemoryEntry".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x1E0
| [[#UniquePadLifo]]
|}
 
=== UniquePadLifo ===
This is "nn::hid::detail::UniquePadLifo". This is a RingLifo object.
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x80
| [[#UniquePadConfigLifo]]
|-
| 0x80
| 0x70 * 2
| Array of [[#AnalogStickCalibrationStateImplLifo]]
|-
| 0x160
| 0x40
| [[#SixAxisSensorUserCalibrationStateLifo]]
|-
| 0x1A0
| 0x40
| UniquePadConfigMutex
|}
 
==== UniquePadConfigLifo ====
This is "nn::hid::detail::UniquePadConfigLifo". This is a RingLifo object.
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| RingLifoVptr
|-
| 0x8
| 0x8
| BufferCount
|-
| 0x10
| 0x8
| Tail
|-
| 0x18
| 0x8
| Count
|-
| 0x20
| 0x30 * 2
| Array of [[#UniquePadConfigAtomicStorage]]
|}
 
===== UniquePadConfigAtomicStorage =====
This is "nn::hid::detail::UniquePadConfigAtomicStorage".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| SamplingNumber
|-
| 0x8
| 0x28
| [[#UniquePadConfig]]
|}
 
====== UniquePadConfig ======
This is "nn::hid::detail::UniquePadConfig".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x4
| [[#UniquePadType|Type]]
|-
| 0x4
| 0x4
| [[#UniquePadInterface|Interface]]
|-
| 0x8
| 0x10
| [[#UniquePadSerialNumber|SerialNumber]]
|-
| 0x18
| 0x4
| ControllerNumber
|-
| 0x1C
| 0x1
| IsActive
|-
| 0x1D
| 0x3
| Reserved
|-
| 0x20
| 0x8
| SamplingNumber
|}
 
==== AnalogStickCalibrationStateImplLifo ====
This is "nn::hid::detail::AnalogStickCalibrationStateImplLifo". This is a RingLifo object.
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| RingLifoVptr
|-
| 0x8
| 0x8
| BufferCount
|-
| 0x10
| 0x8
| Tail
|-
| 0x18
| 0x8
| Count
|-
| 0x20
| 0x28 * 2
| Array of [[#AnalogStickCalibrationStateImplAtomicStorage]]
|}
 
===== AnalogStickCalibrationStateImplAtomicStorage =====
This is "nn::hid::detail::AnalogStickCalibrationStateImplAtomicStorage".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| SamplingNumber
|-
| 0x8
| 0x20
| [[#AnalogStickCalibrationStateImpl]]
|}
 
====== AnalogStickCalibrationStateImpl ======
This is "nn::hid::detail::AnalogStickCalibrationStateImpl".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| [[#AnalogStickState|State]]
|-
| 0x8
| 0x8
| [[#AnalogStickCalibrationFlagsSet|Flags]]
|-
| 0x10
| 0x8
| Stage
|-
| 0x18
| 0x8
| SamplingNumber
|}
 
==== SixAxisSensorUserCalibrationStateLifo ====
This is "nn::hid::detail::SixAxisSensorUserCalibrationStateLifo". This is a RingLifo object.
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| RingLifoVptr
|-
| 0x8
| 0x8
| BufferCount
|-
| 0x10
| 0x8
| Tail
|-
| 0x18
| 0x8
| Count
|-
| 0x20
| 0x20 * 2
| Array of [[#SixAxisSensorUserCalibrationStateAtomicStorage]]
|}
 
===== SixAxisSensorUserCalibrationStateAtomicStorage =====
This is "nn::hid::detail::SixAxisSensorUserCalibrationStateAtomicStorage".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| SamplingNumber
|-
| 0x8
| 0x18
| [[#SixAxisSensorUserCalibrationState]]
|}
 
====== SixAxisSensorUserCalibrationState ======
This is "nn::hid::detail::UniquePadConfig".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x4
| [[#SixAxisSensorUserCalibrationFlagsSet|Flags]]
|-
| 0x4
| 0x4
| Reserved
|-
| 0x8
| 0x8
| Stage
|-
| 0x10
| 0x8
| SamplingNumber
|}
 
== NpadSharedMemoryFormat ==
This is "nn::hid::detail::NpadSharedMemoryFormat".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x5000 * 10
| Array of [[#NpadSharedMemoryEntry]]
|}
 
Each entry describes an available controller:
{| class="wikitable" border="1"
|-
! Entry
! Description
|-
| 0 to 7
| Players 1 to 8
|-
| 8
| Handheld Mode
|-
| 9
| Other
|}
 
== NpadSharedMemoryEntry ==
This is "nn::hid::detail::NpadSharedMemoryEntry".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x43F0 ([1.0.0-8.1.0] 0x4410)
| [[#NpadInternalState]]
|}
 
=== NpadInternalState ===
This is "nn::hid::detail::NpadInternalState".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x4
| [[HID_services#NpadStyleSet|StyleSet]]
|-
| 0x4
| 0x4
| [[HID_services#NpadJoyAssignmentMode|JoyAssignmentMode]]
|-
| 0x8
| 0xC
| [[#NpadFullKeyColorState|FullKeyColor]]
|-
| 0x14
| 0x14
| [[#NpadJoyColorState|JoyColor]]
|-
| 0x28
| 0x350
| [[#NpadFullKeyLifo|FullKeyLifo]]
|-
| 0x378
| 0x350
| [[#NpadHandheldLifo|HandheldLifo]]
|-
| 0x6C8
| 0x350
| [[#NpadJoyDualLifo|JoyDualLifo]]
|-
| 0xA18
| 0x350
| [[#NpadJoyLeftLifo|JoyLeftLifo]]
|-
| 0xD68
| 0x350
| [[#NpadJoyRightLifo|JoyRightLifo]]
|-
| 0x10B8
| 0x350
| [[#NpadPalmaLifo|PalmaLifo]] ([1.0.0-3.0.2] [[#NpadSystemLifo|SystemLifo]])
|-
| 0x1408
| 0x350
| [[#NpadSystemExtLifo|SystemExtLifo]] ([4.0.0+] also used for NpadSystem)
|-
| 0x1758
| 0x708
| [[#NpadSixAxisSensorLifo|FullKeySixAxisSensorLifo]]
|-
| 0x1E60
| 0x708
| [[#NpadSixAxisSensorLifo|HandheldSixAxisSensorLifo]]
|-
| 0x2568
| 0x708
| [[#NpadSixAxisSensorLifo|JoyDualLeftSixAxisSensorLifo]]
|-
| 0x2C70
| 0x708
| [[#NpadSixAxisSensorLifo|JoyDualRightSixAxisSensorLifo]]
|-
| 0x3378
| 0x708
| [[#NpadSixAxisSensorLifo|JoyLeftSixAxisSensorLifo]]
|-
| 0x3A80
| 0x708
| [[#NpadSixAxisSensorLifo|JoyRightSixAxisSensorLifo]]
|-
| 0x4188
| 0x4
| [[HID_services#DeviceType|DeviceType]]
|-
| 0x418C
| 0x4
| Reserved
|-
| 0x4190
| 0x8
| [[#NpadSystemProperties|SystemProperties]]
|-
| 0x4198
| 0x4
| [[#NpadSystemButtonProperties|SystemButtonProperties]]
|-
| 0x419C
| 0x4
| BatteryLevel0
|-
| 0x41A0
| 0x4
| BatteryLevel1
|-
| 0x41A4
| 0x4
| BatteryLevel2
|-
| 0x41A8
| 0x60
| [1.0.0-8.1.0] [[#NfcXcdDeviceHandleState|NfcXcdDeviceHandle]] (replaced by [[HID_services|GetXcdHandleForNpadWithNfc/IsNfcActivated]])
|-
| 0x41A8
| 0x4
| [9.0.0+] [[#AppletFooterUiAttribute|AppletFooterUiAttributes]]
|-
| 0x41AC
| 0x1
| [9.0.0+] [[#AppletFooterUiType|AppletFooterUiType]]
|-
| 0x41AD
| 0x7B
| [9.0.0+] Reserved
|-
| 0x4208
| 0x40
| [1.0.0-8.1.0] Mutex
|-
| 0x4228 ([1.0.0-8.1.0] 0x4248)
| 0x1B8
| [[#NpadGcTriggerLifo|GcTriggerLifo]]
|-
| 0x43E0 ([1.0.0-8.1.0] 0x4400)
| 0x4
| [[#NpadLarkType|LarkTypeLAndMain]]
|-
| 0x43E4 ([1.0.0-8.1.0] 0x4404)
| 0x4
| [[#NpadLarkType|LarkTypeR]]
|-
| 0x43E8 ([1.0.0-8.1.0] 0x4408)
| 0x4
| [[#NpadLuciaType|LuciaType]]
|-
| 0x43EC ([1.0.0-8.1.0] 0x440C)
| 0x4
|
|}
 
==== NpadFullKeyLifo ====
This is "nn::hid::detail::NpadFullKeyLifo". This is a RingLifo object.
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| RingLifoVptr
|-
| 0x8
| 0x8
| BufferCount
|-
| 0x10
| 0x8
| Tail
|-
| 0x18
| 0x8
| Count
|-
| 0x20
| 0x30 * 17
| Array of [[#NpadFullKeyStateAtomicStorage]]
|}
 
===== NpadFullKeyStateAtomicStorage =====
This is "nn::hid::detail::NpadFullKeyStateAtomicStorage".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| SamplingNumber
|-
| 0x8
| 0x28
| [[#NpadFullKeyState]]
|}
 
====== NpadFullKeyState ======
This is "nn::hid::NpadFullKeyState".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| SamplingNumber
|-
| 0x8
| 0x8
| [[#NpadButtonSet|Buttons]]
|-
| 0x10
| 0x8
| [[#AnalogStickState|AnalogStickL]]
|-
| 0x18
| 0x8
| [[#AnalogStickState|AnalogStickR]]
|-
| 0x20
| 0x4
| [[#NpadAttributesSet|Attributes]]
|-
| 0x24
| 0x4
| Reserved
|}
 
==== NpadHandheldLifo ====
This is "nn::hid::detail::NpadHandheldLifo". This is a RingLifo object.
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| RingLifoVptr
|-
| 0x8
| 0x8
| BufferCount
|-
| 0x10
| 0x8
| Tail
|-
| 0x18
| 0x8
| Count
|-
| 0x20
| 0x30 * 17
| Array of [[#NpadHandheldStateAtomicStorage]]
|}
 
===== NpadHandheldStateAtomicStorage =====
This is "nn::hid::detail::NpadHandheldStateAtomicStorage".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| SamplingNumber
|-
| 0x8
| 0x28
| [[#NpadHandheldState]]
|}
 
====== NpadHandheldState ======
This is "nn::hid::NpadHandheldState".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| SamplingNumber
|-
| 0x8
| 0x8
| [[#NpadButtonSet|Buttons]]
|-
| 0x10
| 0x8
| [[#AnalogStickState|AnalogStickL]]
|-
| 0x18
| 0x8
| [[#AnalogStickState|AnalogStickR]]
|-
| 0x20
| 0x4
| [[#NpadAttributesSet|Attributes]]
|-
| 0x24
| 0x4
| Reserved
|}
 
==== NpadJoyDualLifo ====
This is "nn::hid::detail::NpadJoyDualLifo". This is a RingLifo object.
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| RingLifoVptr
|-
| 0x8
| 0x8
| BufferCount
|-
| 0x10
| 0x8
| Tail
|-
| 0x18
| 0x8
| Count
|-
| 0x20
| 0x30 * 17
| Array of [[#NpadJoyDualStateAtomicStorage]]
|}
 
===== NpadJoyDualStateAtomicStorage =====
This is "nn::hid::detail::NpadJoyDualStateAtomicStorage".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| SamplingNumber
|-
| 0x8
| 0x28
| [[#NpadJoyDualState]]
|}
 
====== NpadJoyDualState ======
This is "nn::hid::NpadJoyDualState".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| SamplingNumber
|-
| 0x8
| 0x8
| [[#NpadButtonSet|Buttons]]
|-
| 0x10
| 0x8
| [[#AnalogStickState|AnalogStickL]]
|-
| 0x18
| 0x8
| [[#AnalogStickState|AnalogStickR]]
|-
| 0x20
| 0x4
| [[#NpadAttributesSet|Attributes]]
|-
| 0x24
| 0x4
| Reserved
|}
 
==== NpadJoyLeftLifo ====
This is "nn::hid::detail::NpadJoyLeftLifo". This is a RingLifo object.
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| RingLifoVptr
|-
| 0x8
| 0x8
| BufferCount
|-
| 0x10
| 0x8
| Tail
|-
| 0x18
| 0x8
| Count
|-
| 0x20
| 0x30 * 17
| Array of [[#NpadJoyLeftStateAtomicStorage]]
|}
 
===== NpadJoyLeftStateAtomicStorage =====
This is "nn::hid::detail::NpadJoyLeftStateAtomicStorage".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| SamplingNumber
|-
| 0x8
| 0x28
| [[#NpadJoyLeftState]]
|}
 
====== NpadJoyLeftState ======
This is "nn::hid::NpadJoyLeftState".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| SamplingNumber
|-
| 0x8
| 0x8
| [[#NpadButtonSet|Buttons]]
|-
| 0x10
| 0x8
| [[#AnalogStickState|AnalogStickL]]
|-
| 0x18
| 0x8
| [[#AnalogStickState|AnalogStickR]]
|-
| 0x20
| 0x4
| [[#NpadAttributesSet|Attributes]]
|-
| 0x24
| 0x4
| Reserved
|}
 
==== NpadJoyRightLifo ====
This is "nn::hid::detail::NpadJoyRightLifo". This is a RingLifo object.
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| RingLifoVptr
|-
| 0x8
| 0x8
| BufferCount
|-
| 0x10
| 0x8
| Tail
|-
| 0x18
| 0x8
| Count
|-
| 0x20
| 0x30 * 17
| Array of [[#NpadJoyRightStateAtomicStorage]]
|}
 
===== NpadJoyRightStateAtomicStorage =====
This is "nn::hid::detail::NpadJoyRightStateAtomicStorage".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| SamplingNumber
|-
| 0x8
| 0x28
| [[#NpadJoyRightState]]
|}
 
====== NpadJoyRightState ======
This is "nn::hid::NpadJoyRightState".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| SamplingNumber
|-
| 0x8
| 0x8
| [[#NpadButtonSet|Buttons]]
|-
| 0x10
| 0x8
| [[#AnalogStickState|AnalogStickL]]
|-
| 0x18
| 0x8
| [[#AnalogStickState|AnalogStickR]]
|-
| 0x20
| 0x4
| [[#NpadAttributesSet|Attributes]]
|-
| 0x24
| 0x4
| Reserved
|}
 
==== NpadPalmaLifo ====
This is "nn::hid::detail::NpadPalmaLifo". This is a RingLifo object.
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| RingLifoVptr
|-
| 0x8
| 0x8
| BufferCount
|-
| 0x10
| 0x8
| Tail
|-
| 0x18
| 0x8
| Count
|-
| 0x20
| 0x30 * 17
| Array of [[#NpadPalmaStateAtomicStorage]]
|}
 
===== NpadPalmaStateAtomicStorage =====
This is "nn::hid::detail::NpadPalmaStateAtomicStorage".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| SamplingNumber
|-
| 0x8
| 0x28
| [[#NpadPalmaState]]
|}
 
====== NpadPalmaState ======
This is "nn::hid::NpadPalmaState".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| SamplingNumber
|-
| 0x8
| 0x8
| [[#NpadButtonSet|Buttons]]
|-
| 0x10
| 0x8
| [[#AnalogStickState|AnalogStickL]]
|-
| 0x18
| 0x8
| [[#AnalogStickState|AnalogStickR]]
|-
| 0x20
| 0x4
| [[#NpadAttributesSet|Attributes]]
|-
| 0x24
| 0x4
| Reserved
|}
 
==== NpadSystemLifo ====
This is "nn::hid::detail::NpadSystemLifo". This is a RingLifo object.
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| RingLifoVptr
|-
| 0x8
| 0x8
| BufferCount
|-
| 0x10
| 0x8
| Tail
|-
| 0x18
| 0x8
| Count
|-
| 0x20
| 0x30 * 17
| Array of [[#NpadSystemStateAtomicStorage]]
|}
 
===== NpadSystemStateAtomicStorage =====
This is "nn::hid::detail::NpadSystemStateAtomicStorage".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| SamplingNumber
|-
| 0x8
| 0x28
| [[#NpadSystemState]]
|}
 
====== NpadSystemState ======
This is "nn::hid::system::NpadSystemState".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| SamplingNumber
|-
| 0x8
| 0x8
| [[#NpadButtonSet|Buttons]]
|-
| 0x10
| 0x8
| [[#AnalogStickState|AnalogStickL]]
|-
| 0x18
| 0x8
| [[#AnalogStickState|AnalogStickR]]
|-
| 0x20
| 0x4
| [[#NpadAttributesSet|Attributes]]
|-
| 0x24
| 0x4
| Reserved
|}
 
==== NpadSystemExtLifo ====
This is "nn::hid::detail::NpadSystemExtLifo". This is a RingLifo object.
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| RingLifoVptr
|-
| 0x8
| 0x8
| BufferCount
|-
| 0x10
| 0x8
| Tail
|-
| 0x18
| 0x8
| Count
|-
| 0x20
| 0x30 * 17
| Array of [[#NpadSystemExtStateAtomicStorage]]
|}
 
===== NpadSystemExtStateAtomicStorage =====
This is "nn::hid::detail::NpadSystemExtStateAtomicStorage".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| SamplingNumber
|-
| 0x8
| 0x28
| [[#NpadSystemState]]
|}
 
====== NpadSystemExtState ======
This is "nn::hid::system::NpadSystemExtState".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| SamplingNumber
|-
| 0x8
| 0x8
| [[#NpadButtonSet|Buttons]]
|-
| 0x10
| 0x8
| [[#AnalogStickState|AnalogStickL]]
|-
| 0x18
| 0x8
| [[#AnalogStickState|AnalogStickR]]
|-
| 0x20
| 0x4
| [[#NpadAttributesSet|Attributes]]
|-
| 0x24
| 0x4
| Reserved
|}
 
==== NpadSixAxisSensorLifo ====
This is "nn::hid::detail::NpadSixAxisSensorLifo". This is a RingLifo object.
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| RingLifoVptr
|-
| 0x8
| 0x8
| BufferCount
|-
| 0x10
| 0x8
| Tail
|-
| 0x18
| 0x8
| Count
|-
| 0x20
| 0x68 * 17
| Array of [[#SixAxisSensorStateAtomicStorage]]
|}
 
===== SixAxisSensorStateAtomicStorage =====
This is "nn::hid::detail::SixAxisSensorStateAtomicStorage".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| SamplingNumber
|-
| 0x8
| 0x60
| [[#SixAxisSensorState]]
|}
 
====== SixAxisSensorState ======
This is "nn::hid::SixAxisSensorState".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| DeltaTime
|-
| 0x8
| 0x8
| SamplingNumber
|-
| 0x10
| 0x4
| AccelerationX
|-
| 0x14
| 0x4
| AccelerationY
|-
| 0x18
| 0x4
| AccelerationZ
|-
| 0x1C
| 0x4
| AngularVelocityX
|-
| 0x20
| 0x4
| AngularVelocityY
|-
| 0x24
| 0x4
| AngularVelocityZ
|-
| 0x28
| 0x4
| AngleX
|-
| 0x2C
| 0x4
| AngleY
|-
| 0x30
| 0x4
| AngleZ
|-
| 0x34
| 0x24
| [[#DirectionState|Direction]]
|-
| 0x58
| 0x4
| [[#SixAxisSensorAttributeSet|Attributes]]
|-
| 0x5C
| 0x4
| Reserved
|}
 
==== NfcXcdDeviceHandleState ====
This is "nn::hid::detail::NfcXcdDeviceHandleState". This is a RingLifo object.
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| RingLifoVptr
|-
| 0x8
| 0x8
| BufferCount
|-
| 0x10
| 0x8
| Tail
|-
| 0x18
| 0x8
| Count
|-
| 0x20
| 0x20 * 2
| Array of [[#NfcXcdDeviceHandleStateImplAtomicStorage]]
|}
 
===== NfcXcdDeviceHandleStateImplAtomicStorage =====
This is "nn::hid::detail::NfcXcdDeviceHandleStateImplAtomicStorage".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| SamplingNumber
|-
| 0x8
| 0x18
| [[#NfcXcdDeviceHandleStateImpl]]
|}
 
====== NfcXcdDeviceHandleStateImpl ======
This is "nn::hid::detail::NfcXcdDeviceHandleStateImpl".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| [[#DeviceHandle|Handle]]
|-
| 0x8
| 0x1
| IsAvailable
|-
| 0x9
| 0x1
| IsActivated
|-
| 0xA
| 0x6
| Reserved
|-
| 0x10
| 0x8
| SamplingNumber
|}
 
==== NpadGcTriggerLifo ====
This is "nn::hid::detail::NpadGcTriggerLifo". This is a RingLifo object.
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| RingLifoVptr
|-
| 0x8
| 0x8
| BufferCount
|-
| 0x10
| 0x8
| Tail
|-
| 0x18
| 0x8
| Count
|-
| 0x20
| 0x18 * 17
| Array of [[#NpadGcTriggerStateAtomicStorage]]
|}
 
===== NpadGcTriggerStateAtomicStorage =====
This is "nn::hid::detail::NpadGcTriggerStateAtomicStorage".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| SamplingNumber
|-
| 0x8
| 0x10
| [[#NpadGcTriggerState]]
|}
 
====== NpadGcTriggerState ======
This is "nn::hid::server::NpadGcTriggerState".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| SamplingNumber
|-
| 0x8
| 0x4
| TriggerL
|-
| 0xC
| 0x4
| TriggerR
|}
 
== GestureSharedMemoryFormat ==
This is "nn::hid::detail::GestureSharedMemoryFormat".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x708
| [[#GestureLifo]]
|}
 
=== GestureLifo ===
This is "nn::hid::detail::GestureLifo". This is a RingLifo object.
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| RingLifoVptr
|-
| 0x8
| 0x8
| BufferCount
|-
| 0x10
| 0x8
| Tail
|-
| 0x18
| 0x8
| Count
|-
| 0x20
| 0x68 * 17
| Array of [[#GestureDummyStateAtomicStorage]]
|}
 
===== GestureDummyStateAtomicStorage =====
This is "nn::hid::detail::GestureDummyStateAtomicStorage".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| SamplingNumber
|-
| 0x8
| 0x60
| [[#GestureDummyState]]
|}
 
====== GestureDummyState ======
This is "nn::hid::detail::GestureDummyState".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| SamplingNumber
|-
| 0x8
| 0x8
| ContextNumber
|-
| 0x10
| 0x4
| [[#GestureType|Type]]
|-
| 0x14
| 0x4
| [[#GestureDirection|Direction]]
|-
| 0x18
| 0x4
| X
|-
| 0x1C
| 0x4
| Y
|-
| 0x20
| 0x4
| DeltaX
|-
| 0x24
| 0x4
| DeltaY
|-
| 0x28
| 0x4
| VelocityX
|-
| 0x2C
| 0x4
| VelocityY
|-
| 0x30
| 0x4
| [[#GestureAttributeSet|Attributes]]
|-
| 0x34
| 0x4
| Scale
|-
| 0x38
| 0x4
| RotationAngle
|-
| 0x3C
| 0x4
| PointCount
|-
| 0x40
| 0x8 * 4
| [[#GesturePoint|Points]]
|}
 
== ConsoleSixAxisSensorSharedMemoryFormat ==
This is "nn::hid::detail::ConsoleSixAxisSensorSharedMemoryFormat".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| SamplingNumber
|-
| 0x8
| 0x1
| IsSevenSixAxisSensorAtRest
|-
| 0x9
| 0x3
| Padding
|-
| 0xC
| 0x4
| VerticalizationError
|-
| 0x10
| 0xC
| GyroBias
|}
 
= AnalogStickState =
This is "nn::hid::AnalogStickState".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x4
| X
|-
| 0x4
| 0x4
| Y
|}
 
= TouchState =
This is "nn::hid::TouchState".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| DeltaTime
|-
| 0x8
| 0x4
| [[#TouchAttributeSet|Attributes]]
|-
| 0xC
| 0x4
| FingerId
|-
| 0x10
| 0x4
| X
|-
| 0x14
| 0x4
| Y
|-
| 0x18
| 0x4
| DiameterX
|-
| 0x1C
| 0x4
| DiameterY
|-
| 0x20
| 0x4
| RotationAngle
|-
| 0x24
| 0x4
| Reserved
|}
 
= InputSourceState =
This is "nn::hid::system::InputSourceState".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| Timestamp
|}
 
= NpadControllerColor =
This is "nn::hid::NpadControllerColor".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x4
| Main
|-
| 0x4
| 0x4
| Sub
|}
 
= NpadFullKeyColorState =
This is "nn::hid::detail::NpadFullKeyColorState".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x4
| [[#ColorAttribute|Attribute]]
|-
| 0x4
| 0x8
| [[#NpadControllerColor|FullKey]]
|}
 
= NpadJoyColorState =
This is "nn::hid::detail::NpadJoyColorState".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x4
| [[#ColorAttribute|Attribute]]
|-
| 0x4
| 0x8
| [[#NpadControllerColor|Left]]
|-
| 0xC
| 0x8
| [[#NpadControllerColor|Right]]
|}
 
= DirectionState =
This is "nn::hid::DirectionState".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x4
| XX
|-
| 0x4
| 0x4
| XY
|-
| 0x8
| 0x4
| XZ
|-
| 0xC
| 0x4
| YX
|-
| 0x10
| 0x4
| YY
|-
| 0x14
| 0x4
| YZ
|-
| 0x18
| 0x4
| ZX
|-
| 0x1C
| 0x4
| ZY
|-
| 0x20
| 0x4
| ZZ
|}
 
= GesturePoint =
This is "nn::hid::GesturePoint".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x4
| X
|-
| 0x4
| 0x4
| Y
|}
 
= ColorAttribute =
This is "nn::hid::detail::ColorAttribute".
 
{| class="wikitable" border="1"
!  Value
!  Description
|-
| 0 || Ok
|-
| 1 || ReadError
|-
| 2 || NoController
|}
 
= DebugPadAttributeSet =
This is "nn::hid::DebugPadAttributeSet". This is a BitFlagSet object for [[#DebugPadAttribute]].
 
= TouchAttributeSet =
This is "nn::hid::TouchAttributeSet". This is a BitFlagSet object for [[#TouchAttribute]].
 
= MouseAttributeSet =
This is "nn::hid::MouseAttributeSet". This is a BitFlagSet object for [[#MouseAttribute]].
 
= BasicXpadAttributeSet =
This is "nn::hid::BasicXpadAttributeSet". This is a BitFlagSet object for [[#BasicXpadAttribute]].
 
= NpadAttributesSet =
This is "nn::hid::NpadAttributesSet". This is a BitFlagSet object for [[#NpadAttribute]].
 
= SixAxisSensorAttributeSet =
This is "nn::hid::SixAxisSensorAttributeSet". This is a BitFlagSet object for [[#SixAxisSensorAttribute]].
 
= GestureAttributeSet =
This is "nn::hid::GestureAttributeSet". This is a BitFlagSet object for [[#GestureAttribute]].
 
= DebugPadButtonSet =
This is "nn::hid::DebugPadButtonSet". This is a BitFlagSet object for [[#DebugPadButton]].
 
= MouseButtonSet =
This is "nn::hid::MouseButtonSet". This is a BitFlagSet object for [[#MouseButton]].
 
= KeyboardModifierSet =
This is "nn::hid::KeyboardModifierSet". This is a BitFlagSet object for [[#KeyboardModifier]].
 
= KeyboardKeySet =
This is "nn::hid::KeyboardKeySet". This is a BitFlagSet object for [[#KeyboardKey]].
 
= BasicXpadButtonSet =
This is "nn::hid::BasicXpadButtonSet". This is a BitFlagSet object for [[#BasicXpadButton]].
 
= HomeButtonSet =
This is "nn::hid::system::HomeButtonSet". This is a BitFlagSet object for [[#HomeButton]].
 
= SleepButtonSet =
This is "nn::hid::system::SleepButtonSet". This is a BitFlagSet object for [[#SleepButton]].
 
= CaptureButtonSet =
This is "nn::hid::system::CaptureButtonSet". This is a BitFlagSet object for [[#CaptureButton]].
 
= NpadButtonSet =
This is "nn::hid::NpadButtonSet". This is a BitFlagSet object for [[#NpadButton]].
 
= AnalogStickCalibrationFlagsSet =
This is "nn::hid::detail::AnalogStickCalibrationFlagsSet". This is a BitFlagSet object for [[#AnalogStickCalibrationFlags]].
 
= SixAxisSensorUserCalibrationFlagsSet =
This is "nn::hid::detail::SixAxisSensorUserCalibrationFlagsSet". This is a BitFlagSet object for [[#SixAxisSensorUserCalibrationFlags]].
 
= NpadStyleSet =
This is "nn::hid::NpadStyleSet". This is a BitFlagSet object for [[#NpadStyleTag]].
 
= NpadStyleTag =
This is "nn::hid::NpadStyleTag".
 
{| class="wikitable" border="1"
!  Bits
!  Description
!  Notes
|-
| 0
| NpadFullKey
| Pro Controller
|-
| 1
| NpadHandheld
| Joy-Con controller in handheld mode
|-
| 2
| NpadJoyDual
| Joy-Con controller in dual mode
|-
| 3
| NpadJoyLeft
| Joy-Con left controller in single mode
|-
| 4
| NpadJoyRight
| Joy-Con right controller in single mode
|-
| 5
| NpadGc
| GameCube controller
|-
| 6
| NpadPalma
| Poké Ball Plus controller
|-
| 7
| NpadLark
| NES/Famicom controller
|-
| 8
| NpadHandheldLark
| NES/Famicom controller in handheld mode
|-
| 9
| NpadLucia
| SNES controller
|-
| 10-28
| Reserved
|
|-
| 29
| NpadSystemExt
| Generic external controller
|-
| 30
| NpadSystem
| Generic controller
|-
| 31
| Reserved
|
|}
 
= NpadDeviceTypeSet =
This is "nn::hid::system::NpadDeviceType". This is a BitFlagSet object for [[#NpadDeviceType]].
 
= NpadSystemPropertiesSet =
This is "nn::hid::detail::NpadSystemPropertiesSet". This is a BitFlagSet object for [[#NpadSystemProperties]].
 
= NpadSystemButtonPropertiesSet =
This is "nn::hid::detail::NpadSystemButtonPropertiesSet". This is a BitFlagSet object for [[#NpadSystemButtonProperties]].
 
= AppletFooterUiAttributesSet =
This is "nn::hid::system::AppletFooterUiAttributesSet". This is a BitFlagSet object for [[#AppletFooterUiAttribute]].
 
= UniquePadType =
This is "nn::hid::system::UniquePadType".
 
{| class="wikitable" border="1"
!  Value
!  Description
|-
| 0 || Embedded
|-
| 1 || FullKeyController
|-
| 2 || RightController
|-
| 3 || LeftController
|}
 
= UniquePadInterface =
This is "nn::hid::system::UniquePadInterface".
 
{| class="wikitable" border="1"
!  Value
!  Description
|-
| 0 || Embedded
|-
| 1 || Rail
|-
| 2 || Bluetooth
|-
| 3 || Usb
|}
 
= UniquePadSerialNumber =
This is "nn::hid::system::UniquePadSerialNumber". This is a 0x10 byte value.
 
= AnalogStickManualCalibrationStage =
This is "nn::hid::system::AnalogStickManualCalibrationStage".
 
{| class="wikitable" border="1"
!  Value
!  Description
|-
| 0 || ReleaseFromRight
|-
| 1 || ReleaseFromBottom
|-
| 2 || ReleaseFromLeft
|-
| 3 || ReleaseFromTop
|-
| 4 || Rotate
|-
| 5 || Update
|-
| 6 || Completed
|-
| 7 || Clear
|-
| 8 || ClearCompleted
|}
 
= SixAxisSensorUserCalibrationStage =
This is "nn::hid::system::SixAxisSensorUserCalibrationStage".
 
{| class="wikitable" border="1"
!  Value
!  Description
|-
| 0 || Measuring
|-
| 1 || Update
|-
| 2 || Completed
|}
 
= NpadJoyAssignmentMode =
This is "nn::hid::NpadJoyAssignmentMode".
 
{| class="wikitable" border="1"
!  Value
!  Description
|-
| 0 || Dual
|-
| 1 || Single
|}
 
= AppletFooterUiType =
This is "nn::hid::system::AppletFooterUiType".
 
{| class="wikitable" border="1"
!  Value
!  Description
|-
| 0 || None
|-
| 1 || HandheldNone
|-
| 2 || HandheldJoyConLeftOnly
|-
| 3 || HandheldJoyConRightOnly
|-
| 4 || HandheldJoyConLeftJoyConRight
|-
| 5 || JoyDual
|-
| 6 || JoyDualLeftOnly
|-
| 7 || JoyDualRightOnly
|-
| 8 || JoyLeftHorizontal
|-
| 9 || JoyLeftVertical
|-
| 10 || JoyRightHorizontal
|-
| 11 || JoyRightVertical
|-
| 12 || SwitchProController
|-
| 13 || CompatibleProController
|-
| 14 || CompatibleJoyCon
|-
| 15 || LarkHvc1
|-
| 16 || LarkHvc2
|-
| 17 || LarkNesLeft
|-
| 18 || LarkNesRight
|-
| 19 || Lucia
|-
| 20 || Verification
|}
 
= NpadLarkType =
This is "nn::hid::NpadLarkType".
 
{| class="wikitable" border="1"
!  Value
!  Description
|-
| 0 || Invalid
|-
| 1 || H1
|-
| 2 || H2
|-
| 3 || NL
|-
| 4 || NR
|}
 
= NpadLuciaType =
This is "nn::hid::NpadLuciaType".
 
{| class="wikitable" border="1"
!  Value
!  Description
|-
| 0 || Invalid
|-
| 1 || J
|-
| 2 || E
|-
| 3 || U
|}
 
= DeviceHandle =
This is "nn::xcd::DeviceHandle". This is a 8 byte value.
 
= GestureDirection =
This is "nn::hid::GestureDirection".
 
{| class="wikitable" border="1"
!  Value
!  Description
|-
| 0 || None
|-
| 1 || Left
|-
| 2 || Up
|-
| 3 || Right
|-
| 4 || Down
|}
 
= GestureType =
This is "nn::hid::GestureType".
 
{| class="wikitable" border="1"
!  Value
!  Description
|-
| 0 || Idle
|-
| 1 || Complete
|-
| 2 || Cancel
|-
| 3 || Touch
|-
| 4 || Press
|-
| 5 || Tap
|-
| 6 || Pan
|-
| 7 || Swipe
|-
| 8 || Pinch
|-
| 9 || Rotate
|}
 
= GyroscopeZeroDriftMode =
This is "nn::hid::GyroscopeZeroDriftMode".
 
{| class="wikitable" border="1"
!  Value
!  Description
|-
| 0 || Loose
|-
| 1 || Standard
|-
| 2 || Tight
|}
|}


= NpadIdType =
= NpadIdType =
This is "nn::hid::NpadIdType". This is the controller index used in [[HID_Shared_Memory#Controllers|sharedmem]].
This is "nn::hid::NpadIdType". This is the controller index used in [[#SharedMemoryFormat|sharedmem]].


{| class="wikitable" border="1"
{| class="wikitable" border="1"
Line 2,861: Line 5,798:
! Offset || Size || Description
! Offset || Size || Description
|-
|-
| 0x0 || 0x1 || powerConnected for the main [[HID_Shared_Memory#Controllers|PowerInfo]].
| 0x0 || 0x1 || powerConnected for the main PowerInfo.
|-
|-
| 0x1 || 0x1 || ORRed with powerConnected to set the value of the first byte for the controller [[HID_Shared_Memory#Flags|flags]].
| 0x1 || 0x1 || ORRed with powerConnected to set the value of the first byte for the controller [[HID_Shared_Memory#Flags|flags]].
Line 2,867: Line 5,804:
| 0x2 || 0x6 || Unknown
| 0x2 || 0x6 || Unknown
|-
|-
| 0x8 || 0x4 || batteryCharge for the main [[HID_Shared_Memory#Controllers|PowerInfo]].
| 0x8 || 0x4 || batteryCharge for the main PowerInfo.
|-
|-
| 0xC || 0x4 || [[HID_Shared_Memory#Button_State|Buttons]]. Bit18 = HOME and bit19 = Capture.
| 0xC || 0x4 || [[HID_Shared_Memory#Button_State|Buttons]]. Bit18 = HOME and bit19 = Capture.
|-
|-
| 0x10 || 0x10(4*2*2) || Joystick data, see [[HID_Shared_Memory#Controller_State]].
| 0x10 || 0x10(4*2*2) || Joystick data.
|-
|-
| 0x20 || 0x1 || Unused for input. Set with output from [[#DumpHdlsStates]] (zero in some cases).
| 0x20 || 0x1 || Unused for input. Set with output from [[#DumpHdlsStates]] (zero in some cases).
Line 2,883: Line 5,820:
! Offset || Size || Description
! Offset || Size || Description
|-
|-
| 0x0 || 0x4 || batteryCharge for the main [[HID_Shared_Memory#Controllers|PowerInfo]].
| 0x0 || 0x4 || batteryCharge for the main PowerInfo.
|-
|-
| 0x4 || 0x4 || Unknown
| 0x4 || 0x4 || Unknown
|-
|-
| 0x8 || 0x8 || [[HID_Shared_Memory#Button_State|Buttons]], masked with 0xfffffffff00fffff. See above table regarding HOME/Capture buttons.
| 0x8 || 0x8 || Buttons, masked with 0xfffffffff00fffff. See above table regarding HOME/Capture buttons.
|-
|-
| 0x10 || 0x10(4*2*2) || Joystick data, see [[HID_Shared_Memory#Controller_State]].
| 0x10 || 0x10(4*2*2) || Joystick data.
|-
|-
| 0x20 || 0x1 || Unused for input. Set with output from [[#DumpHdlsStates]] (zero in some cases).
| 0x20 || 0x1 || Unused for input. Set with output from [[#DumpHdlsStates]] (zero in some cases).
Line 3,276: Line 6,213:
| 0x28 || 0x8 || [[#JoystickConfig]]
| 0x28 || 0x8 || [[#JoystickConfig]]
|}
|}


= IrCameraHandle =
= IrCameraHandle =