Difference between revisions of "HID Shared Memory"

From Nintendo Switch Brew
Jump to navigation Jump to search
(Redirected page to HID services)
Tag: New redirect
 
(2 intermediate revisions by the same user not shown)
Line 1: Line 1:
HID 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.
+
#REDIRECT [[HID_services]]
 
 
= SharedMemoryFormat =
 
This is "nn::hid::detail::SharedMemoryFormat".
 
 
 
{| class="wikitable" border="1"
 
|-
 
! Offset
 
! Size
 
! Description
 
|-
 
| 0x0
 
| 0x400
 
| [[#DebugPadSharedMemoryFormat|DebugPad]]
 
|-
 
| 0x400
 
| 0x3000
 
| [[#TouchScreenSharedMemoryFormat|TouchScreen]]
 
|-
 
| 0x3400
 
| 0x400
 
| [[#MouseSharedMemoryFormat|Mouse]]
 
|-
 
| 0x3800
 
| 0x400
 
| [[#KeyboardSharedMemoryFormat|Keyboard]]
 
|-
 
| 0x3C00
 
| 0x1000
 
| [1.0.0-9.2.0] [[#BasicXpadSharedMemoryFormat|BasicXpad]]
 
|-
 
| 0x3C00
 
|
 
| [10.0.0+] [[#DigitizerSharedMemoryFormat|Digitizer]]
 
|-
 
| 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]]
 
|-
 
| 0x3BA00
 
| 0x800
 
| [[#GestureSharedMemoryFormat|Gesture]]
 
|-
 
| 0x3C200
 
| 0x20
 
| [5.0.0+] [[#ConsoleSixAxisSensorSharedMemoryFormat|ConsoleSixAxisSensor]]
 
|}
 
 
 
== DebugPadSharedMemoryFormat ==
 
This is "nn::hid::detail::DebugPadSharedMemoryFormat".
 
 
 
{| class="wikitable" border="1"
 
|-
 
! Offset
 
! Size
 
! Description
 
|-
 
| 0x0
 
| 0x2C8
 
| [[#DebugPadLifo]]
 
|}
 
 
 
=== DebugPadLifo ===
 
This is "nn::hid::detail::DebugPadLifo". 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 [[#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
 
|-
 
| 0x20
 
| 0x298 * 17
 
| Array of [[#TouchScreenStateAtomicStorage]]
 
|}
 
 
 
==== TouchScreenStateAtomicStorage ====
 
This is "nn::hid::detail::TouchScreenStateAtomicStorage".
 
 
 
{| class="wikitable" border="1"
 
|-
 
! Offset
 
! Size
 
! Description
 
|-
 
| 0x0
 
| 0x8
 
| SamplingNumber
 
|-
 
| 0x8
 
| 0x290
 
| [[#TouchScreenState]]
 
|}
 
 
 
===== TouchScreenState =====
 
This is "nn::hid::detail::TouchScreenState".
 
 
 
{| class="wikitable" border="1"
 
|-
 
! Offset
 
! Size
 
! Description
 
|-
 
| 0x0
 
| 0x8
 
| SamplingNumber
 
|-
 
| 0x8
 
| 0x4
 
| Count
 
|-
 
| 0xC
 
| 0x4
 
| Reserved
 
|-
 
| 0x10
 
| 0x28 * 16
 
| [[#TouchState|Touches]]
 
|}
 
 
 
====== 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
 
|}
 
 
 
== 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
 
|-
 
| 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
 
| 0x8
 
| 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 [[#AnalogStickCalibrationStateImpl]]
 
|}
 
 
 
====== 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]]
 
|}
 
 
 
======= UniquePadConfig =======
 
This is "nn::hid::detail::UniquePadConfig".
 
 
 
{| class="wikitable" border="1"
 
|-
 
! Offset
 
! Size
 
! Description
 
|-
 
| 0x0
 
| 0x8
 
| [[#SixAxisSensorUserCalibrationFlagsSet|Flags]]
 
|-
 
| 0x8
 
| 0x8
 
| Stage
 
|-
 
| 0x10
 
| 0x8
 
| SamplingNumber
 
|}
 
 
 
== NpadSharedMemoryFormat ==
 
This is "nn::hid::detail::NpadSharedMemoryFormat".
 
 
 
This section contains a series of 10 0x5000 byte structures describing each available controller.
 
 
 
{| class="wikitable" border="1"
 
|-
 
! Index
 
! Description
 
|-
 
| 0 to 7
 
| Players 1 to 8
 
|-
 
| 8
 
| Handheld Mode
 
|-
 
| 9
 
| Other
 
|}
 
 
 
=== NpadState ===
 
{| class="wikitable" border="1"
 
|-
 
! Offset
 
! Size
 
! Description
 
|-
 
| 0x0
 
| 0x28
 
| [[#NpadStateHeader]]
 
|-
 
| 0x28
 
| 0x20
 
| NpadFullKeyHeader
 
|-
 
| 0x48
 
| 0x30 * 17
 
| Array of NpadFullKeyState
 
|-
 
| 0x378
 
| 0x20
 
| [[#NpadHandheldHeader]]
 
|-
 
| 0x398
 
| 0x30 * 17
 
| Array of [[#NpadHandheldState]]
 
|-
 
| 0x6C8
 
| 0x20
 
| NpadJoyDualHeader
 
|-
 
| 0x6E8
 
| 0x30 * 17
 
| Array of NpadJoyDualState
 
|-
 
| 0xA18
 
| 0x20
 
| NpadJoyLeftHeader
 
|-
 
| 0xA38
 
| 0x30 * 17
 
| Array of NpadJoyLeftState
 
|-
 
| 0xD68
 
| 0x20
 
| NpadJoyRightHeader
 
|-
 
| 0xD88
 
| 0x30 * 17
 
| Array of NpadJoyRightState
 
|-
 
| 0x10B8
 
| 0x20
 
| NpadPalmaHeader ([1.0.0-3.0.2] NpadSystemHeader)
 
|-
 
| 0x12B8
 
| 0x30 * 17
 
| Array of NpadPalmaState ([1.0.0-3.0.2] NpadSystemState)
 
|-
 
| 0x1408
 
| 0x20
 
| NpadSystemExtHeader ([4.0.0+] also used by NpadSystem)
 
|-
 
| 0x1428
 
| 0x30 * 17
 
| Array of NpadSystemExtState ([4.0.0+] also used by NpadSystem)
 
|-
 
| 0x1758
 
| 0x20
 
| NpadSixAxisSensorFullKeyHeader
 
|-
 
| 0x1778
 
| 0x68 * 17
 
| Array of NpadSixAxisSensorFullKeyState
 
|-
 
| 0x1E60
 
| 0x20
 
| NpadSixAxisSensorHandheldHeader
 
|-
 
| 0x1E80
 
| 0x68 * 17
 
| Array of NpadSixAxisSensorHandheldState
 
|-
 
| 0x2568
 
| 0x20
 
| NpadSixAxisSensorJoyLeftDualHeader
 
|-
 
| 0x2588
 
| 0x68 * 17
 
| Array of NpadSixAxisSensorJoyLeftDualState
 
|-
 
| 0x2C70
 
| 0x20
 
| NpadSixAxisSensorJoyRightDualHeader
 
|-
 
| 0x2C90
 
| 0x68 * 17
 
| Array of NpadSixAxisSensorJoyRightDualState
 
|-
 
| 0x3378
 
| 0x20
 
| NpadSixAxisSensorJoyLeftHeader
 
|-
 
| 0x3398
 
| 0x68 * 17
 
| Array of NpadSixAxisSensorJoyLeftState
 
|-
 
| 0x3A80
 
| 0x20
 
| NpadSixAxisSensorJoyRightHeader
 
|-
 
| 0x3AA0
 
| 0x68 * 17
 
| Array of NpadSixAxisSensorJoyRightState
 
|-
 
| 0x4188
 
| 0x4
 
| [[HID_services#DeviceType|DeviceType]]
 
|-
 
| 0x418C
 
| 0x4
 
| Padding
 
|-
 
| 0x4190
 
| 0x8
 
| [[#NpadSystemProperties]]
 
|-
 
| 0x4198
 
| 0x4
 
| [[#NpadSystemButtonProperties]]
 
|-
 
| 0x419C
 
| 0x4
 
| BatteryIndex0 state (must be 0-4)
 
|-
 
| 0x41A0
 
| 0x4
 
| BatteryIndex1 state (must be 0-4)
 
|-
 
| 0x41A4
 
| 0x4
 
| BatteryIndex2 state (must be 0-4)
 
|-
 
| 0x41A8
 
| 0x20
 
| [1.0.0-3.0.2] NfcXcdDeviceHandleHeader (Replaced by [[HID_services|commands]] GetXcdHandleForNpadWithNfc/IsNfcActivated)
 
|-
 
| 0x41C8
 
| 0x20 * 2
 
| [1.0.0-3.0.2] Array of [[#NfcXcdDeviceHandleState]] (See above)
 
|-
 
| 0x41A8
 
| 0x4
 
| [9.0.0+] [[HID_services#AppletFooterUiAttribute|AppletFooterUiAttribute]]
 
|-
 
| 0x41AC
 
| 0x1
 
| [9.0.0+] [[HID_services#AppletFooterUiType|AppletFooterUiType]]
 
|-
 
| 0x4208
 
| 0x8
 
| Mutex
 
|-
 
| 0x4228
 
| 0x20
 
| NpadGcTriggerHeader
 
|-
 
| 0x4248
 
| 0x18 * 17
 
| Array of NpadGcTriggerState
 
|-
 
| 0x43E0
 
| 0x4
 
|
 
|-
 
| 0x43E4
 
| 0x4
 
|
 
|-
 
| 0x43E8
 
| 0x4
 
|
 
|}
 
 
 
==== NpadStateHeader ====
 
{| class="wikitable" border="1"
 
|-
 
! Offset
 
! Size
 
! Description
 
|-
 
| 0x0
 
| 0x4
 
| [[HID_services#NpadStyleTag|NpadStyleSet]]
 
|-
 
| 0x4
 
| 0x4
 
| [[HID_services#NpadJoyAssignmentMode|NpadJoyAssignmentMode]]
 
|-
 
| 0x8
 
| 0x4
 
| bit1 color set does not exist
 
|-
 
| 0xC
 
| 0x4
 
| RGBA Body Color (single Joy-Con or Pro Controller)
 
|-
 
| 0x10
 
| 0x4
 
| RGBA Button Color (single Joy-Con or Pro Controller)
 
|-
 
| 0x14
 
| 0x4
 
| bit1 color set does not exist
 
|-
 
| 0x18
 
| 0x4
 
| RGBA Body Color (right Joy-Con)
 
|-
 
| 0x1C
 
| 0x4
 
| RGBA Button Color (right Joy-Con)
 
|-
 
| 0x20
 
| 0x4
 
| RGBA Body Color (left Joy-Con)
 
|-
 
| 0x24
 
| 0x4
 
| RGBA Button Color (left Joy-Con)
 
|}
 
 
 
==== NpadHandheldHeader ====
 
{| class="wikitable" border="1"
 
|-
 
! Offset
 
! Size
 
! Description
 
|-
 
| 0x0
 
| 0x8
 
| Timestamp in ticks
 
|-
 
| 0x8
 
| 0x8
 
| Number of entries (always 17)
 
|-
 
| 0x10
 
| 0x8
 
| Latest Entry Index
 
|-
 
| 0x18
 
| 0x8
 
| Maximum Entry Index (always 16)
 
|}
 
 
 
==== NpadHandheldState ====
 
{| class="wikitable" border="1"
 
|-
 
! Offset
 
! Size
 
! Description
 
|-
 
| 0x0
 
| 0x8
 
| Timestamp in samples (global)
 
|-
 
| 0x8
 
| 0x8
 
| Timestamp in samples
 
|-
 
| 0x10
 
| 0x8
 
| [[#NpadButton]]
 
|-
 
| 0x18
 
| 0x4
 
| Left Joystick X
 
|-
 
| 0x1C
 
| 0x4
 
| Left Joystick Y
 
|-
 
| 0x20
 
| 0x4
 
| Right Joystick X
 
|-
 
| 0x24
 
| 0x4
 
| Right Joystick Y
 
|-
 
| 0x28
 
| 0x4
 
| Controller State (bit0 connected, bit1 wired)
 
|-
 
| 0x2C
 
| 0x4
 
| Padding
 
|}
 
 
 
===== NpadButton =====
 
This is the u64 bitmask for "nn::hid::NpadButton".
 
 
 
{| class="wikitable" border="1"
 
|-
 
! Bit
 
! Button
 
|-
 
| 0
 
| A
 
|-
 
| 1
 
| B
 
|-
 
| 2
 
| X
 
|-
 
| 3
 
| Y
 
|-
 
| 4
 
| Left Stick Pressed
 
|-
 
| 5
 
| Right Stick Pressed
 
|-
 
| 6
 
| L
 
|-
 
| 7
 
| R
 
|-
 
| 8
 
| ZL
 
|-
 
| 9
 
| ZR
 
|-
 
| 10
 
| Plus
 
|-
 
| 11
 
| Minus
 
|-
 
| 12
 
| Left
 
|-
 
| 13
 
| Up
 
|-
 
| 14
 
| Right
 
|-
 
| 15
 
| Down
 
|-
 
| 16
 
| Left Stick Left
 
|-
 
| 17
 
| Left Stick Up
 
|-
 
| 18
 
| Left Stick Right
 
|-
 
| 19
 
| Left Stick Down
 
|-
 
| 20
 
| Right Stick Left
 
|-
 
| 21
 
| Right Stick Up
 
|-
 
| 22
 
| Right Stick Right
 
|-
 
| 23
 
| Right Stick Down
 
|-
 
| 24
 
| LeftSL
 
|-
 
| 25
 
| LeftSR
 
|-
 
| 26
 
| RightSL
 
|-
 
| 27
 
| RightSR
 
|-
 
| 28
 
| Palma
 
|-
 
| 29
 
|
 
|-
 
| 30
 
| HandheldLeftB (Left B button on NES controllers in Handheld mode)
 
|}
 
 
 
===== NpadSixAxisSensorHandheldHeader =====
 
{| class="wikitable" border="1"
 
|-
 
! Offset
 
! Size
 
! Description
 
|-
 
| 0x0
 
| 0x8
 
| Timestamp in ticks
 
|-
 
| 0x8
 
| 0x8
 
| Number of entries (always 17)
 
|-
 
| 0x10
 
| 0x8
 
| Latest Entry Index
 
|-
 
| 0x18
 
| 0x8
 
| Maximum Entry Index (up to 16)
 
|}
 
 
 
===== NpadSixAxisSensorHandheldState =====
 
{| class="wikitable" border="1"
 
|-
 
! Offset
 
! Size
 
! Description
 
|-
 
| 0x0
 
| 0x8
 
| Timestamp in samples (global)
 
|-
 
| 0x8
 
| 0x8
 
| Unknown
 
|-
 
| 0x10
 
| 0x8
 
| Timestamp in samples
 
|-
 
| 0x1C
 
| 0x4 * 3
 
| Accelerometer data as 3 floats
 
|-
 
| 0x24
 
| 0x4 * 3
 
| Gyroscope data as 3 floats
 
|-
 
| 0x30
 
| 0x4 * 3
 
| Unknown sensor data as 3 floats
 
|-
 
| 0x3C
 
| 0x4 * 9
 
| Orientation basis as 3x3 matrix of floats
 
|-
 
| 0x60
 
| 0x8
 
| Unknown, always 1
 
|}
 
 
 
Official sw copies the data from offset 0x8 size 0x60 to the final output state.
 
 
 
==== NpadSystemProperties ====
 
{| class="wikitable" border="1"
 
|-
 
! Bit
 
! Description
 
|-
 
| 0
 
| PowerInfo0 isCharging
 
|-
 
| 1
 
| PowerInfo1 isCharging
 
|-
 
| 2
 
| PowerInfo2 isCharging
 
|-
 
| 3
 
| PowerInfo0 powerConnected
 
|-
 
| 4
 
| PowerInfo1 powerConnected
 
|-
 
| 5
 
| PowerInfo2 powerConnected
 
|-
 
| 6-8
 
| Unused
 
|-
 
| 9
 
| UnsupportedButtonPressed_NpadSystem
 
|-
 
| 10
 
| UnsupportedButtonPressed_NpadSystemExt
 
|-
 
| 11
 
| AbxyButtonOriented
 
|-
 
| 12
 
| SlSrButtonOriented
 
|-
 
| 13
 
| [4.0.0+] PlusButtonCapability
 
|-
 
| 14
 
| [4.0.0+] MinusButtonCapability
 
|-
 
| 15
 
| [8.0.0+] DirectionalButtonsSupported
 
|-
 
| 16-63
 
| Unused
 
|}
 
 
 
==== NpadSystemButtonProperties ====
 
{| class="wikitable" border="1"
 
|-
 
! Bit
 
! Description
 
|-
 
| 0
 
| UnintendedHomeButtonInputProtectionEnabled (if cleared)
 
|}
 
 
 
==== NfcXcdDeviceHandleState ====
 
{| class="wikitable" border="1"
 
|-
 
! Offset
 
! Size
 
! Description
 
|-
 
| 0x0
 
| 0x8
 
| Timestamp in samples (global)
 
|-
 
| 0x8
 
| 0x8
 
| DeviceHandle
 
|-
 
| 0x10
 
| 0x1
 
| Flag
 
|-
 
| 0x11
 
| 0x1
 
| Flag
 
|-
 
| 0x12
 
| 0x6
 
| Padding
 
|-
 
| 0x18
 
| 0x8
 
| Timestamp in samples
 
|}
 
 
 
==== NpadGcTriggerState ====
 
{| class="wikitable" border="1"
 
|-
 
! Offset
 
! Size
 
! Description
 
|-
 
| 0x0
 
| 0x8
 
| Timestamp in samples (global)
 
|-
 
| 0x8
 
| 0x8
 
| Timestamp in samples
 
|-
 
| 0x10
 
| 0x4
 
| L analog trigger. Valid range: 0x0-0x7FFF.
 
|-
 
| 0x14
 
| 0x4
 
| R analog trigger. Valid range: 0x0-0x7FFF.
 
|}
 
 
 
== GestureSharedMemoryFormat ==
 
This is "nn::hid::detail::GestureSharedMemoryFormat".
 
 
 
{| class="wikitable" border="1"
 
|-
 
! Offset
 
! Size
 
! Description
 
|-
 
| 0x0
 
| 0x20
 
| [[#GestureHeader]]
 
|-
 
| 0x20
 
| 0x68 * 17
 
| Array of [[#GestureState]]
 
|}
 
 
 
=== GestureHeader ===
 
{| class="wikitable" border="1"
 
|-
 
! Offset
 
! Size
 
! Description
 
|-
 
| 0x0
 
| 0x8
 
| Timestamp in ticks
 
|-
 
| 0x8
 
| 0x8
 
| Number of Entries (always 17)
 
|-
 
| 0x10
 
| 0x8
 
| Latest Entry Index
 
|-
 
| 0x18
 
| 0x8
 
| Maximum Entry Index (always 16)
 
|}
 
 
 
=== GestureState ===
 
{| class="wikitable" border="1"
 
|-
 
! Offset
 
! Size
 
! Description
 
|-
 
| 0x0
 
| 0x8
 
| Timestamp in samples (global)
 
|-
 
| 0x8
 
| 0x60
 
|
 
|}
 
 
 
== ConsoleSixAxisSensorSharedMemoryFormat ==
 
{| class="wikitable" border="1"
 
|-
 
! Offset
 
! Size
 
! Description
 
|-
 
| 0x0
 
| 0x8
 
| Timestamp in samples
 
|-
 
| 0x8
 
| 0x1
 
| IsSevenSixAxisSensorAtRest
 
|-
 
| 0x9
 
| 0x3
 
| Padding
 
|-
 
| 0xC
 
| 0x4
 
| VerticalizationError
 
|-
 
| 0x10
 
| 0xC
 
| GyroBias
 
|-
 
| 0x1C
 
| 0x4
 
| Padding
 
|}
 

Latest revision as of 18:21, 22 November 2020

Redirect to: