Difference between revisions of "HID Shared Memory"
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. | 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. | ||
− | + | = SharedMemoryFormat = | |
+ | This is "nn::hid::detail::SharedMemoryFormat". | ||
− | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 12: | Line 12: | ||
| 0x0 | | 0x0 | ||
| 0x400 | | 0x400 | ||
− | | [[#DebugPad]] | + | | [[#DebugPadSharedMemoryFormat|DebugPad]] |
|- | |- | ||
| 0x400 | | 0x400 | ||
| 0x3000 | | 0x3000 | ||
− | | [[#TouchScreen]] | + | | [[#TouchScreenSharedMemoryFormat|TouchScreen]] |
|- | |- | ||
| 0x3400 | | 0x3400 | ||
| 0x400 | | 0x400 | ||
− | | [[#Mouse]] | + | | [[#MouseSharedMemoryFormat|Mouse]] |
|- | |- | ||
| 0x3800 | | 0x3800 | ||
| 0x400 | | 0x400 | ||
− | | [[#Keyboard]] | + | | [[#KeyboardSharedMemoryFormat|Keyboard]] |
|- | |- | ||
| 0x3C00 | | 0x3C00 | ||
− | | 0x1000 | + | | 0x1000 |
− | | [1.0.0-9.2.0] [[#BasicXpad]] | + | | [1.0.0-9.2.0] [[#BasicXpadSharedMemoryFormat|BasicXpad]] |
|- | |- | ||
| 0x3C00 | | 0x3C00 | ||
| | | | ||
− | | [10.0.0+] Digitizer | + | | [10.0.0+] [[#DigitizerSharedMemoryFormat|Digitizer]] |
|- | |- | ||
| 0x4C00 | | 0x4C00 | ||
| 0x200 | | 0x200 | ||
− | | [[#HomeButton]] | + | | [[#HomeButtonSharedMemoryFormat|HomeButton]] |
|- | |- | ||
| 0x4E00 | | 0x4E00 | ||
| 0x200 | | 0x200 | ||
− | | [[#SleepButton]] | + | | [[#SleepButtonSharedMemoryFormat|SleepButton]] |
|- | |- | ||
| 0x5000 | | 0x5000 | ||
| 0x200 | | 0x200 | ||
− | | [[#CaptureButton]] | + | | [[#CaptureButtonSharedMemoryFormat|CaptureButton]] |
|- | |- | ||
| 0x5200 | | 0x5200 | ||
| 0x800 (0x80 * 0x10) | | 0x800 (0x80 * 0x10) | ||
− | | [[#InputDetector]] | + | | [[#InputDetectorSharedMemoryFormat|InputDetector]] |
|- | |- | ||
| 0x5A00 | | 0x5A00 | ||
| 0x4000 (0x400 * 0x10) | | 0x4000 (0x400 * 0x10) | ||
− | | [1.0.0-4.1.0] [[#UniquePad]] | + | | [1.0.0-4.1.0] [[#UniquePadSharedMemoryFormat|UniquePad]] |
|- | |- | ||
| 0x9A00 | | 0x9A00 | ||
| 0x32000 (0x5000 * 0x0A) | | 0x32000 (0x5000 * 0x0A) | ||
− | | [[#Npad]] | + | | [[#NpadSharedMemoryFormat|Npad]] |
|- | |- | ||
| 0x3BA00 | | 0x3BA00 | ||
| 0x800 | | 0x800 | ||
− | | [[#Gesture]] | + | | [[#GestureSharedMemoryFormat|Gesture]] |
|- | |- | ||
| 0x3C200 | | 0x3C200 | ||
| 0x20 | | 0x20 | ||
− | | [5.0.0+] [[#ConsoleSixAxisSensor]] | + | | [5.0.0+] [[#ConsoleSixAxisSensorSharedMemoryFormat|ConsoleSixAxisSensor]] |
|} | |} | ||
− | == | + | == DebugPadSharedMemoryFormat == |
+ | This is "nn::hid::detail::DebugPadSharedMemoryFormat". | ||
+ | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 75: | Line 77: | ||
|- | |- | ||
| 0x0 | | 0x0 | ||
− | | | + | | 0x2C8 |
− | | [[# | + | | [[#DebugPadLifo]] |
− | |||
− | |||
− | |||
− | |||
|} | |} | ||
− | === | + | === DebugPadLifo === |
+ | This is "nn::hid::detail::DebugPadLifo". This is a RingLifo object. | ||
+ | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 92: | Line 92: | ||
| 0x0 | | 0x0 | ||
| 0x8 | | 0x8 | ||
− | | | + | | RingLifoVptr |
|- | |- | ||
| 0x8 | | 0x8 | ||
| 0x8 | | 0x8 | ||
− | | | + | | BufferCount |
|- | |- | ||
| 0x10 | | 0x10 | ||
| 0x8 | | 0x8 | ||
− | | | + | | Tail |
|- | |- | ||
| 0x18 | | 0x18 | ||
| 0x8 | | 0x8 | ||
− | | | + | | Count |
+ | |- | ||
+ | | 0x20 | ||
+ | | 0x28 * 17 | ||
+ | | Array of [[#DebugPadStateAtomicStorage]] | ||
|} | |} | ||
− | === | + | ==== DebugPadStateAtomicStorage ==== |
+ | This is "nn::hid::detail::DebugPadStateAtomicStorage". | ||
+ | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 116: | Line 122: | ||
| 0x0 | | 0x0 | ||
| 0x8 | | 0x8 | ||
− | | | + | | SamplingNumber |
|- | |- | ||
| 0x8 | | 0x8 | ||
| 0x20 | | 0x20 | ||
− | | | + | | [[#DebugPadState]] |
|} | |} | ||
− | == | + | ===== DebugPadState ===== |
+ | This is "nn::hid::DebugPadState". | ||
+ | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 131: | Line 139: | ||
|- | |- | ||
| 0x0 | | 0x0 | ||
− | | | + | | 0x8 |
− | | | + | | SamplingNumber |
|- | |- | ||
− | | | + | | 0x8 |
− | | | + | | 0x4 |
− | | | + | | [[#DebugPadAttributeSet|Attributes]] |
− | |||
− | |||
− | |||
− | |||
|- | |- | ||
− | + | | 0xC | |
− | + | | 0x4 | |
− | + | | [[#DebugPadButtonSet|Buttons]] | |
− | |||
− | |||
− | |||
− | |||
− | | | ||
− | | | ||
− | | | ||
− | | | ||
|- | |- | ||
| 0x10 | | 0x10 | ||
| 0x8 | | 0x8 | ||
− | | | + | | [[#AnalogStickState|AnalogStickR]] |
|- | |- | ||
| 0x18 | | 0x18 | ||
| 0x8 | | 0x8 | ||
− | | | + | | [[#AnalogStickState|AnalogStickL]] |
|} | |} | ||
− | == | + | == TouchScreenSharedMemoryFormat == |
+ | This is "nn::hid::detail::TouchScreenSharedMemoryFormat". | ||
+ | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 171: | Line 169: | ||
|- | |- | ||
| 0x0 | | 0x0 | ||
− | | 0x8 | + | | 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 | ||
− | | 0x8 | + | | 0x8 |
− | | | + | | BufferCount |
|- | |- | ||
| 0x10 | | 0x10 | ||
| 0x8 | | 0x8 | ||
− | | | + | | Tail |
|- | |- | ||
| 0x18 | | 0x18 | ||
− | | | + | | 0x8 |
− | | [[# | + | | Count |
+ | |- | ||
+ | | 0x20 | ||
+ | | 0x298 * 17 | ||
+ | | Array of [[#TouchScreenStateAtomicStorage]] | ||
|} | |} | ||
− | ==== | + | ==== TouchScreenStateAtomicStorage ==== |
+ | This is "nn::hid::detail::TouchScreenStateAtomicStorage". | ||
+ | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 196: | Line 214: | ||
| 0x0 | | 0x0 | ||
| 0x8 | | 0x8 | ||
− | | | + | | SamplingNumber |
|- | |- | ||
| 0x8 | | 0x8 | ||
− | | | + | | 0x290 |
− | | | + | | [[#TouchScreenState]] |
+ | |} | ||
+ | |||
+ | ===== TouchScreenState ===== | ||
+ | This is "nn::hid::detail::TouchScreenState". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
|- | |- | ||
− | + | ! Offset | |
− | + | ! Size | |
− | + | ! Description | |
|- | |- | ||
− | | | + | | 0x0 |
− | | | + | | 0x8 |
− | | | + | | SamplingNumber |
|- | |- | ||
− | | | + | | 0x8 |
| 0x4 | | 0x4 | ||
− | | | + | | Count |
|- | |- | ||
− | | | + | | 0xC |
| 0x4 | | 0x4 | ||
− | | | + | | Reserved |
|- | |- | ||
− | | | + | | 0x10 |
− | | | + | | 0x28 * 16 |
− | | | + | | [[#TouchState|Touches]] |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | | | ||
|} | |} | ||
− | == | + | ====== TouchState ====== |
− | + | This is "nn::hid::TouchState". | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 256: | Line 258: | ||
| 0x0 | | 0x0 | ||
| 0x8 | | 0x8 | ||
− | | | + | | DeltaTime |
|- | |- | ||
| 0x8 | | 0x8 | ||
− | | | + | | 0x4 |
− | | | + | | [[#TouchAttributeSet|Attributes]] |
+ | |- | ||
+ | | 0xC | ||
+ | | 0x4 | ||
+ | | FingerId | ||
|- | |- | ||
| 0x10 | | 0x10 | ||
− | | | + | | 0x4 |
− | | | + | | X |
+ | |- | ||
+ | | 0x14 | ||
+ | | 0x4 | ||
+ | | Y | ||
|- | |- | ||
| 0x18 | | 0x18 | ||
− | | | + | | 0x4 |
− | | | + | | DiameterX |
− | |||
− | |||
− | |||
− | |||
|- | |- | ||
− | + | | 0x1C | |
− | + | | 0x4 | |
− | + | | DiameterY | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | | 0x1C | ||
− | | 0x4 | ||
− | | | ||
|- | |- | ||
| 0x20 | | 0x20 | ||
| 0x4 | | 0x4 | ||
− | | | + | | RotationAngle |
|- | |- | ||
| 0x24 | | 0x24 | ||
| 0x4 | | 0x4 | ||
− | | | + | | Reserved |
− | |||
− | |||
− | |||
− | |||
|} | |} | ||
− | == | + | == MouseSharedMemoryFormat == |
+ | This is "nn::hid::detail::MouseSharedMemoryFormat". | ||
+ | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 322: | Line 302: | ||
! Description | ! Description | ||
|- | |- | ||
− | | 0x0 | + | | 0x0 |
− | | | + | | 0x350 |
− | | [[# | + | | [[#MouseLifo]] |
− | |||
− | |||
− | |||
− | |||
|} | |} | ||
− | === | + | === MouseLifo === |
+ | This is "nn::hid::detail::MouseLifo". This is a RingLifo object. | ||
+ | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 340: | Line 318: | ||
| 0x0 | | 0x0 | ||
| 0x8 | | 0x8 | ||
− | | | + | | RingLifoVptr |
|- | |- | ||
| 0x8 | | 0x8 | ||
| 0x8 | | 0x8 | ||
− | | | + | | BufferCount |
|- | |- | ||
| 0x10 | | 0x10 | ||
| 0x8 | | 0x8 | ||
− | | | + | | Tail |
|- | |- | ||
− | | 0x18 | + | | 0x18 |
| 0x8 | | 0x8 | ||
− | | | + | | Count |
+ | |- | ||
+ | | 0x20 | ||
+ | | 0x30 * 17 | ||
+ | | Array of [[#MouseStateAtomicStorage]] | ||
|} | |} | ||
− | === | + | ==== MouseStateAtomicStorage ==== |
+ | This is "nn::hid::detail::MouseStateAtomicStorage". | ||
+ | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 364: | Line 348: | ||
| 0x0 | | 0x0 | ||
| 0x8 | | 0x8 | ||
− | | | + | | SamplingNumber |
|- | |- | ||
| 0x8 | | 0x8 | ||
− | | | + | | 0x28 |
− | | | + | | [[#MouseState]] |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
|} | |} | ||
− | == | + | ===== MouseState ===== |
+ | This is "nn::hid::detail::MouseState". | ||
+ | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 387: | Line 365: | ||
|- | |- | ||
| 0x0 | | 0x0 | ||
− | | | + | | 0x8 |
− | | | + | | SamplingNumber |
|- | |- | ||
− | | 0x20 | + | | 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" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 404: | Line 426: | ||
| 0x0 | | 0x0 | ||
| 0x8 | | 0x8 | ||
− | | | + | | RingLifoVptr |
|- | |- | ||
| 0x8 | | 0x8 | ||
| 0x8 | | 0x8 | ||
− | | | + | | BufferCount |
|- | |- | ||
| 0x10 | | 0x10 | ||
| 0x8 | | 0x8 | ||
− | | | + | | Tail |
|- | |- | ||
| 0x18 | | 0x18 | ||
| 0x8 | | 0x8 | ||
− | | | + | | Count |
+ | |- | ||
+ | | 0x20 | ||
+ | | 0x38 * 17 | ||
+ | | Array of [[#KeyboardStateAtomicStorage]] | ||
|} | |} | ||
− | === | + | ==== KeyboardStateAtomicStorage ==== |
+ | This is "nn::hid::detail::KeyboardStateAtomicStorage". | ||
+ | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 428: | Line 456: | ||
| 0x0 | | 0x0 | ||
| 0x8 | | 0x8 | ||
− | | | + | | SamplingNumber |
|- | |- | ||
| 0x8 | | 0x8 | ||
− | | | + | | 0x30 |
− | | | + | | [[#KeyboardState]] |
|} | |} | ||
− | == | + | ===== KeyboardState ===== |
+ | This is "nn::hid::detail::KeyboardState". | ||
+ | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 443: | Line 473: | ||
|- | |- | ||
| 0x0 | | 0x0 | ||
− | | | + | | 0x8 |
− | | | + | | SamplingNumber |
|- | |- | ||
+ | | 0x8 | ||
+ | | 0x8 | ||
+ | | [[#KeyboardModifierSet|Modifiers]] | ||
+ | |- | ||
+ | | 0x10 | ||
| 0x20 | | 0x20 | ||
− | | | + | | [[#KeyboardKeySet|Keys]] |
− | |||
|} | |} | ||
− | == | + | == BasicXpadSharedMemoryFormat == |
+ | This is "nn::hid::detail::BasicXpadSharedMemoryFormat". | ||
+ | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 459: | Line 495: | ||
|- | |- | ||
| 0x0 | | 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" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 484: | Line 524: | ||
| 0x0 | | 0x0 | ||
| 0x8 | | 0x8 | ||
− | | | + | | RingLifoVptr |
|- | |- | ||
| 0x8 | | 0x8 | ||
+ | | 0x8 | ||
+ | | BufferCount | ||
+ | |- | ||
| 0x10 | | 0x10 | ||
− | | | + | | 0x8 |
+ | | Tail | ||
+ | |- | ||
+ | | 0x18 | ||
+ | | 0x8 | ||
+ | | Count | ||
+ | |- | ||
+ | | 0x20 | ||
+ | | 0x28 * 17 | ||
+ | | Array of [[#BasicXpadStateAtomicStorage]] | ||
|} | |} | ||
− | == | + | ===== BasicXpadStateAtomicStorage ===== |
+ | This is "nn::hid::detail::BasicXpadStateAtomicStorage". | ||
+ | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 499: | Line 553: | ||
|- | |- | ||
| 0x0 | | 0x0 | ||
− | | | + | | 0x8 |
− | | | + | | SamplingNumber |
|- | |- | ||
+ | | 0x8 | ||
| 0x20 | | 0x20 | ||
− | | | + | | [[#BasicXpadState]] |
− | |||
|} | |} | ||
− | === | + | ====== BasicXpadState ====== |
+ | This is "nn::hid::detail::BasicXpadState". | ||
+ | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 516: | Line 572: | ||
| 0x0 | | 0x0 | ||
| 0x8 | | 0x8 | ||
− | | | + | | SamplingNumber |
|- | |- | ||
| 0x8 | | 0x8 | ||
− | | | + | | 0x4 |
− | | | + | | [[#BasicXpadAttributeSet|Attributes]] |
+ | |- | ||
+ | | 0xC | ||
+ | | 0x4 | ||
+ | | [[#BasicXpadButtonSet|Buttons]] | ||
|- | |- | ||
| 0x10 | | 0x10 | ||
| 0x8 | | 0x8 | ||
− | | | + | | [[#AnalogStickState|AnalogStickL]] |
|- | |- | ||
| 0x18 | | 0x18 | ||
| 0x8 | | 0x8 | ||
− | | | + | | [[#AnalogStickState|AnalogStickR]] |
|} | |} | ||
− | == | + | == HomeButtonSharedMemoryFormat == |
+ | This is "nn::hid::detail::HomeButtonSharedMemoryFormat". | ||
+ | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 539: | Line 601: | ||
|- | |- | ||
| 0x0 | | 0x0 | ||
− | | | + | | 0x1B8 |
− | + | | [[#HomeButtonLifo]] | |
− | |||
− | |||
− | |||
− | | | ||
|} | |} | ||
− | == | + | === HomeButtonLifo === |
− | + | This is "nn::hid::detail::HomeButtonLifo". This is a RingLifo object. | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 572: | Line 616: | ||
| 0x0 | | 0x0 | ||
| 0x8 | | 0x8 | ||
− | | | + | | RingLifoVptr |
|- | |- | ||
| 0x8 | | 0x8 | ||
| 0x8 | | 0x8 | ||
− | | | + | | BufferCount |
|- | |- | ||
| 0x10 | | 0x10 | ||
| 0x8 | | 0x8 | ||
− | | | + | | Tail |
|- | |- | ||
| 0x18 | | 0x18 | ||
| 0x8 | | 0x8 | ||
− | | | + | | Count |
+ | |- | ||
+ | | 0x20 | ||
+ | | 0x18 * 17 | ||
+ | | Array of [[#HomeButtonStateAtomicStorage]] | ||
|} | |} | ||
− | === | + | ==== HomeButtonStateAtomicStorage ==== |
+ | This is "nn::hid::detail::HomeButtonStateAtomicStorage". | ||
+ | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 596: | Line 646: | ||
| 0x0 | | 0x0 | ||
| 0x8 | | 0x8 | ||
− | | | + | | SamplingNumber |
|- | |- | ||
| 0x8 | | 0x8 | ||
| 0x10 | | 0x10 | ||
− | | | + | | [[#HomeButtonState]] |
|} | |} | ||
− | == | + | ===== HomeButtonState ===== |
+ | This is "nn::hid::system::HomeButtonState". | ||
+ | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 611: | Line 663: | ||
|- | |- | ||
| 0x0 | | 0x0 | ||
− | | | + | | 0x8 |
− | | | + | | SamplingNumber |
|- | |- | ||
− | | | + | | 0x8 |
− | | | + | | 0x8 |
− | | | + | | [[#HomeButtonSet|Buttons]] |
|} | |} | ||
− | == | + | == SleepButtonSharedMemoryFormat == |
+ | This is "nn::hid::detail::SleepButtonSharedMemoryFormat". | ||
+ | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 627: | Line 681: | ||
|- | |- | ||
| 0x0 | | 0x0 | ||
− | | | + | | 0x1B8 |
− | | | + | | [[#SleepButtonLifo]] |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
|} | |} | ||
− | === | + | === SleepButtonLifo === |
+ | This is "nn::hid::detail::SleepButtonLifo". This is a RingLifo object. | ||
+ | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 652: | Line 696: | ||
| 0x0 | | 0x0 | ||
| 0x8 | | 0x8 | ||
− | | | + | | RingLifoVptr |
|- | |- | ||
| 0x8 | | 0x8 | ||
+ | | 0x8 | ||
+ | | BufferCount | ||
+ | |- | ||
| 0x10 | | 0x10 | ||
− | | | + | | 0x8 |
+ | | Tail | ||
+ | |- | ||
+ | | 0x18 | ||
+ | | 0x8 | ||
+ | | Count | ||
+ | |- | ||
+ | | 0x20 | ||
+ | | 0x18 * 17 | ||
+ | | Array of [[#SleepButtonStateAtomicStorage]] | ||
|} | |} | ||
− | == | + | ==== SleepButtonStateAtomicStorage ==== |
− | This | + | This is "nn::hid::detail::SleepButtonStateAtomicStorage". |
− | |||
− | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 671: | Line 725: | ||
|- | |- | ||
| 0x0 | | 0x0 | ||
− | | | + | | 0x8 |
− | | | + | | SamplingNumber |
|- | |- | ||
− | | | + | | 0x8 |
− | | | + | | 0x10 |
− | | | + | | [[#SleepButtonState]] |
|} | |} | ||
− | === | + | ===== SleepButtonState ===== |
+ | This is "nn::hid::system::SleepButtonState". | ||
+ | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 687: | Line 743: | ||
|- | |- | ||
| 0x0 | | 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" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 704: | Line 776: | ||
| 0x0 | | 0x0 | ||
| 0x8 | | 0x8 | ||
− | | | + | | RingLifoVptr |
|- | |- | ||
| 0x8 | | 0x8 | ||
| 0x8 | | 0x8 | ||
− | | | + | | BufferCount |
|- | |- | ||
| 0x10 | | 0x10 | ||
| 0x8 | | 0x8 | ||
− | | | + | | Tail |
|- | |- | ||
| 0x18 | | 0x18 | ||
| 0x8 | | 0x8 | ||
− | | | + | | Count |
+ | |- | ||
+ | | 0x20 | ||
+ | | 0x18 * 17 | ||
+ | | Array of [[#CaptureButtonStateAtomicStorage]] | ||
|} | |} | ||
− | ==== | + | ==== CaptureButtonStateAtomicStorage ==== |
+ | This is "nn::hid::detail::CaptureButtonStateAtomicStorage". | ||
+ | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 728: | Line 806: | ||
| 0x0 | | 0x0 | ||
| 0x8 | | 0x8 | ||
− | | | + | | SamplingNumber |
|- | |- | ||
| 0x8 | | 0x8 | ||
− | |||
− | |||
− | |||
| 0x10 | | 0x10 | ||
− | | | + | | [[#CaptureButtonState]] |
− | |||
|} | |} | ||
− | === | + | ===== CaptureButtonState ===== |
+ | This is "nn::hid::system::CaptureButtonState". | ||
+ | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 747: | Line 823: | ||
|- | |- | ||
| 0x0 | | 0x0 | ||
− | | 0x20 | + | | 0x8 |
− | | [[# | + | | SamplingNumber |
− | |- | + | |- |
− | | 0x20 | + | | 0x8 |
− | | 0x28 * 2 | + | | 0x8 |
− | | Array of [[# | + | | [[#CaptureButtonSet|Buttons]] |
− | |} | + | |} |
− | + | ||
− | ==== | + | == InputDetectorSharedMemoryFormat == |
− | {| class="wikitable" border="1" | + | 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 | ! Offset | ||
Line 764: | Line 1,200: | ||
| 0x0 | | 0x0 | ||
| 0x8 | | 0x8 | ||
− | | | + | | [[#SixAxisSensorUserCalibrationFlagsSet|Flags]] |
|- | |- | ||
| 0x8 | | 0x8 | ||
| 0x8 | | 0x8 | ||
− | | | + | | Stage |
|- | |- | ||
| 0x10 | | 0x10 | ||
| 0x8 | | 0x8 | ||
− | | | + | | SamplingNumber |
− | |||
− | |||
− | |||
− | |||
|} | |} | ||
− | == | + | == NpadSharedMemoryFormat == |
− | + | This is "nn::hid::detail::NpadSharedMemoryFormat". | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
This section contains a series of 10 0x5000 byte structures describing each available controller. | This section contains a series of 10 0x5000 byte structures describing each available controller. | ||
Line 1,399: | Line 1,817: | ||
|} | |} | ||
− | == | + | == GestureSharedMemoryFormat == |
+ | This is "nn::hid::detail::GestureSharedMemoryFormat". | ||
+ | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 1,455: | Line 1,875: | ||
|} | |} | ||
− | == | + | == ConsoleSixAxisSensorSharedMemoryFormat == |
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- |
Revision as of 18:35, 18 November 2020
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.
This is "nn::hid::detail::SharedMemoryFormat".
Offset | Size | Description |
---|---|---|
0x0 | 0x400 | DebugPad |
0x400 | 0x3000 | TouchScreen |
0x3400 | 0x400 | Mouse |
0x3800 | 0x400 | Keyboard |
0x3C00 | 0x1000 | [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 |
This is "nn::hid::detail::DebugPadSharedMemoryFormat".
Offset | Size | Description |
---|---|---|
0x0 | 0x2C8 | #DebugPadLifo |
DebugPadLifo
This is "nn::hid::detail::DebugPadLifo". This is a RingLifo object.
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".
Offset | Size | Description |
---|---|---|
0x0 | 0x8 | SamplingNumber |
0x8 | 0x20 | #DebugPadState |
DebugPadState
This is "nn::hid::DebugPadState".
Offset | Size | Description |
---|---|---|
0x0 | 0x8 | SamplingNumber |
0x8 | 0x4 | Attributes |
0xC | 0x4 | Buttons |
0x10 | 0x8 | AnalogStickR |
0x18 | 0x8 | AnalogStickL |
This is "nn::hid::detail::TouchScreenSharedMemoryFormat".
Offset | Size | Description |
---|---|---|
0x0 | 0x2C38 | #TouchScreenLifo |
TouchScreenLifo
This is "nn::hid::detail::TouchScreenLifo". This is a RingLifo object.
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".
Offset | Size | Description |
---|---|---|
0x0 | 0x8 | SamplingNumber |
0x8 | 0x290 | #TouchScreenState |
TouchScreenState
This is "nn::hid::detail::TouchScreenState".
Offset | Size | Description |
---|---|---|
0x0 | 0x8 | SamplingNumber |
0x8 | 0x4 | Count |
0xC | 0x4 | Reserved |
0x10 | 0x28 * 16 | Touches |
TouchState
This is "nn::hid::TouchState".
Offset | Size | Description |
---|---|---|
0x0 | 0x8 | DeltaTime |
0x8 | 0x4 | Attributes |
0xC | 0x4 | FingerId |
0x10 | 0x4 | X |
0x14 | 0x4 | Y |
0x18 | 0x4 | DiameterX |
0x1C | 0x4 | DiameterY |
0x20 | 0x4 | RotationAngle |
0x24 | 0x4 | Reserved |
This is "nn::hid::detail::MouseSharedMemoryFormat".
Offset | Size | Description |
---|---|---|
0x0 | 0x350 | #MouseLifo |
MouseLifo
This is "nn::hid::detail::MouseLifo". This is a RingLifo object.
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".
Offset | Size | Description |
---|---|---|
0x0 | 0x8 | SamplingNumber |
0x8 | 0x28 | #MouseState |
MouseState
This is "nn::hid::detail::MouseState".
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 | Buttons |
0x24 | 0x4 | Attributes |
This is "nn::hid::detail::KeyboardSharedMemoryFormat".
Offset | Size | Description |
---|---|---|
0x0 | 0x3D8 | #KeyboardLifo |
KeyboardLifo
This is "nn::hid::detail::KeyboardLifo". This is a RingLifo object.
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".
Offset | Size | Description |
---|---|---|
0x0 | 0x8 | SamplingNumber |
0x8 | 0x30 | #KeyboardState |
KeyboardState
This is "nn::hid::detail::KeyboardState".
Offset | Size | Description |
---|---|---|
0x0 | 0x8 | SamplingNumber |
0x8 | 0x8 | Modifiers |
0x10 | 0x20 | Keys |
This is "nn::hid::detail::BasicXpadSharedMemoryFormat".
Offset | Size | Description |
---|---|---|
0x0 | 0x400 * 4 | Array of #BasicXpadSharedMemoryEntry |
This is "nn::hid::detail::BasicXpadSharedMemoryEntry".
Offset | Size | Description |
---|---|---|
0x0 | 0x2C8 | #BasicXpadLifo |
BasicXpadLifo
This is "nn::hid::detail::BasicXpadLifo". This is a RingLifo object.
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".
Offset | Size | Description |
---|---|---|
0x0 | 0x8 | SamplingNumber |
0x8 | 0x20 | #BasicXpadState |
BasicXpadState
This is "nn::hid::detail::BasicXpadState".
Offset | Size | Description |
---|---|---|
0x0 | 0x8 | SamplingNumber |
0x8 | 0x4 | Attributes |
0xC | 0x4 | Buttons |
0x10 | 0x8 | AnalogStickL |
0x18 | 0x8 | AnalogStickR |
This is "nn::hid::detail::HomeButtonSharedMemoryFormat".
Offset | Size | Description |
---|---|---|
0x0 | 0x1B8 | #HomeButtonLifo |
HomeButtonLifo
This is "nn::hid::detail::HomeButtonLifo". This is a RingLifo object.
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".
Offset | Size | Description |
---|---|---|
0x0 | 0x8 | SamplingNumber |
0x8 | 0x10 | #HomeButtonState |
HomeButtonState
This is "nn::hid::system::HomeButtonState".
Offset | Size | Description |
---|---|---|
0x0 | 0x8 | SamplingNumber |
0x8 | 0x8 | Buttons |
This is "nn::hid::detail::SleepButtonSharedMemoryFormat".
Offset | Size | Description |
---|---|---|
0x0 | 0x1B8 | #SleepButtonLifo |
SleepButtonLifo
This is "nn::hid::detail::SleepButtonLifo". This is a RingLifo object.
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".
Offset | Size | Description |
---|---|---|
0x0 | 0x8 | SamplingNumber |
0x8 | 0x10 | #SleepButtonState |
SleepButtonState
This is "nn::hid::system::SleepButtonState".
Offset | Size | Description |
---|---|---|
0x0 | 0x8 | SamplingNumber |
0x8 | 0x8 | Buttons |
This is "nn::hid::detail::CaptureButtonSharedMemoryFormat".
Offset | Size | Description |
---|---|---|
0x0 | 0x1B8 | #CaptureButtonLifo |
CaptureButtonLifo
This is "nn::hid::detail::CaptureButtonLifo". This is a RingLifo object.
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".
Offset | Size | Description |
---|---|---|
0x0 | 0x8 | SamplingNumber |
0x8 | 0x10 | #CaptureButtonState |
CaptureButtonState
This is "nn::hid::system::CaptureButtonState".
Offset | Size | Description |
---|---|---|
0x0 | 0x8 | SamplingNumber |
0x8 | 0x8 | Buttons |
This is "nn::hid::detail::InputDetectorSharedMemoryFormat".
Offset | Size | Description |
---|---|---|
0x0 | 0x80 * 16 | Array of #InputDetectorSharedMemoryEntry |
This is "nn::hid::detail::InputDetectorSharedMemoryEntry".
Offset | Size | Description |
---|---|---|
0x0 | 0x50 | #InputDetectorLifo |
InputDetectorLifo
This is "nn::hid::detail::InputDetectorLifo". This is a RingLifo object.
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".
Offset | Size | Description |
---|---|---|
0x0 | 0x8 | SamplingNumber |
0x8 | 0x10 | #InputDetectorState |
InputDetectorState
This is "nn::hid::detail::InputDetectorState".
Offset | Size | Description |
---|---|---|
0x0 | 0x8 | InputSourceState |
0x8 | 0x8 | SamplingNumber |
This is "nn::hid::detail::UniquePadSharedMemoryFormat".
[5.0.0+] This section has been removed from #SharedMemoryFormat. #UniquePadSharedMemoryFormat is now a specialization of #NpadSharedMemoryFormat.
Offset | Size | Description |
---|---|---|
0x0 | 0x400 * 16 | Array of #UniquePadSharedMemoryEntry |
This is "nn::hid::detail::UniquePadSharedMemoryEntry".
Offset | Size | Description |
---|---|---|
0x0 | 0x1E0 | #UniquePadLifo |
UniquePadLifo
This is "nn::hid::detail::UniquePadLifo". This is a RingLifo object.
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.
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".
Offset | Size | Description |
---|---|---|
0x0 | 0x8 | SamplingNumber |
0x8 | 0x28 | #UniquePadConfig |
= UniquePadConfig =
This is "nn::hid::detail::UniquePadConfig".
Offset | Size | Description |
---|---|---|
0x0 | 0x4 | Type |
0x4 | 0x4 | Interface |
0x8 | 0x10 | 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.
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".
Offset | Size | Description |
---|---|---|
0x0 | 0x8 | SamplingNumber |
0x8 | 0x20 | #AnalogStickCalibrationStateImpl |
= AnalogStickCalibrationStateImpl =
This is "nn::hid::detail::AnalogStickCalibrationStateImpl".
Offset | Size | Description |
---|---|---|
0x0 | 0x8 | State |
0x8 | 0x8 | Flags |
0x10 | 0x8 | Stage |
0x18 | 0x8 | SamplingNumber |
SixAxisSensorUserCalibrationStateLifo
This is "nn::hid::detail::SixAxisSensorUserCalibrationStateLifo". This is a RingLifo object.
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".
Offset | Size | Description |
---|---|---|
0x0 | 0x8 | SamplingNumber |
0x8 | 0x18 | #SixAxisSensorUserCalibrationState |
= UniquePadConfig =
This is "nn::hid::detail::UniquePadConfig".
Offset | Size | Description |
---|---|---|
0x0 | 0x8 | Flags |
0x8 | 0x8 | Stage |
0x10 | 0x8 | SamplingNumber |
This is "nn::hid::detail::NpadSharedMemoryFormat".
This section contains a series of 10 0x5000 byte structures describing each available controller.
Index | Description |
---|---|
0 to 7 | Players 1 to 8 |
8 | Handheld Mode |
9 | Other |
NpadState
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 | 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 commands GetXcdHandleForNpadWithNfc/IsNfcActivated) |
0x41C8 | 0x20 * 2 | [1.0.0-3.0.2] Array of #NfcXcdDeviceHandleState (See above) |
0x41A8 | 0x4 | [9.0.0+] AppletFooterUiAttribute |
0x41AC | 0x1 | [9.0.0+] AppletFooterUiType |
0x4208 | 0x8 | Mutex |
0x4228 | 0x20 | NpadGcTriggerHeader |
0x4248 | 0x18 * 17 | Array of NpadGcTriggerState |
0x43E0 | 0x4 | |
0x43E4 | 0x4 | |
0x43E8 | 0x4 |
NpadStateHeader
Offset | Size | Description |
---|---|---|
0x0 | 0x4 | NpadStyleSet |
0x4 | 0x4 | 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
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
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".
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
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
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
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
Bit | Description |
---|---|
0 | UnintendedHomeButtonInputProtectionEnabled (if cleared) |
NfcXcdDeviceHandleState
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
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. |
This is "nn::hid::detail::GestureSharedMemoryFormat".
Offset | Size | Description |
---|---|---|
0x0 | 0x20 | #GestureHeader |
0x20 | 0x68 * 17 | Array of #GestureState |
GestureHeader
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
Offset | Size | Description |
---|---|---|
0x0 | 0x8 | Timestamp in samples (global) |
0x8 | 0x60 |
Offset | Size | Description |
---|---|---|
0x0 | 0x8 | Timestamp in samples |
0x8 | 0x1 | IsSevenSixAxisSensorAtRest |
0x9 | 0x3 | Padding |
0xC | 0x4 | VerticalizationError |
0x10 | 0xC | GyroBias |
0x1C | 0x4 | Padding |