Changes

16,475 bytes removed ,  18:21, 22 November 2020
Redirected page to HID services
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]]
 
  −
In sdknso this is "nn::hid::detail::SharedMemoryFormat".
  −
 
  −
= Memory Map =
  −
{| class="wikitable" border="1"
  −
|-
  −
! Offset
  −
! Size
  −
! Description
  −
|-
  −
| 0x0
  −
| 0x400
  −
| [[#DebugPad]]
  −
|-
  −
| 0x400
  −
| 0x3000
  −
| [[#TouchScreen]]
  −
|-
  −
| 0x3400
  −
| 0x400
  −
| [[#Mouse]]
  −
|-
  −
| 0x3800
  −
| 0x400
  −
| [[#Keyboard]]
  −
|-
  −
| 0x3C00
  −
| 0x1000 (0x400 * 0x04)
  −
| [1.0.0-9.2.0] [[#BasicXpad]]
  −
|-
  −
| 0x3C00
  −
|
  −
| [10.0.0+] Digitizer
  −
|-
  −
| 0x4C00
  −
| 0x200
  −
| [[#HomeButton]]
  −
|-
  −
| 0x4E00
  −
| 0x200
  −
| [[#SleepButton]]
  −
|-
  −
| 0x5000
  −
| 0x200
  −
| [[#CaptureButton]]
  −
|-
  −
| 0x5200
  −
| 0x800 (0x80 * 0x10)
  −
| [[#InputDetector]]
  −
|-
  −
| 0x5A00
  −
| 0x4000 (0x400 * 0x10)
  −
| [1.0.0-4.1.0] [[#UniquePad]]
  −
|-
  −
| 0x9A00
  −
| 0x32000 (0x5000 * 0x0A)
  −
| [[#Npad]]
  −
|-
  −
| 0x3BA00
  −
| 0x800
  −
| [[#Gesture]]
  −
|-
  −
| 0x3C200
  −
| 0x20
  −
| [5.0.0+] [[#ConsoleSixAxisSensor]]
  −
|}
  −
 
  −
== DebugPad ==
  −
{| class="wikitable" border="1"
  −
|-
  −
! Offset
  −
! Size
  −
! Description
  −
|-
  −
| 0x0
  −
| 0x20
  −
| [[#DebugPadHeader]]
  −
|-
  −
| 0x20
  −
| 0x28 * 17
  −
| Array of [[#DebugPadState]]
  −
|}
  −
 
  −
=== DebugPadHeader ===
  −
{| 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)
  −
|}
  −
 
  −
=== DebugPadState ===
  −
{| class="wikitable" border="1"
  −
|-
  −
! Offset
  −
! Size
  −
! Description
  −
|-
  −
| 0x0
  −
| 0x8
  −
| Timestamp in samples (global)
  −
|-
  −
| 0x8
  −
| 0x20
  −
|
  −
|}
  −
 
  −
== TouchScreen ==
  −
{| class="wikitable" border="1"
  −
|-
  −
! Offset
  −
! Size
  −
! Description
  −
|-
  −
| 0x0
  −
| 0x20
  −
| [[#TouchScreenHeader]]
  −
|-
  −
| 0x20
  −
| 0x298 * 17
  −
| Array of [[#TouchScreenState]]
  −
|}
  −
 
  −
=== TouchScreenHeader ===
  −
{| 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)
  −
|}
  −
 
  −
=== TouchScreenState ===
  −
{| class="wikitable" border="1"
  −
|-
  −
! Offset
  −
! Size
  −
! Description
  −
|-
  −
| 0x0
  −
| 0x8
  −
| Timestamp in samples (global)
  −
|-
  −
| 0x8
  −
| 0x8
  −
| Timestamp in samples
  −
|-
  −
| 0x10
  −
| 0x8
  −
| Touch count
  −
|-
  −
| 0x18
  −
| 0x28 * 16
  −
| [[#TouchScreenStateData]]
  −
|}
  −
 
  −
==== TouchScreenStateData ====
  −
{| class="wikitable" border="1"
  −
|-
  −
! Offset
  −
! Size
  −
! Description
  −
|-
  −
| 0x0
  −
| 0x8
  −
| Timestamp in samples
  −
|-
  −
| 0x8
  −
| 0x4
  −
| Padding
  −
|-
  −
| 0xC
  −
| 0x4
  −
| Touch Index
  −
|-
  −
| 0x10
  −
| 0x4
  −
| Touch X
  −
|-
  −
| 0x14
  −
| 0x4
  −
| Touch Y
  −
|-
  −
| 0x18
  −
| 0x4
  −
| Touch Diameter X
  −
|-
  −
| 0x1C
  −
| 0x4
  −
| Touch Diameter Y
  −
|-
  −
| 0x20
  −
| 0x4
  −
| Angle
  −
|-
  −
| 0x24
  −
| 0x4
  −
| Padding
  −
|}
  −
 
  −
== Mouse ==
  −
{| class="wikitable" border="1"
  −
|-
  −
! Offset
  −
! Size
  −
! Description
  −
|-
  −
| 0x0
  −
| 0x20
  −
| [[#MouseHeader]]
  −
|-
  −
| 0x20
  −
| 0x30 * 17
  −
| Array of [[#MouseState]]
  −
|}
  −
 
  −
=== MouseHeader ===
  −
{| 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)
  −
|}
  −
 
  −
=== MouseState ===
  −
{| class="wikitable" border="1"
  −
|-
  −
! Offset
  −
! Size
  −
! Description
  −
|-
  −
| 0x0
  −
| 0x8
  −
| Timestamp in samples (global)
  −
|-
  −
| 0x8
  −
| 0x8
  −
| Timestamp in samples
  −
|-
  −
| 0x10
  −
| 0x4
  −
| Mouse X
  −
|-
  −
| 0x14
  −
| 0x4
  −
| Mouse Y
  −
|-
  −
| 0x18
  −
| 0x4
  −
| Mouse X Change
  −
|-
  −
| 0x1C
  −
| 0x4
  −
| Mouse Y Change
  −
|-
  −
| 0x20
  −
| 0x4
  −
| Scroll Change Y
  −
|-
  −
| 0x24
  −
| 0x4
  −
| Scroll Change X
  −
|-
  −
| 0x28
  −
| 0x8
  −
| Mouse Buttons
  −
|}
  −
 
  −
== Keyboard ==
  −
{| class="wikitable" border="1"
  −
|-
  −
! Offset
  −
! Size
  −
! Description
  −
|-
  −
| 0x0
  −
| 0x20
  −
| [[#KeyboardHeader]]
  −
|-
  −
| 0x20
  −
| 0x38 * 17
  −
| Array of [[#KeyboardState]]
  −
|}
  −
 
  −
=== KeyboardHeader ===
  −
{| 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)
  −
|}
  −
 
  −
=== KeyboardState ===
  −
{| class="wikitable" border="1"
  −
|-
  −
! Offset
  −
! Size
  −
! Description
  −
|-
  −
| 0x0
  −
| 0x8
  −
| Timestamp in samples (global)
  −
|-
  −
| 0x8
  −
| 0x8
  −
| Timestamp in samples
  −
|-
  −
| 0x10
  −
| 0x8
  −
| Modifier Mask
  −
|-
  −
| 0x18
  −
| 0x20
  −
| Keys Down, each key gets one bit based on the HID keyboard scan code (F1 is 0x3A, bit 0x3A is set)
  −
|}
  −
 
  −
== BasicXpad ==
  −
{| class="wikitable" border="1"
  −
|-
  −
! Offset
  −
! Size
  −
! Description
  −
|-
  −
| 0x0
  −
| 0x20
  −
| [[#BasicXpadHeader]]
  −
|-
  −
| 0x20
  −
| 0x28 * 17
  −
| Array of [[#BasicXpadState]]
  −
|}
  −
 
  −
=== BasicXpadHeader ===
  −
{| 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)
  −
|}
  −
 
  −
=== BasicXpadState ===
  −
{| class="wikitable" border="1"
  −
|-
  −
! Offset
  −
! Size
  −
! Description
  −
|-
  −
| 0x0
  −
| 0x8
  −
| Timestamp in samples (global)
  −
|-
  −
| 0x8
  −
| 0x20
  −
|
  −
|}
  −
 
  −
== HomeButton ==
  −
{| class="wikitable" border="1"
  −
|-
  −
! Offset
  −
! Size
  −
! Description
  −
|-
  −
| 0x0
  −
| 0x20
  −
| [[#HomeButtonHeader]]
  −
|-
  −
| 0x20
  −
| 0x18 * 17
  −
| Array of [[#HomeButtonState]]
  −
|}
  −
 
  −
=== HomeButtonHeader ===
  −
{| 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)
  −
|}
  −
 
  −
=== HomeButtonState ===
  −
{| class="wikitable" border="1"
  −
|-
  −
! Offset
  −
! Size
  −
! Description
  −
|-
  −
| 0x0
  −
| 0x8
  −
| Timestamp in samples (global)
  −
|-
  −
| 0x8
  −
| 0x10
  −
|
  −
|}
  −
 
  −
== SleepButton ==
  −
{| class="wikitable" border="1"
  −
|-
  −
! Offset
  −
! Size
  −
! Description
  −
|-
  −
| 0x0
  −
| 0x20
  −
| [[#SleepButtonHeader]]
  −
|-
  −
| 0x20
  −
| 0x18 * 17
  −
| Array of [[#SleepButtonState]]
  −
|}
  −
 
  −
=== SleepButtonHeader ===
  −
{| 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)
  −
|}
  −
 
  −
=== SleepButtonState ===
  −
{| class="wikitable" border="1"
  −
|-
  −
! Offset
  −
! Size
  −
! Description
  −
|-
  −
| 0x0
  −
| 0x8
  −
| Timestamp in samples (global)
  −
|-
  −
| 0x8
  −
| 0x10
  −
|
  −
|}
  −
 
  −
== CaptureButton ==
  −
{| class="wikitable" border="1"
  −
|-
  −
! Offset
  −
! Size
  −
! Description
  −
|-
  −
| 0x0
  −
| 0x20
  −
| [[#CaptureButtonHeader]]
  −
|-
  −
| 0x20
  −
| 0x18 * 17
  −
| Array of [[#CaptureButtonState]]
  −
|}
  −
 
  −
=== CaptureButtonHeader ===
  −
{| 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)
  −
|}
  −
 
  −
=== CaptureButtonState ===
  −
{| class="wikitable" border="1"
  −
|-
  −
! Offset
  −
! Size
  −
! Description
  −
|-
  −
| 0x0
  −
| 0x8
  −
| Timestamp in samples (global)
  −
|-
  −
| 0x8
  −
| 0x10
  −
|
  −
|}
  −
 
  −
== InputDetector ==
  −
{| class="wikitable" border="1"
  −
|-
  −
! Offset
  −
! Size
  −
! Description
  −
|-
  −
| 0x0
  −
| 0x20
  −
| [[#InputDetectorHeader]]
  −
|-
  −
| 0x20
  −
| 0x18 * 2
  −
| Array of [[#InputDetectorState]]
  −
|}
  −
 
  −
=== InputDetectorHeader ===
  −
{| 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)
  −
|}
  −
 
  −
=== InputDetectorState ===
  −
{| class="wikitable" border="1"
  −
|-
  −
! Offset
  −
! Size
  −
! Description
  −
|-
  −
| 0x0
  −
| 0x8
  −
| Timestamp in samples (global)
  −
|-
  −
| 0x8
  −
| 0x10
  −
|
  −
|}
  −
 
  −
== UniquePad ==
  −
This section contains a series of 16 structures 0x400 bytes large.
  −
 
  −
[5.0.0+] This section has been removed from SharedMemoryFormat. [[#UniquePad]] is now a specialization of [[#Npad]].
  −
 
  −
{| class="wikitable" border="1"
  −
|-
  −
! Offset
  −
! Size
  −
! Description
  −
|-
  −
| 0x0
  −
| 0x80
  −
| [[#UniquePadConfig]]
  −
|-
  −
| 0x80
  −
| 0x70 * 2
  −
| Array of [[#AnalogStickCalibration]]
  −
|}
  −
 
  −
=== UniquePadConfig ===
  −
{| class="wikitable" border="1"
  −
|-
  −
! Offset
  −
! Size
  −
! Description
  −
|-
  −
| 0x0
  −
| 0x20
  −
| [[#UniquePadConfigHeader]]
  −
|-
  −
| 0x20
  −
| 0x30 * 2
  −
| Array of [[#UniquePadConfigState]]
  −
|}
  −
 
  −
==== UniquePadConfigHeader ====
  −
{| 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)
  −
|}
  −
 
  −
==== UniquePadConfigState ====
  −
{| class="wikitable" border="1"
  −
|-
  −
! Offset
  −
! Size
  −
! Description
  −
|-
  −
| 0x0
  −
| 0x8
  −
| Timestamp in samples (global)
  −
|-
  −
| 0x8
  −
| 0x8
  −
|
  −
|-
  −
| 0x10
  −
| 0x20
  −
| Controller Serial
  −
|}
  −
 
  −
=== AnalogStickCalibration ===
  −
{| class="wikitable" border="1"
  −
|-
  −
! Offset
  −
! Size
  −
! Description
  −
|-
  −
| 0x0
  −
| 0x20
  −
| [[#AnalogStickCalibrationHeader]]
  −
|-
  −
| 0x20
  −
| 0x28 * 2
  −
| Array of [[#AnalogStickCalibrationState]]
  −
|}
  −
 
  −
==== AnalogStickCalibrationHeader ====
  −
{| 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)
  −
|}
  −
 
  −
==== AnalogStickCalibrationState ====
  −
{| class="wikitable" border="1"
  −
|-
  −
! Offset
  −
! Size
  −
! Description
  −
|-
  −
| 0x0
  −
| 0x8
  −
| Timestamp in samples (global)
  −
|-
  −
| 0x8
  −
| 0x28
  −
|
  −
|}
  −
 
  −
== Npad ==
  −
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
  −
|-
  −
| 0x12B8
  −
| 0x30 * 17
  −
| Array of NpadPalmaState
  −
|-
  −
| 0x1408
  −
| 0x20
  −
| NpadSystemExtHeader
  −
|-
  −
| 0x1428
  −
| 0x30 * 17
  −
| Array of NpadSystemExtState
  −
|-
  −
| 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
  −
|
  −
|}
  −
 
  −
==== 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
  −
|
  −
|}
  −
 
  −
===== 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
  −
|}
  −
 
  −
== Gesture ==
  −
{| 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
  −
|
  −
|}
  −
 
  −
== ConsoleSixAxisSensor ==
  −
{| 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
  −
|}