HID Shared Memory: Difference between revisions

No edit summary
No edit summary
Line 28: Line 28:
| 0x3C00
| 0x3C00
| 0x1000
| 0x1000
| [1.0.0-9.2.0] [[#BasicXpadSharedMemoryFormat|BasicXpad]]
| [[#DigitizerSharedMemoryFormat|Digitizer]] ([1.0.0-9.2.0] [[#BasicXpadSharedMemoryFormat|BasicXpad]])
|-
| 0x3C00
|
| [10.0.0+] [[#DigitizerSharedMemoryFormat|Digitizer]]
|-
|-
| 0x4C00
| 0x4C00
Line 63: Line 59:
|-
|-
| 0x3C200
| 0x3C200
| 0x20
| 0x1C
| [5.0.0+] [[#ConsoleSixAxisSensorSharedMemoryFormat|ConsoleSixAxisSensor]]
| [5.0.0+] [[#ConsoleSixAxisSensorSharedMemoryFormat|ConsoleSixAxisSensor]]
|}
|}
Line 941: Line 937:
|}
|}


=== UniquePadSharedMemoryEntry ===
== UniquePadSharedMemoryEntry ==
This is "nn::hid::detail::UniquePadSharedMemoryEntry".
This is "nn::hid::detail::UniquePadSharedMemoryEntry".


Line 955: Line 951:
|}
|}


==== UniquePadLifo ====
=== UniquePadLifo ===
This is "nn::hid::detail::UniquePadLifo". This is a RingLifo object.
This is "nn::hid::detail::UniquePadLifo". This is a RingLifo object.


Line 977: Line 973:
|-
|-
| 0x1A0
| 0x1A0
| 0x8
| 0x40
| UniquePadConfigMutex
| UniquePadConfigMutex
|}
|}


===== UniquePadConfigLifo =====
==== UniquePadConfigLifo ====
This is "nn::hid::detail::UniquePadConfigLifo". This is a RingLifo object.
This is "nn::hid::detail::UniquePadConfigLifo". This is a RingLifo object.


Line 1,011: Line 1,007:
|}
|}


====== UniquePadConfigAtomicStorage ======
===== UniquePadConfigAtomicStorage =====
This is "nn::hid::detail::UniquePadConfigAtomicStorage".
This is "nn::hid::detail::UniquePadConfigAtomicStorage".


Line 1,067: Line 1,063:
|}
|}


===== AnalogStickCalibrationStateImplLifo =====
==== AnalogStickCalibrationStateImplLifo ====
This is "nn::hid::detail::AnalogStickCalibrationStateImplLifo". This is a RingLifo object.
This is "nn::hid::detail::AnalogStickCalibrationStateImplLifo". This is a RingLifo object.


Line 1,094: Line 1,090:
| 0x20
| 0x20
| 0x28 * 2
| 0x28 * 2
| Array of [[#AnalogStickCalibrationStateImpl]]
| Array of [[#AnalogStickCalibrationStateImplAtomicStorage]]
|}
|}


====== AnalogStickCalibrationStateImplAtomicStorage ======
===== AnalogStickCalibrationStateImplAtomicStorage =====
This is "nn::hid::detail::AnalogStickCalibrationStateImplAtomicStorage".
This is "nn::hid::detail::AnalogStickCalibrationStateImplAtomicStorage".


Line 1,141: Line 1,137:
|}
|}


===== SixAxisSensorUserCalibrationStateLifo =====
==== SixAxisSensorUserCalibrationStateLifo ====
This is "nn::hid::detail::SixAxisSensorUserCalibrationStateLifo". This is a RingLifo object.
This is "nn::hid::detail::SixAxisSensorUserCalibrationStateLifo". This is a RingLifo object.


Line 1,171: Line 1,167:
|}
|}


====== SixAxisSensorUserCalibrationStateAtomicStorage ======
===== SixAxisSensorUserCalibrationStateAtomicStorage =====
This is "nn::hid::detail::SixAxisSensorUserCalibrationStateAtomicStorage".
This is "nn::hid::detail::SixAxisSensorUserCalibrationStateAtomicStorage".


Line 1,189: Line 1,185:
|}
|}


====== UniquePadConfig ======
====== SixAxisSensorUserCalibrationState ======
This is "nn::hid::detail::UniquePadConfig".
This is "nn::hid::detail::UniquePadConfig".


Line 1,199: Line 1,195:
|-
|-
| 0x0
| 0x0
| 0x8
| 0x4
| [[#SixAxisSensorUserCalibrationFlagsSet|Flags]]
| [[#SixAxisSensorUserCalibrationFlagsSet|Flags]]
|-
| 0x4
| 0x4
| Reserved
|-
|-
| 0x8
| 0x8
Line 1,214: Line 1,214:
This is "nn::hid::detail::NpadSharedMemoryFormat".
This is "nn::hid::detail::NpadSharedMemoryFormat".


This section contains a series of 10 0x5000 byte structures describing each available controller.
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x5000 * 10
| Array of [[#NpadSharedMemoryEntry]]
|}


Each entry describes an available controller:
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
! Index
! Entry
! Description
! Description
|-
|-
Line 1,231: Line 1,241:
|}
|}


=== NpadState ===
== NpadSharedMemoryEntry ==
This is "nn::hid::detail::NpadSharedMemoryEntry".
 
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
Line 1,239: Line 1,251:
|-
|-
| 0x0
| 0x0
| 0x28
| 0x43F0 ([1.0.0-8.1.0] 0x4410)
| [[#NpadStateHeader]]
| [[#NpadInternalState]]
|}
 
=== NpadInternalState ===
This is "nn::hid::detail::NpadInternalState".
 
{| class="wikitable" border="1"
|-
|-
| 0x28
! Offset
| 0x20
! Size
| NpadFullKeyHeader
! Description
|-
| 0x0
| 0x4
| [[HID_services#NpadStyleTag|StyleSet]]
|-
| 0x4
| 0x4
| [[HID_services#NpadJoyAssignmentMode|JoyAssignmentMode]]
|-
| 0x8
| 0xC
| [[#NpadFullKeyColorState|FullKeyColor]]
|-
| 0x14
| 0x14
| [[#NpadJoyColorState|JoyColor]]
|-
|-
| 0x48
| 0x28
| 0x30 * 17
| 0x350
| Array of NpadFullKeyState
| [[#NpadFullKeyLifo|FullKeyLifo]]
|-
|-
| 0x378
| 0x378
| 0x20
| 0x350
| [[#NpadHandheldHeader]]
| [[#NpadHandheldLifo|HandheldLifo]]
|-
| 0x398
| 0x30 * 17
| Array of [[#NpadHandheldState]]
|-
|-
| 0x6C8
| 0x6C8
| 0x20
| 0x350
| NpadJoyDualHeader
| [[#NpadJoyDualLifo|JoyDualLifo]]
|-
| 0x6E8
| 0x30 * 17
| Array of NpadJoyDualState
|-
|-
| 0xA18
| 0xA18
| 0x20
| 0x350
| NpadJoyLeftHeader
| [[#NpadJoyLeftLifo|JoyLeftLifo]]
|-
| 0xA38
| 0x30 * 17
| Array of NpadJoyLeftState
|-
|-
| 0xD68
| 0xD68
| 0x20
| 0x350
| NpadJoyRightHeader
| [[#NpadJoyRightLifo|JoyRightLifo]]
|-
| 0xD88
| 0x30 * 17
| Array of NpadJoyRightState
|-
|-
| 0x10B8
| 0x10B8
| 0x20
| 0x350
| NpadPalmaHeader ([1.0.0-3.0.2] NpadSystemHeader)
| [[#NpadPalmaLifo|PalmaLifo]] ([1.0.0-3.0.2] [[#NpadSystemLifo|SystemLifo]])
|-
| 0x12B8
| 0x30 * 17
| Array of NpadPalmaState ([1.0.0-3.0.2] NpadSystemState)
|-
|-
| 0x1408
| 0x1408
| 0x20
| 0x350
| NpadSystemExtHeader ([4.0.0+] also used by NpadSystem)
| [[#NpadSystemExtLifo|SystemExtLifo]] ([4.0.0+] also used for NpadSystem)
|-
| 0x1428
| 0x30 * 17
| Array of NpadSystemExtState ([4.0.0+] also used by NpadSystem)
|-
|-
| 0x1758
| 0x1758
| 0x20
| 0x708
| NpadSixAxisSensorFullKeyHeader
| [[#NpadSixAxisSensorLifo|FullKeySixAxisSensorLifo]]
|-
| 0x1778
| 0x68 * 17
| Array of NpadSixAxisSensorFullKeyState
|-
|-
| 0x1E60
| 0x1E60
| 0x20
| 0x708
| NpadSixAxisSensorHandheldHeader
| [[#NpadSixAxisSensorLifo|HandheldSixAxisSensorLifo]]
|-
| 0x1E80
| 0x68 * 17
| Array of NpadSixAxisSensorHandheldState
|-
|-
| 0x2568
| 0x2568
| 0x20
| 0x708
| NpadSixAxisSensorJoyLeftDualHeader
| [[#NpadSixAxisSensorLifo|JoyDualLeftSixAxisSensorLifo]]
|-
| 0x2588
| 0x68 * 17
| Array of NpadSixAxisSensorJoyLeftDualState
|-
|-
| 0x2C70
| 0x2C70
| 0x20
| 0x708
| NpadSixAxisSensorJoyRightDualHeader
| [[#NpadSixAxisSensorLifo|JoyDualRightSixAxisSensorLifo]]
|-
| 0x2C90
| 0x68 * 17
| Array of NpadSixAxisSensorJoyRightDualState
|-
|-
| 0x3378
| 0x3378
| 0x20
| 0x708
| NpadSixAxisSensorJoyLeftHeader
| [[#NpadSixAxisSensorLifo|JoyLeftSixAxisSensorLifo]]
|-
| 0x3398
| 0x68 * 17
| Array of NpadSixAxisSensorJoyLeftState
|-
|-
| 0x3A80
| 0x3A80
| 0x20
| 0x708
| NpadSixAxisSensorJoyRightHeader
| [[#NpadSixAxisSensorLifo|JoyRightSixAxisSensorLifo]]
|-
| 0x3AA0
| 0x68 * 17
| Array of NpadSixAxisSensorJoyRightState
|-
|-
| 0x4188
| 0x4188
Line 1,352: Line 1,338:
| 0x418C
| 0x418C
| 0x4
| 0x4
| Padding
| Reserved
|-
|-
| 0x4190
| 0x4190
| 0x8
| 0x8
| [[#NpadSystemProperties]]
| [[#NpadSystemProperties|SystemProperties]]
|-
|-
| 0x4198
| 0x4198
| 0x4
| 0x4
| [[#NpadSystemButtonProperties]]
| [[#NpadSystemButtonProperties|SystemButtonProperties]]
|-
|-
| 0x419C
| 0x419C
| 0x4
| 0x4
| BatteryIndex0 state (must be 0-4)
| BatteryLevel0
|-
|-
| 0x41A0
| 0x41A0
| 0x4
| 0x4
| BatteryIndex1 state (must be 0-4)
| BatteryLevel1
|-
|-
| 0x41A4
| 0x41A4
| 0x4
| 0x4
| BatteryIndex2 state (must be 0-4)
| BatteryLevel2
|-
|-
| 0x41A8
| 0x41A8
| 0x20
| 0x60
| [1.0.0-3.0.2] NfcXcdDeviceHandleHeader (Replaced by [[HID_services|commands]] GetXcdHandleForNpadWithNfc/IsNfcActivated)
| [1.0.0-8.1.0] [[#NfcXcdDeviceHandleState|NfcXcdDeviceHandle]] (replaced by [[HID_services|GetXcdHandleForNpadWithNfc/IsNfcActivated]])
|-
| 0x41C8
| 0x20 * 2
| [1.0.0-3.0.2] Array of [[#NfcXcdDeviceHandleState]] (See above)
|-
|-
| 0x41A8
| 0x41A8
| 0x4
| 0x4
| [9.0.0+] [[HID_services#AppletFooterUiAttribute|AppletFooterUiAttribute]]
| [9.0.0+] [[#AppletFooterUiAttribute|AppletFooterUiAttributes]]
|-
|-
| 0x41AC
| 0x41AC
| 0x1
| 0x1
| [9.0.0+] [[HID_services#AppletFooterUiType|AppletFooterUiType]]
| [9.0.0+] [[#AppletFooterUiType|AppletFooterUiType]]
|-
| 0x41AD
| 0x7B
| [9.0.0+] Reserved
|-
|-
| 0x4208
| 0x4208
| 0x8
| 0x40
| Mutex
| [1.0.0-8.1.0] Mutex
|-
|-
| 0x4228
| 0x4228 ([1.0.0-8.1.0] 0x4248)
| 0x20
| 0x1B8
| NpadGcTriggerHeader
| [[#NpadGcTriggerLifo|GcTriggerLifo]]
|-
|-
| 0x4248
| 0x43E0 ([1.0.0-8.1.0] 0x4400)
| 0x18 * 17
| 0x4
| Array of NpadGcTriggerState
| LarkTypeLAndMain
|-
|-
| 0x43E0
| 0x43E4 ([1.0.0-8.1.0] 0x4404)
| 0x4
| 0x4
|  
| LarkTypeR
|-
|-
| 0x43E4
| 0x43E8 ([1.0.0-8.1.0] 0x4408)
| 0x4
| 0x4
|  
| LuciaType
|-
|-
| 0x43E8
| 0x43EC ([1.0.0-8.1.0] 0x440C)
| 0x4
| 0x4
|  
|  
|}
|}


==== NpadStateHeader ====
==== NpadFullKeyLifo ====
This is "nn::hid::detail::NpadFullKeyLifo". This is a RingLifo object.
 
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
Line 1,423: Line 1,411:
|-
|-
| 0x0
| 0x0
| 0x4
| 0x8
| [[HID_services#NpadStyleTag|NpadStyleSet]]
| RingLifoVptr
|-
| 0x4
| 0x4
| [[HID_services#NpadJoyAssignmentMode|NpadJoyAssignmentMode]]
|-
|-
| 0x8
| 0x8
| 0x4
| 0x8
| bit1 color set does not exist
| BufferCount
|-
| 0xC
| 0x4
| RGBA Body Color (single Joy-Con or Pro Controller)
|-
|-
| 0x10
| 0x10
| 0x4
| 0x8
| RGBA Button Color (single Joy-Con or Pro Controller)
| Tail
|-
| 0x14
| 0x4
| bit1 color set does not exist
|-
|-
| 0x18
| 0x18
| 0x4
| 0x8
| RGBA Body Color (right Joy-Con)
| Count
|-
| 0x1C
| 0x4
| RGBA Button Color (right Joy-Con)
|-
|-
| 0x20
| 0x20
| 0x4
| 0x30 * 17
| RGBA Body Color (left Joy-Con)
| Array of [[#NpadFullKeyStateAtomicStorage]]
|-
| 0x24
| 0x4
| RGBA Button Color (left Joy-Con)
|}
|}


==== NpadHandheldHeader ====
===== NpadFullKeyStateAtomicStorage =====
This is "nn::hid::detail::NpadFullKeyStateAtomicStorage".
 
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
Line 1,472: Line 1,442:
| 0x0
| 0x0
| 0x8
| 0x8
| Timestamp in ticks
| SamplingNumber
|-
|-
| 0x8
| 0x8
| 0x8
| 0x28
| Number of entries (always 17)
| [[#NpadFullKeyState]]
|-
| 0x10
| 0x8
| Latest Entry Index
|-
| 0x18
| 0x8
| Maximum Entry Index (always 16)
|}
|}


==== NpadHandheldState ====
====== NpadFullKeyState ======
This is "nn::hid::NpadFullKeyState".
 
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
Line 1,496: Line 1,460:
| 0x0
| 0x0
| 0x8
| 0x8
| Timestamp in samples (global)
| SamplingNumber
|-
|-
| 0x8
| 0x8
| 0x8
| 0x8
| Timestamp in samples
| [[#NpadButtonSet|Buttons]]
|-
|-
| 0x10
| 0x10
| 0x8
| 0x8
| [[#NpadButton]]
| [[#AnalogStickState|AnalogStickL]]
|-
|-
| 0x18
| 0x18
| 0x4
| 0x8
| Left Joystick X
| [[#AnalogStickState|AnalogStickR]]
|-
| 0x1C
| 0x4
| Left Joystick Y
|-
|-
| 0x20
| 0x20
| 0x4
| 0x4
| Right Joystick X
| [[#NpadAttributesSet|Attributes]]
|-
|-
| 0x24
| 0x24
| 0x4
| 0x4
| Right Joystick Y
| Reserved
|-
| 0x28
| 0x4
| Controller State (bit0 connected, bit1 wired)
|-
| 0x2C
| 0x4
| Padding
|}
|}


===== NpadButton =====
==== NpadHandheldLifo ====
This is the u64 bitmask for "nn::hid::NpadButton".
This is "nn::hid::detail::NpadHandheldLifo". This is a RingLifo object.


{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
! Bit
! Offset
! Button
! Size
! Description
|-
|-
| 0
| 0x0
| A
| 0x8
| RingLifoVptr
|-
|-
| 1
| 0x8
| B
| 0x8
| BufferCount
|-
|-
| 2
| 0x10
| X
| 0x8
| Tail
|-
|-
| 3
| 0x18
| Y
| 0x8
| Count
|-
|-
| 4
| 0x20
| Left Stick Pressed
| 0x30 * 17
|-
| Array of [[#NpadHandheldStateAtomicStorage]]
| 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 =====
===== NpadHandheldStateAtomicStorage =====
This is "nn::hid::detail::NpadHandheldStateAtomicStorage".
 
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
Line 1,642: Line 1,524:
| 0x0
| 0x0
| 0x8
| 0x8
| Timestamp in ticks
| SamplingNumber
|-
|-
| 0x8
| 0x8
| 0x8
| 0x28
| Number of entries (always 17)
| [[#NpadHandheldState]]
|-
| 0x10
| 0x8
| Latest Entry Index
|-
| 0x18
| 0x8
| Maximum Entry Index (up to 16)
|}
|}


===== NpadSixAxisSensorHandheldState =====
====== NpadHandheldState ======
This is "nn::hid::NpadHandheldState".
 
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
Line 1,666: Line 1,542:
| 0x0
| 0x0
| 0x8
| 0x8
| Timestamp in samples (global)
| SamplingNumber
|-
|-
| 0x8
| 0x8
| 0x8
| 0x8
| Unknown
| [[#NpadButtonSet|Buttons]]
|-
|-
| 0x10
| 0x10
| 0x8
| 0x8
| Timestamp in samples
| [[#AnalogStickState|AnalogStickL]]
|-
| 0x18
| 0x8
| [[#AnalogStickState|AnalogStickR]]
|-
|-
| 0x1C
| 0x20
| 0x4 * 3
| 0x4
| Accelerometer data as 3 floats
| [[#NpadAttributesSet|Attributes]]
|-
|-
| 0x24
| 0x24
| 0x4 * 3
| 0x4
| Gyroscope data as 3 floats
| Reserved
|-
| 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.
==== NpadJoyDualLifo ====
This is "nn::hid::detail::NpadJoyDualLifo". This is a RingLifo object.


==== NpadSystemProperties ====
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
! Bit
! Offset
! Size
! Description
! Description
|-
|-
| 0
| 0x0
| PowerInfo0 isCharging
| 0x8
| RingLifoVptr
|-
|-
| 1
| 0x8
| PowerInfo1 isCharging
| 0x8
| BufferCount
|-
|-
| 2
| 0x10
| PowerInfo2 isCharging
| 0x8
| Tail
|-
|-
| 3
| 0x18
| PowerInfo0 powerConnected
| 0x8
| Count
|-
|-
| 4
| 0x20
| PowerInfo1 powerConnected
| 0x30 * 17
|-
| Array of [[#NpadJoyDualStateAtomicStorage]]
| 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 ====
===== NpadJoyDualStateAtomicStorage =====
This is "nn::hid::detail::NpadJoyDualStateAtomicStorage".
 
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
! Bit
! Offset
! Size
! Description
! Description
|-
|-
| 0
| 0x0
| UnintendedHomeButtonInputProtectionEnabled (if cleared)
| 0x8
|}
| SamplingNumber
|-
| 0x8
| 0x28
| [[#NpadJoyDualState]]
|}
 
====== NpadJoyDualState ======
This is "nn::hid::NpadJoyDualState".


==== NfcXcdDeviceHandleState ====
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
Line 1,770: Line 1,624:
| 0x0
| 0x0
| 0x8
| 0x8
| Timestamp in samples (global)
| SamplingNumber
|-
|-
| 0x8
| 0x8
| 0x8
| 0x8
| DeviceHandle
| [[#NpadButtonSet|Buttons]]
|-
|-
| 0x10
| 0x10
| 0x1
| 0x8
| Flag
| [[#AnalogStickState|AnalogStickL]]
|-
|-
| 0x11
| 0x18
| 0x1
| 0x8
| Flag
| [[#AnalogStickState|AnalogStickR]]
|-
|-
| 0x12
| 0x20
| 0x6
| 0x4
| Padding
| [[#NpadAttributesSet|Attributes]]
|-
|-
| 0x18
| 0x24
| 0x8
| 0x4
| Timestamp in samples
| Reserved
|}
|}


==== NpadGcTriggerState ====
==== NpadJoyLeftLifo ====
This is "nn::hid::detail::NpadJoyLeftLifo". This is a RingLifo object.
 
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
Line 1,802: Line 1,658:
| 0x0
| 0x0
| 0x8
| 0x8
| Timestamp in samples (global)
| RingLifoVptr
|-
|-
| 0x8
| 0x8
| 0x8
| 0x8
| Timestamp in samples
| BufferCount
|-
|-
| 0x10
| 0x10
| 0x4
| 0x8
| L analog trigger. Valid range: 0x0-0x7FFF.
| Tail
|-
| 0x18
| 0x8
| Count
|-
|-
| 0x14
| 0x20
| 0x4
| 0x30 * 17
| R analog trigger. Valid range: 0x0-0x7FFF.
| Array of [[#NpadJoyLeftStateAtomicStorage]]
|}
|}


== GestureSharedMemoryFormat ==
===== NpadJoyLeftStateAtomicStorage =====
This is "nn::hid::detail::GestureSharedMemoryFormat".
This is "nn::hid::detail::NpadJoyLeftStateAtomicStorage".


{| class="wikitable" border="1"
{| class="wikitable" border="1"
Line 1,827: Line 1,687:
|-
|-
| 0x0
| 0x0
| 0x20
| 0x8
| [[#GestureHeader]]
| SamplingNumber
|-
|-
| 0x20
| 0x8
| 0x68 * 17
| 0x28
| Array of [[#GestureState]]
| [[#NpadJoyLeftState]]
|}
|}


=== GestureHeader ===
====== NpadJoyLeftState ======
This is "nn::hid::NpadJoyLeftState".
 
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
Line 1,844: Line 1,706:
| 0x0
| 0x0
| 0x8
| 0x8
| Timestamp in ticks
| SamplingNumber
|-
|-
| 0x8
| 0x8
| 0x8
| 0x8
| Number of Entries (always 17)
| [[#NpadButtonSet|Buttons]]
|-
|-
| 0x10
| 0x10
| 0x8
| 0x8
| Latest Entry Index
| [[#AnalogStickState|AnalogStickL]]
|-
|-
| 0x18
| 0x18
| 0x8
| 0x8
| Maximum Entry Index (always 16)
| [[#AnalogStickState|AnalogStickR]]
|}
|-
 
| 0x20
=== GestureState ===
| 0x4
{| class="wikitable" border="1"
| [[#NpadAttributesSet|Attributes]]
|-
|-
! Offset
| 0x24
! Size
| 0x4
! Description
| Reserved
|-
|}
| 0x0
 
| 0x8
==== NpadJoyRightLifo ====
| Timestamp in samples (global)
This is "nn::hid::detail::NpadJoyRightLifo". This is a RingLifo object.
|-
 
| 0x8
{| class="wikitable" border="1"
| 0x60
|-
|  
! Offset
|}
! Size
 
! Description
== ConsoleSixAxisSensorSharedMemoryFormat ==
|-
{| class="wikitable" border="1"
| 0x0
|-
| 0x8
! Offset
| RingLifoVptr
! Size
|-
! Description
| 0x8
|-
| 0x8
| 0x0
| BufferCount
| 0x8
|-
| Timestamp in samples
| 0x10
| 0x8
| Tail
|-
| 0x18
| 0x8
| Count
|-
| 0x20
| 0x30 * 17
| Array of [[#NpadJoyRightStateAtomicStorage]]
|}
 
===== NpadJoyRightStateAtomicStorage =====
This is "nn::hid::detail::NpadJoyRightStateAtomicStorage".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| SamplingNumber
|-
| 0x8
| 0x28
| [[#NpadJoyRightState]]
|}
 
====== NpadJoyRightState ======
This is "nn::hid::NpadJoyRightState".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| SamplingNumber
|-
| 0x8
| 0x8
| [[#NpadButtonSet|Buttons]]
|-
| 0x10
| 0x8
| [[#AnalogStickState|AnalogStickL]]
|-
| 0x18
| 0x8
| [[#AnalogStickState|AnalogStickR]]
|-
| 0x20
| 0x4
| [[#NpadAttributesSet|Attributes]]
|-
| 0x24
| 0x4
| Reserved
|}
 
==== NpadPalmaLifo ====
This is "nn::hid::detail::NpadPalmaLifo". This is a RingLifo object.
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| RingLifoVptr
|-
| 0x8
| 0x8
| BufferCount
|-
| 0x10
| 0x8
| Tail
|-
| 0x18
| 0x8
| Count
|-
| 0x20
| 0x30 * 17
| Array of [[#NpadPalmaStateAtomicStorage]]
|}
 
===== NpadPalmaStateAtomicStorage =====
This is "nn::hid::detail::NpadPalmaStateAtomicStorage".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| SamplingNumber
|-
| 0x8
| 0x28
| [[#NpadPalmaState]]
|}
 
====== NpadPalmaState ======
This is "nn::hid::NpadPalmaState".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| SamplingNumber
|-
| 0x8
| 0x8
| [[#NpadButtonSet|Buttons]]
|-
| 0x10
| 0x8
| [[#AnalogStickState|AnalogStickL]]
|-
| 0x18
| 0x8
| [[#AnalogStickState|AnalogStickR]]
|-
| 0x20
| 0x4
| [[#NpadAttributesSet|Attributes]]
|-
| 0x24
| 0x4
| Reserved
|}
 
==== NpadSystemLifo ====
This is "nn::hid::detail::NpadSystemLifo". This is a RingLifo object.
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| RingLifoVptr
|-
| 0x8
| 0x8
| BufferCount
|-
| 0x10
| 0x8
| Tail
|-
| 0x18
| 0x8
| Count
|-
| 0x20
| 0x30 * 17
| Array of [[#NpadSystemStateAtomicStorage]]
|}
 
===== NpadSystemStateAtomicStorage =====
This is "nn::hid::detail::NpadSystemStateAtomicStorage".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| SamplingNumber
|-
| 0x8
| 0x28
| [[#NpadSystemState]]
|}
 
====== NpadSystemState ======
This is "nn::hid::system::NpadSystemState".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| SamplingNumber
|-
| 0x8
| 0x8
| [[#NpadButtonSet|Buttons]]
|-
| 0x10
| 0x8
| [[#AnalogStickState|AnalogStickL]]
|-
| 0x18
| 0x8
| [[#AnalogStickState|AnalogStickR]]
|-
| 0x20
| 0x4
| [[#NpadAttributesSet|Attributes]]
|-
| 0x24
| 0x4
| Reserved
|}
 
==== NpadSystemExtLifo ====
This is "nn::hid::detail::NpadSystemExtLifo". This is a RingLifo object.
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| RingLifoVptr
|-
| 0x8
| 0x8
| BufferCount
|-
| 0x10
| 0x8
| Tail
|-
| 0x18
| 0x8
| Count
|-
| 0x20
| 0x30 * 17
| Array of [[#NpadSystemExtStateAtomicStorage]]
|}
 
===== NpadSystemExtStateAtomicStorage =====
This is "nn::hid::detail::NpadSystemExtStateAtomicStorage".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| SamplingNumber
|-
| 0x8
| 0x28
| [[#NpadSystemState]]
|}
 
====== NpadSystemExtState ======
This is "nn::hid::system::NpadSystemExtState".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| SamplingNumber
|-
| 0x8
| 0x8
| [[#NpadButtonSet|Buttons]]
|-
| 0x10
| 0x8
| [[#AnalogStickState|AnalogStickL]]
|-
| 0x18
| 0x8
| [[#AnalogStickState|AnalogStickR]]
|-
| 0x20
| 0x4
| [[#NpadAttributesSet|Attributes]]
|-
| 0x24
| 0x4
| Reserved
|}
 
==== NpadSixAxisSensorLifo ====
This is "nn::hid::detail::NpadSixAxisSensorLifo". 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
| 0x68 * 17
| Array of [[#SixAxisSensorStateAtomicStorage]]
|}
 
===== SixAxisSensorStateAtomicStorage =====
This is "nn::hid::detail::SixAxisSensorStateAtomicStorage".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| SamplingNumber
|-
| 0x8
| 0x60
| [[#SixAxisSensorState]]
|}
 
====== SixAxisSensorState ======
This is "nn::hid::SixAxisSensorState".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| DeltaTime
|-
| 0x8
| 0x8
| SamplingNumber
|-
| 0x10
| 0x4
| AccelerationX
|-
| 0x14
| 0x4
| AccelerationY
|-
| 0x18
| 0x4
| AccelerationZ
|-
| 0x1C
| 0x4
| AngularVelocityX
|-
| 0x20
| 0x4
| AngularVelocityY
|-
| 0x24
| 0x4
| AngularVelocityZ
|-
| 0x28
| 0x4
| AngleX
|-
| 0x2C
| 0x4
| AngleY
|-
| 0x30
| 0x4
| AngleZ
|-
| 0x34
| 0x24
| [[#DirectionState|Direction]]
|-
| 0x58
| 0x4
| [[#SixAxisSensorAttributeSet|Attributes]]
|-
| 0x5C
| 0x4
| Reserved
|}
 
==== NfcXcdDeviceHandleState ====
This is "nn::hid::detail::NfcXcdDeviceHandleState". 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 [[#NfcXcdDeviceHandleStateImplAtomicStorage]]
|}
 
===== NfcXcdDeviceHandleStateImplAtomicStorage =====
This is "nn::hid::detail::NfcXcdDeviceHandleStateImplAtomicStorage".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| SamplingNumber
|-
| 0x8
| 0x18
| [[#NfcXcdDeviceHandleStateImpl]]
|}
 
====== NfcXcdDeviceHandleStateImpl ======
This is "nn::hid::detail::NfcXcdDeviceHandleStateImpl".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| Handle
|-
| 0x8
| 0x1
| IsAvailable
|-
| 0x9
| 0x1
| IsActivated
|-
| 0xA
| 0x6
| Reserved
|-
| 0x10
| 0x8
| SamplingNumber
|}
 
==== NpadGcTriggerLifo ====
This is "nn::hid::detail::NpadGcTriggerLifo". This is a RingLifo object.
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| RingLifoVptr
|-
| 0x8
| 0x8
| BufferCount
|-
| 0x10
| 0x8
| Tail
|-
| 0x18
| 0x8
| Count
|-
| 0x20
| 0x18 * 17
| Array of [[#NpadGcTriggerStateAtomicStorage]]
|}
 
===== NpadGcTriggerStateAtomicStorage =====
This is "nn::hid::detail::NpadGcTriggerStateAtomicStorage".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| SamplingNumber
|-
| 0x8
| 0x10
| [[#NpadGcTriggerState]]
|}
 
====== NpadGcTriggerState ======
This is "nn::hid::server::NpadGcTriggerState".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| SamplingNumber
|-
| 0x8
| 0x8
|
|}
 
== GestureSharedMemoryFormat ==
This is "nn::hid::detail::GestureSharedMemoryFormat".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x708
| [[#GestureLifo]]
|}
 
=== GestureLifo ===
This is "nn::hid::detail::GestureLifo". 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
| 0x68 * 17
| Array of [[#GestureDummyStateAtomicStorage]]
|}
 
===== GestureDummyStateAtomicStorage =====
This is "nn::hid::detail::GestureDummyStateAtomicStorage".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| SamplingNumber
|-
| 0x8
| 0x60
| [[#GestureDummyState]]
|}
 
====== GestureDummyState ======
This is "nn::hid::detail::GestureDummyState".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| SamplingNumber
|-
| 0x8
| 0x8
| ContextNumber
|-
| 0x10
| 0x4
| Type
|-
| 0x14
| 0x4
| Direction
|-
| 0x18
| 0x4
| X
|-
| 0x1C
| 0x4
| Y
|-
| 0x20
| 0x4
| DeltaX
|-
| 0x24
| 0x4
| DeltaY
|-
| 0x28
| 0x4
| VelocityX
|-
| 0x2C
| 0x4
| VelocityY
|-
| 0x30
| 0x4
| [[#GestureAttributeSet|Attributes]]
|-
| 0x34
| 0x4
| Scale
|-
| 0x38
| 0x4
| RotationAngle
|-
| 0x3C
| 0x4
| PointCount
|-
| 0x40
| 0x8 * 4
| [[#GesturePoint|Points]]
|}
 
== ConsoleSixAxisSensorSharedMemoryFormat ==
This is "nn::hid::detail::ConsoleSixAxisSensorSharedMemoryFormat".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| SamplingNumber
|-
|-
| 0x8
| 0x8
Line 1,901: Line 2,475:
| 0xC
| 0xC
| GyroBias
| GyroBias
|-
| 0x1C
| 0x4
| Padding
|}
|}