HID Shared Memory: Difference between revisions

No edit summary
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.


In sdknso this is "nn::hid::detail::SharedMemoryFormat".
= SharedMemoryFormat =
This is "nn::hid::detail::SharedMemoryFormat".


= Memory Map =
{| 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 (0x400 * 0x04)
| 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]]
|}
|}


== DebugPad ==
== DebugPadSharedMemoryFormat ==
This is "nn::hid::detail::DebugPadSharedMemoryFormat".
 
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
Line 75: Line 77:
|-
|-
| 0x0
| 0x0
| 0x20
| 0x2C8
| [[#DebugPadHeader]]
| [[#DebugPadLifo]]
|-
| 0x20
| 0x28 * 17
| Array of [[#DebugPadState]]
|}
|}


=== DebugPadHeader ===
=== 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
| Timestamp in ticks
| RingLifoVptr
|-
|-
| 0x8
| 0x8
| 0x8
| 0x8
| Number of Entries (always 17)
| BufferCount
|-
|-
| 0x10
| 0x10
| 0x8
| 0x8
| Latest Entry Index
| Tail
|-
|-
| 0x18
| 0x18
| 0x8
| 0x8
| Maximum Entry Index (always 16)
| Count
|-
| 0x20
| 0x28 * 17
| Array of [[#DebugPadStateAtomicStorage]]
|}
|}


=== DebugPadState ===
==== DebugPadStateAtomicStorage ====
This is "nn::hid::detail::DebugPadStateAtomicStorage".
 
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
Line 116: Line 122:
| 0x0
| 0x0
| 0x8
| 0x8
| Timestamp in samples (global)
| SamplingNumber
|-
|-
| 0x8
| 0x8
| 0x20
| 0x20
|  
| [[#DebugPadState]]
|}
|}


== TouchScreen ==
===== DebugPadState =====
This is "nn::hid::DebugPadState".
 
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
Line 131: Line 139:
|-
|-
| 0x0
| 0x0
| 0x20
| 0x8
| [[#TouchScreenHeader]]
| SamplingNumber
|-
|-
| 0x20
| 0x8
| 0x298 * 17
| 0x4
| Array of [[#TouchScreenState]]
| [[#DebugPadAttributeSet|Attributes]]
|}
 
=== TouchScreenHeader ===
{| class="wikitable" border="1"
|-
|-
! Offset
| 0xC
! Size
| 0x4
! Description
| [[#DebugPadButtonSet|Buttons]]
|-
| 0x0
| 0x8
| Timestamp in ticks
|-
| 0x8
| 0x8
| Number of Entries (always 17)
|-
|-
| 0x10
| 0x10
| 0x8
| 0x8
| Latest Entry Index
| [[#AnalogStickState|AnalogStickR]]
|-
|-
| 0x18
| 0x18
| 0x8
| 0x8
| Maximum Entry Index (always 16)
| [[#AnalogStickState|AnalogStickL]]
|}
|}


=== TouchScreenState ===
== TouchScreenSharedMemoryFormat ==
This is "nn::hid::detail::TouchScreenSharedMemoryFormat".
 
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
Line 171: Line 169:
|-
|-
| 0x0
| 0x0
| 0x8
| 0x2C38
| Timestamp in samples (global)
| [[#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
| Timestamp in samples
| BufferCount
|-
|-
| 0x10
| 0x10
| 0x8
| 0x8
| Touch count
| Tail
|-
|-
| 0x18
| 0x18
| 0x28 * 16
| 0x8
| [[#TouchScreenStateData]]
| Count
|-
| 0x20
| 0x298 * 17
| Array of [[#TouchScreenStateAtomicStorage]]
|}
|}


==== TouchScreenStateData ====
==== TouchScreenStateAtomicStorage ====
This is "nn::hid::detail::TouchScreenStateAtomicStorage".
 
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
Line 196: Line 214:
| 0x0
| 0x0
| 0x8
| 0x8
| Timestamp in samples
| SamplingNumber
|-
|-
| 0x8
| 0x8
| 0x4
| 0x290
| Padding
| [[#TouchScreenState]]
|}
 
===== TouchScreenState =====
This is "nn::hid::detail::TouchScreenState".
 
{| class="wikitable" border="1"
|-
|-
| 0xC
! Offset
| 0x4
! Size
| Touch Index
! Description
|-
|-
| 0x10
| 0x0
| 0x4
| 0x8
| Touch X
| SamplingNumber
|-
|-
| 0x14
| 0x8
| 0x4
| 0x4
| Touch Y
| Count
|-
|-
| 0x18
| 0xC
| 0x4
| 0x4
| Touch Diameter X
| Reserved
|-
|-
| 0x1C
| 0x10
| 0x4
| 0x28 * 16
| Touch Diameter Y
| [[#TouchState|Touches]]
|-
| 0x20
| 0x4
| Angle
|-
| 0x24
| 0x4
| Padding
|}
|}


== Mouse ==
====== TouchState ======
{| class="wikitable" border="1"
This is "nn::hid::TouchState".
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x20
| [[#MouseHeader]]
|-
| 0x20
| 0x30 * 17
| Array of [[#MouseState]]
|}


=== MouseHeader ===
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
Line 256: Line 258:
| 0x0
| 0x0
| 0x8
| 0x8
| Timestamp in ticks
| DeltaTime
|-
|-
| 0x8
| 0x8
| 0x8
| 0x4
| Number of Entries (always 17)
| [[#TouchAttributeSet|Attributes]]
|-
| 0xC
| 0x4
| FingerId
|-
|-
| 0x10
| 0x10
| 0x8
| 0x4
| Latest Entry Index
| X
|-
| 0x14
| 0x4
| Y
|-
|-
| 0x18
| 0x18
| 0x8
| 0x4
| Maximum Entry Index (always 16)
| DiameterX
|}
 
=== MouseState ===
{| class="wikitable" border="1"
|-
|-
! Offset
| 0x1C
! Size
| 0x4
! Description
| DiameterY
|-
| 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
| 0x20
| 0x4
| 0x4
| Scroll Change Y
| RotationAngle
|-
|-
| 0x24
| 0x24
| 0x4
| 0x4
| Scroll Change X
| Reserved
|-
| 0x28
| 0x8
| Mouse Buttons
|}
|}


== Keyboard ==
== MouseSharedMemoryFormat ==
This is "nn::hid::detail::MouseSharedMemoryFormat".
 
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
Line 322: Line 302:
! Description
! Description
|-
|-
| 0x0
| 0x0
| 0x20
| 0x350
| [[#KeyboardHeader]]
| [[#MouseLifo]]
|-
| 0x20
| 0x38 * 17
| Array of [[#KeyboardState]]
|}
|}


=== KeyboardHeader ===
=== 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
| Timestamp in ticks
| RingLifoVptr
|-
|-
| 0x8
| 0x8
| 0x8
| 0x8
| Number of Entries (always 17)
| BufferCount
|-
|-
| 0x10
| 0x10
| 0x8
| 0x8
| Latest Entry Index
| Tail
|-
|-
| 0x18
| 0x18
| 0x8
| 0x8
| Maximum Entry Index (always 16)
| Count
|-
| 0x20
| 0x30 * 17
| Array of [[#MouseStateAtomicStorage]]
|}
|}


=== KeyboardState ===
==== MouseStateAtomicStorage ====
This is "nn::hid::detail::MouseStateAtomicStorage".
 
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
Line 364: Line 348:
| 0x0
| 0x0
| 0x8
| 0x8
| Timestamp in samples (global)
| SamplingNumber
|-
|-
| 0x8
| 0x8
| 0x8
| 0x28
| Timestamp in samples
| [[#MouseState]]
|-
| 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 ==
===== MouseState =====
This is "nn::hid::detail::MouseState".
 
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
Line 387: Line 365:
|-
|-
| 0x0
| 0x0
| 0x20
| 0x8
| [[#BasicXpadHeader]]
| SamplingNumber
|-
|-
| 0x20
| 0x8
| 0x28 * 17
| 0x4
| Array of [[#BasicXpadState]]
| X
|-
| 0xC
| 0x4
| Y
|-
| 0x10
| 0x4
| DeltaX
|-
| 0x14
| 0x4
| DeltaY
|-
| 0x18
| 0x4
| WheelDeltaX
|-
| 0x1C
| 0x4
| WheelDeltaY
|-
| 0x20
| 0x4
| [[#MouseButtonSet|Buttons]]
|-
| 0x24
| 0x4
| [[#MouseAttributeSet|Attributes]]
|}
|}


=== BasicXpadHeader ===
== 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
| Timestamp in ticks
| RingLifoVptr
|-
|-
| 0x8
| 0x8
| 0x8
| 0x8
| Number of Entries (always 17)
| BufferCount
|-
|-
| 0x10
| 0x10
| 0x8
| 0x8
| Latest Entry Index
| Tail
|-
|-
| 0x18
| 0x18
| 0x8
| 0x8
| Maximum Entry Index (always 16)
| Count
|-
| 0x20
| 0x38 * 17
| Array of [[#KeyboardStateAtomicStorage]]
|}
|}


=== BasicXpadState ===
==== KeyboardStateAtomicStorage ====
This is "nn::hid::detail::KeyboardStateAtomicStorage".
 
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
Line 428: Line 456:
| 0x0
| 0x0
| 0x8
| 0x8
| Timestamp in samples (global)
| SamplingNumber
|-
|-
| 0x8
| 0x8
| 0x20
| 0x30
|  
| [[#KeyboardState]]
|}
|}


== HomeButton ==
===== KeyboardState =====
This is "nn::hid::detail::KeyboardState".
 
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
Line 443: Line 473:
|-
|-
| 0x0
| 0x0
| 0x20
| 0x8
| [[#HomeButtonHeader]]
| SamplingNumber
|-
|-
| 0x8
| 0x8
| [[#KeyboardModifierSet|Modifiers]]
|-
| 0x10
| 0x20
| 0x20
| 0x18 * 17
| [[#KeyboardKeySet|Keys]]
| Array of [[#HomeButtonState]]
|}
|}


=== HomeButtonHeader ===
== BasicXpadSharedMemoryFormat ==
This is "nn::hid::detail::BasicXpadSharedMemoryFormat".
 
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
Line 459: Line 495:
|-
|-
| 0x0
| 0x0
| 0x8
| 0x400 * 4
| Timestamp in ticks
| Array of [[#BasicXpadSharedMemoryEntry]]
|}
 
=== BasicXpadSharedMemoryEntry ===
This is "nn::hid::detail::BasicXpadSharedMemoryEntry".
 
{| class="wikitable" border="1"
|-
|-
| 0x8
! Offset
| 0x8
! Size
| Number of Entries (always 17)
! Description
|-
|-
| 0x10
| 0x0
| 0x8
| 0x2C8
| Latest Entry Index
| [[#BasicXpadLifo]]
|-
| 0x18
| 0x8
| Maximum Entry Index (always 16)
|}
|}


=== HomeButtonState ===
==== 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
| Timestamp in samples (global)
| RingLifoVptr
|-
|-
| 0x8
| 0x8
| 0x8
| BufferCount
|-
| 0x10
| 0x10
|  
| 0x8
| Tail
|-
| 0x18
| 0x8
| Count
|-
| 0x20
| 0x28 * 17
| Array of [[#BasicXpadStateAtomicStorage]]
|}
|}


== SleepButton ==
===== BasicXpadStateAtomicStorage =====
This is "nn::hid::detail::BasicXpadStateAtomicStorage".
 
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
Line 499: Line 553:
|-
|-
| 0x0
| 0x0
| 0x20
| 0x8
| [[#SleepButtonHeader]]
| SamplingNumber
|-
|-
| 0x8
| 0x20
| 0x20
| 0x18 * 17
| [[#BasicXpadState]]
| Array of [[#SleepButtonState]]
|}
|}


=== SleepButtonHeader ===
====== BasicXpadState ======
This is "nn::hid::detail::BasicXpadState".
 
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
Line 516: Line 572:
| 0x0
| 0x0
| 0x8
| 0x8
| Timestamp in ticks
| SamplingNumber
|-
|-
| 0x8
| 0x8
| 0x8
| 0x4
| Number of Entries (always 17)
| [[#BasicXpadAttributeSet|Attributes]]
|-
| 0xC
| 0x4
| [[#BasicXpadButtonSet|Buttons]]
|-
|-
| 0x10
| 0x10
| 0x8
| 0x8
| Latest Entry Index
| [[#AnalogStickState|AnalogStickL]]
|-
|-
| 0x18
| 0x18
| 0x8
| 0x8
| Maximum Entry Index (always 16)
| [[#AnalogStickState|AnalogStickR]]
|}
|}


=== SleepButtonState ===
== HomeButtonSharedMemoryFormat ==
This is "nn::hid::detail::HomeButtonSharedMemoryFormat".
 
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
Line 539: Line 601:
|-
|-
| 0x0
| 0x0
| 0x8
| 0x1B8
| Timestamp in samples (global)
| [[#HomeButtonLifo]]
|-
| 0x8
| 0x10
|  
|}
|}


== CaptureButton ==
=== HomeButtonLifo ===
{| class="wikitable" border="1"
This is "nn::hid::detail::HomeButtonLifo". This is a RingLifo object.
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x20
| [[#CaptureButtonHeader]]
|-
| 0x20
| 0x18 * 17
| Array of [[#CaptureButtonState]]
|}


=== CaptureButtonHeader ===
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
Line 572: Line 616:
| 0x0
| 0x0
| 0x8
| 0x8
| Timestamp in ticks
| RingLifoVptr
|-
|-
| 0x8
| 0x8
| 0x8
| 0x8
| Number of Entries (always 17)
| BufferCount
|-
|-
| 0x10
| 0x10
| 0x8
| 0x8
| Latest Entry Index
| Tail
|-
|-
| 0x18
| 0x18
| 0x8
| 0x8
| Maximum Entry Index (always 16)
| Count
|-
| 0x20
| 0x18 * 17
| Array of [[#HomeButtonStateAtomicStorage]]
|}
|}


=== CaptureButtonState ===
==== HomeButtonStateAtomicStorage ====
This is "nn::hid::detail::HomeButtonStateAtomicStorage".
 
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
Line 596: Line 646:
| 0x0
| 0x0
| 0x8
| 0x8
| Timestamp in samples (global)
| SamplingNumber
|-
|-
| 0x8
| 0x8
| 0x10
| 0x10
|  
| [[#HomeButtonState]]
|}
|}


== InputDetector ==
===== HomeButtonState =====
This is "nn::hid::system::HomeButtonState".
 
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
Line 611: Line 663:
|-
|-
| 0x0
| 0x0
| 0x20
| 0x8
| [[#InputDetectorHeader]]
| SamplingNumber
|-
|-
| 0x20
| 0x8
| 0x18 * 2
| 0x8
| Array of [[#InputDetectorState]]
| [[#HomeButtonSet|Buttons]]
|}
|}


=== InputDetectorHeader ===
== SleepButtonSharedMemoryFormat ==
This is "nn::hid::detail::SleepButtonSharedMemoryFormat".
 
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
Line 627: Line 681:
|-
|-
| 0x0
| 0x0
| 0x8
| 0x1B8
| Timestamp in ticks
| [[#SleepButtonLifo]]
|-
| 0x8
| 0x8
| Number of Entries (always 17)
|-
| 0x10
| 0x8
| Latest Entry Index
|-
| 0x18
| 0x8
| Maximum Entry Index (always 16)
|}
|}


=== InputDetectorState ===
=== 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
| Timestamp in samples (global)
| RingLifoVptr
|-
|-
| 0x8
| 0x8
| 0x8
| BufferCount
|-
| 0x10
| 0x10
|  
| 0x8
| Tail
|-
| 0x18
| 0x8
| Count
|-
| 0x20
| 0x18 * 17
| Array of [[#SleepButtonStateAtomicStorage]]
|}
|}


== UniquePad ==
==== SleepButtonStateAtomicStorage ====
This section contains a series of 16 structures 0x400 bytes large.
This is "nn::hid::detail::SleepButtonStateAtomicStorage".
 
[5.0.0+] This section has been removed from SharedMemoryFormat. [[#UniquePad]] is now a specialization of [[#Npad]].


{| class="wikitable" border="1"
{| class="wikitable" border="1"
Line 671: Line 725:
|-
|-
| 0x0
| 0x0
| 0x80
| 0x8
| [[#UniquePadConfig]]
| SamplingNumber
|-
|-
| 0x80
| 0x8
| 0x70 * 2
| 0x10
| Array of [[#AnalogStickCalibration]]
| [[#SleepButtonState]]
|}
|}


=== UniquePadConfig ===
===== SleepButtonState =====
This is "nn::hid::system::SleepButtonState".
 
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
Line 687: Line 743:
|-
|-
| 0x0
| 0x0
| 0x20
| 0x8
| [[#UniquePadConfigHeader]]
| SamplingNumber
|-
|-
| 0x20
| 0x8
| 0x30 * 2
| 0x8
| Array of [[#UniquePadConfigState]]
| [[#SleepButtonSet|Buttons]]
|}
|}


==== UniquePadConfigHeader ====
== 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
| Timestamp in ticks
| RingLifoVptr
|-
|-
| 0x8
| 0x8
| 0x8
| 0x8
| Number of Entries (always 17)
| BufferCount
|-
|-
| 0x10
| 0x10
| 0x8
| 0x8
| Latest Entry Index
| Tail
|-
|-
| 0x18
| 0x18
| 0x8
| 0x8
| Maximum Entry Index (always 16)
| Count
|-
| 0x20
| 0x18 * 17
| Array of [[#CaptureButtonStateAtomicStorage]]
|}
|}


==== UniquePadConfigState ====
==== CaptureButtonStateAtomicStorage ====
This is "nn::hid::detail::CaptureButtonStateAtomicStorage".
 
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
Line 728: Line 806:
| 0x0
| 0x0
| 0x8
| 0x8
| Timestamp in samples (global)
| SamplingNumber
|-
|-
| 0x8
| 0x8
| 0x8
|
|-
| 0x10
| 0x10
| 0x20
| [[#CaptureButtonState]]
| Controller Serial
|}
|}


=== AnalogStickCalibration ===
===== CaptureButtonState =====
This is "nn::hid::system::CaptureButtonState".
 
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
Line 747: Line 823:
|-
|-
| 0x0
| 0x0
| 0x20
| 0x8
| [[#AnalogStickCalibrationHeader]]
| SamplingNumber
|-
|-
| 0x20
| 0x8
| 0x28 * 2
| 0x8
| Array of [[#AnalogStickCalibrationState]]
| [[#CaptureButtonSet|Buttons]]
|}
|}
 
 
==== AnalogStickCalibrationHeader ====
== 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
| Timestamp in ticks
| [[#SixAxisSensorUserCalibrationFlagsSet|Flags]]
|-
|-
| 0x8
| 0x8
| 0x8
| 0x8
| Number of Entries (always 17)
| Stage
|-
|-
| 0x10
| 0x10
| 0x8
| 0x8
| Latest Entry Index
| SamplingNumber
|-
| 0x18
| 0x8
| Maximum Entry Index (always 16)
|}
|}


==== AnalogStickCalibrationState ====
== NpadSharedMemoryFormat ==
{| class="wikitable" border="1"
This is "nn::hid::detail::NpadSharedMemoryFormat".
|-
! 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.
This section contains a series of 10 0x5000 byte structures describing each available controller.


Line 1,399: Line 1,817:
|}
|}


== Gesture ==
== GestureSharedMemoryFormat ==
This is "nn::hid::detail::GestureSharedMemoryFormat".
 
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
Line 1,455: Line 1,875:
|}
|}


== ConsoleSixAxisSensor ==
== ConsoleSixAxisSensorSharedMemoryFormat ==
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-