Line 1,016: |
Line 1,016: |
| | | |
| == HdlsNpadAssignment == | | == HdlsNpadAssignment == |
| + | This is a 0x208-byte struct. |
| + | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
Line 1,027: |
Line 1,029: |
| |} | | |} |
| | | |
− | This is a 0x208-byte struct. | + | === HdlsNpadAssignmentEntry === |
| + | This is a 0x20-byte struct. |
| | | |
− | === HdlsNpadAssignmentEntry ===
| |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
Line 1,047: |
Line 1,049: |
| |} | | |} |
| | | |
− | This is a 0x20-byte struct. | + | == HdlsStateList == |
| + | This is a 0x408-byte struct. |
| + | |
| + | [9.0.0+] This is a 0x488-byte struct. |
| | | |
− | == HdlsStateList ==
| |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
Line 1,060: |
Line 1,064: |
| | 0x8 || <[[#HdlsStateListEntry]] size>*0x10 || Array of [[#HdlsStateListEntry]]. | | | 0x8 || <[[#HdlsStateListEntry]] size>*0x10 || Array of [[#HdlsStateListEntry]]. |
| |} | | |} |
− |
| |
− | This is a 0x408-byte struct. [9.0.0+] This is a 0x488-byte struct.
| |
| | | |
| This contains a list of all controllers, including non-virtual controllers. | | This contains a list of all controllers, including non-virtual controllers. |
| | | |
| === HdlsStateListEntry === | | === HdlsStateListEntry === |
| + | This is a 0x40-byte struct. |
| + | |
| + | [9.0.0+] This is a 0x48-byte struct. |
| + | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
Line 1,079: |
Line 1,085: |
| |} | | |} |
| | | |
− | This is a 0x40-byte struct. [9.0.0+] This is a 0x48-byte struct. | + | == HdlsDeviceInfo == |
| + | This is a 0x10-byte struct. |
| | | |
− | == HdlsDeviceInfo ==
| |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
Line 1,097: |
Line 1,103: |
| |} | | |} |
| | | |
− | [9.0.0+]: | + | [9.0.0+] This is a 0x14-byte struct. |
| + | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
Line 1,116: |
Line 1,123: |
| | 0x10 || 0x4 || RGBA Unknown Buttons Color | | | 0x10 || 0x4 || RGBA Unknown Buttons Color |
| |} | | |} |
− |
| |
− | This is a 0x10-byte struct. [9.0.0+] This is a 0x14-byte struct.
| |
| | | |
| == DeviceTypeInternal == | | == DeviceTypeInternal == |
− | This is an u32 "nn::hid::detail::DeviceTypeInternal". | + | This is "nn::hid::detail::DeviceTypeInternal". |
− | | |
− | [9.0.0+] This an u8 "nn::hidtypes::DeviceType".
| |
− | | |
− | Bits for "nn::hid::detail::DeviceTypeInternal", only 1 bit can be set:
| |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| ! Bits | | ! Bits |
| ! Description | | ! Description |
− | ! Notes
| |
| |- | | |- |
| | 0-7 | | | 0-7 |
− | |
| |
| | BIT(N*4+0) = Pro Controller, BIT(N*4+1) = Joy-Con Left, BIT(N*4+2) = Joy-Con Right, BIT(N*4+3) = invalid. Where N is 0-1. | | | BIT(N*4+0) = Pro Controller, BIT(N*4+1) = Joy-Con Left, BIT(N*4+2) = Joy-Con Right, BIT(N*4+3) = invalid. Where N is 0-1. |
| |- | | |- |
| | 8-10 | | | 8-10 |
− | |
| |
| | Pro Controller | | | Pro Controller |
| |- | | |- |
| | 11 | | | 11 |
− | |
| |
| | Famicom left controller | | | Famicom left controller |
| |- | | |- |
| | 12 | | | 12 |
− | |
| |
| | Famicom right controller (with microphone) | | | Famicom right controller (with microphone) |
| |- | | |- |
| | 13 | | | 13 |
− | |
| |
| | NES left controller | | | NES left controller |
| |- | | |- |
| | 14 | | | 14 |
− | |
| |
| | NES right controller | | | NES right controller |
| |- | | |- |
| | 15-16 | | | 15-16 |
− | |
| |
| | Invalid | | | Invalid |
| |- | | |- |
| | 17 | | | 17 |
− | |
| |
| | Generic external controller | | | Generic external controller |
| |- | | |- |
| | 18-20 | | | 18-20 |
− | |
| |
| | Invalid | | | Invalid |
| |- | | |- |
| | 21-23 | | | 21-23 |
− | |
| |
| | Generic controller | | | Generic controller |
| |} | | |} |
| | | |
− | u8 values for "nn::hidtypes::DeviceType", must match one of the these values:
| + | [9.0.0+] This is "nn::hidtypes::DeviceType". |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| ! Value | | ! Value |
| + | ! [[#DeviceType|DeviceType]] |
| + | ! [[#UniquePadType|UniquePadType]] |
| ! Description | | ! Description |
− | ! Notes
| |
| |- | | |- |
− | | 1 || JoyRight || | + | | 1 || JoyRight, HandheldRight || JoyRight || Joy-Con right controller |
| + | |- |
| + | | 2 || JoyLeft, HandheldLeft || JoyLeft || Joy-Con left controller |
| |- | | |- |
− | | 2 || JoyLeft || | + | | 3 || FullKey || FullKey || Pro Controller |
| |- | | |- |
− | | 3 || FullKey || | + | | 4 || JoyLeft || JoyLeft || SNES left controller |
| |- | | |- |
− | | 4 || JoyLeft || | + | | 5 || JoyRight || JoyRight || SNES right controller |
| |- | | |- |
− | | 5 || JoyRight || | + | | 6 || FullKey || FullKey || Gc Controller |
| |- | | |- |
− | | 6 || FullKey || | + | | 7 || HvcLarkLeft, HandheldHvcLarkLeft || JoyLeft || Famicom left controller |
| |- | | |- |
− | | 7 || LarkLeft (HVC) || | + | | 8 || HvcLarkRight, HandheldHvcLarkRight || JoyRight || Famicom right controller (with microphone) |
| |- | | |- |
− | | 8 || LarkRight (HVC) || | + | | 9 || NesLarkLeft, HandheldNesLarkLeft || JoyLeft || NES left controller |
| |- | | |- |
− | | 9 || LarkLeft (NES) || | + | | 10 || NesLarkRight, HandheldNesLarkRight || JoyRight || NES right controller |
| |- | | |- |
− | | 10 || LarkRight (NES) || | + | | 11 || SystemExt || FullKey || Unknown |
| |- | | |- |
− | | 11 || Invalid || | + | | 12 || Palma || System || Poké Ball Plus controller |
| |- | | |- |
− | | 12 || Palma || | + | | 13 || FullKey || FullKey || Unknown |
| |- | | |- |
− | | 13 || FullKey || | + | | 14 || HandheldLeft || JoyLeft || SNES left controller in handheld mode |
| |- | | |- |
− | | 14 || Invalid || | + | | 15 || FullKey || FullKey || Unknown |
| |- | | |- |
− | | 15 || FullKey || | + | | 16 || FullKey || FullKey || Unknown |
| |- | | |- |
− | | 16 || Controller is missing in sharedmem. | + | | 17 || Unknown || Unknown || Unknown |
| |- | | |- |
− | | 17-18 || Invalid || | + | | 18 || HandheldRight || JoyRight || SNES right controller in handheld mode |
| |- | | |- |
− | | 19 || [[#DeviceType]] System with [[#NpadStyleTag]] |= NpadFullKey | + | | 19 || System || System || Unknown (has [[#NpadStyleTag|NpadFullKey]] style tag) |
| |- | | |- |
− | | 20 || [[#DeviceType]] System with [[#NpadStyleTag]] |= NpadJoyDual | + | | 20 || System || System || Unknown (has [[#NpadStyleTag|NpadJoyDual]] style tag) |
| |- | | |- |
− | | 21 || [[#DeviceType]] System with [[#NpadStyleTag]] |= NpadJoyDual | + | | 21 || System || System || Unknown (has [[#NpadStyleTag|NpadJoyDual]] style tag) |
| |} | | |} |
| | | |
| == HdlsState == | | == HdlsState == |
| + | This is a 0x24-byte struct. |
| | | |
− | Pre-9.0.0:
| |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
Line 1,261: |
Line 1,254: |
| | 0x21 || 0x3 || Padding | | | 0x21 || 0x3 || Padding |
| |} | | |} |
− |
| |
− | This is a 0x24-byte struct.
| |
| | | |
| = hid:sys = | | = hid:sys = |
Line 1,407: |
Line 1,398: |
| | 806 || [3.0.0+] DisconnectUniquePad | | | 806 || [3.0.0+] DisconnectUniquePad |
| |- | | |- |
− | | 807 || [5.0.0+] GetUniquePadType | + | | 807 || [5.0.0+] [[#GetUniquePadType]] |
| |- | | |- |
| | 808 || [5.0.0+] GetUniquePadInterface | | | 808 || [5.0.0+] GetUniquePadInterface |
Line 1,534: |
Line 1,525: |
| The output buffer contains an array of u64 '''UniquePadId'''. | | The output buffer contains an array of u64 '''UniquePadId'''. |
| | | |
− | == NotifyInputDetector == | + | == GetUniquePadType == |
− | Takes an input u32 bitmask InputSourceId, no output. | + | Takes an input u64 '''UniquePadId''' and returns an output u64 [[#UniquePadType]]. |
− | | |
− | This is the only hid:sys command used by USB-sysmodule (with value 0x40).
| |
| | | |
| == SetNotificationLedPattern == | | == SetNotificationLedPattern == |
Line 1,553: |
Line 1,542: |
| == PrepareHidsForNotificationWake == | | == PrepareHidsForNotificationWake == |
| Takes a type-0x9 input buffer containing an array of u64 '''UniquePadId''', no output. | | Takes a type-0x9 input buffer containing an array of u64 '''UniquePadId''', no output. |
| + | |
| + | == NotifyInputDetector == |
| + | Takes an input u32 bitmask InputSourceId, no output. |
| + | |
| + | This is the only hid:sys command used by USB-sysmodule (with value 0x40). |
| | | |
| == GetHidbusSystemServiceObject == | | == GetHidbusSystemServiceObject == |
Line 1,751: |
Line 1,745: |
| | | |
| == DeviceType == | | == DeviceType == |
− | This is a bitmask describing the controller device type. | + | This is "nn::hid::system::DeviceType". |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 1,817: |
Line 1,811: |
| | System | | | System |
| | Generic controller. | | | Generic controller. |
| + | |} |
| + | |
| + | == UniquePadType == |
| + | This is "nn::hid::system::UniquePadType". |
| + | |
| + | {| class="wikitable" border="1" |
| + | ! Value |
| + | ! Description |
| + | |- |
| + | | 0x0 || System |
| + | |- |
| + | | 0x1 || FullKey |
| + | |- |
| + | | 0x2 || JoyRight |
| + | |- |
| + | | 0x3 || JoyLeft |
| + | |- |
| + | | 0x4 || Unknown |
| |} | | |} |
| | | |