HID services: Difference between revisions

No edit summary
(26 intermediate revisions by 3 users not shown)
Line 157: Line 157:
|-
|-
| 211 || [7.0.0+] [[#IsVibrationDeviceMounted]]
| 211 || [7.0.0+] [[#IsVibrationDeviceMounted]]
|-
| 212 || [11.0.0+] [[#SendVibrationValueInBool]]
|-
|-
| 300 || [3.0.0+] [[#ActivateConsoleSixAxisSensor]]
| 300 || [3.0.0+] [[#ActivateConsoleSixAxisSensor]]
Line 584: Line 586:
== IsVibrationDeviceMounted ==
== IsVibrationDeviceMounted ==
Takes a PID, an [[#VibrationDeviceHandle]], and an u64 [[AM_services|AppletResourceUserId]], returns an output u8 bool.
Takes a PID, an [[#VibrationDeviceHandle]], and an u64 [[AM_services|AppletResourceUserId]], returns an output u8 bool.
== SendVibrationValueInBool ==
Takes a PID, a bool, a [[#VibrationDeviceHandle]], and an [[AM_services|AppletResourceUserId]], no output.
Stubbed, this just returns 0.
This is currently not exposed by sdknso.


== ActivateConsoleSixAxisSensor ==
== ActivateConsoleSixAxisSensor ==
Line 713: Line 722:


sdknso uses an user-specified EventClearMode.
sdknso uses an user-specified EventClearMode.
The Event is signaled when data is available with [[#GetPalmaOperationInfo]].


== GetPalmaOperationInfo ==
== GetPalmaOperationInfo ==
Line 718: Line 729:


sdknso passes [[#PalmaOperationInfo]]+0x8 size 0x140 for the output buffer. [5.1.0+] After using the cmd successfully, [[#GetPalmaOperationResult]] is used.
sdknso passes [[#PalmaOperationInfo]]+0x8 size 0x140 for the output buffer. [5.1.0+] After using the cmd successfully, [[#GetPalmaOperationResult]] is used.
This must be used at some point following using any of the other Palma cmds which trigger an Operation, once the [[#AcquirePalmaOperationCompleteEvent|Event]] is signaled. Up to 4 Operations can be queued at once, the other cmds will throw an error once there's too many operations.


== PlayPalmaActivity ==
== PlayPalmaActivity ==
Takes an input [[#PalmaConnectionHandle]], an u64 (exposed by sdknso as an u16), no output.
Takes an input [[#PalmaConnectionHandle]], an u64 (exposed by sdknso as an u16), no output.
See [[#hidGetPalmaOperationInfo]].


== SetPalmaFrModeType ==
== SetPalmaFrModeType ==
Takes an input [[#PalmaConnectionHandle]], an u64 [[#PalmaFrModeType]], no output.
Takes an input [[#PalmaConnectionHandle]], an u64 [[#PalmaFrModeType]], no output.
See [[#hidGetPalmaOperationInfo]].


== ReadPalmaStep ==
== ReadPalmaStep ==
Takes an input [[#PalmaConnectionHandle]], no output.
Takes an input [[#PalmaConnectionHandle]], no output.
See [[#hidGetPalmaOperationInfo]].
[[#EnablePalmaStep]] should be used before this.


== EnablePalmaStep ==
== EnablePalmaStep ==
Takes an input bool, a [[#PalmaConnectionHandle]], no output.
Takes an input bool, a [[#PalmaConnectionHandle]], no output.
See [[#hidGetPalmaOperationInfo]].


== ResetPalmaStep ==
== ResetPalmaStep ==
Takes an input [[#PalmaConnectionHandle]], no output.
Takes an input [[#PalmaConnectionHandle]], no output.
See [[#hidGetPalmaOperationInfo]].


== ReadPalmaApplicationSection ==
== ReadPalmaApplicationSection ==
Takes an input [[#PalmaConnectionHandle]], an u64, an u64, no output.
Takes an input [[#PalmaConnectionHandle]], an u64, an u64 size, no output.


sdknso exposes the first u64 as a s32. sdknso will Abort if the input value for the second u64 is >0x100.
sdknso exposes the first u64 as a s32. sdknso will Abort if the input value for the second u64 is >0x100.
See [[#hidGetPalmaOperationInfo]].


== WritePalmaApplicationSection ==
== WritePalmaApplicationSection ==
Line 743: Line 770:


sdknso exposes the first u64 as a s32. Data is copied from the input [[#PalmaApplicationSectionAccessBuffer]] with the specified size.
sdknso exposes the first u64 as a s32. Data is copied from the input [[#PalmaApplicationSectionAccessBuffer]] with the specified size.
See [[#hidGetPalmaOperationInfo]].


== ReadPalmaUniqueCode ==
== ReadPalmaUniqueCode ==
Takes an input [[#PalmaConnectionHandle]], no output.
Takes an input [[#PalmaConnectionHandle]], no output.
See [[#hidGetPalmaOperationInfo]].


== SetPalmaUniqueCodeInvalid ==
== SetPalmaUniqueCodeInvalid ==
Takes an input [[#PalmaConnectionHandle]], no output.
Takes an input [[#PalmaConnectionHandle]], no output.
See [[#hidGetPalmaOperationInfo]].


== WritePalmaActivityEntry ==
== WritePalmaActivityEntry ==
Line 754: Line 787:


sdknso exposes the first u64 as an u16, while the rest are exposed as [[#PalmaActivityEntry]].
sdknso exposes the first u64 as an u16, while the rest are exposed as [[#PalmaActivityEntry]].
See [[#hidGetPalmaOperationInfo]].


== WritePalmaRgbLedPatternEntry ==
== WritePalmaRgbLedPatternEntry ==
Takes an input [[#PalmaConnectionHandle]], an u64, a type-0x5 input buffer, no output.
Takes an input [[#PalmaConnectionHandle]], an u64, a type-0x5 input buffer, no output.
sdknso exposes the u64 as an u16.
See [[#hidGetPalmaOperationInfo]].


== WritePalmaWaveEntry ==
== WritePalmaWaveEntry ==
Takes an input [[#PalmaConnectionHandle]], an u64, an u64, a handle, an u64, an u64, no output.
Takes an input [[#PalmaConnectionHandle]], an u64 [[#PalmaWaveSet]], an u64 (exposed by sdknso as an u16), a TransferMemory handle, an u64 tmem_size, an u64 size, no output.
 
The TransferMemory is created from an user-specified buffer with permissions=R--.
 
Note that the sysmodule will not properly close the TransferMemory handle if the [[#PalmaConnectionHandle]] is invalid.
 
See [[#hidGetPalmaOperationInfo]].


== SetPalmaDataBaseIdentificationVersion ==
== SetPalmaDataBaseIdentificationVersion ==
Takes an input s32, a [[#PalmaConnectionHandle]], no output.
Takes an input s32, a [[#PalmaConnectionHandle]], no output.
See [[#hidGetPalmaOperationInfo]].


== GetPalmaDataBaseIdentificationVersion ==
== GetPalmaDataBaseIdentificationVersion ==
Takes an input [[#PalmaConnectionHandle]], no output.
Takes an input [[#PalmaConnectionHandle]], no output.
See [[#hidGetPalmaOperationInfo]].


== SuspendPalmaFeature ==
== SuspendPalmaFeature ==
Takes an input "nn::util::BitFlagSet<32, [[#PalmaFeature]]>", a [[#PalmaConnectionHandle]], no output.
Takes an input "nn::util::BitFlagSet<32, [[#PalmaFeature]]>", a [[#PalmaConnectionHandle]], no output.
See [[#hidGetPalmaOperationInfo]].


== GetPalmaOperationResult ==
== GetPalmaOperationResult ==
Line 777: Line 828:
== ReadPalmaPlayLog ==
== ReadPalmaPlayLog ==
Takes an input u16, a [[#PalmaConnectionHandle]], no output.
Takes an input u16, a [[#PalmaConnectionHandle]], no output.
See [[#hidGetPalmaOperationInfo]].


== ResetPalmaPlayLog ==
== ResetPalmaPlayLog ==
Takes an input u16, a [[#PalmaConnectionHandle]], no output.
Takes an input u16, a [[#PalmaConnectionHandle]], no output.
See [[#hidGetPalmaOperationInfo]].


== SetIsPalmaAllConnectable ==
== SetIsPalmaAllConnectable ==
Line 792: Line 847:
== SetPalmaBoostMode ==
== SetPalmaBoostMode ==
Takes an input bool, no output.
Takes an input bool, no output.
Stubbed, just returns 0. This was replaced by [[#EnablePalmaBoostMode]].


== CancelWritePalmaWaveEntry ==
== CancelWritePalmaWaveEntry ==
Line 807: Line 864:
== SetNpadCommunicationMode ==
== SetNpadCommunicationMode ==
Takes a PID, an [[AM_services|AppletResourceUserId]], a s64 [[#NpadCommunicationMode]], no output.
Takes a PID, an [[AM_services|AppletResourceUserId]], a s64 [[#NpadCommunicationMode]], no output.
[2.0.0+] Stubbed, just returns 0.


== GetNpadCommunicationMode ==
== GetNpadCommunicationMode ==
Line 812: Line 871:


sdknso uses a switch-statement to determine the value to write to the output [[#NpadCommunicationMode]], with the s64 (written value is the same as the s64). sdknso will Abort if the s64 is not 0-3.
sdknso uses a switch-statement to determine the value to write to the output [[#NpadCommunicationMode]], with the s64 (written value is the same as the s64). sdknso will Abort if the s64 is not 0-3.
[2.0.0+] Stubbed, just returns hard-coded output mode=3.


== SetTouchScreenConfiguration ==
== SetTouchScreenConfiguration ==
Line 868: Line 929:
|-
|-
| 13 || [9.0.0+] GetTouchScreenConfiguration
| 13 || [9.0.0+] GetTouchScreenConfiguration
|-
| 14 || [11.0.0+] ProcessTouchScreenAutoTune
|-
|-
| 20 || [[#DeactivateMouse]]
| 20 || [[#DeactivateMouse]]
Line 1,028: Line 1,091:
|-
|-
| 246 || [9.0.0+] GetVidPid
| 246 || [9.0.0+] GetVidPid
|-
| 247 || [11.0.0+] GetAnalogStickCalibrationValue
|-
| 248 || [11.0.0+] GetUniquePadIdsFull
|-
| 249 || [11.0.0+] ConnectUniquePad
|-
|-
| 301 || [5.0.0-8.1.0] [[#GetAbstractedPadHandles]]
| 301 || [5.0.0-8.1.0] [[#GetAbstractedPadHandles]]
Line 1,059: Line 1,128:
| 332 || [7.0.0+] [[#SetHdlsState]]
| 332 || [7.0.0+] [[#SetHdlsState]]
|-
|-
| 350 || [5.0.0+] AddRegisteredDevice
| 350 || [5.0.0+] [[#AddRegisteredDevice]]
|-
|-
| 400 || [6.0.0+] DisableExternalMcuOnNxDevice
| 400 || [6.0.0+] DisableExternalMcuOnNxDevice
Line 1,068: Line 1,137:
|-
|-
| 403 || [10.0.0+] EnableShipmentModeAutoClear
| 403 || [10.0.0+] EnableShipmentModeAutoClear
|-
| 404 || [11.0.0+] SetRailEnabled
|-
|-
| 500 || [8.0.0+] SetFactoryInt
| 500 || [8.0.0+] SetFactoryInt
Line 1,281: Line 1,352:


[9.0.0+] Input order was swapped: now takes an input [[#HdlsHandle]] and a [[#HdlsState]], no output.
[9.0.0+] Input order was swapped: now takes an input [[#HdlsHandle]] and a [[#HdlsState]], no output.
== AddRegisteredDevice ==
Takes an input [[#RegisteredDevice]], no output.
[11.0.0+] Takes an input [[#DebugRegisteredDevice]], no output.


= hid:sys =
= hid:sys =
Line 1,402: Line 1,478:
|-
|-
| 524 || [10.0.0+] IsHandheldHidsEnabled
| 524 || [10.0.0+] IsHandheldHidsEnabled
|-
| 525 || [11.0.0+] IsJoyConAttachedOnAllRail
|-
|-
| 540 || AcquirePlayReportControllerUsageUpdateEvent
| 540 || AcquirePlayReportControllerUsageUpdateEvent
Line 1,557: Line 1,635:
| 1200 || [10.0.0+] [[#IsButtonConfigSupported]]
| 1200 || [10.0.0+] [[#IsButtonConfigSupported]]
|-
|-
| 1201 || [10.0.0+] [[#DeleteButtonConfig]]
| 1201 || [11.0.0+] [[#IsButtonConfigEmbeddedSupported]] ([10.0.0-10.2.0] [[#DeleteButtonConfig]])
|-
|-
| 1202 || [10.0.0+] [[#SetButtonConfigEnabled]]
| 1202 || [11.0.0+] [[#DeleteButtonConfig]] ([10.0.0-10.2.0] [[#SetButtonConfigEnabled]])
|-
|-
| 1203 || [10.0.0+] [[#IsButtonConfigEnabled]]
| 1203 || [11.0.0+] [[#DeleteButtonConfigEmbedded]] ([10.0.0-10.2.0] [[#IsButtonConfigEnabled]])
|-
|-
| 1204 || [10.0.0+] [[#SetButtonConfigEmbedded]]
| 1204 || [11.0.0+] [[#SetButtonConfigEnabled]] ([10.0.0-10.2.0] [[#SetButtonConfigEmbedded]])
|-
|-
| 1205 || [10.0.0+] [[#SetButtonConfigFull]]
| 1205 || [11.0.0+] [[#SetButtonConfigEmbeddedEnabled]] ([10.0.0-10.2.0] [[#SetButtonConfigFull]])
|-
|-
| 1206 || [10.0.0+] [[#SetButtonConfigLeft]]
| 1206 || [11.0.0+] [[#IsButtonConfigEnabled]] ([10.0.0-10.2.0] [[#SetButtonConfigLeft]])
|-
|-
| 1207 || [10.0.0+] [[#SetButtonConfigRight]]
| 1207 || [11.0.0+] [[#IsButtonConfigEmbeddedEnabled]] ([10.0.0-10.2.0] [[#SetButtonConfigRight]])
|-
|-
| 1208 || [10.0.0+] [[#GetButtonConfigEmbedded]]
| 1208 || [11.0.0+] [[#SetButtonConfigEmbedded]] ([10.0.0-10.2.0] [[#GetButtonConfigEmbedded]])
|-
|-
| 1209 || [10.0.0+] [[#GetButtonConfigFull]]
| 1209 || [11.0.0+] [[#SetButtonConfigFull]] ([10.0.0-10.2.0] [[#GetButtonConfigFull]])
|-
|-
| 1210 || [10.0.0+] [[#GetButtonConfigLeft]]
| 1210 || [10.0.0-10.2.0] [[#GetButtonConfigLeft]]
|-
|-
| 1211 || [10.0.0+] [[#GetButtonConfigRight]]
| 1211 || [11.0.0+] [[#SetButtonConfigRight]] ([10.0.0-10.2.0] [[#GetButtonConfigRight]])
|-
| 1212 || [11.0.0+] [[#GetButtonConfigEmbedded]]
|-
| 1213 || [11.0.0+] [[#GetButtonConfigFull]]
|-
| 1214 || [11.0.0+] [[#GetButtonConfigLeft]]
|-
| 1215 || [11.0.0+] [[#GetButtonConfigRight]]
|-
|-
| 1250 || [10.0.0+] [[#IsCustomButtonConfigSupported]]
| 1250 || [10.0.0+] [[#IsCustomButtonConfigSupported]]
Line 1,597: Line 1,683:
| 1258 || [10.0.0+] [[#IsButtonConfigStorageRightEmpty]]
| 1258 || [10.0.0+] [[#IsButtonConfigStorageRightEmpty]]
|-
|-
| 1259 || [10.0.0+] [[#GetButtonConfigStorageEmbedded]]
| 1259 || [11.0.0+] [[#GetButtonConfigStorageEmbeddedDeprecated]] ([10.0.0-10.2.0] [[#GetButtonConfigStorageEmbeddedDeprecated|GetButtonConfigStorageEmbedded]])
|-
|-
| 1260 || [10.0.0+] [[#GetButtonConfigStorageFull]]
| 1260 || [11.0.0+] [[#GetButtonConfigStorageFullDeprecated]] ([10.0.0-10.2.0] [[#GetButtonConfigStorageFullDeprecated|GetButtonConfigStorageFull]])
|-
|-
| 1261 || [10.0.0+] [[#GetButtonConfigStorageLeft]]
| 1261 || [11.0.0+] [[#GetButtonConfigStorageLeftDeprecated]] ([10.0.0-10.2.0] [[#GetButtonConfigStorageLeftDeprecated|GetButtonConfigStorageLeft]])
|-
|-
| 1262 || [10.0.0+] [[#GetButtonConfigStorageRight]]
| 1262 || [11.0.0+] [[#GetButtonConfigStorageRightDeprecated]] ([10.0.0-10.2.0] [[#GetButtonConfigStorageRightDeprecated|GetButtonConfigStorageRight]])
|-
|-
| 1263 || [10.0.0+] [[#SetButtonConfigStorageEmbedded]]
| 1263 || [11.0.0+] [[#SetButtonConfigStorageEmbeddedDeprecated]] ([10.0.0-10.2.0] [[#SetButtonConfigStorageEmbeddedDeprecated|SetButtonConfigStorageEmbedded]])
|-
|-
| 1264 || [10.0.0+] [[#SetButtonConfigStorageFull]]
| 1264 || [11.0.0+] [[#SetButtonConfigStorageFullDeprecated]] ([10.0.0-10.2.0] [[#SetButtonConfigStorageFullDeprecated|SetButtonConfigStorageFull]])
|-
|-
| 1265 || [10.0.0+] [[#SetButtonConfigStorageLeft]]
| 1265 || [11.0.0+] [[#SetButtonConfigStorageLeftDeprecated]] ([10.0.0-10.2.0] [[#SetButtonConfigStorageLeftDeprecated|SetButtonConfigStorageLeft]])
|-
|-
| 1266 || [10.0.0+] [[#SetButtonConfigStorageRight]]
| 1266 || [11.0.0+] [[#SetButtonConfigStorageRightDeprecated]] ([10.0.0-10.2.0] [[#SetButtonConfigStorageRightDeprecated|SetButtonConfigStorageRight]])
|-
|-
| 1267 || [10.0.0+] [[#DeleteButtonConfigStorageEmbedded]]
| 1267 || [10.0.0+] [[#DeleteButtonConfigStorageEmbedded]]
Line 1,646: Line 1,732:
|-
|-
| 1283 || [10.0.0+] [[#GetHidButtonConfigRight]]
| 1283 || [10.0.0+] [[#GetHidButtonConfigRight]]
|-
| 1284 || [11.0.0+] [[#GetButtonConfigStorageEmbedded]]
|-
| 1285 || [11.0.0+] [[#GetButtonConfigStorageFull]]
|-
| 1286 || [11.0.0+] [[#GetButtonConfigStorageLeft]]
|-
| 1287 || [11.0.0+] [[#GetButtonConfigStorageRight]]
|-
| 1288 || [11.0.0+] [[#SetButtonConfigStorageEmbedded]]
|-
| 1289 || [11.0.0+] [[#SetButtonConfigStorageFull]]
|-
| 1290 || [11.0.0+] [[#SetButtonConfigStorageLeft]]
|-
| 1291 || [11.0.0+] [[#SetButtonConfigStorageRight]]
|-
| 12010 || [11.0.0+] [[#SetButtonConfigLeft]]
|}
|}


Line 1,747: Line 1,851:
== IsButtonConfigSupported ==
== IsButtonConfigSupported ==
Takes an input [[#UniquePadId]], returns an output bool.
Takes an input [[#UniquePadId]], returns an output bool.
[11.0.0+] Takes an input [[Bluetooth_Driver_services#Address|Address]], returns an output bool.
== IsButtonConfigEmbeddedSupported ==
No input, returns an output bool.


== DeleteButtonConfig ==
== DeleteButtonConfig ==
Takes an input [[#UniquePadId]], no output.
Takes an input [[#UniquePadId]], no output.
[11.0.0+] Takes an input [[Bluetooth_Driver_services#Address|Address]], no output.
== DeleteButtonConfigEmbedded ==
No input/output.


== SetButtonConfigEnabled ==
== SetButtonConfigEnabled ==
Takes an input bool, an [[#UniquePadId]], no output.
Takes an input bool, an [[#UniquePadId]], no output.
[11.0.0+] Takes an input bool, an [[Bluetooth_Driver_services#Address|Address]], no output.
== SetButtonConfigEmbeddedEnabled ==
Takes an input bool, no output.


== IsButtonConfigEnabled ==
== IsButtonConfigEnabled ==
Takes an input [[#UniquePadId]], returns an output bool.
Takes an input [[#UniquePadId]], returns an output bool.
[11.0.0+] Takes an input [[Bluetooth_Driver_services#Address|Address]], returns an output bool.
== IsButtonConfigEmbeddedEnabled ==
No input, returns an output bool.


== SetButtonConfigEmbedded ==
== SetButtonConfigEmbedded ==
Takes an input [[#UniquePadId]], a type-0x15 input buffer containing a [[#SystemButtonConfigEmbedded]], no output.
Takes ([10.0.0-10.2.0] an input [[#UniquePadId]]), a type-0x15 input buffer containing a [[#SystemButtonConfigEmbedded]], no output.


== SetButtonConfigFull ==
== SetButtonConfigFull ==
Takes an input [[#UniquePadId]], a type-0x15 input buffer containing a [[#SystemButtonConfigFull]], no output.
Takes an input [[#UniquePadId]], a type-0x15 input buffer containing a [[#SystemButtonConfigFull]], no output.
[11.0.0+] Takes an input [[Bluetooth_Driver_services#Address|Address]], a type-0x15 input buffer containing a [[#SystemButtonConfigFull]], no output.


== SetButtonConfigLeft ==
== SetButtonConfigLeft ==
Takes an input [[#UniquePadId]], a type-0x15 input buffer containing a [[#SystemButtonConfigLeft]], no output.
Takes an input [[#UniquePadId]], a type-0x15 input buffer containing a [[#SystemButtonConfigLeft]], no output.
[11.0.0+] Takes an input [[Bluetooth_Driver_services#Address|Address]], a type-0x15 input buffer containing a [[#SystemButtonConfigLeft]], no output.


== SetButtonConfigRight ==
== SetButtonConfigRight ==
Takes an input [[#UniquePadId]], a type-0x15 input buffer containing a [[#SystemButtonConfigRight]], no output.
Takes an input [[#UniquePadId]], a type-0x15 input buffer containing a [[#SystemButtonConfigRight]], no output.
[11.0.0+] Takes an input [[Bluetooth_Driver_services#Address|Address]], a type-0x15 input buffer containing a [[#SystemButtonConfigRight]], no output.


== GetButtonConfigEmbedded ==
== GetButtonConfigEmbedded ==
Takes an input [[#UniquePadId]], and a type-0x16 output buffer containing a [[#SystemButtonConfigEmbedded]].
Takes ([10.0.0-10.2.0] an input [[#UniquePadId]]), and a type-0x16 output buffer containing a [[#SystemButtonConfigEmbedded]].


== GetButtonConfigFull ==
== GetButtonConfigFull ==
Takes an input [[#UniquePadId]], and a type-0x16 output buffer containing a [[#SystemButtonConfigFull]].
Takes an input [[#UniquePadId]], and a type-0x16 output buffer containing a [[#SystemButtonConfigFull]].
[11.0.0+] Takes an input [[Bluetooth_Driver_services#Address|Address]], and a type-0x16 output buffer containing a [[#SystemButtonConfigFull]].


== GetButtonConfigLeft ==
== GetButtonConfigLeft ==
Takes an input [[#UniquePadId]], and a type-0x16 output buffer containing a [[#SystemButtonConfigLeft]].
Takes an input [[#UniquePadId]], and a type-0x16 output buffer containing a [[#SystemButtonConfigLeft]].
[11.0.0+] Takes an input [[Bluetooth_Driver_services#Address|Address]], and a type-0x16 output buffer containing a [[#SystemButtonConfigLeft]].


== GetButtonConfigRight ==
== GetButtonConfigRight ==
Takes an input [[#UniquePadId]], and a type-0x16 output buffer containing a [[#SystemButtonConfigRight]].
Takes an input [[#UniquePadId]], and a type-0x16 output buffer containing a [[#SystemButtonConfigRight]].
[11.0.0+] Takes an input [[Bluetooth_Driver_services#Address|Address]], and a type-0x16 output buffer containing a [[#SystemButtonConfigRight]].


== IsCustomButtonConfigSupported ==
== IsCustomButtonConfigSupported ==
Line 1,807: Line 1,943:
Takes an input s32 entry-index, returns an output bool.
Takes an input s32 entry-index, returns an output bool.


[10.1.0+] This will now Abort if the s32 is negative or >=5.
[10.1.0-10.2.0] This will now Abort if the s32 is negative or >=5. [11.0.0+] This value must now be unsigned <=4, otherwise 0 is returned.


Uses [[Settings_services#GetButtonConfigSettingsEmbedded|GetButtonConfigSettingsEmbedded]] with count=5 (output s32 ignored). The input entry-index is used with this array. Then the output bool is set to [[Settings_services#ButtonConfigSettings|IsFull]] bit0 == 0. Then 0 is returned.
Uses [[Settings_services#GetButtonConfigSettingsEmbedded|GetButtonConfigSettingsEmbedded]] with count=5 (output s32 ignored). The input entry-index is used with this array. Then the output bool is set to [[Settings_services#ButtonConfigSettings|IsFull]] bit0 == 0. Then 0 is returned.
Line 1,826: Line 1,962:
Same as [[#IsButtonConfigStorageEmbeddedEmpty]] except with a different setsys cmd.
Same as [[#IsButtonConfigStorageEmbeddedEmpty]] except with a different setsys cmd.


== GetButtonConfigStorageEmbedded ==
== GetButtonConfigStorageEmbeddedDeprecated ==
Takes an input s32 entry-index, and a type-0x16 output buffer containing a [[#ButtonConfigEmbedded]].
Takes an input s32 entry-index, and a type-0x16 output buffer containing a [[#ButtonConfigEmbedded]].


[10.1.0+] This will now Abort if the s32 is negative or >=5.
[10.1.0-10.2.0] This will now Abort if the s32 is negative or >=5.
 
[11.0.0+] This now calls the same func internally as [[#GetButtonConfigStorageEmbedded]], except the [[#StorageName]] isn't exposed.


Uses [[Settings_services#GetButtonConfigSettingsEmbedded|GetButtonConfigSettingsEmbedded]] with count=5 (output s32 ignored). The input entry-index is used with this array. Then an error is thrown if [[Settings_services#ButtonConfigSettings|IsFull]] bit0 is clear. Then the data at +0x1C8 is converted to [[#ButtonConfigEmbedded]], copied to output, and returns 0.
Uses [[Settings_services#GetButtonConfigSettingsEmbedded|GetButtonConfigSettingsEmbedded]] with count=5 (output s32 ignored). The input entry-index is used with this array. Then an error is thrown if [[Settings_services#ButtonConfigSettings|IsFull]] bit0 is clear. Then the data at +0x1C8 is converted to [[#ButtonConfigEmbedded]], copied to output, and returns 0.


== GetButtonConfigStorageFull ==
== GetButtonConfigStorageFullDeprecated ==
Takes an input s32 entry-index, and a type-0x16 output buffer containing a [[#ButtonConfigFull]].
Takes an input s32 entry-index, and a type-0x16 output buffer containing a [[#ButtonConfigFull]].


Same as [[#GetButtonConfigStorageEmbedded]], except this uses a different setsys cmd, and uses a different conversion func / different output struct.
Same as [[#GetButtonConfigStorageEmbeddedDeprecated]], except this uses a different setsys cmd, and uses a different conversion func / different output struct.


== GetButtonConfigStorageLeft ==
== GetButtonConfigStorageLeftDeprecated ==
Takes an input s32 entry-index, and a type-0x16 output buffer containing a [[#ButtonConfigLeft]].
Takes an input s32 entry-index, and a type-0x16 output buffer containing a [[#ButtonConfigLeft]].


Same as [[#GetButtonConfigStorageEmbedded]], except this uses a different setsys cmd, and uses a different conversion func / different output struct.
Same as [[#GetButtonConfigStorageEmbeddedDeprecated]], except this uses a different setsys cmd, and uses a different conversion func / different output struct.


== GetButtonConfigStorageRight ==
== GetButtonConfigStorageRightDeprecated ==
Takes an input s32 entry-index, and a type-0x16 output buffer containing a [[#ButtonConfigRight]].
Takes an input s32 entry-index, and a type-0x16 output buffer containing a [[#ButtonConfigRight]].


Same as [[#GetButtonConfigStorageEmbedded]], except this uses a different setsys cmd, and uses a different conversion func / different output struct.
Same as [[#GetButtonConfigStorageEmbeddedDeprecated]], except this uses a different setsys cmd, and uses a different conversion func / different output struct.


== SetButtonConfigStorageEmbedded ==
== SetButtonConfigStorageEmbeddedDeprecated ==
Takes an input s32 entry-index, and a type-0x15 input buffer containing a [[#ButtonConfigEmbedded]].
Takes an input s32 entry-index, and a type-0x15 input buffer containing a [[#ButtonConfigEmbedded]].


[10.1.0+] This will now Abort if the s32 is negative or >=5.
[10.1.0-10.2.0] This will now Abort if the s32 is negative or >=5.
 
[11.0.0+] This now calls the same func internally as [[#SetButtonConfigStorageEmbedded]], except the [[#StorageName]] isn't exposed.


If the input config matches the [[#IsDefaultButtonConfigEmbedded|default]], this first does:  
If the input config matches the [[#IsDefaultButtonConfigEmbedded|default]], this first does:  
Line 1,858: Line 1,998:
Afterwards, this uses [[Settings_services#GetButtonConfigSettingsEmbedded|GetButtonConfigSettingsEmbedded]] with count=5 (output s32 ignored). The input entry-index is used with this array. The input struct is converted, the output from that is copied to +0x1C8 size 0x3E0, IsFull is set, [[Settings_services#SetButtonConfigSettingsEmbedded|SetButtonConfigSettingsEmbedded]] is used with the updated array, and then returns 0.
Afterwards, this uses [[Settings_services#GetButtonConfigSettingsEmbedded|GetButtonConfigSettingsEmbedded]] with count=5 (output s32 ignored). The input entry-index is used with this array. The input struct is converted, the output from that is copied to +0x1C8 size 0x3E0, IsFull is set, [[Settings_services#SetButtonConfigSettingsEmbedded|SetButtonConfigSettingsEmbedded]] is used with the updated array, and then returns 0.


== SetButtonConfigStorageFull ==
== SetButtonConfigStorageFullDeprecated ==
Takes an input s32 entry-index, and a type-0x15 input buffer containing a [[#ButtonConfigFull]].
Takes an input s32 entry-index, and a type-0x15 input buffer containing a [[#ButtonConfigFull]].


Same as [[#SetButtonConfigStorageEmbedded]], except this uses different setsys cmds, and uses a different structs etc.
Same as [[#SetButtonConfigStorageEmbeddedDeprecated]], except this uses different setsys cmds, and uses a different structs etc.


== SetButtonConfigStorageLeft ==
== SetButtonConfigStorageLeftDeprecated ==
Takes an input s32 entry-index, and a type-0x15 input buffer containing a [[#ButtonConfigLeft]].
Takes an input s32 entry-index, and a type-0x15 input buffer containing a [[#ButtonConfigLeft]].


Same as [[#SetButtonConfigStorageEmbedded]], except this uses different setsys cmds, and uses a different structs etc.
Same as [[#SetButtonConfigStorageEmbeddedDeprecated]], except this uses different setsys cmds, and uses a different structs etc.


== SetButtonConfigStorageRight ==
== SetButtonConfigStorageRightDeprecated ==
Takes an input s32 entry-index, and a type-0x15 input buffer containing a [[#ButtonConfigRight]].
Takes an input s32 entry-index, and a type-0x15 input buffer containing a [[#ButtonConfigRight]].


Same as [[#SetButtonConfigStorageEmbedded]], except this uses different setsys cmds, and uses a different structs etc.
Same as [[#SetButtonConfigStorageEmbeddedDeprecated]], except this uses different setsys cmds, and uses a different structs etc.


== DeleteButtonConfigStorageEmbedded ==
== DeleteButtonConfigStorageEmbedded ==
Takes an input s32 entry-index, no output.
Takes an input s32 entry-index, no output.


[10.1.0+] This will now Abort if the s32 is negative or >=5.
[10.1.0-10.2.0] This will now Abort if the s32 is negative or >=5. [11.0.0+] When the input s32 is larger than unsigned value 4, an error is returned.


Uses [[Settings_services#GetButtonConfigSettingsEmbedded|GetButtonConfigSettingsEmbedded]] with count=5 (output s32 ignored). The input entry-index is used with this array. Then an error is thrown if [[Settings_services#ButtonConfigSettings|IsFull]] bit0 is clear. Then the data at +0x1C8 size 0x3E0 is cleared, IsFull bit0 is cleared, [[Settings_services#SetButtonConfigSettingsEmbedded|SetButtonConfigSettingsEmbedded]] is used with the updated array, and then returns 0.
Uses [[Settings_services#GetButtonConfigSettingsEmbedded|GetButtonConfigSettingsEmbedded]] with count=5 (output s32 ignored). The input entry-index is used with this array. Then an error is thrown if [[Settings_services#ButtonConfigSettings|IsFull]] bit0 is clear. Then the data at +0x1C8 size 0x3E0 is cleared, IsFull bit0 is cleared, [[Settings_services#SetButtonConfigSettingsEmbedded|SetButtonConfigSettingsEmbedded]] is used with the updated array, and then returns 0.
Line 1,883: Line 2,023:
Takes an input s32 entry-index, no output.
Takes an input s32 entry-index, no output.


Same as [[#IsButtonConfigStorageEmbeddedEmpty]] except with different setsys cmds.
Same as [[#DeleteButtonConfigStorageEmbedded]] except with different setsys cmds.


== DeleteButtonConfigStorageLeft ==
== DeleteButtonConfigStorageLeft ==
Takes an input s32 entry-index, no output.
Takes an input s32 entry-index, no output.


Same as [[#IsButtonConfigStorageEmbeddedEmpty]] except with different setsys cmds.
Same as [[#DeleteButtonConfigStorageEmbedded]] except with different setsys cmds.


== DeleteButtonConfigStorageRight ==
== DeleteButtonConfigStorageRight ==
Takes an input s32 entry-index, no output.
Takes an input s32 entry-index, no output.


Same as [[#IsButtonConfigStorageEmbeddedEmpty]] except with different setsys cmds.
Same as [[#DeleteButtonConfigStorageEmbedded]] except with different setsys cmds.


== IsUsingCustomButtonConfig ==
== IsUsingCustomButtonConfig ==
Line 1,933: Line 2,073:
== GetHidButtonConfigRight ==
== GetHidButtonConfigRight ==
Takes an input [[#UniquePadId]], and a type-0x16 output buffer containing a [[#ButtonConfigRight]].
Takes an input [[#UniquePadId]], and a type-0x16 output buffer containing a [[#ButtonConfigRight]].
== GetButtonConfigStorageEmbedded ==
Takes an input s32, a type-0x16 output buffer containing a [[#ButtonConfigEmbedded]], a type-0x1A output buffer containing a [[#StorageName]].
When the input s32 is larger than unsigned value 4, an error is returned.
== GetButtonConfigStorageFull ==
Takes an input s32, a type-0x16 output buffer containing a [[#ButtonConfigFull]], a type-0x1A output buffer containing a [[#StorageName]].
== GetButtonConfigStorageLeft ==
Takes an input s32, a type-0x16 output buffer containing a [[#ButtonConfigLeft]], a type-0x1A output buffer containing a [[#StorageName]].
== GetButtonConfigStorageRight ==
Takes an input s32, a type-0x16 output buffer containing a [[#ButtonConfigRight]], a type-0x1A output buffer containing a [[#StorageName]].
== SetButtonConfigStorageEmbedded ==
Takes an input s32, a type-0x15 input buffer containing a [[#ButtonConfigEmbedded]], a type-0x19 input buffer containing a [[#StorageName]].
When the input s32 is larger than unsigned value 4, this will immediately return (this cmd always returns 0 regardless).
== SetButtonConfigStorageFull ==
Takes an input s32, a type-0x15 input buffer containing a [[#ButtonConfigFull]], a type-0x19 input buffer containing a [[#StorageName]].
== SetButtonConfigStorageLeft ==
Takes an input s32, a type-0x15 input buffer containing a [[#ButtonConfigLeft]], a type-0x19 input buffer containing a [[#StorageName]].
== SetButtonConfigStorageRight ==
Takes an input s32, a type-0x15 input buffer containing a [[#ButtonConfigRight]], a type-0x19 input buffer containing a [[#StorageName]].


== IHidbusSystemServer ==
== IHidbusSystemServer ==
Line 5,918: Line 6,086:
This is "nn::hid::KeyboardKeySet". This is a BitFlagSet object for [[#KeyboardKey]].
This is "nn::hid::KeyboardKeySet". This is a BitFlagSet object for [[#KeyboardKey]].


= KeyboardLockKeyEventSet =
= KeyboardKey =
This is "nn::hid::system::KeyboardLockKeyEventSet". This is a BitFlagSet object for [[#KeyboardLockKeyEvent]].
This is "nn::hid::KeyboardKey". This is a 256-bit flag.
 
= KeyboardLockKeyEvent =
This is "nn::hid::system::KeyboardLockKeyEvent". This is a 32-bit flag.


{| class="wikitable" border="1"
{| class="wikitable" border="1"
Line 5,929: Line 6,094:
! Description
! Description
|-
|-
| 0
| 4
| NumLockOn
| A
|-
|-
| 1
| 5
| NumLockOff
| B
|-
| 2
| NumLockToggle
|-
| 3
| CapsLockOn
|-
| 4
| CapsLockOff
|-
| 5
| CapsLockToggle
|-
|-
| 6
| 6
| ScrollLockOn
| C
|-
|-
| 7
| 7
| ScrollLockOff
| D
|-
|-
| 8
| 8
| ScrollLockToggle
| E
|}
 
= BasicXpadButtonSet =
This is "nn::hid::BasicXpadButtonSet". This is a BitFlagSet object for [[#BasicXpadButton]].
 
= HomeButtonSet =
This is "nn::hid::system::HomeButtonSet". This is a BitFlagSet object for [[#HomeButton]].
 
= SleepButtonSet =
This is "nn::hid::system::SleepButtonSet". This is a BitFlagSet object for [[#SleepButton]].
 
= CaptureButtonSet =
This is "nn::hid::system::CaptureButtonSet". This is a BitFlagSet object for [[#CaptureButton]].
 
= NpadButtonSet =
This is "nn::hid::NpadButtonSet". This is a BitFlagSet object for [[#NpadButton]].
 
= NpadButton =
This is "nn::hid::NpadButton". This is a 64-bit flag.
 
{| class="wikitable" border="1"
|-
|-
! Bit
| 9
! Description
| F
|-
|-
| 0
| 10
| A
| G
|-
|-
| 1
| 11
| B
| H
|-
|-
| 2
| 12
| X
| I
|-
|-
| 3
| 13
| Y
| J
|-
|-
| 4
| 14
| StickL
| K
|-
|-
| 5
| 15
| StickR
|-
| 6
| L
| L
|-
| 7
| R
|-
| 8
| ZL
|-
| 9
| ZR
|-
| 10
| Plus
|-
| 11
| Minus
|-
| 12
| Left
|-
| 13
| Up
|-
| 14
| Right
|-
| 15
| Down
|-
|-
| 16
| 16
| StickLLeft
| M
|-
|-
| 17
| 17
| StickLUp
| N
|-
|-
| 18
| 18
| StickLRight
| O
|-
|-
| 19
| 19
| StickLDown
| P
|-
|-
| 20
| 20
| StickRLeft
| Q
|-
|-
| 21
| 21
| StickRUp
| R
|-
|-
| 22
| 22
| StickRRight
| S
|-
|-
| 23
| 23
| StickRDown
| T
|-
|-
| 24
| 24
| LeftSL
| U
|-
|-
| 25
| 25
| LeftSR
| V
|-
|-
| 26
| 26
| RightSL
| W
|-
|-
| 27
| 27
| RightSR
| X
|-
|-
| 28
| 28
| Palma
| Y
|-
|-
| 29
| 29
|  
| Z
|-
|-
| 30
| 30
| HandheldLeftB (Left B button on NES controllers in Handheld mode)
| D1
|}
|-
 
| 31
= AnalogStickCalibrationFlagsSet =
| D2
This is "nn::hid::detail::AnalogStickCalibrationFlagsSet". This is a BitFlagSet object for [[#AnalogStickCalibrationFlags]].
|-
 
| 32
= SixAxisSensorUserCalibrationFlagsSet =
| D3
This is "nn::hid::detail::SixAxisSensorUserCalibrationFlagsSet". This is a BitFlagSet object for [[#SixAxisSensorUserCalibrationFlags]].
|-
 
| 33
= NpadStyleSet =
| D4
This is "nn::hid::NpadStyleSet". This is a BitFlagSet object for [[#NpadStyleTag]].
 
= NpadStyleTag =
This is "nn::hid::NpadStyleTag".
 
{| class="wikitable" border="1"
!  Bits
!  Description
!  Notes
|-
|-
| 0
| 34
| NpadStyleFullKey
| D5
| Pro Controller
|-
|-
| 1
| 35
| NpadStyleHandheld
| D6
| Joy-Con controller in handheld mode
|-
|-
| 2
| 36
| NpadStyleJoyDual
| D7
| Joy-Con controller in dual mode
|-
|-
| 3
| 37
| NpadStyleJoyLeft
| D8
| Joy-Con left controller in single mode
|-
|-
| 4
| 38
| NpadStyleJoyRight
| D9
| Joy-Con right controller in single mode
|-
|-
| 5
| 39
| NpadStyleGc
| D0
| GameCube controller
|-
|-
| 6
| 40
| NpadStylePalma
| Return
| Poké Ball Plus controller
|-
|-
| 7
| 41
| NpadStyleLark
| Escape
| NES/Famicom controller
|-
|-
| 8
| 42
| NpadStyleHandheldLark
| Backspace
| NES/Famicom controller in handheld mode
|-
|-
| 9
| 43
| NpadStyleLucia
| Tab
| SNES controller
|-
|-
| 10-28
| 44
| Reserved
| Space
|
|-
|-
| 29
| 45
| NpadStyleSystemExt
| Minus
| Generic external controller
|-
|-
| 30
| 46
| NpadStyleSystem
| Plus
| Generic controller
|-
|-
| 31
| 47
| Reserved
| OpenBracket
|
|}
 
= NpadDeviceTypeSet =
This is "nn::hid::system::NpadDeviceType". This is a BitFlagSet object for [[#NpadDeviceType]].
 
= NpadSystemPropertiesSet =
This is "nn::hid::detail::NpadSystemPropertiesSet". This is a BitFlagSet object for [[#NpadSystemProperties]].
 
= NpadSystemProperties =
This is "nn::hid::NpadSystemProperties". This is a 64-bit flag.
 
{| class="wikitable" border="1"
|-
|-
! Bit
| 48
! Description
| CloseBracket
|-
|-
| 0
| 49
| IsChargingJoyDual
| Pipe
|-
|-
| 1
| 50
| IsChargingJoyLeft
| Tilde
|-
|-
| 2
| 51
| IsChargingJoyRight
| Semicolon
|-
|-
| 3
| 52
| IsPoweredJoyDual
| Quote
|-
|-
| 4
| 53
| IsPoweredJoyLeft
| Backquote
|-
|-
| 5
| 54
| IsPoweredJoyRight
| Comma
|-
|-
| 9
| 55
| IsUnsuportedButtonPressedOnNpadSystem
| Period
|-
|-
| 10
| 56
| IsUnsuportedButtonPressedOnNpadSystemExt
| Slash
|-
|-
| 11
| 57
| IsAbxyButtonOriented
| CapsLock
|-
|-
| 12
| 58
| IsSlSrButtonOriented
| F1
|-
|-
| 13
| 59
| [4.0.0+] IsPlusAvailable
| F2
|-
|-
| 14
| 60
| [4.0.0+] IsMinusAvailable
| F3
|-
|-
| 15
| 61
| [8.0.0+] IsDirectionalButtonsAvailable
| F4
|}
 
= NpadSystemButtonPropertiesSet =
This is "nn::hid::detail::NpadSystemButtonPropertiesSet". This is a BitFlagSet object for [[#NpadSystemButtonProperties]].
 
= NpadSystemButtonProperties =
This is "nn::hid::NpadSystemButtonProperties". This is a 32-bit flag.
 
{| class="wikitable" border="1"
|-
|-
! Bit
| 62
! Description
| F5
|-
|-
| 0
| 63
| IsUnintendedHomeButtonInputProtectionEnabled
| F6
|}
 
= AppletFooterUiAttributesSet =
This is "nn::hid::system::AppletFooterUiAttributesSet". This is a BitFlagSet object for [[#AppletFooterUiAttribute]].
 
= UniquePadType =
This is "nn::hid::system::UniquePadType".
 
{| class="wikitable" border="1"
!  Value
!  Description
|-
|-
| 0 || Embedded
| 64
| F7
|-
|-
| 1 || FullKeyController
| 65
| F8
|-
|-
| 2 || RightController
| 66
| F9
|-
|-
| 3 || LeftController
| 67
| F10
|-
|-
| 4 || DebugPadController
| 68
|}
| F11
 
= UniquePadInterface =
This is "nn::hid::system::UniquePadInterface".
 
{| class="wikitable" border="1"
!  Value
!  Description
|-
|-
| 0 || Embedded
| 69
| F12
|-
|-
| 1 || Rail
| 70
| PrintScreen
|-
|-
| 2 || Bluetooth
| 71
| ScrollLock
|-
|-
| 3 || Usb
| 72
|}
| Pause
 
= UniquePadSerialNumber =
This is "nn::hid::system::UniquePadSerialNumber". This is a 0x10 byte value.
 
= UniquePadId =
This is "nn::hid::system::UniquePadId". This is a 8 byte value.
 
= AnalogStickManualCalibrationStage =
This is "nn::hid::system::AnalogStickManualCalibrationStage".
 
{| class="wikitable" border="1"
!  Value
!  Description
|-
|-
| 0 || ReleaseFromRight
| 73
| Insert
|-
|-
| 1 || ReleaseFromBottom
| 74
| Home
|-
|-
| 2 || ReleaseFromLeft
| 75
| PageUp
|-
|-
| 3 || ReleaseFromTop
| 76
| Delete
|-
|-
| 4 || Rotate
| 77
| End
|-
|-
| 5 || Update
| 78
| PageDown
|-
|-
| 6 || Completed
| 79
| RightArrow
|-
|-
| 7 || Clear
| 80
| LeftArrow
|-
|-
| 8 || ClearCompleted
| 81
|}
| DownArrow
 
= SixAxisSensorUserCalibrationStage =
This is "nn::hid::system::SixAxisSensorUserCalibrationStage".
 
{| class="wikitable" border="1"
!  Value
!  Description
|-
|-
| 0 || Measuring
| 82
| UpArrow
|-
|-
| 1 || Update
| 83
| NumLock
|-
|-
| 2 || Completed
| 84
|}
| NumPadDivide
 
= NpadJoyHoldType =
This is "nn::hid::NpadJoyHoldType".
 
{| class="wikitable" border="1"
!  Value
!  Description
|-
|-
| 0 || Vertical
| 85
| NumPadMultiply
|-
|-
| 1 || Horizontal
| 86
|}
| NumPadSubtract
 
= NpadJoyDeviceType =
This is "nn::hid::NpadJoyDeviceType".
 
{| class="wikitable" border="1"
!  Value
!  Description
|-
|-
| 0 || Left
| 87
| NumPadAdd
|-
|-
| 1 || Right
| 88
|}
| NumPadEnter
 
= NpadHandheldActivationMode =
This is "nn::hid::NpadHandheldActivationMode".
 
This controls how many joycons must be attached for handheld mode to be triggered (Dual = 2, Single = 1, None = 0).
 
{| class="wikitable" border="1"
!  Value
!  Description
|-
|-
| 0 || Dual
| 89
| NumPad1
|-
|-
| 1 || Single
| 90
| NumPad2
|-
|-
| 2 || None
| 91
|}
| NumPad3
 
= NpadJoyAssignmentMode =
This is "nn::hid::NpadJoyAssignmentMode".
 
{| class="wikitable" border="1"
!  Value
!  Description
|-
|-
| 0 || Dual
| 92
| NumPad4
|-
|-
| 1 || Single
| 93
|}
| NumPad5
 
= NpadCommunicationMode =
This is "nn::hid::NpadCommunicationMode".
 
{| class="wikitable" border="1"
!  Value
!  Description
|-
|-
| 0 || 5ms
| 94
| NumPad6
|-
|-
| 1 || 10ms
| 95
| NumPad7
|-
|-
| 2 || 15ms
| 96
| NumPad8
|-
|-
| 3 || Default
| 97
|}
| NumPad9
 
= AppletDetailedUiType =
This is "nn::hid::system::AppletDetailedUiType".
 
{| class="wikitable" border="1"
!  Value
!  Description
|-
|-
| 0x00000000 || None
| 98
| NumPad0
|-
|-
| 0x01000000 || HandheldNone
| 99
| NumPadDot
|-
|-
| 0x02000000 || HandheldJoyConLeftOnly
| 100
| Backslash
|-
|-
| 0x02000001 || HandheldLarkHvc1Only
| 101
| Application
|-
|-
| 0x02000002 || HandheldLarkNesLeftOnly
| 102
| Power
|-
|-
| 0x03000000 || HandheldJoyConRightOnly
| 103
| NumPadEquals
|-
|-
| 0x03000001 || HandheldLarkHvc2Only
| 104
| F13
|-
|-
| 0x03000002 || HandheldLarkNesRightOnly
| 105
| F14
|-
|-
| 0x04000000 || HandheldJoyConLeftJoyConRight
| 106
| F15
|-
|-
| 0x04000001 || HandheldJoyConLeftLarkHvc2
| 107
| F16
|-
|-
| 0x04000002 || HandheldJoyConLeftLarkNesRight
| 108
| F17
|-
|-
| 0x04000003 || HandheldLarkHvc1JoyConRight
| 109
| F18
|-
|-
| 0x04000004 || HandheldLarkHvc1LarkHvc2
| 110
| F19
|-
|-
| 0x04000005 || HandheldLarkHvc1LarkNesRight
| 111
| F20
|-
|-
| 0x04000006 || HandheldLarkNesLeftJoyConRight
| 112
| F21
|-
|-
| 0x04000007 || HandheldLarkNesLeftLarkHvc2
| 113
| F22
|-
|-
| 0x04000008 || HandheldLarkNesLeftLarkNesRight
| 114
| F23
|-
|-
| 0x05000000 || JoyDual
| 115
| F24
|-
|-
| 0x06000000 || JoyDualLeftOnly
| 133
| NumPadComma
|-
|-
| 0x07000000 || JoyDualRightOnly
| 135
| Ro
|-
|-
| 0x08000000 || JoyLeftHorizontal
| 136
| KatakanaHiragana
|-
|-
| 0x09000000 || JoyLeftVertical
| 137
| Yen
|-
|-
| 0x0A000000 || JoyRightHorizontal
| 138
| Henkan
|-
|-
| 0x0B000000 || JoyRightVertical
| 139
| Muhenkan
|-
|-
| 0x0C000000 || SwitchProController
| 140
| NumPadCommaPc98
|-
|-
| 0x0D000000 || CompatibleProController
| 144
| HangulEnglish
|-
|-
| 0x0E000000 || CompatibleJoyCon
| 145
| Hanja
|-
|-
| 0x0F000000 || LarkHvc1
| 146
| Katakana
|-
|-
| 0x10000000 || LarkHvc2
| 147
| Hiragana
|-
|-
| 0x11000000 || LarkNesLeft
| 148
| ZenkakuHankaku
|-
|-
| 0x12000000 || LarkNesRight
| 224
| LeftControl
|-
|-
| 0x13000000 || LuciaU
| 225
| LeftShift
|-
| 226
| LeftAlt
|-
| 227
| LeftGui
|-
|-
| 0x13000001 || LuciaJ
| 228
| RightControl
|-
|-
| 0x13000002 || LuciaE
| 229
| RightShift
|-
|-
| 0x14000000 || Verification
| 230
| RightAlt
|-
|-
| 0xFFFFFFFF || Unknown
| 231
| RightGui
|}
|}


= AppletFooterUiType =
= KeyboardLockKeyEventSet =
This is "nn::hid::system::AppletFooterUiType".
This is "nn::hid::system::KeyboardLockKeyEventSet". This is a BitFlagSet object for [[#KeyboardLockKeyEvent]].
 
= KeyboardLockKeyEvent =
This is "nn::hid::system::KeyboardLockKeyEvent". This is a 32-bit flag.


{| class="wikitable" border="1"
{| class="wikitable" border="1"
!  Value
!  Description
|-
|-
| 0 || None
! Bit
! Description
|-
|-
| 1 || HandheldNone
| 0
| NumLockOn
|-
|-
| 2 || HandheldJoyConLeftOnly
| 1
| NumLockOff
|-
|-
| 3 || HandheldJoyConRightOnly
| 2
| NumLockToggle
|-
|-
| 4 || HandheldJoyConLeftJoyConRight
| 3
| CapsLockOn
|-
|-
| 5 || JoyDual
| 4
| CapsLockOff
|-
|-
| 6 || JoyDualLeftOnly
| 5
| CapsLockToggle
|-
|-
| 7 || JoyDualRightOnly
| 6
| ScrollLockOn
|-
|-
| 8 || JoyLeftHorizontal
| 7
| ScrollLockOff
|-
|-
| 9 || JoyLeftVertical
| 8
|-
| ScrollLockToggle
| 10 || JoyRightHorizontal
|}
|-
 
| 11 || JoyRightVertical
= BasicXpadButtonSet =
This is "nn::hid::BasicXpadButtonSet". This is a BitFlagSet object for [[#BasicXpadButton]].
 
= HomeButtonSet =
This is "nn::hid::system::HomeButtonSet". This is a BitFlagSet object for [[#HomeButton]].
 
= SleepButtonSet =
This is "nn::hid::system::SleepButtonSet". This is a BitFlagSet object for [[#SleepButton]].
 
= CaptureButtonSet =
This is "nn::hid::system::CaptureButtonSet". This is a BitFlagSet object for [[#CaptureButton]].
 
= NpadButtonSet =
This is "nn::hid::NpadButtonSet". This is a BitFlagSet object for [[#NpadButton]].
 
= NpadButton =
This is "nn::hid::NpadButton". This is a 64-bit flag.
 
{| class="wikitable" border="1"
|-
|-
| 12 || SwitchProController
! Bit
! Description
|-
|-
| 13 || CompatibleProController
| 0
| A
|-
|-
| 14 || CompatibleJoyCon
| 1
| B
|-
|-
| 15 || LarkHvc1
| 2
| X
|-
|-
| 16 || LarkHvc2
| 3
| Y
|-
|-
| 17 || LarkNesLeft
| 4
| StickL
|-
|-
| 18 || LarkNesRight
| 5
| StickR
|-
|-
| 19 || Lucia
| 6
| L
|-
|-
| 20 || Verification
| 7
|}
| R
 
= NpadIdType =
This is "nn::hid::NpadIdType". This is the controller index used in [[#SharedMemoryFormat|sharedmem]].
 
{| class="wikitable" border="1"
!  Value
!  Description
|-
|-
| 0x0 || No1
| 8
| ZL
|-
| 9
| ZR
|-
|-
| 0x1 || No2
| 10
| Plus
|-
|-
| 0x2 || No3
| 11
| Minus
|-
|-
| 0x3 || No4
| 12
| Left
|-
|-
| 0x4 || No5
| 13
| Up
|-
|-
| 0x5 || No6
| 14
| Right
|-
|-
| 0x6 || No7
| 15
| Down
|-
|-
| 0x7 || No8
| 16
| StickLLeft
|-
|-
| 0x10 || Other
| 17
| StickLUp
|-
|-
| 0x20 || Handheld
| 18
|}
| StickLRight
 
= NpadInterfaceType =
This is "nn::hid::NpadInterfaceType".
 
{| class="wikitable" border="1"
!  Value
!  Description
|-
|-
| 1 || Bluetooth
| 19
| StickLDown
|-
|-
| 2 || Rail
| 20
| StickRLeft
|-
|-
| 3 || USB
| 21
| StickRUp
|-
|-
| 4 || Unknown
| 22
|}
| StickRRight
 
= NpadLarkType =
This is "nn::hid::NpadLarkType".
 
{| class="wikitable" border="1"
!  Value
!  Description
|-
|-
| 0 || Invalid
| 23
| StickRDown
|-
|-
| 1 || H1
| 24
| LeftSL
|-
|-
| 2 || H2
| 25
| LeftSR
|-
|-
| 3 || NL
| 26
| RightSL
|-
|-
| 4 || NR
| 27
|}
| RightSR
 
= NpadLuciaType =
This is "nn::hid::NpadLuciaType".
 
{| class="wikitable" border="1"
!  Value
!  Description
|-
|-
| 0 || Invalid
| 28
| Palma
|-
|-
| 1 || J
| 29
|  
|-
|-
| 2 || E
| 30
|-
| HandheldLeftB (Left B button on NES controllers in Handheld mode)
| 3 || U
|}
|}


= GestureDirection =
= AnalogStickCalibrationFlagsSet =
This is "nn::hid::GestureDirection".
This is "nn::hid::detail::AnalogStickCalibrationFlagsSet". This is a BitFlagSet object for [[#AnalogStickCalibrationFlags]].
 
= SixAxisSensorUserCalibrationFlagsSet =
This is "nn::hid::detail::SixAxisSensorUserCalibrationFlagsSet". This is a BitFlagSet object for [[#SixAxisSensorUserCalibrationFlags]].
 
= NpadStyleSet =
This is "nn::hid::NpadStyleSet". This is a BitFlagSet object for [[#NpadStyleTag]].
 
= NpadStyleTag =
This is "nn::hid::NpadStyleTag".


{| class="wikitable" border="1"
{| class="wikitable" border="1"
Value
Bits
!  Description
!  Description
!  Notes
|-
|-
| 0 || None
| 0
| NpadStyleFullKey
| Pro Controller
|-
|-
| 1 || Left
| 1
| NpadStyleHandheld
| Joy-Con controller in handheld mode
|-
|-
| 2 || Up
| 2
| NpadStyleJoyDual
| Joy-Con controller in dual mode
|-
|-
| 3 || Right
| 3
| NpadStyleJoyLeft
| Joy-Con left controller in single mode
|-
|-
| 4 || Down
| 4
|}
| NpadStyleJoyRight
 
| Joy-Con right controller in single mode
= GestureType =
This is "nn::hid::GestureType".
 
{| class="wikitable" border="1"
!  Value
!  Description
|-
|-
| 0 || Idle
| 5
| NpadStyleGc
| GameCube controller
|-
|-
| 1 || Complete
| 6
| NpadStylePalma
| Poké Ball Plus controller
|-
|-
| 2 || Cancel
| 7
| NpadStyleLark
| NES/Famicom controller
|-
|-
| 3 || Touch
| 8
| NpadStyleHandheldLark
| NES/Famicom controller in handheld mode
|-
|-
| 4 || Press
| 9
| NpadStyleLucia
| SNES controller
|-
|-
| 5 || Tap
| 10-28
| Reserved
|
|-
|-
| 6 || Pan
| 29
| NpadStyleSystemExt
| Generic external controller
|-
|-
| 7 || Swipe
| 30
| NpadStyleSystem
| Generic controller
|-
|-
| 8 || Pinch
| 31
|-
| Reserved
| 9 || Rotate
|
|}
|}


= DeviceHandle =
= NpadDeviceTypeSet =
This is "nn::xcd::DeviceHandle". This is a 8 byte value.
This is "nn::hid::system::NpadDeviceType". This is a BitFlagSet object for [[#NpadDeviceType]].
 
= NpadSystemPropertiesSet =
This is "nn::hid::detail::NpadSystemPropertiesSet". This is a BitFlagSet object for [[#NpadSystemProperties]].


= DeviceType =
= NpadSystemProperties =
This is "nn::hid::system::DeviceType".
This is "nn::hid::NpadSystemProperties". This is a 64-bit flag.


{| class="wikitable" border="1"
{| class="wikitable" border="1"
! Bits
|-
! Description
! Bit
! Description
|-
|-
| 0
| 0
| FullKey
| IsChargingJoyDual
|-
|-
| 1
| 1
| DebugPad
| IsChargingJoyLeft
|-
|-
| 2
| 2
| HandheldLeft
| IsChargingJoyRight
|-
|-
| 3
| 3
| HandheldRight
| IsPoweredJoyDual
|-
|-
| 4
| 4
| JoyLeft
| IsPoweredJoyLeft
|-
|-
| 5
| 5
| JoyRight
| IsPoweredJoyRight
|-
| 6
| Palma
|-
| 7
| LarkHvcLeft
|-
| 8
| LarkHvcRight
|-
|-
| 9
| 9
| LarkNesLeft
| IsUnsuportedButtonPressedOnNpadSystem
|-
|-
| 10
| 10
| LarkNesRight
| IsUnsuportedButtonPressedOnNpadSystemExt
|-
|-
| 11
| 11
| HandheldLarkHvcLeft
| IsAbxyButtonOriented
|-
|-
| 12
| 12
| HandheldLarkHvcRight
| IsSlSrButtonOriented
|-
|-
| 13
| 13
| HandheldLarkNesLeft
| [4.0.0+] IsPlusAvailable
|-
|-
| 14
| 14
| HandheldLarkNesRight
| [4.0.0+] IsMinusAvailable
|-
|-
| 15
| 15
| Lucia
| [8.0.0+] IsDirectionalButtonsAvailable
|}
 
= NpadSystemButtonPropertiesSet =
This is "nn::hid::detail::NpadSystemButtonPropertiesSet". This is a BitFlagSet object for [[#NpadSystemButtonProperties]].
 
= NpadSystemButtonProperties =
This is "nn::hid::NpadSystemButtonProperties". This is a 32-bit flag.
 
{| class="wikitable" border="1"
|-
|-
| 16-30
! Bit
| Reserved
! Description
|-
|-
| 31
| 0
| System
| IsUnintendedHomeButtonInputProtectionEnabled
|}
|}


= DeviceTypeInternal =
= AppletFooterUiAttributesSet =
This is "nn::hid::detail::DeviceTypeInternal".
This is "nn::hid::system::AppletFooterUiAttributesSet". This is a BitFlagSet object for [[#AppletFooterUiAttribute]].
 
= UniquePadType =
This is "nn::hid::system::UniquePadType".


{| class="wikitable" border="1"
{| class="wikitable" border="1"
Bits
Value
!  Description
!  Description
|-
|-
| 0-7
| 0 || Embedded
| 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
| 1 || FullKeyController
| Pro Controller
|-
|-
| 11
| 2 || RightController
| Famicom left controller
|-
|-
| 12
| 3 || LeftController
| Famicom right controller (with microphone)
|-
|-
| 13
| 4 || DebugPadController
| NES left controller
|}
 
= UniquePadInterface =
This is "nn::hid::system::UniquePadInterface".
 
{| class="wikitable" border="1"
!  Value
!  Description
|-
|-
| 14
| 0 || Embedded
| NES right controller
|-
|-
| 15-16
| 1 || Rail
| Invalid
|-
|-
| 17
| 2 || Bluetooth
| Generic external controller
|-
|-
| 18-20
| 3 || Usb
| Invalid
|-
| 21-23
| Generic controller
|}
|}


[9.0.0+] This is "nn::hidtypes::DeviceType".
= UniquePadSerialNumber =
This is "nn::hid::system::UniquePadSerialNumber". This is a 0x10 byte value.
 
= UniquePadId =
This is "nn::hid::system::UniquePadId". This is a 8 byte value.
 
= AnalogStickManualCalibrationStage =
This is "nn::hid::system::AnalogStickManualCalibrationStage".


{| class="wikitable" border="1"
{| class="wikitable" border="1"
!  Value
!  Value
!  [[#DeviceType|DeviceType]]
!  [[#UniquePadType|UniquePadType]]
!  Description
!  Description
|-
|-
| 1 || JoyRight, HandheldRight || JoyRight || Joy-Con right controller
| 0 || ReleaseFromRight
|-
|-
| 2 || JoyLeft, HandheldLeft || JoyLeft || Joy-Con left controller
| 1 || ReleaseFromBottom
|-
|-
| 3 || FullKey || FullKey || Pro Controller
| 2 || ReleaseFromLeft
|-
|-
| 4 || JoyLeft || JoyLeft || Reserved
| 3 || ReleaseFromTop
|-
|-
| 5 || JoyRight || JoyRight || Reserved
| 4 || Rotate
|-
|-
| 6 || FullKey || FullKey || Reserved
| 5 || Update
|-
|-
| 7 || LarkHvcLeft, HandheldLarkHvcLeft || JoyLeft || Famicom left controller
| 6 || Completed
|-
|-
| 8 || LarkHvcRight, HandheldLarkHvcRight || JoyRight || Famicom right controller (with microphone)
| 7 || Clear
|-
|-
| 9 || LarkNesLeft, HandheldLarkNesLeft || JoyLeft || NES left controller
| 8 || ClearCompleted
|}
 
= SixAxisSensorUserCalibrationStage =
This is "nn::hid::system::SixAxisSensorUserCalibrationStage".
 
{| class="wikitable" border="1"
!  Value
!  Description
|-
|-
| 10 || LarkNesRight, HandheldLarkNesRight || JoyRight || NES right controller
| 0 || Measuring
|-
|-
| 11 || Lucia || FullKey || SNES controller
| 1 || Update
|-
|-
| 12 || Palma || Other || Poké Ball Plus controller
| 2 || Completed
|}
 
= NpadJoyHoldType =
This is "nn::hid::NpadJoyHoldType".
 
{| class="wikitable" border="1"
!  Value
!  Description
|-
|-
| 13 || FullKey || FullKey || Gc controller
| 0 || Vertical
|-
|-
| 14 || HandheldLeft || JoyLeft || Reserved
| 1 || Horizontal
|}
 
= NpadJoyDeviceType =
This is "nn::hid::NpadJoyDeviceType".
 
{| class="wikitable" border="1"
!  Value
!  Description
|-
|-
| 15 || FullKey || FullKey || Reserved
| 0 || Left
|-
|-
| 16 || FullKey || FullKey || Reserved
| 1 || Right
|}
 
= NpadHandheldActivationMode =
This is "nn::hid::NpadHandheldActivationMode".
 
This controls how many joycons must be attached for handheld mode to be triggered (Dual = 2, Single = 1, None = 0).
 
{| class="wikitable" border="1"
!  Value
!  Description
|-
|-
| 17 || DebugPad || DebugPad || Debug controller
| 0 || Dual
|-
|-
| 18 || HandheldRight || JoyRight || Reserved
| 1 || Single
|-
|-
| 19 || System || Other || Unknown (has [[#NpadStyleTag|NpadFullKey]] style tag)
| 2 || None
|-
| 20 || System || Other || Unknown (has [[#NpadStyleTag|NpadJoyDual]] style tag)
|-
| 21 || System || Other || Unknown (has [[#NpadStyleTag|NpadJoyDual]] style tag)
|}
|}


= NpadPowerInfo =
= NpadJoyAssignmentMode =
This is "nn::hid::system::NpadPowerInfo".
This is "nn::hid::NpadJoyAssignmentMode".


{| class="wikitable" border="1"
{| class="wikitable" border="1"
!  Value
!  Description
|-
|-
! Offset
| 0 || Dual
! Size
! Description
|-
|-
| 0x0
| 1 || Single
| 0x1
| IsPowered
|-
| 0x1
| 0x1
| IsCharging
|-
| 0x2
| 0x6
| Reserved
|-
| 0x8
| 0x6
| [[#BatteryLevel|BatteryLevel]]
|}
|}


= BatteryLevel =
= NpadCommunicationMode =
This is "nn::hid::system::NpadBatteryLevel". This is a 4 byte value.
This is "nn::hid::NpadCommunicationMode".
 
= ConsoleSixAxisSensorHandle =
This is "nn::hid::ConsoleSixAxisSensorHandle". This is a 4-byte struct with 4-byte alignment.
 
sdknso GetConsoleSixAxisSensorHandle always returns a handle with value 0x13.


{| class="wikitable" border="1"
{| class="wikitable" border="1"
!  Value
!  Description
|-
|-
! Offset || Size || Description
| 0 || 5ms
|-
|-
| 0x0 || 0x4 || TypeValue
| 1 || 10ms
|-
|-
| 0x0 || 0x1 ||  
| 2 || 15ms
|-
|-
| 0x1 || 0x1 ||  
| 3 || Default
|}
|}


= SixAxisSensorHandle =
= AppletDetailedUiType =
This is "nn::hid::SixAxisSensorHandle". This is a 4-byte struct with 4-byte alignment.
This is "nn::hid::system::AppletDetailedUiType".


{| class="wikitable" border="1"
{| class="wikitable" border="1"
!  Value
!  Description
|-
| 0x00000000 || None
|-
|-
! Offset || Size || Description
| 0x01000000 || HandheldNone
|-
|-
| 0x0 || 0x4 || TypeValue
| 0x02000000 || HandheldJoyConLeftOnly
|-
|-
| 0x0 || 0x1 || NpadStyleIndex
| 0x02000001 || HandheldLarkHvc1Only
|-
|-
| 0x1 || 0x1 || [[#NpadIdType|PlayerNumber]]
| 0x02000002 || HandheldLarkNesLeftOnly
|-
|-
| 0x2 || 0x1 || DeviceIdx
| 0x03000000 || HandheldJoyConRightOnly
|}
 
= VibrationDeviceHandle =
This is "nn::hid::VibrationDeviceHandle". This is a 4-byte struct with 4-byte alignment.
 
{| class="wikitable" border="1"
|-
|-
! Offset || Size || Description
| 0x03000001 || HandheldLarkHvc2Only
|-
|-
| 0x0 || 0x4 || TypeValue
| 0x03000002 || HandheldLarkNesRightOnly
|-
|-
| 0x0 || 0x1 || NpadStyleIndex
| 0x04000000 || HandheldJoyConLeftJoyConRight
|-
|-
| 0x1 || 0x1 || [[#NpadIdType|PlayerNumber]]
| 0x04000001 || HandheldJoyConLeftLarkHvc2
|-
|-
| 0x2 || 0x1 || DeviceIdx
| 0x04000002 || HandheldJoyConLeftLarkNesRight
|}
 
= VibrationDeviceInfo =
This is "nn::hid::VibrationDeviceInfo" / "nn::hid::VibrationDeviceInfoForIpc". This is a 0x8-byte struct.
 
{| class="wikitable" border="1"
|-
|-
! Offset || Size || Description
| 0x04000003 || HandheldLarkHvc1JoyConRight
|-
|-
| 0x0 || 0x4 || [[#VibrationDeviceType|DeviceType]]
| 0x04000004 || HandheldLarkHvc1LarkHvc2
|-
|-
| 0x4 || 0x4 || [[#VibrationDevicePosition|Position]]
| 0x04000005 || HandheldLarkHvc1LarkNesRight
|}
 
= VibrationDeviceType =
This is "nn::hid::VibrationDeviceType".
 
{| class="wikitable" border="1"
!  Value
!  Description
|-
|-
| 0 || Unknown
| 0x04000006 || HandheldLarkNesLeftJoyConRight
|-
|-
| 1 || LinearResonantActuator
| 0x04000007 || HandheldLarkNesLeftLarkHvc2
|-
|-
| 2 || GcErm
| 0x04000008 || HandheldLarkNesLeftLarkNesRight
|}
 
= VibrationDevicePosition =
This is "nn::hid::VibrationDevicePosition".
 
{| class="wikitable" border="1"
!  Value
!  Description
|-
|-
| 0 || None
| 0x05000000 || JoyDual
|-
|-
| 1 || Left
| 0x06000000 || JoyDualLeftOnly
|-
|-
| 2 || Right
| 0x07000000 || JoyDualRightOnly
|}
|-
 
| 0x08000000 || JoyLeftHorizontal
= VibrationValue =
|-
This is "nn::hid::VibrationValue". This is a 0x10-byte struct, which contains 4 float values.
| 0x09000000 || JoyLeftVertical
 
|-
{| class="wikitable" border="1"
| 0x0A000000 || JoyRightHorizontal
|-
| 0x0B000000 || JoyRightVertical
|-
| 0x0C000000 || SwitchProController
|-
| 0x0D000000 || CompatibleProController
|-
| 0x0E000000 || CompatibleJoyCon
|-
| 0x0F000000 || LarkHvc1
|-
| 0x10000000 || LarkHvc2
|-
| 0x11000000 || LarkNesLeft
|-
| 0x12000000 || LarkNesRight
|-
|-
! Offset
| 0x13000000 || LuciaU
! Size
! Description
|-
|-
| 0x0
| 0x13000001 || LuciaJ
| 0x4
| AmplitudeLow
|-
|-
| 0x4
| 0x13000002 || LuciaE
| 0x4
| FrequencyLow
|-
|-
| 0x8
| 0x14000000 || Verification
| 0x4
| AmplitudeHigh
|-
|-
| 0xC
| 0xFFFFFFFF || Unknown
| 0x4
| FrequencyHigh
|}
|}


= VibrationGcErmCommand =
= AppletFooterUiType =
This is "nn::hid::VibrationGcErmCommand".
This is "nn::hid::system::AppletFooterUiType".


{| class="wikitable" border="1"
{| class="wikitable" border="1"
!  Value
!  Value
!  Name
!  Description
!  Description
|-
|-
| 0 || Stop || Stops the vibration with a decay phase.
| 0 || None
|-
| 1 || HandheldNone
|-
| 2 || HandheldJoyConLeftOnly
|-
| 3 || HandheldJoyConRightOnly
|-
| 4 || HandheldJoyConLeftJoyConRight
|-
| 5 || JoyDual
|-
| 6 || JoyDualLeftOnly
|-
| 7 || JoyDualRightOnly
|-
| 8 || JoyLeftHorizontal
|-
| 9 || JoyLeftVertical
|-
| 10 || JoyRightHorizontal
|-
| 11 || JoyRightVertical
|-
| 12 || SwitchProController
|-
| 13 || CompatibleProController
|-
| 14 || CompatibleJoyCon
|-
| 15 || LarkHvc1
|-
| 16 || LarkHvc2
|-
|-
| 1 || Start || Starts the vibration.
| 17 || LarkNesLeft
|-
|-
| 2 || StopHard || Stops the vibration immediately, with no decay phase.
| 18 || LarkNesRight
|}
 
= AccelerometerPlayMode =
This is "nn::hid::debug::AccelerometerPlayMode" (pre-10.0.0 this is "nn::hid::AccelerometerPlayMode").
 
{| class="wikitable" border="1"
!  Value
!  Description
|-
|-
| 0 || Loose
| 19 || Lucia
|-
|-
| 1 || Tight
| 20 || Verification
|}
|}


= GyroscopeZeroDriftMode =
= NpadIdType =
This is "nn::hid::GyroscopeZeroDriftMode".
This is "nn::hid::NpadIdType". This is the controller index used in [[#SharedMemoryFormat|sharedmem]].


{| class="wikitable" border="1"
{| class="wikitable" border="1"
Line 6,953: Line 7,078:
!  Description
!  Description
|-
|-
| 0 || Loose
| 0x0 || No1
|-
|-
| 1 || Standard
| 0x1 || No2
|-
|-
| 2 || Tight
| 0x2 || No3
|}
|-
 
| 0x3 || No4
= PalmaConnectionHandle =
|-
This is "nn::hid::PalmaConnectionHandle". This is a 0x8-byte struct with 8-byte alignment.
| 0x4 || No5
 
|-
= PalmaOperationInfo =
| 0x5 || No6
This is "nn::hid::PalmaOperationInfo". This is a 0x148-byte struct.
|-
 
| 0x6 || No7
{| class="wikitable" border="1"
|-
|-
| 0x7 || No8
! Offset || Size || Description
|-
|-
| 0x10 || Other
| 0x0 || 0x4 || sdknso sets this to the output value from [[#GetPalmaOperationInfo]], sdknso will Abort if it's larger than 0x10 ([5.0.0-5.0.2] 0xE).
|-
|-
| 0x20 || Handheld
| 0x4 || 0x4 || Result
|}
|-
 
| 0x8 || 0x140 || Buffer for [[#GetPalmaOperationInfo]].
= NpadInterfaceType =
|}
This is "nn::hid::NpadInterfaceType".
 
 
= PalmaFrModeType =
{| class="wikitable" border="1"
This is "nn::hid::PalmaFrModeType".
!  Value
 
!  Description
= PalmaApplicationSectionAccessBuffer =
|-
This is "nn::hid::PalmaApplicationSectionAccessBuffer". This is a 0x100-byte struct.
| 1 || Bluetooth
 
|-
= PalmaActivityEntry =
| 2 || Rail
This is "nn::hid::PalmaActivityEntry".
|-
 
| 3 || USB
{| class="wikitable" border="1"
|-
|-
| 4 || Unknown
! Offset || Size || Description
|}
|-
 
| 0x0 || 0x2 || Passed for the second u64 for [[#WritePalmaActivityEntry]].
= NpadLarkType =
|-
This is "nn::hid::NpadLarkType".
| 0x2 || 0x2 || Padding
 
|-
{| class="wikitable" border="1"
| 0x4 || 0x4 || Passed for the third u64 for [[#WritePalmaActivityEntry]].
!  Value
|-
!  Description
| 0x8 || 0x2 || Passed for the fourth u64 for [[#WritePalmaActivityEntry]].
|-
|}
| 0 || Invalid
 
|-
= PalmaFeature =
| 1 || H1
This is "nn::hid::PalmaFeature".
|-
 
| 2 || H2
= AbstractedPadState =
|-
{| class="wikitable" border="1"
| 3 || NL
|-
|-
! Offset || Size || Description
| 4 || NR
|-
|}
| 0x0 || 0x4 || Type, only 1 bit can be set. Converted to [[#HdlsDeviceInfo]]::type internally by [[#SetAutoPilotVirtualPadState]].
 
|-
= NpadLuciaType =
| 0x4 || 0x1 || Flags. [[#SetAutoPilotVirtualPadState]] only uses bit0: when clear it will skip using the rest of the input and run [[#UnsetAutoPilotVirtualPadState]] internally.
This is "nn::hid::NpadLuciaType".
|-
 
| 0x5 || 0x3 || Padding
{| class="wikitable" border="1"
!  Value
!  Description
|-
| 0 || Invalid
|-
| 1 || J
|-
| 2 || E
|-
| 3 || U
|}
 
= GestureDirection =
This is "nn::hid::GestureDirection".
 
{| class="wikitable" border="1"
!  Value
!  Description
|-
| 0 || None
|-
| 1 || Left
|-
| 2 || Up
|-
| 3 || Right
|-
| 4 || Down
|}
 
= GestureType =
This is "nn::hid::GestureType".
 
{| class="wikitable" border="1"
!  Value
!  Description
|-
| 0 || Idle
|-
| 1 || Complete
|-
| 2 || Cancel
|-
| 3 || Touch
|-
| 4 || Press
|-
| 5 || Tap
|-
| 6 || Pan
|-
| 7 || Swipe
|-
| 8 || Pinch
|-
| 9 || Rotate
|}
 
= DeviceHandle =
This is "nn::xcd::DeviceHandle". This is a 8 byte value.
 
= DeviceType =
This is "nn::hid::system::DeviceType".
 
{| class="wikitable" border="1"
!  Bits
!  Description
|-
| 0
| FullKey
|-
| 1
| DebugPad
|-
| 2
| HandheldLeft
|-
| 3
| HandheldRight
|-
| 4
| JoyLeft
|-
| 5
| JoyRight
|-
| 6
| Palma
|-
| 7
| LarkHvcLeft
|-
| 8
| LarkHvcRight
|-
| 9
| LarkNesLeft
|-
| 10
| LarkNesRight
|-
| 11
| HandheldLarkHvcLeft
|-
| 12
| HandheldLarkHvcRight
|-
| 13
| HandheldLarkNesLeft
|-
| 14
| HandheldLarkNesRight
|-
| 15
| Lucia
|-
| 16-30
| Reserved
|-
| 31
| System
|}
 
= DeviceTypeInternal =
This is "nn::hid::detail::DeviceTypeInternal".
 
{| class="wikitable" border="1"
!  Bits
!  Description
|-
| 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.
|-
| 8-10
| Pro Controller
|-
| 11
| Famicom left controller
|-
| 12
| Famicom right controller (with microphone)
|-
| 13
| NES left controller
|-
| 14
| NES right controller
|-
| 15-16
| Invalid
|-
| 17
| Generic external controller
|-
| 18-20
| Invalid
|-
| 21-23
| Generic controller
|}
 
[9.0.0+] This is "nn::hidtypes::DeviceType".
 
{| class="wikitable" border="1"
!  Value
!  [[#DeviceType|DeviceType]]
!  [[#UniquePadType|UniquePadType]]
!  Description
|-
| 1 || JoyRight, HandheldRight || JoyRight || Joy-Con right controller
|-
| 2 || JoyLeft, HandheldLeft || JoyLeft || Joy-Con left controller
|-
| 3 || FullKey || FullKey || Pro Controller
|-
| 4 || JoyLeft || JoyLeft || Reserved
|-
| 5 || JoyRight || JoyRight || Reserved
|-
| 6 || FullKey || FullKey || Reserved
|-
| 7 || LarkHvcLeft, HandheldLarkHvcLeft || JoyLeft || Famicom left controller
|-
| 8 || LarkHvcRight, HandheldLarkHvcRight || JoyRight || Famicom right controller (with microphone)
|-
| 9 || LarkNesLeft, HandheldLarkNesLeft || JoyLeft || NES left controller
|-
| 10 || LarkNesRight, HandheldLarkNesRight || JoyRight || NES right controller
|-
| 11 || Lucia || FullKey || SNES controller
|-
| 12 || Palma || Other || Poké Ball Plus controller
|-
| 13 || FullKey || FullKey || Gc controller
|-
| 14 || HandheldLeft || JoyLeft || Reserved
|-
| 15 || FullKey || FullKey || Reserved
|-
| 16 || FullKey || FullKey || Reserved
|-
| 17 || DebugPad || DebugPad || Debug controller
|-
| 18 || HandheldRight || JoyRight || Reserved
|-
| 19 || System || Other || Unknown (has [[#NpadStyleTag|NpadFullKey]] style tag)
|-
| 20 || System || Other || Unknown (has [[#NpadStyleTag|NpadJoyDual]] style tag)
|-
| 21 || System || Other || Unknown (has [[#NpadStyleTag|NpadJoyDual]] style tag)
|}
 
= NpadPowerInfo =
This is "nn::hid::system::NpadPowerInfo".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x1
| IsPowered
|-
| 0x1
| 0x1
| IsCharging
|-
| 0x2
| 0x6
| Reserved
|-
| 0x8
| 0x6
| [[#BatteryLevel|BatteryLevel]]
|}
 
= BatteryLevel =
This is "nn::hid::system::NpadBatteryLevel". This is a 4 byte value.
 
= ConsoleSixAxisSensorHandle =
This is "nn::hid::ConsoleSixAxisSensorHandle". This is a 4-byte struct with 4-byte alignment.
 
sdknso GetConsoleSixAxisSensorHandle always returns a handle with value 0x13.
 
{| class="wikitable" border="1"
|-
! Offset || Size || Description
|-
| 0x0 || 0x4 || TypeValue
|-
| 0x0 || 0x1 ||
|-
| 0x1 || 0x1 ||
|}
 
= SixAxisSensorHandle =
This is "nn::hid::SixAxisSensorHandle". This is a 4-byte struct with 4-byte alignment.
 
{| class="wikitable" border="1"
|-
! Offset || Size || Description
|-
| 0x0 || 0x4 || TypeValue
|-
| 0x0 || 0x1 || NpadStyleIndex
|-
| 0x1 || 0x1 || [[#NpadIdType|PlayerNumber]]
|-
| 0x2 || 0x1 || DeviceIdx
|}
 
= VibrationDeviceHandle =
This is "nn::hid::VibrationDeviceHandle". This is a 4-byte struct with 4-byte alignment.
 
{| class="wikitable" border="1"
|-
! Offset || Size || Description
|-
| 0x0 || 0x4 || TypeValue
|-
| 0x0 || 0x1 || NpadStyleIndex
|-
| 0x1 || 0x1 || [[#NpadIdType|PlayerNumber]]
|-
| 0x2 || 0x1 || DeviceIdx
|}
 
= VibrationDeviceInfo =
This is "nn::hid::VibrationDeviceInfo" / "nn::hid::VibrationDeviceInfoForIpc". This is a 0x8-byte struct.
 
{| class="wikitable" border="1"
|-
! Offset || Size || Description
|-
| 0x0 || 0x4 || [[#VibrationDeviceType|DeviceType]]
|-
| 0x4 || 0x4 || [[#VibrationDevicePosition|Position]]
|}
 
= VibrationDeviceType =
This is "nn::hid::VibrationDeviceType".
 
{| class="wikitable" border="1"
!  Value
!  Description
|-
| 0 || Unknown
|-
| 1 || LinearResonantActuator
|-
| 2 || GcErm
|}
 
= VibrationDevicePosition =
This is "nn::hid::VibrationDevicePosition".
 
{| class="wikitable" border="1"
!  Value
!  Description
|-
| 0 || None
|-
| 1 || Left
|-
| 2 || Right
|}
 
= VibrationValue =
This is "nn::hid::VibrationValue". This is a 0x10-byte struct, which contains 4 float values.
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x4
| AmplitudeLow
|-
| 0x4
| 0x4
| FrequencyLow
|-
| 0x8
| 0x4
| AmplitudeHigh
|-
| 0xC
| 0x4
| FrequencyHigh
|}
 
= VibrationGcErmCommand =
This is "nn::hid::VibrationGcErmCommand".
 
{| class="wikitable" border="1"
!  Value
!  Name
!  Description
|-
| 0 || Stop || Stops the vibration with a decay phase.
|-
| 1 || Start || Starts the vibration.
|-
| 2 || StopHard || Stops the vibration immediately, with no decay phase.
|}
 
= AccelerometerPlayMode =
This is "nn::hid::debug::AccelerometerPlayMode" (pre-10.0.0 this is "nn::hid::AccelerometerPlayMode").
 
{| class="wikitable" border="1"
!  Value
!  Description
|-
| 0 || Loose
|-
| 1 || Tight
|}
 
= GyroscopeZeroDriftMode =
This is "nn::hid::GyroscopeZeroDriftMode".
 
{| class="wikitable" border="1"
!  Value
!  Description
|-
| 0 || Loose
|-
| 1 || Standard
|-
| 2 || Tight
|}
 
= PalmaConnectionHandle =
This is "nn::hid::PalmaConnectionHandle". This is a 0x8-byte struct with 8-byte alignment.
 
= PalmaOperationInfo =
This is "nn::hid::PalmaOperationInfo". This is a 0x148-byte struct.
 
{| class="wikitable" border="1"
|-
! Offset || Size || Description
|-
| 0x0 || 0x4 || [[#PalmaOperationType]]
|-
| 0x4 || 0x4 || Result
|-
| 0x8 || 0x140 || Buffer for [[#GetPalmaOperationInfo]].
|}
 
= PalmaOperationType =
This is "nn::hid::PalmaOperationType".
 
{| class="wikitable" border="1"
!  Value
!  Description
|-
| 0 || PlayActivity
|-
| 1 || SetFrModeType
|-
| 2 || ReadStep
|-
| 3 || EnableStep
|-
| 4 || ResetStep
|-
| 5 || ReadApplicationSection
|-
| 6 || WriteApplicationSection
|-
| 7 || ReadUniqueCode
|-
| 8 || SetUniqueCodeInvalid
|-
| 9 || WriteActivityEntry
|-
| 10 || WriteRgbLedPatternEntry
|-
| 11 || WriteWaveEntry
|-
| 12 || ReadDataBaseIdentificationVersion
|-
| 13 || WriteDataBaseIdentificationVersion
|-
| 14 || SuspendFeature
|-
| [[5.1.0]]+ 15 || ReadPlayLog
|-
| [[5.1.0]]+ 16 || ResetPlayLog
|}
 
= PalmaFrModeType =
This is "nn::hid::PalmaFrModeType".
 
{| class="wikitable" border="1"
!  Value
!  Description
|-
| 0 || Off
|-
| 1 || B01
|-
| 2 || B02
|-
| 3 || B03
|-
| 4 || Downloaded
|}
 
= PalmaApplicationSectionAccessBuffer =
This is "nn::hid::PalmaApplicationSectionAccessBuffer". This is a 0x100-byte struct.
 
= PalmaActivityEntry =
This is "nn::hid::PalmaActivityEntry".
 
{| class="wikitable" border="1"
|-
! Offset || Size || Description
|-
| 0x0 || 0x2 || RgbLedPatternIndex.
|-
| 0x2 || 0x2 || Padding
|-
| 0x4 || 0x4 || [[#PalmaWaveSet|WaveSet]].
|-
| 0x8 || 0x2 || WaveIndex.
|}
 
= PalmaWaveSet =
This is "nn::hid::PalmaWaveSet".
 
{| class="wikitable" border="1"
!  Value
!  Description
|-
| 0 || Small
|-
| 1 || Medium
|-
| 2 || Large
|}
 
= PalmaFeature =
This is "nn::hid::PalmaFeature".
 
{| class="wikitable" border="1"
|-
! Bit
! Description
|-
| 0
| FrMode
|-
| 1
| RumbleFeedback
|-
| 2
| Step
|-
| 3
| MuteSwitch
|-
|}
 
= AbstractedPadState =
{| class="wikitable" border="1"
|-
! Offset || Size || Description
|-
| 0x0 || 0x4 || Type, only 1 bit can be set. Converted to [[#HdlsDeviceInfo]]::type internally by [[#SetAutoPilotVirtualPadState]].
|-
| 0x4 || 0x1 || Flags. [[#SetAutoPilotVirtualPadState]] only uses bit0: when clear it will skip using the rest of the input and run [[#UnsetAutoPilotVirtualPadState]] internally.
|-
| 0x5 || 0x3 || Padding
|-
|-
| 0x8 || 0x4 || RGBA Single Body Color
| 0x8 || 0x4 || RGBA Single Body Color
Line 7,092: Line 7,755:
| 0x8
| 0x8
| 0x8
| 0x8
| [[#AnalogStickState|AnalogStickR]]
| [[#AnalogStickState|AnalogStickL]]
|-
|-
| 0x10
| 0x10
| 0x8
| 0x8
| [[#AnalogStickState|AnalogStickL]]
| [[#AnalogStickState|AnalogStickR]]
|}
|}


Line 7,126: Line 7,789:
| 0x10
| 0x10
| 0x4
| 0x4
| WheelDeltaX
| WheelDelta
|-
|-
| 0x14
| 0x14
| 0x4
| 0x4
| WheelDeltaY
| [[#MouseButtonSet|Buttons]]
|-
|-
| 0x18
| 0x18
| 0x4
| [[#MouseButtonSet|Buttons]]
|-
| 0x1C
| 0x4
| 0x4
| [[#MouseAttributeSet|Attributes]]
| [[#MouseAttributeSet|Attributes]]
Line 7,312: Line 7,971:
| 0x21 || 0x3 || Padding
| 0x21 || 0x3 || Padding
|}
|}
= DebugRegisteredDevice =
This is "nn::hid::debug::RegisteredDevice". This is a 0x58-byte struct with 2-byte alignment.
= RegisteredDevice =
This is "nn::hid::system::RegisteredDevice". This is a 0x68-byte struct with 4-byte alignment.


= NotificationLedPattern =
= NotificationLedPattern =
Line 7,694: Line 8,359:
| 0x28 || 0x8 || [[#AnalogStickAssignment|HardwareStickR]]
| 0x28 || 0x8 || [[#AnalogStickAssignment|HardwareStickR]]
|}
|}
= StorageName =
This is "nn::hidconfig::StorageName". This is a 0x81-byte struct.
This is an UTF-8 NUL-terminated name string.


= IrCameraHandle =
= IrCameraHandle =