| 
				     | 
				
| (27 intermediate revisions by 3 users not shown) | 
| Line 1: | 
Line 1: | 
 | HID shared memory is a 0x40000 byte read-only segment of memory shared between applications for input. The segment contains structures for most if not all input methods available to applications.
  |  | #REDIRECT [[HID_services]]  | 
 |    |  | 
 | = Memory Map =
  |  | 
 | {| class="wikitable" border="1"
  |  | 
 | |-
  |  | 
 | ! Offset
  |  | 
 | ! Size
  |  | 
 | ! Description
  |  | 
 | |-
  |  | 
 | | 0x0
  |  | 
 | | 0x400
  |  | 
 | | DebugPad
  |  | 
 | |-
  |  | 
 | | 0x400
  |  | 
 | | 0x3000
  |  | 
 | | [[#TouchScreen]]
  |  | 
 | |-
  |  | 
 | | 0x3400
  |  | 
 | | 0x400
  |  | 
 | | [[#Mouse]]
  |  | 
 | |-
  |  | 
 | | 0x3800
  |  | 
 | | 0x400
  |  | 
 | | [[#Keyboard]]
  |  | 
 | |-
  |  | 
 | | 0x3C00
  |  | 
 | | 0x1000 (0x400 * 0x04)
  |  | 
 | | BasicXpad
  |  | 
 | |-
  |  | 
 | | 0x4C00
  |  | 
 | | 0x200
  |  | 
 | | HomeButton
  |  | 
 | |-
  |  | 
 | | 0x4E00
  |  | 
 | | 0x200
  |  | 
 | | SleepButton
  |  | 
 | |-
  |  | 
 | | 0x5000
  |  | 
 | | 0x200
  |  | 
 | | CaptureButton
  |  | 
 | |-
  |  | 
 | | 0x5200
  |  | 
 | | 0x800 (0x80 * 0x10)
  |  | 
 | | InputDetector
  |  | 
 | |-
  |  | 
 | | 0x5A00
  |  | 
 | | 0x4000 (0x400 * 0x10)
  |  | 
 | | [[#UniquePad]]
  |  | 
 | |-
  |  | 
 | | 0x9A00
  |  | 
 | | 0x32000 (0x5000 * 0x0A)
  |  | 
 | | Npad
  |  | 
 | |-
  |  | 
 | | 0x3BA00
  |  | 
 | | 0x800
  |  | 
 | | Gesture
  |  | 
 | |-
  |  | 
 | | 0x3C200
  |  | 
 | | 0x20
  |  | 
 | | [5.0.0+] ConsoleSixAxisSensor
  |  | 
 | |}
  |  | 
 |    |  | 
 | == TouchScreen ==
  |  | 
 | {| class="wikitable" border="1"
  |  | 
 | |-
  |  | 
 | ! Offset
  |  | 
 | ! Size
  |  | 
 | ! Description
  |  | 
 | |-
  |  | 
 | | 0x0
  |  | 
 | | 0x28
  |  | 
 | | [[#TouchScreenHeader]]
  |  | 
 | |-
  |  | 
 | | 0x28
  |  | 
 | | 0x298 * 17
  |  | 
 | | Array of [[#TouchScreenState]]
  |  | 
 | |}
  |  | 
 |    |  | 
 | === TouchScreenHeader ===
  |  | 
 | {| class="wikitable" border="1"
  |  | 
 | |-
  |  | 
 | ! Offset
  |  | 
 | ! Size
  |  | 
 | ! Description
  |  | 
 | |-
  |  | 
 | | 0x0
  |  | 
 | | 0x8
  |  | 
 | | Timestamp in ticks?
  |  | 
 | |-
  |  | 
 | | 0x8
  |  | 
 | | 0x8
  |  | 
 | | Number of Entries, always 17
  |  | 
 | |-
  |  | 
 | | 0x10
  |  | 
 | | 0x8
  |  | 
 | | Latest Entry Index
  |  | 
 | |-
  |  | 
 | | 0x18
  |  | 
 | | 0x8
  |  | 
 | | Maximum Entry Index, always 16
  |  | 
 | |-
  |  | 
 | | 0x20
  |  | 
 | | 0x8
  |  | 
 | | Timestamp in samples
  |  | 
 | |}
  |  | 
 |    |  | 
 | === TouchScreenState ===
  |  | 
 | {| class="wikitable" border="1"
  |  | 
 | |-
  |  | 
 | ! Offset
  |  | 
 | ! Size
  |  | 
 | ! Description
  |  | 
 | |-
  |  | 
 | | 0x0
  |  | 
 | | 0x10
  |  | 
 | | [[#TouchScreenStateHeader]]
  |  | 
 | |-
  |  | 
 | | 0x10
  |  | 
 | | 0x28 * 16
  |  | 
 | | [[#TouchScreenStateData]]
  |  | 
 | |}
  |  | 
 |    |  | 
 | ==== TouchScreenStateHeader ====
  |  | 
 | {| class="wikitable" border="1"
  |  | 
 | |-
  |  | 
 | ! Offset
  |  | 
 | ! Size
  |  | 
 | ! Description
  |  | 
 | |-
  |  | 
 | | 0x0
  |  | 
 | | 0x8
  |  | 
 | | Timestamp in samples
  |  | 
 | |-
  |  | 
 | | 0x8
  |  | 
 | | 0x8
  |  | 
 | | Touch count
  |  | 
 | |}
  |  | 
 |    |  | 
 | ==== TouchScreenStateData ====
  |  | 
 | {| class="wikitable" border="1"
  |  | 
 | |-
  |  | 
 | ! Offset
  |  | 
 | ! Size
  |  | 
 | ! Description
  |  | 
 | |-
  |  | 
 | | 0x0
  |  | 
 | | 0x8
  |  | 
 | | Timestamp in samples
  |  | 
 | |-
  |  | 
 | | 0x8
  |  | 
 | | 0x4
  |  | 
 | | Padding
  |  | 
 | |-
  |  | 
 | | 0xC	
  |  | 
 | | 0x4	
  |  | 
 | | Touch Index	
  |  | 
 | |-
  |  | 
 | | 0x10
  |  | 
 | | 0x4
  |  | 
 | | Touch X
  |  | 
 | |-
  |  | 
 | | 0x14
  |  | 
 | | 0x4
  |  | 
 | | Touch Y
  |  | 
 | |-
  |  | 
 | | 0x18
  |  | 
 | | 0x4
  |  | 
 | | Touch Diameter X
  |  | 
 | |-
  |  | 
 | | 0x1C
  |  | 
 | | 0x4
  |  | 
 | | Touch Diameter Y
  |  | 
 | |-
  |  | 
 | | 0x20
  |  | 
 | | 0x4
  |  | 
 | | Angle
  |  | 
 | |-
  |  | 
 | | 0x24
  |  | 
 | | 0x4
  |  | 
 | | Padding
  |  | 
 | |}
  |  | 
 |    |  | 
 | == Mouse ==
  |  | 
 | {| class="wikitable" border="1"
  |  | 
 | |-
  |  | 
 | ! Offset
  |  | 
 | ! Size
  |  | 
 | ! Description
  |  | 
 | |-
  |  | 
 | | 0x0	
  |  | 
 | | 0x20	
  |  | 
 | | [[#MouseHeader]]
  |  | 
 | |-
  |  | 
 | | 0x20	
  |  | 
 | | 0x30 * 17	
  |  | 
 | | Array of [[#MouseState]]
  |  | 
 | |}
  |  | 
 |    |  | 
 | === MouseHeader ===
  |  | 
 | {| class="wikitable" border="1"
  |  | 
 | |-
  |  | 
 | ! Offset
  |  | 
 | ! Size
  |  | 
 | ! Description
  |  | 
 | |-
  |  | 
 | | 0x0
  |  | 
 | | 0x8
  |  | 
 | | Timestamp in ticks?
  |  | 
 | |-
  |  | 
 | | 0x8
  |  | 
 | | 0x8
  |  | 
 | | Number of Entries, always 17
  |  | 
 | |-
  |  | 
 | | 0x10
  |  | 
 | | 0x8
  |  | 
 | | Latest Entry Index
  |  | 
 | |-
  |  | 
 | | 0x18
  |  | 
 | | 0x8
  |  | 
 | | Maximum Entry Index, always 16
  |  | 
 | |}
  |  | 
 |    |  | 
 | === MouseState ===
  |  | 
 | {| class="wikitable" border="1"
  |  | 
 | |-
  |  | 
 | ! Offset
  |  | 
 | ! Size
  |  | 
 | ! Description
  |  | 
 | |-
  |  | 
 | | 0x0
  |  | 
 | | 0x8
  |  | 
 | | Timestamp in samples
  |  | 
 | |-
  |  | 
 | | 0x8
  |  | 
 | | 0x8
  |  | 
 | | Timestamp in samples again?
  |  | 
 | |-
  |  | 
 | | 0x10
  |  | 
 | | 0x4
  |  | 
 | | Mouse X
  |  | 
 | |-
  |  | 
 | | 0x14
  |  | 
 | | 0x4
  |  | 
 | | Mouse Y
  |  | 
 | |-
  |  | 
 | | 0x18
  |  | 
 | | 0x4
  |  | 
 | | Mouse X Change
  |  | 
 | |-
  |  | 
 | | 0x1C
  |  | 
 | | 0x4
  |  | 
 | | Mouse Y Change
  |  | 
 | |-
  |  | 
 | | 0x20
  |  | 
 | | 0x4
  |  | 
 | | Scroll Change Y
  |  | 
 | |-
  |  | 
 | | 0x24
  |  | 
 | | 0x4
  |  | 
 | | Scroll Change X
  |  | 
 | |-
  |  | 
 | | 0x28
  |  | 
 | | 0x8
  |  | 
 | | Mouse Buttons
  |  | 
 | |}
  |  | 
 |    |  | 
 | == Keyboard ==
  |  | 
 | {| class="wikitable" border="1"
  |  | 
 | |-
  |  | 
 | ! Offset
  |  | 
 | ! Size
  |  | 
 | ! Description
  |  | 
 | |-
  |  | 
 | | 0x0	
  |  | 
 | | 0x20	
  |  | 
 | | [[#KeyboardHeader]]
  |  | 
 | |-
  |  | 
 | | 0x20	
  |  | 
 | | 0x38 * 17	
  |  | 
 | | Array of [[#KeyboardState]]
  |  | 
 | |}
  |  | 
 |    |  | 
 | === KeyboardHeader ===
  |  | 
 | {| class="wikitable" border="1"
  |  | 
 | |-
  |  | 
 | ! Offset
  |  | 
 | ! Size
  |  | 
 | ! Description
  |  | 
 | |-
  |  | 
 | | 0x0
  |  | 
 | | 0x8
  |  | 
 | | Timestamp in ticks?
  |  | 
 | |-
  |  | 
 | | 0x8
  |  | 
 | | 0x8
  |  | 
 | | Number of Entries, always 17
  |  | 
 | |-
  |  | 
 | | 0x10
  |  | 
 | | 0x8
  |  | 
 | | Latest Entry Index
  |  | 
 | |-
  |  | 
 | | 0x18	
  |  | 
 | | 0x8
  |  | 
 | | Maximum Entry Index, always 16
  |  | 
 | |}
  |  | 
 |    |  | 
 | === KeyboardState ===
  |  | 
 | {| class="wikitable" border="1"
  |  | 
 | |-
  |  | 
 | ! Offset
  |  | 
 | ! Size
  |  | 
 | ! Description
  |  | 
 | |-
  |  | 
 | | 0x0
  |  | 
 | | 0x8
  |  | 
 | | Timestamp in samples
  |  | 
 | |-
  |  | 
 | | 0x8
  |  | 
 | | 0x8
  |  | 
 | | Timestamp in samples again?
  |  | 
 | |-
  |  | 
 | | 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)
  |  | 
 | |}
  |  | 
 |    |  | 
 | == UniquePad ==
  |  | 
 | This section contains a series of 16 structures 0x400 bytes large.
  |  | 
 |    |  | 
 | {| class="wikitable" border="1"
  |  | 
 | |-
  |  | 
 | !   Offset
  |  | 
 | !   Size in bytes
  |  | 
 | !   Description
  |  | 
 | |-
  |  | 
 | | 0x30
  |  | 
 | | 0xE
  |  | 
 | | Controller Serial
  |  | 
 | |-
  |  | 
 | | 0x60
  |  | 
 | | 0xE
  |  | 
 | | Controller Serial
  |  | 
 | |}
  |  | 
 |    |  | 
 | == Npad ==
  |  | 
 | This section contains a series of 10 0x5000 byte structures describing each available controller.
  |  | 
 |    |  | 
 | {| class="wikitable" border="1"
  |  | 
 | |-
  |  | 
 | ! Index
  |  | 
 | ! Description
  |  | 
 | |-
  |  | 
 | | 0 to 7
  |  | 
 | | Players 1 to 8
  |  | 
 | |-
  |  | 
 | | 8
  |  | 
 | | Handheld Mode
  |  | 
 | |-
  |  | 
 | | 9
  |  | 
 | | Unknown
  |  | 
 | |}
  |  | 
 |    |  | 
 | === NpadInternalState ===
  |  | 
 | {| class="wikitable" border="1"
  |  | 
 | |-
  |  | 
 | ! Offset
  |  | 
 | ! Size
  |  | 
 | ! Description
  |  | 
 | |-
  |  | 
 | | 0x0
  |  | 
 | | 0x28
  |  | 
 | | [[#NpadInternalStateHeader]]
  |  | 
 | |-
  |  | 
 | | 0x28
  |  | 
 | | 0x20
  |  | 
 | | NpadFullKeyHeader
  |  | 
 | |-
  |  | 
 | | 0x48
  |  | 
 | | 0x30 * 17
  |  | 
 | | Array of NpadFullKeyState
  |  | 
 | |-
  |  | 
 | | 0x378
  |  | 
 | | 0x20
  |  | 
 | | [[#NpadHandheldHeader]]
  |  | 
 | |-
  |  | 
 | | 0x398
  |  | 
 | | 0x30 * 17
  |  | 
 | | Array of [[#NpadHandheldState]]
  |  | 
 | |-
  |  | 
 | | 0x6C8
  |  | 
 | | 0x20
  |  | 
 | | NpadJoyDualHeader
  |  | 
 | |-
  |  | 
 | | 0x6E8
  |  | 
 | | 0x30 * 17
  |  | 
 | | Array of NpadJoyDualState
  |  | 
 | |-
  |  | 
 | | 0xA18
  |  | 
 | | 0x20
  |  | 
 | | NpadJoyLeftHeader
  |  | 
 | |-
  |  | 
 | | 0xA38
  |  | 
 | | 0x30 * 17
  |  | 
 | | Array of NpadJoyLeftState
  |  | 
 | |-
  |  | 
 | | 0xD68
  |  | 
 | | 0x20
  |  | 
 | | NpadJoyRightHeader
  |  | 
 | |-
  |  | 
 | | 0xD88
  |  | 
 | | 0x30 * 17
  |  | 
 | | Array of NpadJoyRightState
  |  | 
 | |-
  |  | 
 | | 0x10B8
  |  | 
 | | 0x20
  |  | 
 | | NpadPalmaHeader
  |  | 
 | |-
  |  | 
 | | 0x12B8
  |  | 
 | | 0x30 * 17
  |  | 
 | | Array of NpadPalmaState
  |  | 
 | |-
  |  | 
 | | 0x1408
  |  | 
 | | 0x20
  |  | 
 | | NpadSystemExtHeader
  |  | 
 | |-
  |  | 
 | | 0x1428
  |  | 
 | | 0x30 * 17
  |  | 
 | | Array of NpadSystemExtState
  |  | 
 | |-
  |  | 
 | | 0x1758
  |  | 
 | | 0x20
  |  | 
 | | NpadSixAxisSensorFullKeyHeader
  |  | 
 | |-
  |  | 
 | | 0x1778
  |  | 
 | | 0x68 * 17
  |  | 
 | | Array of NpadSixAxisSensorFullKeyState
  |  | 
 | |-
  |  | 
 | | 0x1E60
  |  | 
 | | 0x20
  |  | 
 | | NpadSixAxisSensorHandheldHeader
  |  | 
 | |-
  |  | 
 | | 0x1E80
  |  | 
 | | 0x68 * 17
  |  | 
 | | Array of NpadSixAxisSensorHandheldState
  |  | 
 | |-
  |  | 
 | | 0x2568
  |  | 
 | | 0x20
  |  | 
 | | NpadSixAxisSensorJoyLeftDualHeader
  |  | 
 | |-
  |  | 
 | | 0x2588
  |  | 
 | | 0x68 * 17
  |  | 
 | | Array of NpadSixAxisSensorJoyLeftDualState
  |  | 
 | |-
  |  | 
 | | 0x2C70
  |  | 
 | | 0x20
  |  | 
 | | NpadSixAxisSensorJoyRightDualHeader
  |  | 
 | |-
  |  | 
 | | 0x2C90
  |  | 
 | | 0x68 * 17
  |  | 
 | | Array of NpadSixAxisSensorJoyRightDualState
  |  | 
 | |-
  |  | 
 | | 0x3378
  |  | 
 | | 0x20
  |  | 
 | | NpadSixAxisSensorJoyLeftHeader
  |  | 
 | |-
  |  | 
 | | 0x3398
  |  | 
 | | 0x68 * 17
  |  | 
 | | Array of NpadSixAxisSensorJoyLeftState
  |  | 
 | |-
  |  | 
 | | 0x3A80
  |  | 
 | | 0x20
  |  | 
 | | NpadSixAxisSensorJoyRightHeader
  |  | 
 | |-
  |  | 
 | | 0x3AA0
  |  | 
 | | 0x68 * 17
  |  | 
 | | Array of NpadSixAxisSensorJoyRightState
  |  | 
 | |-
  |  | 
 | | 0x4188
  |  | 
 | | 0x4
  |  | 
 | | [[HID_services#DeviceType|DeviceType]]
  |  | 
 | |-
  |  | 
 | | 0x418C
  |  | 
 | | 0x4
  |  | 
 | | Padding
  |  | 
 | |-
  |  | 
 | | 0x4190
  |  | 
 | | 0x8
  |  | 
 | | [[#NpadSystemProperties]]
  |  | 
 | |-
  |  | 
 | | 0x4198
  |  | 
 | | 0x4
  |  | 
 | | [[#NpadSystemButtonProperties]]
  |  | 
 | |-
  |  | 
 | | 0x419C
  |  | 
 | | 0x4
  |  | 
 | | PowerInfo0 battery state (must be 0-4)
  |  | 
 | |-
  |  | 
 | | 0x41A0
  |  | 
 | | 0x4
  |  | 
 | | PowerInfo1 battery state (must be 0-4)
  |  | 
 | |-
  |  | 
 | | 0x41A4
  |  | 
 | | 0x4
  |  | 
 | | PowerInfo2 battery state (must be 0-4)
  |  | 
 | |-
  |  | 
 | | 0x41A8
  |  | 
 | | 0x20
  |  | 
 | | NfcXcdDeviceHandleHeader
  |  | 
 | |-
  |  | 
 | | 0x41C8
  |  | 
 | | 0x20 * 2
  |  | 
 | | Array of NfcXcdDeviceHandleState
  |  | 
 | |-
  |  | 
 | | 0x4208
  |  | 
 | | 0x8
  |  | 
 | | Mutex
  |  | 
 | |-
  |  | 
 | | 0x4248
  |  | 
 | | 0x20
  |  | 
 | | NpadGcTriggerHeader
  |  | 
 | |-
  |  | 
 | | 0x4268
  |  | 
 | | 0x18 * 17
  |  | 
 | | Array of NpadGcTriggerState
  |  | 
 | |}
  |  | 
 |    |  | 
 | ==== NpadInternalStateHeader ====
  |  | 
 | {| class="wikitable" border="1"
  |  | 
 | |-
  |  | 
 | ! Offset
  |  | 
 | ! Size
  |  | 
 | ! Description
  |  | 
 | |-
  |  | 
 | | 0x0
  |  | 
 | | 0x4
  |  | 
 | | Status, bit0 Pro Controller/HID controller, bit1 wired for handheld, bit2 pair, bit3 left, bit4 right
  |  | 
 | |-
  |  | 
 | | 0x4
  |  | 
 | | 0x4
  |  | 
 | | Is Joy-Con Half
  |  | 
 | |-
  |  | 
 | | 0x8
  |  | 
 | | 0x4
  |  | 
 | | bit1 color set does not exist
  |  | 
 | |-
  |  | 
 | | 0xC
  |  | 
 | | 0x4
  |  | 
 | | RGBA Body Color (single Joy-Con or Pro Controller)
  |  | 
 | |-
  |  | 
 | | 0x10
  |  | 
 | | 0x4
  |  | 
 | | RGBA Button Color (single Joy-Con or Pro Controller)
  |  | 
 | |-
  |  | 
 | | 0x14
  |  | 
 | | 0x4
  |  | 
 | | bit1 color set does not exist
  |  | 
 | |-
  |  | 
 | | 0x18
  |  | 
 | | 0x4
  |  | 
 | | RGBA Body Color (right Joy-Con)
  |  | 
 | |-
  |  | 
 | | 0x1C
  |  | 
 | | 0x4
  |  | 
 | | RGBA Button Color (right Joy-Con)
  |  | 
 | |-
  |  | 
 | | 0x20
  |  | 
 | | 0x4
  |  | 
 | | RGBA Body Color (left Joy-Con)
  |  | 
 | |-
  |  | 
 | | 0x24
  |  | 
 | | 0x4
  |  | 
 | | RGBA Button Color (left Joy-Con)
  |  | 
 | |}
  |  | 
 |    |  | 
 | ==== NpadHandheldHeader ====
  |  | 
 | {| class="wikitable" border="1"
  |  | 
 | |-
  |  | 
 | ! Offset
  |  | 
 | ! Size
  |  | 
 | ! Description
  |  | 
 | |-
  |  | 
 | | 0x0
  |  | 
 | | 0x8
  |  | 
 | | Timestamp in ticks?
  |  | 
 | |-
  |  | 
 | | 0x8
  |  | 
 | | 0x8
  |  | 
 | | Number of entries, always 17
  |  | 
 | |-
  |  | 
 | | 0x10
  |  | 
 | | 0x8
  |  | 
 | | Latest Entry Index
  |  | 
 | |-
  |  | 
 | | 0x18
  |  | 
 | | 0x8
  |  | 
 | | Maximum Entry Index, always 16
  |  | 
 | |}
  |  | 
 |    |  | 
 | ==== NpadHandheldState ====
  |  | 
 | {| class="wikitable" border="1"
  |  | 
 | |-
  |  | 
 | ! Offset
  |  | 
 | ! Size
  |  | 
 | ! Description
  |  | 
 | |-
  |  | 
 | | 0x0
  |  | 
 | | 0x8
  |  | 
 | | Timestamp in samples
  |  | 
 | |-
  |  | 
 | | 0x8
  |  | 
 | | 0x8
  |  | 
 | | Timestamp in samples again
  |  | 
 | |-
  |  | 
 | | 0x10
  |  | 
 | | 0x8
  |  | 
 | | [[#Button State]]
  |  | 
 | |-
  |  | 
 | | 0x18
  |  | 
 | | 0x4
  |  | 
 | | Left Joystick X
  |  | 
 | |-
  |  | 
 | | 0x1C
  |  | 
 | | 0x4
  |  | 
 | | Left Joystick Y
  |  | 
 | |-
  |  | 
 | | 0x20
  |  | 
 | | 0x4
  |  | 
 | | Right Joystick X
  |  | 
 | |-
  |  | 
 | | 0x24
  |  | 
 | | 0x4
  |  | 
 | | Right Joystick Y
  |  | 
 | |-
  |  | 
 | | 0x28
  |  | 
 | | 0x8
  |  | 
 | | Controller State (bit0 connected, bit1 wired)
  |  | 
 | |}
  |  | 
 |    |  | 
 | ===== Button State =====
  |  | 
 | {| class="wikitable" border="1"
  |  | 
 | |-
  |  | 
 | ! Bit
  |  | 
 | ! Button
  |  | 
 | |-
  |  | 
 | | 0
  |  | 
 | | A
  |  | 
 | |-
  |  | 
 | | 1
  |  | 
 | | B
  |  | 
 | |-
  |  | 
 | | 2
  |  | 
 | | X
  |  | 
 | |-
  |  | 
 | | 3
  |  | 
 | | Y
  |  | 
 | |-
  |  | 
 | | 4
  |  | 
 | | Left Stick Pressed
  |  | 
 | |-
  |  | 
 | | 5
  |  | 
 | | Right Stick Pressed
  |  | 
 | |-
  |  | 
 | | 6
  |  | 
 | | L
  |  | 
 | |-
  |  | 
 | | 7
  |  | 
 | | R
  |  | 
 | |-
  |  | 
 | | 8
  |  | 
 | | ZL
  |  | 
 | |-
  |  | 
 | | 9
  |  | 
 | | ZR
  |  | 
 | |-
  |  | 
 | | 10
  |  | 
 | | Plus
  |  | 
 | |-
  |  | 
 | | 11
  |  | 
 | | Minus
  |  | 
 | |-
  |  | 
 | | 12
  |  | 
 | | Left
  |  | 
 | |-
  |  | 
 | | 13
  |  | 
 | | Up
  |  | 
 | |-
  |  | 
 | | 14
  |  | 
 | | Right
  |  | 
 | |-
  |  | 
 | | 15
  |  | 
 | | Down
  |  | 
 | |-
  |  | 
 | | 16
  |  | 
 | | Left Stick Left
  |  | 
 | |-
  |  | 
 | | 17
  |  | 
 | | Left Stick Up
  |  | 
 | |-
  |  | 
 | | 18
  |  | 
 | | Left Stick Right
  |  | 
 | |-
  |  | 
 | | 19
  |  | 
 | | Left Stick Down
  |  | 
 | |-
  |  | 
 | | 20
  |  | 
 | | Right Stick Left
  |  | 
 | |-
  |  | 
 | | 21
  |  | 
 | | Right Stick Up
  |  | 
 | |-
  |  | 
 | | 22
  |  | 
 | | Right Stick Right
  |  | 
 | |-
  |  | 
 | | 23
  |  | 
 | | Right Stick Down
  |  | 
 | |-
  |  | 
 | | 24
  |  | 
 | | SL
  |  | 
 | |-
  |  | 
 | | 25
  |  | 
 | | SR
  |  | 
 | |}
  |  | 
 |    |  | 
 | ===== NpadSixAxisSensorHandheldHeader =====
  |  | 
 | {| class="wikitable" border="1"
  |  | 
 | |-
  |  | 
 | ! Offset
  |  | 
 | ! Size
  |  | 
 | ! Description
  |  | 
 | |-
  |  | 
 | | 0x0
  |  | 
 | | 0x8
  |  | 
 | | Timestamp in ticks?
  |  | 
 | |-
  |  | 
 | | 0x8
  |  | 
 | | 0x8
  |  | 
 | | Number of entries, always 17
  |  | 
 | |-
  |  | 
 | | 0x10
  |  | 
 | | 0x8
  |  | 
 | | Latest Entry Index
  |  | 
 | |-
  |  | 
 | | 0x18
  |  | 
 | | 0x8
  |  | 
 | | Maximum Entry Index, up to 16
  |  | 
 | |}
  |  | 
 |    |  | 
 | ===== NpadSixAxisSensorHandheldState =====
  |  | 
 | {| class="wikitable" border="1"
  |  | 
 | |-
  |  | 
 | ! Offset
  |  | 
 | ! Size
  |  | 
 | ! Description
  |  | 
 | |-
  |  | 
 | | 0x0
  |  | 
 | | 0x8
  |  | 
 | | Timestamp in samples
  |  | 
 | |-
  |  | 
 | | 0x8
  |  | 
 | | 0x8
  |  | 
 | | Unknown
  |  | 
 | |-
  |  | 
 | | 0x10
  |  | 
 | | 0x8
  |  | 
 | | Timestamp in samples again
  |  | 
 | |-
  |  | 
 | | 0x1C
  |  | 
 | | 0x4 * 3
  |  | 
 | | Accelerometer data as 3 floats
  |  | 
 | |-
  |  | 
 | | 0x24
  |  | 
 | | 0x4 * 3
  |  | 
 | | Gyroscope data as 3 floats
  |  | 
 | |-
  |  | 
 | | 0x30
  |  | 
 | | 0x4 * 3
  |  | 
 | | Unknown sensor data as 3 floats
  |  | 
 | |-
  |  | 
 | | 0x3C
  |  | 
 | | 0x4 * 9
  |  | 
 | | Orientation basis as 3x3 matrix of floats
  |  | 
 | |-
  |  | 
 | | 0x60
  |  | 
 | | 0x8
  |  | 
 | | Unknown, always 1
  |  | 
 | |}
  |  | 
 |    |  | 
 | Official sw copies the data from offset 0x8 size 0x60 to the final output state.
  |  | 
 |    |  | 
 | ==== NpadSystemProperties ====
  |  | 
 | {| class="wikitable" border="1"
  |  | 
 | |-
  |  | 
 | ! Bit
  |  | 
 | ! Description
  |  | 
 | |-
  |  | 
 | | 0
  |  | 
 | | PowerInfo0 isCharging
  |  | 
 | |-
  |  | 
 | | 1
  |  | 
 | | PowerInfo1 isCharging
  |  | 
 | |-
  |  | 
 | | 2
  |  | 
 | | PowerInfo2 isCharging
  |  | 
 | |-
  |  | 
 | | 3
  |  | 
 | | PowerInfo0 powerConnected
  |  | 
 | |-
  |  | 
 | | 4
  |  | 
 | | PowerInfo1 powerConnected
  |  | 
 | |-
  |  | 
 | | 5
  |  | 
 | | PowerInfo2 powerConnected
  |  | 
 | |-
  |  | 
 | | 6-8
  |  | 
 | | Unused
  |  | 
 | |-
  |  | 
 | | 9
  |  | 
 | | UnsupportedButtonPressed_NpadSystem
  |  | 
 | |-
  |  | 
 | | 10
  |  | 
 | | UnsupportedButtonPressed_NpadSystemExt
  |  | 
 | |-
  |  | 
 | | 11
  |  | 
 | | AbxyButtonOriented
  |  | 
 | |-
  |  | 
 | | 12
  |  | 
 | | SlSrButtonOriented
  |  | 
 | |-
  |  | 
 | | 13
  |  | 
 | | [4.0.0+] PlusButtonCapability
  |  | 
 | |-
  |  | 
 | | 14
  |  | 
 | | [4.0.0+] MinusButtonCapability
  |  | 
 | |-
  |  | 
 | | 15
  |  | 
 | | [8.0.0+] DirectionalButtonsSupported
  |  | 
 | |-
  |  | 
 | | 16-63
  |  | 
 | | Unused
  |  | 
 | |}
  |  | 
 |    |  | 
 | ==== NpadSystemButtonProperties ====
  |  | 
 | {| class="wikitable" border="1"
  |  | 
 | |-
  |  | 
 | ! Bit
  |  | 
 | ! Description
  |  | 
 | |-
  |  | 
 | | 0
  |  | 
 | | UnintendedHomeButtonInputProtectionEnabled (if cleared)
  |  | 
 | |}
  |  |