HID Shared Memory: Difference between revisions

From Nintendo Switch Brew
Jump to navigation Jump to search
No edit summary
Redirected page to HID services
Tag: New redirect
 
(One intermediate revision 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 20:21, 22 November 2020

Redirect to: