Line 1: |
Line 1: |
− | HID shared memory is a 0x40000 byte read-only segment of memory shared between applications for input. The segment contains structures for most if not all input methods available to applications.
| + | #REDIRECT [[HID_services]] |
− | | |
− | In sdknso this is "nn::hid::detail::SharedMemoryFormat".
| |
− | | |
− | = Memory Map =
| |
− | {| class="wikitable" border="1"
| |
− | |-
| |
− | ! Offset
| |
− | ! Size
| |
− | ! Description
| |
− | |-
| |
− | | 0x0
| |
− | | 0x400
| |
− | | [[#DebugPad]]
| |
− | |-
| |
− | | 0x400
| |
− | | 0x3000
| |
− | | [[#TouchScreen]]
| |
− | |-
| |
− | | 0x3400
| |
− | | 0x400
| |
− | | [[#Mouse]]
| |
− | |-
| |
− | | 0x3800
| |
− | | 0x400
| |
− | | [[#Keyboard]]
| |
− | |-
| |
− | | 0x3C00
| |
− | | 0x1000 (0x400 * 0x04)
| |
− | | [1.0.0-9.2.0] [[#BasicXpad]]
| |
− | |-
| |
− | | 0x3C00
| |
− | |
| |
− | | [10.0.0+] Digitizer
| |
− | |-
| |
− | | 0x4C00
| |
− | | 0x200
| |
− | | [[#HomeButton]]
| |
− | |-
| |
− | | 0x4E00
| |
− | | 0x200
| |
− | | [[#SleepButton]]
| |
− | |-
| |
− | | 0x5000
| |
− | | 0x200
| |
− | | [[#CaptureButton]]
| |
− | |-
| |
− | | 0x5200
| |
− | | 0x800 (0x80 * 0x10)
| |
− | | [[#InputDetector]]
| |
− | |-
| |
− | | 0x5A00
| |
− | | 0x4000 (0x400 * 0x10)
| |
− | | [1.0.0-4.1.0] [[#UniquePad]]
| |
− | |-
| |
− | | 0x9A00
| |
− | | 0x32000 (0x5000 * 0x0A)
| |
− | | [[#Npad]]
| |
− | |-
| |
− | | 0x3BA00
| |
− | | 0x800
| |
− | | [[#Gesture]]
| |
− | |-
| |
− | | 0x3C200
| |
− | | 0x20
| |
− | | [5.0.0+] [[#ConsoleSixAxisSensor]]
| |
− | |}
| |
− | | |
− | == DebugPad ==
| |
− | {| class="wikitable" border="1"
| |
− | |-
| |
− | ! Offset
| |
− | ! Size
| |
− | ! Description
| |
− | |-
| |
− | | 0x0
| |
− | | 0x20
| |
− | | [[#DebugPadHeader]]
| |
− | |-
| |
− | | 0x20
| |
− | | 0x28 * 17
| |
− | | Array of [[#DebugPadState]]
| |
− | |}
| |
− | | |
− | === DebugPadHeader ===
| |
− | {| class="wikitable" border="1"
| |
− | |-
| |
− | ! Offset
| |
− | ! Size
| |
− | ! Description
| |
− | |-
| |
− | | 0x0
| |
− | | 0x8
| |
− | | Timestamp in ticks
| |
− | |-
| |
− | | 0x8
| |
− | | 0x8
| |
− | | Number of Entries (always 17)
| |
− | |-
| |
− | | 0x10
| |
− | | 0x8
| |
− | | Latest Entry Index
| |
− | |-
| |
− | | 0x18
| |
− | | 0x8
| |
− | | Maximum Entry Index (always 16)
| |
− | |}
| |
− | | |
− | === DebugPadState ===
| |
− | {| class="wikitable" border="1"
| |
− | |-
| |
− | ! Offset
| |
− | ! Size
| |
− | ! Description
| |
− | |-
| |
− | | 0x0
| |
− | | 0x8
| |
− | | Timestamp in samples (global)
| |
− | |-
| |
− | | 0x8
| |
− | | 0x20
| |
− | |
| |
− | |}
| |
− | | |
− | == TouchScreen ==
| |
− | {| class="wikitable" border="1"
| |
− | |-
| |
− | ! Offset
| |
− | ! Size
| |
− | ! Description
| |
− | |-
| |
− | | 0x0
| |
− | | 0x20
| |
− | | [[#TouchScreenHeader]]
| |
− | |-
| |
− | | 0x20
| |
− | | 0x298 * 17
| |
− | | Array of [[#TouchScreenState]]
| |
− | |}
| |
− | | |
− | === TouchScreenHeader ===
| |
− | {| class="wikitable" border="1"
| |
− | |-
| |
− | ! Offset
| |
− | ! Size
| |
− | ! Description
| |
− | |-
| |
− | | 0x0
| |
− | | 0x8
| |
− | | Timestamp in ticks
| |
− | |-
| |
− | | 0x8
| |
− | | 0x8
| |
− | | Number of Entries (always 17)
| |
− | |-
| |
− | | 0x10
| |
− | | 0x8
| |
− | | Latest Entry Index
| |
− | |-
| |
− | | 0x18
| |
− | | 0x8
| |
− | | Maximum Entry Index (always 16)
| |
− | |}
| |
− | | |
− | === TouchScreenState ===
| |
− | {| class="wikitable" border="1"
| |
− | |-
| |
− | ! Offset
| |
− | ! Size
| |
− | ! Description
| |
− | |-
| |
− | | 0x0
| |
− | | 0x8
| |
− | | Timestamp in samples (global)
| |
− | |-
| |
− | | 0x8
| |
− | | 0x8
| |
− | | Timestamp in samples
| |
− | |-
| |
− | | 0x10
| |
− | | 0x8
| |
− | | Touch count
| |
− | |-
| |
− | | 0x18
| |
− | | 0x28 * 16
| |
− | | [[#TouchScreenStateData]]
| |
− | |}
| |
− | | |
− | ==== TouchScreenStateData ====
| |
− | {| class="wikitable" border="1"
| |
− | |-
| |
− | ! Offset
| |
− | ! Size
| |
− | ! Description
| |
− | |-
| |
− | | 0x0
| |
− | | 0x8
| |
− | | Timestamp in samples
| |
− | |-
| |
− | | 0x8
| |
− | | 0x4
| |
− | | Padding
| |
− | |-
| |
− | | 0xC
| |
− | | 0x4
| |
− | | Touch Index
| |
− | |-
| |
− | | 0x10
| |
− | | 0x4
| |
− | | Touch X
| |
− | |-
| |
− | | 0x14
| |
− | | 0x4
| |
− | | Touch Y
| |
− | |-
| |
− | | 0x18
| |
− | | 0x4
| |
− | | Touch Diameter X
| |
− | |-
| |
− | | 0x1C
| |
− | | 0x4
| |
− | | Touch Diameter Y
| |
− | |-
| |
− | | 0x20
| |
− | | 0x4
| |
− | | Angle
| |
− | |-
| |
− | | 0x24
| |
− | | 0x4
| |
− | | Padding
| |
− | |}
| |
− | | |
− | == Mouse ==
| |
− | {| class="wikitable" border="1"
| |
− | |-
| |
− | ! Offset
| |
− | ! Size
| |
− | ! Description
| |
− | |-
| |
− | | 0x0
| |
− | | 0x20
| |
− | | [[#MouseHeader]]
| |
− | |-
| |
− | | 0x20
| |
− | | 0x30 * 17
| |
− | | Array of [[#MouseState]]
| |
− | |}
| |
− | | |
− | === MouseHeader ===
| |
− | {| class="wikitable" border="1"
| |
− | |-
| |
− | ! Offset
| |
− | ! Size
| |
− | ! Description
| |
− | |-
| |
− | | 0x0
| |
− | | 0x8
| |
− | | Timestamp in ticks
| |
− | |-
| |
− | | 0x8
| |
− | | 0x8
| |
− | | Number of Entries (always 17)
| |
− | |-
| |
− | | 0x10
| |
− | | 0x8
| |
− | | Latest Entry Index
| |
− | |-
| |
− | | 0x18
| |
− | | 0x8
| |
− | | Maximum Entry Index (always 16)
| |
− | |}
| |
− | | |
− | === MouseState ===
| |
− | {| class="wikitable" border="1"
| |
− | |-
| |
− | ! Offset
| |
− | ! Size
| |
− | ! Description
| |
− | |-
| |
− | | 0x0
| |
− | | 0x8
| |
− | | Timestamp in samples (global)
| |
− | |-
| |
− | | 0x8
| |
− | | 0x8
| |
− | | Timestamp in samples
| |
− | |-
| |
− | | 0x10
| |
− | | 0x4
| |
− | | Mouse X
| |
− | |-
| |
− | | 0x14
| |
− | | 0x4
| |
− | | Mouse Y
| |
− | |-
| |
− | | 0x18
| |
− | | 0x4
| |
− | | Mouse X Change
| |
− | |-
| |
− | | 0x1C
| |
− | | 0x4
| |
− | | Mouse Y Change
| |
− | |-
| |
− | | 0x20
| |
− | | 0x4
| |
− | | Scroll Change Y
| |
− | |-
| |
− | | 0x24
| |
− | | 0x4
| |
− | | Scroll Change X
| |
− | |-
| |
− | | 0x28
| |
− | | 0x8
| |
− | | Mouse Buttons
| |
− | |}
| |
− | | |
− | == Keyboard ==
| |
− | {| class="wikitable" border="1"
| |
− | |-
| |
− | ! Offset
| |
− | ! Size
| |
− | ! Description
| |
− | |-
| |
− | | 0x0
| |
− | | 0x20
| |
− | | [[#KeyboardHeader]]
| |
− | |-
| |
− | | 0x20
| |
− | | 0x38 * 17
| |
− | | Array of [[#KeyboardState]]
| |
− | |}
| |
− | | |
− | === KeyboardHeader ===
| |
− | {| class="wikitable" border="1"
| |
− | |-
| |
− | ! Offset
| |
− | ! Size
| |
− | ! Description
| |
− | |-
| |
− | | 0x0
| |
− | | 0x8
| |
− | | Timestamp in ticks
| |
− | |-
| |
− | | 0x8
| |
− | | 0x8
| |
− | | Number of Entries (always 17)
| |
− | |-
| |
− | | 0x10
| |
− | | 0x8
| |
− | | Latest Entry Index
| |
− | |-
| |
− | | 0x18
| |
− | | 0x8
| |
− | | Maximum Entry Index (always 16)
| |
− | |}
| |
− | | |
− | === KeyboardState ===
| |
− | {| class="wikitable" border="1"
| |
− | |-
| |
− | ! Offset
| |
− | ! Size
| |
− | ! Description
| |
− | |-
| |
− | | 0x0
| |
− | | 0x8
| |
− | | Timestamp in samples (global)
| |
− | |-
| |
− | | 0x8
| |
− | | 0x8
| |
− | | Timestamp in samples
| |
− | |-
| |
− | | 0x10
| |
− | | 0x8
| |
− | | Modifier Mask
| |
− | |-
| |
− | | 0x18
| |
− | | 0x20
| |
− | | Keys Down, each key gets one bit based on the HID keyboard scan code (F1 is 0x3A, bit 0x3A is set)
| |
− | |}
| |
− | | |
− | == BasicXpad ==
| |
− | {| class="wikitable" border="1"
| |
− | |-
| |
− | ! Offset
| |
− | ! Size
| |
− | ! Description
| |
− | |-
| |
− | | 0x0
| |
− | | 0x20
| |
− | | [[#BasicXpadHeader]]
| |
− | |-
| |
− | | 0x20
| |
− | | 0x28 * 17
| |
− | | Array of [[#BasicXpadState]]
| |
− | |}
| |
− | | |
− | === BasicXpadHeader ===
| |
− | {| class="wikitable" border="1"
| |
− | |-
| |
− | ! Offset
| |
− | ! Size
| |
− | ! Description
| |
− | |-
| |
− | | 0x0
| |
− | | 0x8
| |
− | | Timestamp in ticks
| |
− | |-
| |
− | | 0x8
| |
− | | 0x8
| |
− | | Number of Entries (always 17)
| |
− | |-
| |
− | | 0x10
| |
− | | 0x8
| |
− | | Latest Entry Index
| |
− | |-
| |
− | | 0x18
| |
− | | 0x8
| |
− | | Maximum Entry Index (always 16)
| |
− | |}
| |
− | | |
− | === BasicXpadState ===
| |
− | {| class="wikitable" border="1"
| |
− | |-
| |
− | ! Offset
| |
− | ! Size
| |
− | ! Description
| |
− | |-
| |
− | | 0x0
| |
− | | 0x8
| |
− | | Timestamp in samples (global)
| |
− | |-
| |
− | | 0x8
| |
− | | 0x20
| |
− | |
| |
− | |}
| |
− | | |
− | == HomeButton ==
| |
− | {| class="wikitable" border="1"
| |
− | |-
| |
− | ! Offset
| |
− | ! Size
| |
− | ! Description
| |
− | |-
| |
− | | 0x0
| |
− | | 0x20
| |
− | | [[#HomeButtonHeader]]
| |
− | |-
| |
− | | 0x20
| |
− | | 0x18 * 17
| |
− | | Array of [[#HomeButtonState]]
| |
− | |}
| |
− | | |
− | === HomeButtonHeader ===
| |
− | {| class="wikitable" border="1"
| |
− | |-
| |
− | ! Offset
| |
− | ! Size
| |
− | ! Description
| |
− | |-
| |
− | | 0x0
| |
− | | 0x8
| |
− | | Timestamp in ticks
| |
− | |-
| |
− | | 0x8
| |
− | | 0x8
| |
− | | Number of Entries (always 17)
| |
− | |-
| |
− | | 0x10
| |
− | | 0x8
| |
− | | Latest Entry Index
| |
− | |-
| |
− | | 0x18
| |
− | | 0x8
| |
− | | Maximum Entry Index (always 16)
| |
− | |}
| |
− | | |
− | === HomeButtonState ===
| |
− | {| class="wikitable" border="1"
| |
− | |-
| |
− | ! Offset
| |
− | ! Size
| |
− | ! Description
| |
− | |-
| |
− | | 0x0
| |
− | | 0x8
| |
− | | Timestamp in samples (global)
| |
− | |-
| |
− | | 0x8
| |
− | | 0x10
| |
− | |
| |
− | |}
| |
− | | |
− | == SleepButton ==
| |
− | {| class="wikitable" border="1"
| |
− | |-
| |
− | ! Offset
| |
− | ! Size
| |
− | ! Description
| |
− | |-
| |
− | | 0x0
| |
− | | 0x20
| |
− | | [[#SleepButtonHeader]]
| |
− | |-
| |
− | | 0x20
| |
− | | 0x18 * 17
| |
− | | Array of [[#SleepButtonState]]
| |
− | |}
| |
− | | |
− | === SleepButtonHeader ===
| |
− | {| class="wikitable" border="1"
| |
− | |-
| |
− | ! Offset
| |
− | ! Size
| |
− | ! Description
| |
− | |-
| |
− | | 0x0
| |
− | | 0x8
| |
− | | Timestamp in ticks
| |
− | |-
| |
− | | 0x8
| |
− | | 0x8
| |
− | | Number of Entries (always 17)
| |
− | |-
| |
− | | 0x10
| |
− | | 0x8
| |
− | | Latest Entry Index
| |
− | |-
| |
− | | 0x18
| |
− | | 0x8
| |
− | | Maximum Entry Index (always 16)
| |
− | |}
| |
− | | |
− | === SleepButtonState ===
| |
− | {| class="wikitable" border="1"
| |
− | |-
| |
− | ! Offset
| |
− | ! Size
| |
− | ! Description
| |
− | |-
| |
− | | 0x0
| |
− | | 0x8
| |
− | | Timestamp in samples (global)
| |
− | |-
| |
− | | 0x8
| |
− | | 0x10
| |
− | |
| |
− | |}
| |
− | | |
− | == CaptureButton ==
| |
− | {| class="wikitable" border="1"
| |
− | |-
| |
− | ! Offset
| |
− | ! Size
| |
− | ! Description
| |
− | |-
| |
− | | 0x0
| |
− | | 0x20
| |
− | | [[#CaptureButtonHeader]]
| |
− | |-
| |
− | | 0x20
| |
− | | 0x18 * 17
| |
− | | Array of [[#CaptureButtonState]]
| |
− | |}
| |
− | | |
− | === CaptureButtonHeader ===
| |
− | {| class="wikitable" border="1"
| |
− | |-
| |
− | ! Offset
| |
− | ! Size
| |
− | ! Description
| |
− | |-
| |
− | | 0x0
| |
− | | 0x8
| |
− | | Timestamp in ticks
| |
− | |-
| |
− | | 0x8
| |
− | | 0x8
| |
− | | Number of Entries (always 17)
| |
− | |-
| |
− | | 0x10
| |
− | | 0x8
| |
− | | Latest Entry Index
| |
− | |-
| |
− | | 0x18
| |
− | | 0x8
| |
− | | Maximum Entry Index (always 16)
| |
− | |}
| |
− | | |
− | === CaptureButtonState ===
| |
− | {| class="wikitable" border="1"
| |
− | |-
| |
− | ! Offset
| |
− | ! Size
| |
− | ! Description
| |
− | |-
| |
− | | 0x0
| |
− | | 0x8
| |
− | | Timestamp in samples (global)
| |
− | |-
| |
− | | 0x8
| |
− | | 0x10
| |
− | |
| |
− | |}
| |
− | | |
− | == InputDetector ==
| |
− | {| class="wikitable" border="1"
| |
− | |-
| |
− | ! Offset
| |
− | ! Size
| |
− | ! Description
| |
− | |-
| |
− | | 0x0
| |
− | | 0x20
| |
− | | [[#InputDetectorHeader]]
| |
− | |-
| |
− | | 0x20
| |
− | | 0x18 * 2
| |
− | | Array of [[#InputDetectorState]]
| |
− | |}
| |
− | | |
− | === InputDetectorHeader ===
| |
− | {| class="wikitable" border="1"
| |
− | |-
| |
− | ! Offset
| |
− | ! Size
| |
− | ! Description
| |
− | |-
| |
− | | 0x0
| |
− | | 0x8
| |
− | | Timestamp in ticks
| |
− | |-
| |
− | | 0x8
| |
− | | 0x8
| |
− | | Number of Entries (always 17)
| |
− | |-
| |
− | | 0x10
| |
− | | 0x8
| |
− | | Latest Entry Index
| |
− | |-
| |
− | | 0x18
| |
− | | 0x8
| |
− | | Maximum Entry Index (always 16)
| |
− | |}
| |
− | | |
− | === InputDetectorState ===
| |
− | {| class="wikitable" border="1"
| |
− | |-
| |
− | ! Offset
| |
− | ! Size
| |
− | ! Description
| |
− | |-
| |
− | | 0x0
| |
− | | 0x8
| |
− | | Timestamp in samples (global)
| |
− | |-
| |
− | | 0x8
| |
− | | 0x10
| |
− | |
| |
− | |}
| |
− | | |
− | == UniquePad ==
| |
− | This section contains a series of 16 structures 0x400 bytes large.
| |
− | | |
− | [5.0.0+] This section has been removed from SharedMemoryFormat. [[#UniquePad]] is now a specialization of [[#Npad]].
| |
− | | |
− | {| class="wikitable" border="1"
| |
− | |-
| |
− | ! Offset
| |
− | ! Size
| |
− | ! Description
| |
− | |-
| |
− | | 0x0
| |
− | | 0x80
| |
− | | [[#UniquePadConfig]]
| |
− | |-
| |
− | | 0x80
| |
− | | 0x70 * 2
| |
− | | Array of [[#AnalogStickCalibration]]
| |
− | |}
| |
− | | |
− | === UniquePadConfig ===
| |
− | {| class="wikitable" border="1"
| |
− | |-
| |
− | ! Offset
| |
− | ! Size
| |
− | ! Description
| |
− | |-
| |
− | | 0x0
| |
− | | 0x20
| |
− | | [[#UniquePadConfigHeader]]
| |
− | |-
| |
− | | 0x20
| |
− | | 0x30 * 2
| |
− | | Array of [[#UniquePadConfigState]]
| |
− | |}
| |
− | | |
− | ==== UniquePadConfigHeader ====
| |
− | {| class="wikitable" border="1"
| |
− | |-
| |
− | ! Offset
| |
− | ! Size
| |
− | ! Description
| |
− | |-
| |
− | | 0x0
| |
− | | 0x8
| |
− | | Timestamp in ticks
| |
− | |-
| |
− | | 0x8
| |
− | | 0x8
| |
− | | Number of Entries (always 17)
| |
− | |-
| |
− | | 0x10
| |
− | | 0x8
| |
− | | Latest Entry Index
| |
− | |-
| |
− | | 0x18
| |
− | | 0x8
| |
− | | Maximum Entry Index (always 16)
| |
− | |}
| |
− | | |
− | ==== UniquePadConfigState ====
| |
− | {| class="wikitable" border="1"
| |
− | |-
| |
− | ! Offset
| |
− | ! Size
| |
− | ! Description
| |
− | |-
| |
− | | 0x0
| |
− | | 0x8
| |
− | | Timestamp in samples (global)
| |
− | |-
| |
− | | 0x8
| |
− | | 0x8
| |
− | |
| |
− | |-
| |
− | | 0x10
| |
− | | 0x20
| |
− | | Controller Serial
| |
− | |}
| |
− | | |
− | === AnalogStickCalibration ===
| |
− | {| class="wikitable" border="1"
| |
− | |-
| |
− | ! Offset
| |
− | ! Size
| |
− | ! Description
| |
− | |-
| |
− | | 0x0
| |
− | | 0x20
| |
− | | [[#AnalogStickCalibrationHeader]]
| |
− | |-
| |
− | | 0x20
| |
− | | 0x28 * 2
| |
− | | Array of [[#AnalogStickCalibrationState]]
| |
− | |}
| |
− | | |
− | ==== AnalogStickCalibrationHeader ====
| |
− | {| class="wikitable" border="1"
| |
− | |-
| |
− | ! Offset
| |
− | ! Size
| |
− | ! Description
| |
− | |-
| |
− | | 0x0
| |
− | | 0x8
| |
− | | Timestamp in ticks
| |
− | |-
| |
− | | 0x8
| |
− | | 0x8
| |
− | | Number of Entries (always 17)
| |
− | |-
| |
− | | 0x10
| |
− | | 0x8
| |
− | | Latest Entry Index
| |
− | |-
| |
− | | 0x18
| |
− | | 0x8
| |
− | | Maximum Entry Index (always 16)
| |
− | |}
| |
− | | |
− | ==== AnalogStickCalibrationState ====
| |
− | {| class="wikitable" border="1"
| |
− | |-
| |
− | ! Offset
| |
− | ! Size
| |
− | ! Description
| |
− | |-
| |
− | | 0x0
| |
− | | 0x8
| |
− | | Timestamp in samples (global)
| |
− | |-
| |
− | | 0x8
| |
− | | 0x28
| |
− | |
| |
− | |}
| |
− | | |
− | == Npad ==
| |
− | This section contains a series of 10 0x5000 byte structures describing each available controller.
| |
− | | |
− | {| class="wikitable" border="1"
| |
− | |-
| |
− | ! Index
| |
− | ! Description
| |
− | |-
| |
− | | 0 to 7
| |
− | | Players 1 to 8
| |
− | |-
| |
− | | 8
| |
− | | Handheld Mode
| |
− | |-
| |
− | | 9
| |
− | | Other
| |
− | |}
| |
− | | |
− | === NpadState ===
| |
− | {| class="wikitable" border="1"
| |
− | |-
| |
− | ! Offset
| |
− | ! Size
| |
− | ! Description
| |
− | |-
| |
− | | 0x0
| |
− | | 0x28
| |
− | | [[#NpadStateHeader]]
| |
− | |-
| |
− | | 0x28
| |
− | | 0x20
| |
− | | NpadFullKeyHeader
| |
− | |-
| |
− | | 0x48
| |
− | | 0x30 * 17
| |
− | | Array of NpadFullKeyState
| |
− | |-
| |
− | | 0x378
| |
− | | 0x20
| |
− | | [[#NpadHandheldHeader]]
| |
− | |-
| |
− | | 0x398
| |
− | | 0x30 * 17
| |
− | | Array of [[#NpadHandheldState]]
| |
− | |-
| |
− | | 0x6C8
| |
− | | 0x20
| |
− | | NpadJoyDualHeader
| |
− | |-
| |
− | | 0x6E8
| |
− | | 0x30 * 17
| |
− | | Array of NpadJoyDualState
| |
− | |-
| |
− | | 0xA18
| |
− | | 0x20
| |
− | | NpadJoyLeftHeader
| |
− | |-
| |
− | | 0xA38
| |
− | | 0x30 * 17
| |
− | | Array of NpadJoyLeftState
| |
− | |-
| |
− | | 0xD68
| |
− | | 0x20
| |
− | | NpadJoyRightHeader
| |
− | |-
| |
− | | 0xD88
| |
− | | 0x30 * 17
| |
− | | Array of NpadJoyRightState
| |
− | |-
| |
− | | 0x10B8
| |
− | | 0x20
| |
− | | NpadPalmaHeader
| |
− | |-
| |
− | | 0x12B8
| |
− | | 0x30 * 17
| |
− | | Array of NpadPalmaState
| |
− | |-
| |
− | | 0x1408
| |
− | | 0x20
| |
− | | NpadSystemExtHeader
| |
− | |-
| |
− | | 0x1428
| |
− | | 0x30 * 17
| |
− | | Array of NpadSystemExtState
| |
− | |-
| |
− | | 0x1758
| |
− | | 0x20
| |
− | | NpadSixAxisSensorFullKeyHeader
| |
− | |-
| |
− | | 0x1778
| |
− | | 0x68 * 17
| |
− | | Array of NpadSixAxisSensorFullKeyState
| |
− | |-
| |
− | | 0x1E60
| |
− | | 0x20
| |
− | | NpadSixAxisSensorHandheldHeader
| |
− | |-
| |
− | | 0x1E80
| |
− | | 0x68 * 17
| |
− | | Array of NpadSixAxisSensorHandheldState
| |
− | |-
| |
− | | 0x2568
| |
− | | 0x20
| |
− | | NpadSixAxisSensorJoyLeftDualHeader
| |
− | |-
| |
− | | 0x2588
| |
− | | 0x68 * 17
| |
− | | Array of NpadSixAxisSensorJoyLeftDualState
| |
− | |-
| |
− | | 0x2C70
| |
− | | 0x20
| |
− | | NpadSixAxisSensorJoyRightDualHeader
| |
− | |-
| |
− | | 0x2C90
| |
− | | 0x68 * 17
| |
− | | Array of NpadSixAxisSensorJoyRightDualState
| |
− | |-
| |
− | | 0x3378
| |
− | | 0x20
| |
− | | NpadSixAxisSensorJoyLeftHeader
| |
− | |-
| |
− | | 0x3398
| |
− | | 0x68 * 17
| |
− | | Array of NpadSixAxisSensorJoyLeftState
| |
− | |-
| |
− | | 0x3A80
| |
− | | 0x20
| |
− | | NpadSixAxisSensorJoyRightHeader
| |
− | |-
| |
− | | 0x3AA0
| |
− | | 0x68 * 17
| |
− | | Array of NpadSixAxisSensorJoyRightState
| |
− | |-
| |
− | | 0x4188
| |
− | | 0x4
| |
− | | [[HID_services#DeviceType|DeviceType]]
| |
− | |-
| |
− | | 0x418C
| |
− | | 0x4
| |
− | | Padding
| |
− | |-
| |
− | | 0x4190
| |
− | | 0x8
| |
− | | [[#NpadSystemProperties]]
| |
− | |-
| |
− | | 0x4198
| |
− | | 0x4
| |
− | | [[#NpadSystemButtonProperties]]
| |
− | |-
| |
− | | 0x419C
| |
− | | 0x4
| |
− | | BatteryIndex0 state (must be 0-4)
| |
− | |-
| |
− | | 0x41A0
| |
− | | 0x4
| |
− | | BatteryIndex1 state (must be 0-4)
| |
− | |-
| |
− | | 0x41A4
| |
− | | 0x4
| |
− | | BatteryIndex2 state (must be 0-4)
| |
− | |-
| |
− | | 0x41A8
| |
− | | 0x20
| |
− | | [1.0.0-3.0.2] NfcXcdDeviceHandleHeader (Replaced by [[HID_services|commands]] GetXcdHandleForNpadWithNfc/IsNfcActivated)
| |
− | |-
| |
− | | 0x41C8
| |
− | | 0x20 * 2
| |
− | | [1.0.0-3.0.2] Array of [[#NfcXcdDeviceHandleState]] (See above)
| |
− | |-
| |
− | | 0x41A8
| |
− | | 0x4
| |
− | | [9.0.0+] [[HID_services#AppletFooterUiAttribute|AppletFooterUiAttribute]]
| |
− | |-
| |
− | | 0x41AC
| |
− | | 0x1
| |
− | | [9.0.0+] [[HID_services#AppletFooterUiType|AppletFooterUiType]]
| |
− | |-
| |
− | | 0x4208
| |
− | | 0x8
| |
− | | Mutex
| |
− | |-
| |
− | | 0x4228
| |
− | | 0x20
| |
− | | NpadGcTriggerHeader
| |
− | |-
| |
− | | 0x4248
| |
− | | 0x18 * 17
| |
− | | Array of NpadGcTriggerState
| |
− | |}
| |
− | | |
− | ==== NpadStateHeader ====
| |
− | {| class="wikitable" border="1"
| |
− | |-
| |
− | ! Offset
| |
− | ! Size
| |
− | ! Description
| |
− | |-
| |
− | | 0x0
| |
− | | 0x4
| |
− | | [[HID_services#NpadStyleTag|NpadStyleSet]]
| |
− | |-
| |
− | | 0x4
| |
− | | 0x4
| |
− | | [[HID_services#NpadJoyAssignmentMode|NpadJoyAssignmentMode]]
| |
− | |-
| |
− | | 0x8
| |
− | | 0x4
| |
− | | bit1 color set does not exist
| |
− | |-
| |
− | | 0xC
| |
− | | 0x4
| |
− | | RGBA Body Color (single Joy-Con or Pro Controller)
| |
− | |-
| |
− | | 0x10
| |
− | | 0x4
| |
− | | RGBA Button Color (single Joy-Con or Pro Controller)
| |
− | |-
| |
− | | 0x14
| |
− | | 0x4
| |
− | | bit1 color set does not exist
| |
− | |-
| |
− | | 0x18
| |
− | | 0x4
| |
− | | RGBA Body Color (right Joy-Con)
| |
− | |-
| |
− | | 0x1C
| |
− | | 0x4
| |
− | | RGBA Button Color (right Joy-Con)
| |
− | |-
| |
− | | 0x20
| |
− | | 0x4
| |
− | | RGBA Body Color (left Joy-Con)
| |
− | |-
| |
− | | 0x24
| |
− | | 0x4
| |
− | | RGBA Button Color (left Joy-Con)
| |
− | |}
| |
− | | |
− | ==== NpadHandheldHeader ====
| |
− | {| class="wikitable" border="1"
| |
− | |-
| |
− | ! Offset
| |
− | ! Size
| |
− | ! Description
| |
− | |-
| |
− | | 0x0
| |
− | | 0x8
| |
− | | Timestamp in ticks
| |
− | |-
| |
− | | 0x8
| |
− | | 0x8
| |
− | | Number of entries (always 17)
| |
− | |-
| |
− | | 0x10
| |
− | | 0x8
| |
− | | Latest Entry Index
| |
− | |-
| |
− | | 0x18
| |
− | | 0x8
| |
− | | Maximum Entry Index (always 16)
| |
− | |}
| |
− | | |
− | ==== NpadHandheldState ====
| |
− | {| class="wikitable" border="1"
| |
− | |-
| |
− | ! Offset
| |
− | ! Size
| |
− | ! Description
| |
− | |-
| |
− | | 0x0
| |
− | | 0x8
| |
− | | Timestamp in samples (global)
| |
− | |-
| |
− | | 0x8
| |
− | | 0x8
| |
− | | Timestamp in samples
| |
− | |-
| |
− | | 0x10
| |
− | | 0x8
| |
− | | [[#NpadButton]]
| |
− | |-
| |
− | | 0x18
| |
− | | 0x4
| |
− | | Left Joystick X
| |
− | |-
| |
− | | 0x1C
| |
− | | 0x4
| |
− | | Left Joystick Y
| |
− | |-
| |
− | | 0x20
| |
− | | 0x4
| |
− | | Right Joystick X
| |
− | |-
| |
− | | 0x24
| |
− | | 0x4
| |
− | | Right Joystick Y
| |
− | |-
| |
− | | 0x28
| |
− | | 0x4
| |
− | | Controller State (bit0 connected, bit1 wired)
| |
− | |-
| |
− | | 0x2C
| |
− | | 0x4
| |
− | | Padding
| |
− | |}
| |
− | | |
− | ===== NpadButton =====
| |
− | This is the u64 bitmask for "nn::hid::NpadButton".
| |
− | | |
− | {| class="wikitable" border="1"
| |
− | |-
| |
− | ! Bit
| |
− | ! Button
| |
− | |-
| |
− | | 0
| |
− | | A
| |
− | |-
| |
− | | 1
| |
− | | B
| |
− | |-
| |
− | | 2
| |
− | | X
| |
− | |-
| |
− | | 3
| |
− | | Y
| |
− | |-
| |
− | | 4
| |
− | | Left Stick Pressed
| |
− | |-
| |
− | | 5
| |
− | | Right Stick Pressed
| |
− | |-
| |
− | | 6
| |
− | | L
| |
− | |-
| |
− | | 7
| |
− | | R
| |
− | |-
| |
− | | 8
| |
− | | ZL
| |
− | |-
| |
− | | 9
| |
− | | ZR
| |
− | |-
| |
− | | 10
| |
− | | Plus
| |
− | |-
| |
− | | 11
| |
− | | Minus
| |
− | |-
| |
− | | 12
| |
− | | Left
| |
− | |-
| |
− | | 13
| |
− | | Up
| |
− | |-
| |
− | | 14
| |
− | | Right
| |
− | |-
| |
− | | 15
| |
− | | Down
| |
− | |-
| |
− | | 16
| |
− | | Left Stick Left
| |
− | |-
| |
− | | 17
| |
− | | Left Stick Up
| |
− | |-
| |
− | | 18
| |
− | | Left Stick Right
| |
− | |-
| |
− | | 19
| |
− | | Left Stick Down
| |
− | |-
| |
− | | 20
| |
− | | Right Stick Left
| |
− | |-
| |
− | | 21
| |
− | | Right Stick Up
| |
− | |-
| |
− | | 22
| |
− | | Right Stick Right
| |
− | |-
| |
− | | 23
| |
− | | Right Stick Down
| |
− | |-
| |
− | | 24
| |
− | | LeftSL
| |
− | |-
| |
− | | 25
| |
− | | LeftSR
| |
− | |-
| |
− | | 26
| |
− | | RightSL
| |
− | |-
| |
− | | 27
| |
− | | RightSR
| |
− | |-
| |
− | | 28
| |
− | | Palma
| |
− | |-
| |
− | | 29
| |
− | |
| |
− | |-
| |
− | | 30
| |
− | | HandheldLeftB (Left B button on NES controllers in Handheld mode)
| |
− | |}
| |
− | | |
− | ===== NpadSixAxisSensorHandheldHeader =====
| |
− | {| class="wikitable" border="1"
| |
− | |-
| |
− | ! Offset
| |
− | ! Size
| |
− | ! Description
| |
− | |-
| |
− | | 0x0
| |
− | | 0x8
| |
− | | Timestamp in ticks
| |
− | |-
| |
− | | 0x8
| |
− | | 0x8
| |
− | | Number of entries (always 17)
| |
− | |-
| |
− | | 0x10
| |
− | | 0x8
| |
− | | Latest Entry Index
| |
− | |-
| |
− | | 0x18
| |
− | | 0x8
| |
− | | Maximum Entry Index (up to 16)
| |
− | |}
| |
− | | |
− | ===== NpadSixAxisSensorHandheldState =====
| |
− | {| class="wikitable" border="1"
| |
− | |-
| |
− | ! Offset
| |
− | ! Size
| |
− | ! Description
| |
− | |-
| |
− | | 0x0
| |
− | | 0x8
| |
− | | Timestamp in samples (global)
| |
− | |-
| |
− | | 0x8
| |
− | | 0x8
| |
− | | Unknown
| |
− | |-
| |
− | | 0x10
| |
− | | 0x8
| |
− | | Timestamp in samples
| |
− | |-
| |
− | | 0x1C
| |
− | | 0x4 * 3
| |
− | | Accelerometer data as 3 floats
| |
− | |-
| |
− | | 0x24
| |
− | | 0x4 * 3
| |
− | | Gyroscope data as 3 floats
| |
− | |-
| |
− | | 0x30
| |
− | | 0x4 * 3
| |
− | | Unknown sensor data as 3 floats
| |
− | |-
| |
− | | 0x3C
| |
− | | 0x4 * 9
| |
− | | Orientation basis as 3x3 matrix of floats
| |
− | |-
| |
− | | 0x60
| |
− | | 0x8
| |
− | | Unknown, always 1
| |
− | |}
| |
− | | |
− | Official sw copies the data from offset 0x8 size 0x60 to the final output state.
| |
− | | |
− | ==== NpadSystemProperties ====
| |
− | {| class="wikitable" border="1"
| |
− | |-
| |
− | ! Bit
| |
− | ! Description
| |
− | |-
| |
− | | 0
| |
− | | PowerInfo0 isCharging
| |
− | |-
| |
− | | 1
| |
− | | PowerInfo1 isCharging
| |
− | |-
| |
− | | 2
| |
− | | PowerInfo2 isCharging
| |
− | |-
| |
− | | 3
| |
− | | PowerInfo0 powerConnected
| |
− | |-
| |
− | | 4
| |
− | | PowerInfo1 powerConnected
| |
− | |-
| |
− | | 5
| |
− | | PowerInfo2 powerConnected
| |
− | |-
| |
− | | 6-8
| |
− | | Unused
| |
− | |-
| |
− | | 9
| |
− | | UnsupportedButtonPressed_NpadSystem
| |
− | |-
| |
− | | 10
| |
− | | UnsupportedButtonPressed_NpadSystemExt
| |
− | |-
| |
− | | 11
| |
− | | AbxyButtonOriented
| |
− | |-
| |
− | | 12
| |
− | | SlSrButtonOriented
| |
− | |-
| |
− | | 13
| |
− | | [4.0.0+] PlusButtonCapability
| |
− | |-
| |
− | | 14
| |
− | | [4.0.0+] MinusButtonCapability
| |
− | |-
| |
− | | 15
| |
− | | [8.0.0+] DirectionalButtonsSupported
| |
− | |-
| |
− | | 16-63
| |
− | | Unused
| |
− | |}
| |
− | | |
− | ==== NpadSystemButtonProperties ====
| |
− | {| class="wikitable" border="1"
| |
− | |-
| |
− | ! Bit
| |
− | ! Description
| |
− | |-
| |
− | | 0
| |
− | | UnintendedHomeButtonInputProtectionEnabled (if cleared)
| |
− | |}
| |
− | | |
− | ==== NfcXcdDeviceHandleState ====
| |
− | {| class="wikitable" border="1"
| |
− | |-
| |
− | ! Offset
| |
− | ! Size
| |
− | ! Description
| |
− | |-
| |
− | | 0x0
| |
− | | 0x8
| |
− | | Timestamp in samples (global)
| |
− | |-
| |
− | | 0x8
| |
− | | 0x8
| |
− | | DeviceHandle
| |
− | |-
| |
− | | 0x10
| |
− | | 0x1
| |
− | | Flag
| |
− | |-
| |
− | | 0x11
| |
− | | 0x1
| |
− | | Flag
| |
− | |-
| |
− | | 0x12
| |
− | | 0x6
| |
− | | Padding
| |
− | |-
| |
− | | 0x18
| |
− | | 0x8
| |
− | | Timestamp in samples
| |
− | |}
| |
− | | |
− | == Gesture ==
| |
− | {| class="wikitable" border="1"
| |
− | |-
| |
− | ! Offset
| |
− | ! Size
| |
− | ! Description
| |
− | |-
| |
− | | 0x0
| |
− | | 0x20
| |
− | | [[#GestureHeader]]
| |
− | |-
| |
− | | 0x20
| |
− | | 0x68 * 17
| |
− | | Array of [[#GestureState]]
| |
− | |}
| |
− | | |
− | === GestureHeader ===
| |
− | {| class="wikitable" border="1"
| |
− | |-
| |
− | ! Offset
| |
− | ! Size
| |
− | ! Description
| |
− | |-
| |
− | | 0x0
| |
− | | 0x8
| |
− | | Timestamp in ticks
| |
− | |-
| |
− | | 0x8
| |
− | | 0x8
| |
− | | Number of Entries (always 17)
| |
− | |-
| |
− | | 0x10
| |
− | | 0x8
| |
− | | Latest Entry Index
| |
− | |-
| |
− | | 0x18
| |
− | | 0x8
| |
− | | Maximum Entry Index (always 16)
| |
− | |}
| |
− | | |
− | === GestureState ===
| |
− | {| class="wikitable" border="1"
| |
− | |-
| |
− | ! Offset
| |
− | ! Size
| |
− | ! Description
| |
− | |-
| |
− | | 0x0
| |
− | | 0x8
| |
− | | Timestamp in samples (global)
| |
− | |-
| |
− | | 0x8
| |
− | | 0x60
| |
− | |
| |
− | |}
| |
− | | |
− | == ConsoleSixAxisSensor ==
| |
− | {| class="wikitable" border="1"
| |
− | |-
| |
− | ! Offset
| |
− | ! Size
| |
− | ! Description
| |
− | |-
| |
− | | 0x0
| |
− | | 0x8
| |
− | | Timestamp in samples
| |
− | |-
| |
− | | 0x8
| |
− | | 0x1
| |
− | | IsSevenSixAxisSensorAtRest
| |
− | |-
| |
− | | 0x9
| |
− | | 0x3
| |
− | | Padding
| |
− | |-
| |
− | | 0xC
| |
− | | 0x4
| |
− | | VerticalizationError
| |
− | |-
| |
− | | 0x10
| |
− | | 0xC
| |
− | | GyroBias
| |
− | |-
| |
− | | 0x1C
| |
− | | 0x4
| |
− | | Padding
| |
− | |}
| |