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.
Memory Map
Offset | Size in bytes | Description |
0x400 | 0x3000 | Capacitive Touchscreen |
0x3400 | 0x400 | Mouse |
0x3800 | 0x400 | Keyboard |
0x3C00 | 0x400 | Unknown, header and 17 entries |
0x4000 | 0x400 | Unknown, header and 17 entries |
0x4400 | 0x400 | Unknown, header and 17 entries |
0x4800 | 0x400 | Unknown, header and 17 entries |
0x4C00 | 0x200 | Unknown |
0x4E00 | 0x200 | Unknown |
0x5000 | 0x200 | Unknown |
0x5A00 | 0x4000 | Controller Serials? |
0x9A00 | 0x32000 | Controllers |
0x3BA00 | 0x4600 | Unknown |
Capacitive Touchscreen
Offset | Size in bytes | Description |
0x0 | 0x28 | Touch Header |
0x28 | 0x290 * 17 | Touch Entries |
Offset | Size in bytes | Description |
0x0 | 0x4 | Unk |
0x4 | 0x4 | Unk |
0x8 | 0x4 | Unk |
0xC | 0x4 | Unk |
0x10 | 0x8 | Unk |
0x18 | 0x8 | Unk |
0x20 | 0x8 | Timestamp |
Touch Entry
Offset | Size in bytes | Description |
0x0 | 0x10 | Touch Entry Header |
0x10 | 0x28 * 16 | Touch Data |
Offset | Size in bytes | Description |
0x0 | 0x8 | Timestamp |
0x8 | 0x8 | Number of Touches |
Touch Data Entry
Offset | Size in bytes | Description |
0x0 | 0x8 | Timestamp |
0x8 | 0x8 | Unknown |
0x10 | 0x4 | Touch X |
0x14 | 0x4 | Touch Y |
0x18 | 0x4 | Touch Diameter X |
0x1C | 0x4 | Touch Diameter Y |
0x20 | 0x4 | Angle |
0x24 | 0x4 | Unknown |
Mouse
Offset | Size in bytes | Description |
0x0 | 0x20 | Mouse Header |
0x20 | 0x30 * 17 | Mouse Entries |
Offset | Size in bytes | Description |
0x0 | 0x4 | Timestamp? |
0x4 | 0x4 | Unknown |
0x8 | 0x4 | Unknown |
0xC | 0x4 | Unknown |
0x10 | 0x8 | 6 when connected, 1 disconnected |
0x18 | 0x8 | Unknown |
Mouse Entry
Offset | Size in bytes | Description |
0x0 | 0x8 | Timestamp |
0x8 | 0x8 | Timestamp 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
Offset | Size in bytes | Description |
0x0 | 0x20 | Keyboard Header |
0x20 | 0x30 * 17 | Keyboard Entries |
Offset | Size in bytes | Description |
0x0 | 0x4 | Timestamp? |
0x4 | 0x4 | Unknown |
0x8 | 0x4 | Unknown |
0xC | 0x4 | Unknown |
0x10 | 0x8 | 6 when connected |
0x18 | 0x8 | Unknown |
Keyboard Entry
Offset | Size in bytes | Description |
0x0 | 0x8 | Timestamp |
0x8 | 0x8 | Timestamp 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) |
Controller Serials?
This section contains a series of 16 structures 0x400 bytes large.
Offset | Size in bytes | Description |
0x30 | 0xE | Controller Serial |
0x60 | 0xE | Controller Serial |
Controllers
This section contains a series of 10 0x5000 byte structures describing each available controller.
Controller Index | Description |
0 to 7 | Players 1 to 8 |
8 | Handheld Mode |
9 | Unknown |
Controller
Offset | Size in bytes | Description |
0x0 | 0x28 | Controller Header |
0x3A0 | 0x28 * 17 | Controller Joined States |
0x10E0 | 0x28 * 17 | Controller Left States |
0x1430 | 0x28 * 17 | Controller Right States |
0x41D0 | 0x10 | Controller MAC |
0x41F0 | 0x10 | Controller MAC |
Offset | Size in bytes | Description |
0x0 | 0x4 | Status, bit3 pair, bit4 left, bit5 right |
0x4 | 0x4 | Is Joy-Con Half |
0x8 | 0x4 | Unknown, 2 for Joy-Con pair |
0xC | 0x4 | RGBA Body Color (single Joy-Con) |
0x10 | 0x4 | RGBA Button Color (single Joy-Con) |
0x14 | 0x4 | Unknown |
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) |
Controller State
Offset | Size in bytes | Description |
0x0 | 0x8 | Timestamp |
0x8 | 0x8 | Button State |
0xC | 0x4 | Left Joystick X |
0x10 | 0x4 | Left Joystick Y |
0x14 | 0x4 | Right Joystick X |
0x18 | 0x4 | Right Joystick Y |
0x20 | 0x8 | Controller State (bit0 connected, bit1 wired) |
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 |