HID services: Difference between revisions
No edit summary |
No edit summary |
||
(42 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. | |||
See [[#hidGetPalmaOperationInfo]]. | |||
== WritePalmaApplicationSection == | == WritePalmaApplicationSection == | ||
Takes an input [[#PalmaConnectionHandle]], an u64, an u64, a type-0x19 input buffer containing a [[#PalmaApplicationSectionAccessBuffer]], no output. | Takes an input [[#PalmaConnectionHandle]], an u64, an u64 size, a type-0x19 input buffer containing a [[#PalmaApplicationSectionAccessBuffer]], no output. | ||
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 == | ||
Takes an input [[#PalmaConnectionHandle]], an u64, an u64, an u64, an u64, no output. | Takes an input [[#PalmaConnectionHandle]], an u64, an u64, an u64, an u64, no output. | ||
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 771: | 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 786: | 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 801: | 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 806: | 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 862: | Line 929: | ||
|- | |- | ||
| 13 || [9.0.0+] GetTouchScreenConfiguration | | 13 || [9.0.0+] GetTouchScreenConfiguration | ||
|- | |||
| 14 || [11.0.0+] ProcessTouchScreenAutoTune | |||
|- | |- | ||
| 20 || [[#DeactivateMouse]] | | 20 || [[#DeactivateMouse]] | ||
Line 897: | Line 966: | ||
| 112 || UnsetHomeButtonAutoPilotState | | 112 || UnsetHomeButtonAutoPilotState | ||
|- | |- | ||
| 120 || DeactivateSleepButton | | 120 || [[#DeactivateSleepButton]] | ||
|- | |- | ||
| 121 || SetSleepButtonAutoPilotState | | 121 || [[#SetSleepButtonAutoPilotState]] | ||
|- | |- | ||
| 122 || UnsetSleepButtonAutoPilotState | | 122 || [[#UnsetSleepButtonAutoPilotState]] | ||
|- | |- | ||
| 123 || [1.0.0-9.2.0] DeactivateInputDetector | | 123 || [1.0.0-9.2.0] DeactivateInputDetector | ||
Line 1,022: | 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 | |||
|- | |||
| 250 || [12.0.0+] IsVirtual | |||
|- | |||
| 251 || [12.0.0+] GetAnalogStickModuleParam | |||
|- | |- | ||
| 301 || [5.0.0-8.1.0] [[#GetAbstractedPadHandles]] | | 301 || [5.0.0-8.1.0] [[#GetAbstractedPadHandles]] | ||
Line 1,053: | Line 1,132: | ||
| 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,062: | Line 1,141: | ||
|- | |- | ||
| 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,074: | Line 1,155: | ||
|- | |- | ||
| 600 || [10.0.0+] ConvertPadState | | 600 || [10.0.0+] ConvertPadState | ||
|- | |||
| 650 || [12.0.0+] AddButtonPlayData | |||
|- | |||
| 651 || [12.0.0+] StartButtonPlayData | |||
|- | |||
| 652 || [12.0.0+] StopButtonPlayData | |||
|- | |- | ||
| 2000 || [10.0.0+] DeactivateDigitizer | | 2000 || [10.0.0+] DeactivateDigitizer | ||
Line 1,127: | Line 1,214: | ||
This just returns 0. | This just returns 0. | ||
== DeactivateSleepButton == | |||
No input/output. | |||
== SetSleepButtonAutoPilotState == | |||
Takes an input [[#SleepButtonAutoPilotState]], no output. | |||
== UnsetSleepButtonAutoPilotState == | |||
No input/output. | |||
== StartFirmwareUpdate == | == StartFirmwareUpdate == | ||
Line 1,275: | Line 1,371: | ||
[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,386: | Line 1,487: | ||
|- | |- | ||
| 513 || [3.0.0+] EndPermitVibrationSession | | 513 || [3.0.0+] EndPermitVibrationSession | ||
|- | |||
| 514 || [12.0.0+] SendVibrationNotificationPattern | |||
|- | |- | ||
| 520 || EnableHandheldHids | | 520 || EnableHandheldHids | ||
Line 1,396: | Line 1,499: | ||
|- | |- | ||
| 524 || [10.0.0+] IsHandheldHidsEnabled | | 524 || [10.0.0+] IsHandheldHidsEnabled | ||
|- | |||
| 525 || [11.0.0+] IsJoyConAttachedOnAllRail | |||
|- | |- | ||
| 540 || AcquirePlayReportControllerUsageUpdateEvent | | 540 || AcquirePlayReportControllerUsageUpdateEvent | ||
Line 1,551: | Line 1,656: | ||
| 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 || [11.0.0+] [[#DeleteButtonConfig]] ([10.0.0-10.2.0] [[#SetButtonConfigEnabled]]) | |||
|- | |||
| 1203 || [11.0.0+] [[#DeleteButtonConfigEmbedded]] ([10.0.0-10.2.0] [[#IsButtonConfigEnabled]]) | |||
|- | |- | ||
| | | 1204 || [11.0.0+] [[#SetButtonConfigEnabled]] ([10.0.0-10.2.0] [[#SetButtonConfigEmbedded]]) | ||
|- | |- | ||
| | | 1205 || [11.0.0+] [[#SetButtonConfigEmbeddedEnabled]] ([10.0.0-10.2.0] [[#SetButtonConfigFull]]) | ||
|- | |- | ||
| | | 1206 || [11.0.0+] [[#IsButtonConfigEnabled]] ([10.0.0-10.2.0] [[#SetButtonConfigLeft]]) | ||
|- | |- | ||
| | | 1207 || [11.0.0+] [[#IsButtonConfigEmbeddedEnabled]] ([10.0.0-10.2.0] [[#SetButtonConfigRight]]) | ||
|- | |- | ||
| | | 1208 || [11.0.0+] [[#SetButtonConfigEmbedded]] ([10.0.0-10.2.0] [[#GetButtonConfigEmbedded]]) | ||
|- | |- | ||
| | | 1209 || [11.0.0+] [[#SetButtonConfigFull]] ([10.0.0-10.2.0] [[#GetButtonConfigFull]]) | ||
|- | |- | ||
| | | 1210 || [10.0.0-10.2.0] [[#GetButtonConfigLeft]] | ||
|- | |- | ||
| | | 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,591: | Line 1,704: | ||
| 1258 || [10.0.0+] [[#IsButtonConfigStorageRightEmpty]] | | 1258 || [10.0.0+] [[#IsButtonConfigStorageRightEmpty]] | ||
|- | |- | ||
| 1259 || [10.0.0 | | 1259 || [11.0.0+] [[#GetButtonConfigStorageEmbeddedDeprecated]] ([10.0.0-10.2.0] [[#GetButtonConfigStorageEmbeddedDeprecated|GetButtonConfigStorageEmbedded]]) | ||
|- | |- | ||
| 1260 || [10.0.0 | | 1260 || [11.0.0+] [[#GetButtonConfigStorageFullDeprecated]] ([10.0.0-10.2.0] [[#GetButtonConfigStorageFullDeprecated|GetButtonConfigStorageFull]]) | ||
|- | |- | ||
| 1261 || [10.0.0 | | 1261 || [11.0.0+] [[#GetButtonConfigStorageLeftDeprecated]] ([10.0.0-10.2.0] [[#GetButtonConfigStorageLeftDeprecated|GetButtonConfigStorageLeft]]) | ||
|- | |- | ||
| 1262 || [10.0.0 | | 1262 || [11.0.0+] [[#GetButtonConfigStorageRightDeprecated]] ([10.0.0-10.2.0] [[#GetButtonConfigStorageRightDeprecated|GetButtonConfigStorageRight]]) | ||
|- | |- | ||
| 1263 || [10.0.0 | | 1263 || [11.0.0+] [[#SetButtonConfigStorageEmbeddedDeprecated]] ([10.0.0-10.2.0] [[#SetButtonConfigStorageEmbeddedDeprecated|SetButtonConfigStorageEmbedded]]) | ||
|- | |- | ||
| 1264 || [10.0.0 | | 1264 || [11.0.0+] [[#SetButtonConfigStorageFullDeprecated]] ([10.0.0-10.2.0] [[#SetButtonConfigStorageFullDeprecated|SetButtonConfigStorageFull]]) | ||
|- | |- | ||
| 1265 || [10.0.0 | | 1265 || [11.0.0+] [[#SetButtonConfigStorageLeftDeprecated]] ([10.0.0-10.2.0] [[#SetButtonConfigStorageLeftDeprecated|SetButtonConfigStorageLeft]]) | ||
|- | |- | ||
| 1266 || [10.0.0 | | 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,640: | Line 1,753: | ||
|- | |- | ||
| 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]] | |||
|} | |||
== SendKeyboardLockKeyEvent == | == SendKeyboardLockKeyEvent == | ||
Line 1,741: | Line 1,872: | ||
== 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,801: | Line 1,964: | ||
Takes an input s32 entry-index, returns an output bool. | Takes an input s32 entry-index, returns an output bool. | ||
[10.1.0 | [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,820: | Line 1,983: | ||
Same as [[#IsButtonConfigStorageEmbeddedEmpty]] except with a different setsys cmd. | Same as [[#IsButtonConfigStorageEmbeddedEmpty]] except with a different setsys cmd. | ||
== | == 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 | [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. | ||
== | == 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 [[# | Same as [[#GetButtonConfigStorageEmbeddedDeprecated]], except this uses a different setsys cmd, and uses a different conversion func / different output struct. | ||
== | == 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 [[# | Same as [[#GetButtonConfigStorageEmbeddedDeprecated]], except this uses a different setsys cmd, and uses a different conversion func / different output struct. | ||
== | == 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 [[# | Same as [[#GetButtonConfigStorageEmbeddedDeprecated]], except this uses a different setsys cmd, and uses a different conversion func / different output struct. | ||
== | == 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 | [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,852: | Line 2,019: | ||
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. | ||
== | == 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 [[# | Same as [[#SetButtonConfigStorageEmbeddedDeprecated]], except this uses different setsys cmds, and uses a different structs etc. | ||
== | == 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 [[# | Same as [[#SetButtonConfigStorageEmbeddedDeprecated]], except this uses different setsys cmds, and uses a different structs etc. | ||
== | == 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 [[# | 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 | [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,877: | Line 2,044: | ||
Takes an input s32 entry-index, no output. | Takes an input s32 entry-index, no output. | ||
Same as [[# | 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 [[# | 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 [[# | Same as [[#DeleteButtonConfigStorageEmbedded]] except with different setsys cmds. | ||
== IsUsingCustomButtonConfig == | == IsUsingCustomButtonConfig == | ||
Line 1,927: | Line 2,094: | ||
== 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 2,669: | Line 2,864: | ||
== GetBusHandle == | == GetBusHandle == | ||
Takes an input u32 [[#NpadIdType]], an u64 [[#BusType]] | Takes an input u32 [[#NpadIdType]], an u64 [[#BusType]] and an u64 [[AM_services|AppletResourceUserId]]. Returns an output bool '''HasHandle''' and a [[#BusHandle]]. | ||
'''HasHandle''' indicates whether the [[#BusHandle]] is valid. | |||
Official sw will assert when [[#BusHandle]] InternalIndex is >=0x11 (>=0x13 with [6.0.0+]). This same check is also done for all funcs using [[#BusHandle]] as input. | Official sw will assert when [[#BusHandle]] InternalIndex is >=0x11 (>=0x13 with [6.0.0+]). This same check is also done for all funcs using [[#BusHandle]] as input. | ||
Line 2,678: | Line 2,873: | ||
== IsExternalDeviceConnected == | == IsExternalDeviceConnected == | ||
Takes an input [[#BusHandle]] | Takes an input [[#BusHandle]]. Returns an output bool '''IsAttached'''. | ||
This is not used by sdknso. | This is not used by sdknso. | ||
== Initialize == | == Initialize == | ||
Takes an input [[#BusHandle]] | Takes an input [[#BusHandle]] and an u64 [[AM_services|AppletResourceUserId]]. No output. | ||
Prior to using this cmd, sdknso handles [[#GetSharedMemoryHandle|sharedmem]] mapping if not done previously. | Prior to using this cmd, sdknso handles [[#GetSharedMemoryHandle|sharedmem]] mapping if not done previously. | ||
== Finalize == | == Finalize == | ||
Takes an input [[#BusHandle]] | Takes an input [[#BusHandle]] and an u64 [[AM_services|AppletResourceUserId]]. No output. | ||
== EnableExternalDevice == | == EnableExternalDevice == | ||
Takes an input | Takes an input bool '''IsEnabled''', a [[#BusHandle]], an u64 '''Version''' and an u64 [[AM_services|AppletResourceUserId]]. No output. | ||
sdknso passes value 0x38900050018 (0x3A600050018 with 7.x+) for | sdknso passes value 0x38900050018 (0x3A600050018 with 7.x+) for '''Version'''. | ||
'''IsEnabled''' indicates whether to enable the device (true = enable, false = disable). When false, this will use [[#DisableJoyPollingReceiveMode]] if needed. | |||
== GetExternalDeviceId == | == GetExternalDeviceId == | ||
Takes an input [[#BusHandle]] | Takes an input [[#BusHandle]]. Returns an output u32 '''DeviceId'''. | ||
== SendCommandAsync == | == SendCommandAsync == | ||
Takes a type-0x21 input buffer and a [[#BusHandle]] | Takes a type-0x21 input buffer and a [[#BusHandle]]. No output. | ||
== GetSendCommandAsynceResult == | == GetSendCommandAsynceResult == | ||
Takes a type-0x22 output buffer and a [[#BusHandle]] | Takes a type-0x22 output buffer and a [[#BusHandle]]. Returns an output u32 '''OutSize'''. | ||
Official sw copies | Official sw copies '''OutSize''' to an output u64, for the actual output size. | ||
== SetEventForSendCommandAsycResult == | == SetEventForSendCommandAsycResult == | ||
Takes an input [[#BusHandle]] | Takes an input [[#BusHandle]]. Returns an output Event handle '''AttachmentDataReceiveEventHandle''' with EventClearMode=0. | ||
Official sw with SendAndReceive clears this event (6.x+ sdknso), uses [[#SendCommandAsync]], waits on + clears this event, then uses [[#GetSendCommandAsynceResult]]. | Official sw with SendAndReceive clears this event (6.x+ sdknso), uses [[#SendCommandAsync]], waits on + clears this event, then uses [[#GetSendCommandAsynceResult]]. | ||
== GetSharedMemoryHandle == | == GetSharedMemoryHandle == | ||
No input | No input. Returns an output SharedMemory handle. | ||
The SharedMemory is mapped with size 0x1000 and permissions=R--. | The SharedMemory is mapped with size 0x1000 and permissions=R--. | ||
Line 2,746: | Line 2,941: | ||
== EnableJoyPollingReceiveMode == | == EnableJoyPollingReceiveMode == | ||
Takes a type-0x21 input buffer, a TransferMemory handle, an u32 | Takes a type-0x21 input buffer, a TransferMemory handle, an u32 '''TransferMemorySize''', an u32 [[#JoyPollingMode]] and a [[#BusHandle]]. No output. | ||
The TransferMemory is created with an user-specified output buffer, with permissions=R--. | The TransferMemory is created with an user-specified output buffer, with permissions=R--. | ||
Line 2,815: | Line 3,010: | ||
== DisableJoyPollingReceiveMode == | == DisableJoyPollingReceiveMode == | ||
Takes an input [[#BusHandle]] | Takes an input [[#BusHandle]]. No output. | ||
== SetStatusManagerType == | == SetStatusManagerType == | ||
Takes an input u32 | Takes an input u32 [[#StatusManagerType]]. No output. | ||
This is used by sdknso immediately after mapping [[#GetSharedMemoryHandle|sharedmem]] (before [[#Initialize]]) with hard-coded value 0x2. | This is used by sdknso immediately after mapping [[#GetSharedMemoryHandle|sharedmem]] (before [[#Initialize]]) with hard-coded value 0x2. | ||
Line 5,912: | Line 6,107: | ||
This is "nn::hid::KeyboardKeySet". This is a BitFlagSet object for [[#KeyboardKey]]. | This is "nn::hid::KeyboardKeySet". This is a BitFlagSet object for [[#KeyboardKey]]. | ||
= | = KeyboardKey = | ||
This is "nn::hid:: | This is "nn::hid::KeyboardKey". This is a 256-bit flag. | ||
{| class="wikitable" border="1" | |||
{| class="wikitable" border="1" | |||
|- | |- | ||
! Bit | ! Bit | ||
! Description | ! Description | ||
|- | |- | ||
| 4 | | 4 | ||
| | | A | ||
|- | |- | ||
| 5 | | 5 | ||
| | | B | ||
|- | |- | ||
| 6 | | 6 | ||
| | | C | ||
|- | |- | ||
| 7 | | 7 | ||
| | | D | ||
|- | |- | ||
| 8 | | 8 | ||
| | | E | ||
|- | |- | ||
| 9 | |||
| F | |||
|- | |- | ||
| | | 10 | ||
| | | G | ||
|- | |- | ||
| | | 11 | ||
| | | H | ||
|- | |- | ||
| | | 12 | ||
| | | I | ||
|- | |- | ||
| 13 | |||
| J | |||
| 13 | |||
| | |||
|- | |- | ||
| 14 | | 14 | ||
| | | K | ||
|- | |- | ||
| 15 | | 15 | ||
| | | L | ||
|- | |- | ||
| 16 | | 16 | ||
| | | M | ||
|- | |- | ||
| 17 | | 17 | ||
| | | N | ||
|- | |- | ||
| 18 | | 18 | ||
| | | O | ||
|- | |- | ||
| 19 | | 19 | ||
| | | P | ||
|- | |- | ||
| 20 | | 20 | ||
| | | Q | ||
|- | |- | ||
| 21 | | 21 | ||
| | | R | ||
|- | |- | ||
| 22 | | 22 | ||
| | | S | ||
|- | |- | ||
| 23 | | 23 | ||
| | | T | ||
|- | |- | ||
| 24 | | 24 | ||
| | | U | ||
|- | |- | ||
| 25 | | 25 | ||
| | | V | ||
|- | |- | ||
| 26 | | 26 | ||
| | | W | ||
|- | |- | ||
| 27 | | 27 | ||
| | | X | ||
|- | |- | ||
| 28 | | 28 | ||
| | | Y | ||
|- | |- | ||
| 29 | | 29 | ||
| | | Z | ||
|- | |- | ||
| 30 | | 30 | ||
| | | D1 | ||
| | |- | ||
| 31 | |||
| D2 | |||
|- | |||
| 32 | |||
| D3 | |||
|- | |||
| 33 | |||
| D4 | |||
|- | |||
| 34 | |||
| D5 | |||
|- | |- | ||
| | | 35 | ||
| | | D6 | ||
|- | |- | ||
| | | 36 | ||
| | | D7 | ||
|- | |- | ||
| | | 37 | ||
| | | D8 | ||
|- | |- | ||
| | | 38 | ||
| | | D9 | ||
|- | |- | ||
| | | 39 | ||
| | | D0 | ||
|- | |- | ||
| | | 40 | ||
| | | Return | ||
|- | |- | ||
| | | 41 | ||
| | | Escape | ||
|- | |- | ||
| | | 42 | ||
| | | Backspace | ||
|- | |- | ||
| | | 43 | ||
| | | Tab | ||
|- | |- | ||
| | | 44 | ||
| | | Space | ||
|- | |- | ||
| | | 45 | ||
| Minus | |||
| | |||
|- | |- | ||
| | | 46 | ||
| | | Plus | ||
|- | |- | ||
| | | 47 | ||
| | | OpenBracket | ||
|- | |- | ||
| | | 48 | ||
| | | CloseBracket | ||
| | |- | ||
| | | 49 | ||
| Pipe | |||
|- | |||
| 50 | |||
| Tilde | |||
|- | |- | ||
| 51 | |||
| Semicolon | |||
|- | |- | ||
| | | 52 | ||
| | | Quote | ||
|- | |- | ||
| | | 53 | ||
| | | Backquote | ||
|- | |- | ||
| | | 54 | ||
| | | Comma | ||
|- | |- | ||
| | | 55 | ||
| | | Period | ||
|- | |- | ||
| | | 56 | ||
| | | Slash | ||
|- | |- | ||
| | | 57 | ||
| | | CapsLock | ||
|- | |- | ||
| | | 58 | ||
| | | F1 | ||
|- | |- | ||
| | | 59 | ||
| | | F2 | ||
|- | |- | ||
| | | 60 | ||
| | | F3 | ||
|- | |- | ||
| | | 61 | ||
| | | F4 | ||
|- | |- | ||
| | | 62 | ||
| | | F5 | ||
|- | |- | ||
| | | 63 | ||
| | | F6 | ||
|- | |- | ||
| | | 64 | ||
| | | F7 | ||
|- | |- | ||
| 65 | |||
| F8 | |||
|- | |- | ||
| | | 66 | ||
| | | F9 | ||
| | |- | ||
| 67 | |||
| F10 | |||
|- | |||
| 68 | |||
| F11 | |||
|- | |- | ||
| | | 69 | ||
| F12 | |||
|- | |- | ||
| | | 70 | ||
| PrintScreen | |||
|- | |- | ||
| | | 71 | ||
| ScrollLock | |||
|- | |- | ||
| | | 72 | ||
| Pause | |||
|- | |- | ||
| | | 73 | ||
| Insert | |||
|- | |- | ||
| | | 74 | ||
| Home | |||
|- | |- | ||
| | | 75 | ||
| PageUp | |||
|- | |- | ||
| | | 76 | ||
| Delete | |||
|- | |- | ||
| | | 77 | ||
| End | |||
|- | |- | ||
| | | 78 | ||
| PageDown | |||
|- | |- | ||
| | | 79 | ||
| RightArrow | |||
|- | |- | ||
| | | 80 | ||
| LeftArrow | |||
|- | |- | ||
| | | 81 | ||
| DownArrow | |||
|- | |- | ||
| | | 82 | ||
| UpArrow | |||
|- | |- | ||
| | | 83 | ||
| NumLock | |||
|- | |- | ||
| | | 84 | ||
| NumPadDivide | |||
|- | |- | ||
| | | 85 | ||
| NumPadMultiply | |||
|- | |- | ||
| | | 86 | ||
| | | NumPadSubtract | ||
|- | |||
| 87 | |||
| NumPadAdd | |||
|- | |||
| 88 | |||
| NumPadEnter | |||
|- | |||
| 89 | |||
| NumPad1 | |||
|- | |- | ||
| | | 90 | ||
| NumPad2 | |||
|- | |- | ||
| | | 91 | ||
| NumPad3 | |||
|- | |- | ||
| | | 92 | ||
| NumPad4 | |||
|- | |- | ||
| | | 93 | ||
| NumPad5 | |||
|- | |- | ||
| | | 94 | ||
| NumPad6 | |||
|- | |- | ||
| | | 95 | ||
| NumPad7 | |||
|- | |- | ||
| | | 96 | ||
| NumPad8 | |||
|- | |- | ||
| | | 97 | ||
| NumPad9 | |||
|- | |- | ||
| | | 98 | ||
| NumPad0 | |||
|- | |- | ||
| | | 99 | ||
| NumPadDot | |||
|- | |- | ||
| | | 100 | ||
| Backslash | |||
|- | |- | ||
| | | 101 | ||
| Application | |||
|- | |- | ||
| | | 102 | ||
| Power | |||
|- | |- | ||
| | | 103 | ||
| NumPadEquals | |||
|- | |- | ||
| | | 104 | ||
| F13 | |||
|- | |- | ||
| | | 105 | ||
| F14 | |||
|- | |- | ||
| | | 106 | ||
| F15 | |||
|- | |- | ||
| | | 107 | ||
| F16 | |||
| | |||
|- | |- | ||
| | | 108 | ||
| F17 | |||
|- | |- | ||
| | | 109 | ||
| F18 | |||
|- | |- | ||
| | | 110 | ||
| F19 | |||
|- | |- | ||
| | | 111 | ||
| F20 | |||
|- | |- | ||
| | | 112 | ||
| F21 | |||
|- | |- | ||
| | | 113 | ||
| F22 | |||
|- | |- | ||
| | | 114 | ||
| F23 | |||
|- | |- | ||
| | | 115 | ||
| F24 | |||
|- | |- | ||
| | | 133 | ||
| NumPadComma | |||
|- | |- | ||
| | | 135 | ||
| Ro | |||
|- | |- | ||
| | | 136 | ||
| KatakanaHiragana | |||
|- | |- | ||
| | | 137 | ||
| Yen | |||
|- | |- | ||
| | | 138 | ||
| Henkan | |||
|- | |- | ||
| | | 139 | ||
| Muhenkan | |||
|- | |- | ||
| | | 140 | ||
| NumPadCommaPc98 | |||
|- | |- | ||
| | | 144 | ||
| HangulEnglish | |||
|- | |- | ||
| | | 145 | ||
| Hanja | |||
|- | |- | ||
| | | 146 | ||
| Katakana | |||
|- | |- | ||
| | | 147 | ||
| Hiragana | |||
|- | |- | ||
| | | 148 | ||
| ZenkakuHankaku | |||
|- | |- | ||
| | | 224 | ||
| LeftControl | |||
|- | |- | ||
| | | 225 | ||
| LeftShift | |||
|- | |- | ||
| | | 226 | ||
| LeftAlt | |||
|- | |- | ||
| | | 227 | ||
| LeftGui | |||
|- | |- | ||
| | | 228 | ||
| RightControl | |||
|- | |- | ||
| | | 229 | ||
| RightShift | |||
|- | |- | ||
| | | 230 | ||
| RightAlt | |||
|- | |- | ||
| | | 231 | ||
| | | RightGui | ||
| | |} | ||
= KeyboardLockKeyEventSet = | |||
This is "nn::hid::system::KeyboardLockKeyEventSet". This is a BitFlagSet object for [[#KeyboardLockKeyEvent]]. | |||
= | = KeyboardLockKeyEvent = | ||
This is "nn::hid::system:: | This is "nn::hid::system::KeyboardLockKeyEvent". This is a 32-bit flag. | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! Bit | |||
! Description | |||
|- | |- | ||
| | | 0 | ||
| NumLockOn | |||
|- | |- | ||
| | | 1 | ||
| NumLockOff | |||
|- | |- | ||
| | | 2 | ||
| NumLockToggle | |||
|- | |- | ||
| | | 3 | ||
| CapsLockOn | |||
|- | |- | ||
| | | 4 | ||
| CapsLockOff | |||
|- | |- | ||
| | | 5 | ||
| CapsLockToggle | |||
|- | |- | ||
| | | 6 | ||
| ScrollLockOn | |||
|- | |- | ||
| | | 7 | ||
| ScrollLockOff | |||
|- | |- | ||
| | | 8 | ||
| ScrollLockToggle | |||
|} | |||
= 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 | |||
! Description | |||
|- | |- | ||
| | | 0 | ||
| A | |||
|- | |- | ||
| | | 1 | ||
| B | |||
|- | |- | ||
| | | 2 | ||
| X | |||
|- | |- | ||
| | | 3 | ||
| Y | |||
|- | |- | ||
| | | 4 | ||
| StickL | |||
|- | |- | ||
| | | 5 | ||
| StickR | |||
|- | |- | ||
| | | 6 | ||
| L | |||
|- | |- | ||
| | | 7 | ||
| R | |||
|- | |- | ||
| | | 8 | ||
| ZL | |||
|- | |- | ||
| | | 9 | ||
| ZR | |||
|- | |- | ||
| | | 10 | ||
| Plus | |||
|- | |- | ||
| | | 11 | ||
| Minus | |||
|- | |- | ||
| | | 12 | ||
| Left | |||
|- | |- | ||
| | | 13 | ||
| Up | |||
|- | |- | ||
| | | 14 | ||
| Right | |||
|- | |- | ||
| | | 15 | ||
| Down | |||
|- | |- | ||
| | | 16 | ||
| StickLLeft | |||
|- | |- | ||
| | | 17 | ||
| StickLUp | |||
|- | |- | ||
| | | 18 | ||
| StickLRight | |||
|- | |- | ||
| | | 19 | ||
| StickLDown | |||
|- | |- | ||
| | | 20 | ||
| StickRLeft | |||
|- | |- | ||
| | | 21 | ||
| StickRUp | |||
|- | |- | ||
| | | 22 | ||
| StickRRight | |||
|- | |- | ||
| | | 23 | ||
| StickRDown | |||
|- | |- | ||
| | | 24 | ||
| LeftSL | |||
|- | |||
| 25 | |||
| LeftSR | |||
|- | |- | ||
| | | 26 | ||
| RightSL | |||
|- | |- | ||
| | | 27 | ||
| RightSR | |||
|- | |- | ||
| | | 28 | ||
| Palma | |||
|- | |- | ||
| | | 29 | ||
| | |||
|- | |- | ||
| | | 30 | ||
| HandheldLeftB (Left B button on NES controllers in Handheld mode) | |||
|} | |} | ||
= | = AnalogStickCalibrationFlagsSet = | ||
This is "nn::hid:: | 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" | ||
! | ! Bits | ||
! Description | ! Description | ||
! Notes | |||
|- | |- | ||
| 0 || | | 0 | ||
| NpadStyleFullKey | |||
| Pro Controller | |||
|- | |- | ||
| 1 || | | 1 | ||
| NpadStyleHandheld | |||
| Joy-Con controller in handheld mode | |||
|- | |- | ||
| 2 || | | 2 | ||
| NpadStyleJoyDual | |||
| Joy-Con controller in dual mode | |||
|- | |- | ||
| 3 || | | 3 | ||
| NpadStyleJoyLeft | |||
| Joy-Con left controller in single mode | |||
|- | |- | ||
| 4 | | 4 | ||
| | | NpadStyleJoyRight | ||
| Joy-Con right controller in single mode | |||
|- | |- | ||
| | | 5 | ||
| NpadStyleGc | |||
| GameCube controller | |||
|- | |- | ||
| | | 6 | ||
| NpadStylePalma | |||
| Poké Ball Plus controller | |||
|- | |- | ||
| | | 7 | ||
| NpadStyleLark | |||
| NES/Famicom controller | |||
|- | |- | ||
| | | 8 | ||
| NpadStyleHandheldLark | |||
| NES/Famicom controller in handheld mode | |||
|- | |- | ||
| | | 9 | ||
| NpadStyleLucia | |||
| SNES controller | |||
|- | |- | ||
| | | 10-28 | ||
| Reserved | |||
| | |||
|- | |- | ||
| | | 29 | ||
| NpadStyleSystemExt | |||
| Generic external controller | |||
|- | |- | ||
| | | 30 | ||
| NpadStyleSystem | |||
| Generic controller | |||
|- | |- | ||
| | | 31 | ||
| | | Reserved | ||
| | | | ||
|} | |} | ||
= | = NpadDeviceTypeSet = | ||
This is "nn:: | This is "nn::hid::system::NpadDeviceType". This is a BitFlagSet object for [[#NpadDeviceType]]. | ||
= | = NpadSystemPropertiesSet = | ||
This is "nn::hid:: | 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" | {| class="wikitable" border="1" | ||
! | |- | ||
! | ! Bit | ||
! Description | |||
|- | |- | ||
| 0 | | 0 | ||
| | | IsChargingJoyDual | ||
|- | |- | ||
| 1 | | 1 | ||
| | | IsChargingJoyLeft | ||
|- | |- | ||
| 2 | | 2 | ||
| | | IsChargingJoyRight | ||
|- | |- | ||
| 3 | | 3 | ||
| | | IsPoweredJoyDual | ||
|- | |- | ||
| 4 | | 4 | ||
| | | IsPoweredJoyLeft | ||
|- | |- | ||
| 5 | | 5 | ||
| | | IsPoweredJoyRight | ||
|- | |- | ||
| 9 | | 9 | ||
| | | IsUnsuportedButtonPressedOnNpadSystem | ||
|- | |- | ||
| 10 | | 10 | ||
| | | IsUnsuportedButtonPressedOnNpadSystemExt | ||
|- | |- | ||
| 11 | | 11 | ||
| | | IsAbxyButtonOriented | ||
|- | |- | ||
| 12 | | 12 | ||
| | | IsSlSrButtonOriented | ||
|- | |- | ||
| 13 | | 13 | ||
| | | [4.0.0+] IsPlusAvailable | ||
|- | |- | ||
| 14 | | 14 | ||
| | | [4.0.0+] IsMinusAvailable | ||
|- | |- | ||
| 15 | | 15 | ||
| | | [8.0.0+] IsDirectionalButtonsAvailable | ||
|} | |} | ||
= | = NpadSystemButtonPropertiesSet = | ||
This is "nn::hid::detail:: | 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" | {| class="wikitable" border="1" | ||
|- | |- | ||
! Bit | |||
! Description | |||
|- | |- | ||
| | | 0 | ||
| | | IsUnintendedHomeButtonInputProtectionEnabled | ||
|} | |||
= 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 | ||
| | |||
|- | |- | ||
| | | 1 || FullKeyController | ||
| | |||
|- | |- | ||
| | | 2 || RightController | ||
| | |||
|- | |- | ||
| | | 3 || LeftController | ||
| | |||
|- | |- | ||
| | | 4 || DebugPadController | ||
| | |||
| | |||
|} | |} | ||
= UniquePadInterface = | |||
This is "nn::hid::system::UniquePadInterface". | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Value | ! Value | ||
! Description | ! Description | ||
|- | |- | ||
| | | 0 || Embedded | ||
|- | |- | ||
| | | 1 || Rail | ||
|- | |- | ||
| | | 2 || Bluetooth | ||
|- | |- | ||
| | | 3 || Usb | ||
|} | |||
= 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 | ||
|- | |- | ||
| | | 1 || ReleaseFromBottom | ||
|- | |- | ||
| | | 2 || ReleaseFromLeft | ||
|- | |- | ||
| | | 3 || ReleaseFromTop | ||
|- | |- | ||
| | | 4 || Rotate | ||
|- | |- | ||
| | | 5 || Update | ||
|- | |- | ||
| | | 6 || Completed | ||
|- | |- | ||
| | | 7 || Clear | ||
|- | |- | ||
| | | 8 || ClearCompleted | ||
|} | |} | ||
= | = SixAxisSensorUserCalibrationStage = | ||
This is "nn::hid::system:: | This is "nn::hid::system::SixAxisSensorUserCalibrationStage". | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Value | |||
! Description | |||
|- | |- | ||
| 0 || Measuring | |||
|- | |- | ||
| | | 1 || Update | ||
| | |||
| | |||
|- | |- | ||
| | | 2 || Completed | ||
| | |||
| | |||
|} | |} | ||
= | = NpadJoyHoldType = | ||
This is "nn::hid:: | This is "nn::hid::NpadJoyHoldType". | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Value | |||
! Description | |||
|- | |- | ||
| 0 || Vertical | |||
|- | |- | ||
| | | 1 || Horizontal | ||
|} | |} | ||
= | = NpadJoyDeviceType = | ||
This is "nn::hid:: | This is "nn::hid::NpadJoyDeviceType". | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Value | |||
! Description | |||
|- | |- | ||
| 0 || Left | |||
|- | |- | ||
| | | 1 || Right | ||
|} | |} | ||
= | = NpadHandheldActivationMode = | ||
This is "nn::hid:: | 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" | {| class="wikitable" border="1" | ||
! Value | |||
! Description | |||
|- | |- | ||
| 0 || Dual | |||
|- | |- | ||
| | | 1 || Single | ||
|- | |- | ||
| | | 2 || None | ||
|} | |} | ||
= | = NpadJoyAssignmentMode = | ||
This is "nn::hid:: | This is "nn::hid::NpadJoyAssignmentMode". | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Value | |||
! Description | |||
|- | |- | ||
| 0 || Dual | |||
|- | |- | ||
| | | 1 || Single | ||
|} | |} | ||
= | = NpadCommunicationMode = | ||
This is "nn::hid:: | This is "nn::hid::NpadCommunicationMode". | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 6,866: | Line 6,953: | ||
! Description | ! Description | ||
|- | |- | ||
| 0 || | | 0 || 5ms | ||
|- | |||
| 1 || 10ms | |||
|- | |- | ||
| | | 2 || 15ms | ||
|- | |- | ||
| | | 3 || Default | ||
|} | |} | ||
= | = AppletDetailedUiType = | ||
This is "nn::hid:: | This is "nn::hid::system::AppletDetailedUiType". | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 6,880: | Line 6,969: | ||
! Description | ! Description | ||
|- | |- | ||
| | | 0x00000000 || None | ||
|- | |||
| 0x01000000 || HandheldNone | |||
|- | |- | ||
| | | 0x02000000 || HandheldJoyConLeftOnly | ||
|- | |- | ||
| | | 0x02000001 || HandheldLarkHvc1Only | ||
|- | |- | ||
| 0x02000002 || HandheldLarkNesLeftOnly | |||
|- | |- | ||
| | | 0x03000000 || HandheldJoyConRightOnly | ||
| | |- | ||
| | | 0x03000001 || HandheldLarkHvc2Only | ||
|- | |- | ||
| | | 0x03000002 || HandheldLarkNesRightOnly | ||
| | |||
| | |||
|- | |- | ||
| | | 0x04000000 || HandheldJoyConLeftJoyConRight | ||
| | |||
| | |||
|- | |- | ||
| | | 0x04000001 || HandheldJoyConLeftLarkHvc2 | ||
| | |||
| | |||
|- | |- | ||
| | | 0x04000002 || HandheldJoyConLeftLarkNesRight | ||
|- | |- | ||
| | | 0x04000003 || HandheldLarkHvc1JoyConRight | ||
|- | |- | ||
| | | 0x04000004 || HandheldLarkHvc1LarkHvc2 | ||
|- | |- | ||
| | | 0x04000005 || HandheldLarkHvc1LarkNesRight | ||
|- | |- | ||
| | | 0x04000006 || HandheldLarkNesLeftJoyConRight | ||
|- | |- | ||
| | | 0x04000007 || HandheldLarkNesLeftLarkHvc2 | ||
|- | |- | ||
| | | 0x04000008 || HandheldLarkNesLeftLarkNesRight | ||
|- | |- | ||
| | | 0x05000000 || JoyDual | ||
| | |- | ||
| 0x06000000 || JoyDualLeftOnly | |||
|- | |||
| 0x07000000 || JoyDualRightOnly | |||
|- | |||
| 0x08000000 || JoyLeftHorizontal | |||
|- | |||
| 0x09000000 || JoyLeftVertical | |||
|- | |- | ||
| 0x0A000000 || JoyRightHorizontal | |||
|- | |- | ||
| | | 0x0B000000 || JoyRightVertical | ||
|- | |- | ||
| | | 0x0C000000 || SwitchProController | ||
|- | |- | ||
| | | 0x0D000000 || CompatibleProController | ||
|- | |- | ||
| 0x0E000000 || CompatibleJoyCon | |||
|- | |- | ||
| | | 0x0F000000 || LarkHvc1 | ||
|- | |- | ||
| | | 0x10000000 || LarkHvc2 | ||
|- | |- | ||
| | | 0x11000000 || LarkNesLeft | ||
|- | |- | ||
| | | 0x12000000 || LarkNesRight | ||
|- | |- | ||
| | | 0x13000000 || LuciaU | ||
|- | |- | ||
| | | 0x13000001 || LuciaJ | ||
|- | |- | ||
| | | 0x13000002 || LuciaE | ||
|- | |- | ||
| | | 0x14000000 || Verification | ||
|- | |- | ||
| | | 0xFFFFFFFF || Unknown | ||
|} | |} | ||
= AppletFooterUiType = | |||
This is "nn::hid::system::AppletFooterUiType". | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! | ! Value | ||
! Description | ! Description | ||
|- | |- | ||
| 0 || | | 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 | ||
|- | |- | ||
| | | 17 || LarkNesLeft | ||
|- | |- | ||
| | | 18 || LarkNesRight | ||
|- | |- | ||
| | | 19 || Lucia | ||
|- | |- | ||
| 20 || Verification | |||
|} | |} | ||
= NpadIdType = | |||
This is "nn::hid::NpadIdType". This is the controller index used in [[#SharedMemoryFormat|sharedmem]]. | |||
This is "nn::hid:: | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Value | |||
! Description | |||
|- | |- | ||
| 0x0 || No1 | |||
|- | |||
| 0x1 || No2 | |||
|- | |||
| 0x2 || No3 | |||
|- | |||
| 0x3 || No4 | |||
|- | |||
| 0x4 || No5 | |||
|- | |||
| 0x5 || No6 | |||
|- | |- | ||
| | | 0x6 || No7 | ||
| | |||
| | |||
|- | |- | ||
| | | 0x7 || No8 | ||
| | |||
| | |||
|- | |- | ||
| | | 0x10 || Other | ||
| | |||
| | |||
|- | |- | ||
| | | 0x20 || Handheld | ||
| | |||
| | |||
|} | |} | ||
= | = NpadInterfaceType = | ||
This is "nn::hid:: | This is "nn::hid::NpadInterfaceType". | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Value | |||
! Description | |||
|- | |- | ||
| 1 || Bluetooth | |||
|- | |- | ||
| | | 2 || Rail | ||
| | |||
| | |||
|- | |- | ||
| | | 3 || USB | ||
| | |||
| | |||
|- | |- | ||
| | | 4 || Unknown | ||
| | |} | ||
| | |||
= NpadLarkType = | |||
This is "nn::hid::NpadLarkType". | |||
{| class="wikitable" border="1" | |||
! Value | |||
! Description | |||
|- | |- | ||
| | | 0 || Invalid | ||
| | |||
| | |||
|- | |- | ||
| | | 1 || H1 | ||
| | |||
| | |||
|- | |- | ||
| | | 2 || H2 | ||
| | |||
| | |||
|- | |- | ||
| | | 3 || NL | ||
| | |||
| | |||
|- | |- | ||
| | | 4 || NR | ||
| | |||
| | |||
|} | |} | ||
= | = NpadLuciaType = | ||
This is "nn::hid:: | This is "nn::hid::NpadLuciaType". | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Value | |||
! Description | |||
|- | |- | ||
| 0 || Invalid | |||
|- | |||
| 1 || J | |||
|- | |- | ||
| | | 2 || E | ||
| | |||
| | |||
|- | |- | ||
| | | 3 || U | ||
| | |||
| | |||
|} | |} | ||
= | = GestureDirection = | ||
This is "nn::hid:: | This is "nn::hid::GestureDirection". | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Value | |||
! Description | |||
|- | |||
| 0 || None | |||
|- | |- | ||
| 1 || Left | |||
|- | |- | ||
| | | 2 || Up | ||
|- | |- | ||
| 0x4 || 0x4 || Padding | | 3 || Right | ||
|- | |- | ||
| 0x8 || 0x200(0x20*0x10) || Array of [[#HdlsNpadAssignmentEntry]]. | | 4 || Down | ||
|} | |} | ||
= HdlsNpadAssignmentEntry = | = GestureType = | ||
This is a 0x20-byte struct. | This is "nn::hid::GestureType". | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | ! Value | ||
! Offset || Size || Description | ! Description | ||
|- | |- | ||
| 0x0 || 0x8 || [[#HdlsHandle]] | | 0 || Idle | ||
|- | |- | ||
| 0x8 || 0x4 || ? | | 1 || Complete | ||
|- | |- | ||
| 0xC || 0x4 || ? | | 2 || Cancel | ||
|- | |- | ||
| 0x10 || 0x8 || ? | | 3 || Touch | ||
|- | |- | ||
| 0x18 || 0x1 || ? | | 4 || Press | ||
|- | |- | ||
| 0x19 || 0x7 || Padding | | 5 || Tap | ||
|} | |- | ||
| 6 || Pan | |||
= HdlsStateList = | |- | ||
This is a 0x408-byte struct. | | 7 || Swipe | ||
|- | |||
[9.0.0+] This is a 0x488-byte struct. | | 8 || Pinch | ||
|- | |||
{| class="wikitable" border="1" | | 9 || Rotate | ||
|- | |} | ||
! Offset || Size || Description | |||
|- | = DeviceHandle = | ||
| 0x0 || 0x4 || s32 Total entries | This is "nn::xcd::DeviceHandle". This is a 8 byte value. | ||
|- | |||
| 0x4 || 0x4 || Padding | = DeviceType = | ||
|- | This is "nn::hid::system::DeviceType". | ||
| 0x8 || <[[#HdlsStateListEntry]] size>*0x10 || Array of [[#HdlsStateListEntry]]. | |||
|} | {| class="wikitable" border="1" | ||
! Bits | |||
This contains a list of all controllers, including non-virtual controllers. | ! Description | ||
|- | |||
= HdlsStateListEntry = | | 0 | ||
This is a 0x40-byte struct. | | FullKey | ||
|- | |||
[9.0.0+] This is a 0x48-byte struct. | | 1 | ||
| DebugPad | |||
{| class="wikitable" border="1" | |- | ||
|- | | 2 | ||
! Offset || Size || Description | | HandheldLeft | ||
|- | |- | ||
| 0x0 || 0x8 || [[#HdlsHandle]] | | 3 | ||
|- | | HandheldRight | ||
| 0x8 || [[#HdlsDeviceInfo]] size || [[#HdlsDeviceInfo]]. With [[#ApplyHdlsStateList]] this is only used when creating new devices. | |- | ||
|- | | 4 | ||
| 0x8 + [[#HdlsDeviceInfo]] size, with 8-byte alignment || 0x24 || [[#HdlsState]] | | JoyLeft | ||
|- | |- | ||
| <Immediately following the above> || 0x4 || Padding | | 5 | ||
|} | | JoyRight | ||
|- | |||
= HdlsDeviceInfo = | | 6 | ||
This is a 0x10-byte struct. | | Palma | ||
|- | |||
{| class="wikitable" border="1" | | 7 | ||
|- | | LarkHvcLeft | ||
! Offset || Size || Description | |- | ||
|- | | 8 | ||
| 0x0 || 0x4 || [[#DeviceTypeInternal]] | | LarkHvcRight | ||
|- | |- | ||
| 0x4 || 0x4 || RGBA Single Body Color | | 9 | ||
|- | | LarkNesLeft | ||
| 0x8 || 0x4 || RGBA Single Buttons Color | |- | ||
|- | | 10 | ||
| 0xC || 0x1 || [[#NpadInterfaceType]]. Additional type field used with the above type field, if the value doesn't match one of the following a default is used. Type Pro-Controller: value 0x3 indicates that the controller is connected via USB. Type bit21: value 0x3 = unknown. When value is 0x2, state is merged with an existing controller (when the type value is compatible with this). Otherwise, it's a dedicated controller. | | LarkNesRight | ||
|- | |- | ||
| 0xD || 0x3 || Padding | | 11 | ||
|} | | HandheldLarkHvcLeft | ||
|- | |||
[9.0.0+] This is a 0x14-byte struct. | | 12 | ||
| HandheldLarkHvcRight | |||
{| class="wikitable" border="1" | |- | ||
|- | | 13 | ||
! Offset || Size || Description | | HandheldLarkNesLeft | ||
|- | |- | ||
| 0x0 || 0x1 || [[#DeviceTypeInternal]] | | 14 | ||
|- | | HandheldLarkNesRight | ||
| 0x1 || 0x1 || [[#NpadInterfaceType]]. Similar to the field from the old struct. | |- | ||
| 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 | |||
|- | |||
| 0xC || 0x4 || RGBA Single Buttons Color | |||
|- | |||
| 0x10 || 0x1 || See [[#HiddbgHdlsDeviceInfo]]::[[#NpadInterfaceType]]. | |||
|- | |||
| 0x11 || 0x3 || Padding | |||
|- | |||
| 0x14 || 0x24 || [[#HdlsState]]. Unknown if the last 4-bytes are included in this struct, [[#SetAutoPilotVirtualPadState]]/[[#hiddbgGetAbstractedPadsState]] only uses the first 0x20-bytes. | |||
|- | |||
| 0x38 || 0x60 || Unused with [[#SetAutoPilotVirtualPadState]]/[[#GetAbstractedPadsState]]. | |||
|} | |||
Normally the input state is merged with an existing controller selected by Type. However in some cases (BIT(2-5) with type2!=0x2 and BIT(31)) it's detected as a dedicated controller. | |||
Type: | |||
{| class="wikitable" border="1" | |||
! Bits | |||
! [[#HdlsDeviceInfo]]::type bits | |||
! Description | |||
! Notes | |||
|- | |||
| 0 || 0 || || | |||
|- | |||
| 1 || 15 || || [[#DeviceType]] |= BIT(1) | |||
|- | |||
| 2 || 1 || || | |||
|- | |||
| 3 || 2 || || | |||
|- | |||
| 4 || 1 || || | |||
|- | |||
| 5 || 2 || || | |||
|- | |||
| 6 || 3 || || | |||
|- | |||
| 7 || 11 || || [[#DeviceType]] |= BIT(11) | |||
|- | |||
| 8 || 12 || || [[#DeviceType]] |= BIT(12) | |||
|- | |||
| 9 || 13 || || [[#DeviceType]] |= BIT(13) | |||
|- | |||
| 10 || 14 || || [[#DeviceType]] |= BIT(14) | |||
|- | |||
| 11 || 15 || || [[#DeviceType]] |= BIT(11) | |||
|- | |||
| 12 || 12 || || [[#DeviceType]] |= BIT(12) | |||
|- | |||
| 13 || 13 || || [[#DeviceType]] |= BIT(13) | |||
|- | |||
| 14 || 14 || || [[#DeviceType]] |= BIT(14) | |||
|- | |||
| 15 || 17 || || | |||
|- | |||
| 31 || 21 || || [[#DeviceType]] = BIT(31) | |||
|- | |||
|} | |||
The above "[[#DeviceType]] |=" notes only apply when type2 is 0x2. | |||
= DebugPadAutoPilotState = | |||
This is "nn::hid::debug::DebugPadAutoPilotState" | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset | |||
! Size | |||
! Description | |||
|- | |||
| 0x0 | |||
| 0x4 | |||
| [[#DebugPadAttributeSet|Attributes]] | |||
|- | |||
| 0x4 | |||
| 0x4 | |||
| [[#DebugPadButtonSet|Buttons]] | |||
|- | |||
| 0x8 | |||
| 0x8 | |||
| [[#AnalogStickState|AnalogStickL]] | |||
|- | |||
| 0x10 | |||
| 0x8 | |||
| [[#AnalogStickState|AnalogStickR]] | |||
|} | |||
= MouseAutoPilotState = | |||
This is "nn::hid::debug::MouseAutoPilotState". | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset | |||
! Size | |||
! Description | |||
|- | |||
| 0x0 | |||
| 0x4 | |||
| X | |||
|- | |||
| 0x4 | |||
| 0x4 | |||
| Y | |||
|- | |||
| 0x8 | |||
| 0x4 | |||
| DeltaX | |||
|- | |||
| 0xC | |||
| 0x4 | |||
| DeltaY | |||
|- | |||
| 0x10 | |||
| 0x4 | |||
| WheelDelta | |||
|- | |||
| 0x14 | |||
| 0x4 | |||
| [[#MouseButtonSet|Buttons]] | |||
|- | |||
| 0x18 | |||
| 0x4 | |||
| [[#MouseAttributeSet|Attributes]] | |||
|} | |||
= KeyboardAutoPilotState = | |||
This is "nn::hid::debug::KeyboardAutoPilotState". | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset | |||
! Size | |||
! Description | |||
|- | |||
| 0x0 | |||
| 0x8 | |||
| [[#KeyboardModifierSet|Modifiers]] | |||
|- | |||
| 0x8 | |||
| 0x20 | |||
| [[#KeyboardKeySet|Keys]] | |||
|} | |||
= SleepButtonAutoPilotState = | |||
This is "nn::hid::debug::SleepButtonAutoPilotState". This is a 0x8-byte struct with 8-byte alignment. | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset | |||
! Size | |||
! Description | |||
|- | |||
| 0x0 || 0x8 || Buttons (only bit0 is used) | |||
|} | |||
= PowerInfo = | |||
This is "nn::hidtypes::PowerInfo". | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset | |||
! Size | |||
! Description | |||
|- | |||
| 0x0 || 0x4 || BatteryLevel | |||
|- | |||
| 0x4 || 0x4 || [[#PowerAttribute]] | |||
|} | |||
= PowerAttribute = | |||
This is "nn::hidtypes::PowerAttribute". This is a 32-bit flag. | |||
{| class="wikitable" border="1" | |||
! Bits | |||
! Description | |||
|- | |||
| 0 | |||
| IsPowered | |||
|- | |||
| 1 | |||
| IsCharging | |||
|} | |||
= HdlsAttribute = | |||
This is "nn::hidtypes::HdlsAttribute". This is a 32-bit flag. | |||
{| class="wikitable" border="1" | |||
! Bits | |||
! Description | |||
|- | |||
| 0 | |||
| HasVirtualSixAxisSensorAcceleration | |||
|- | |||
| 1 | |||
| HasVirtualSixAxisSensorAngle | |||
|} | |||
= HdlsHandle = | |||
This is "nn::hid::debug::HdlsHandle". This is a 0x8-byte struct with 8-byte alignment. | |||
= HdlsNpadAssignment = | |||
This is a 0x208-byte struct. | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset || Size || Description | |||
|- | |||
| 0x0 || 0x4 || s32 Total entries | |||
|- | |||
| 0x4 || 0x4 || Padding | |||
|- | |||
| 0x8 || 0x200(0x20*0x10) || Array of [[#HdlsNpadAssignmentEntry]]. | |||
|} | |||
= HdlsNpadAssignmentEntry = | |||
This is a 0x20-byte struct. | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset || Size || Description | |||
|- | |||
| 0x0 || 0x8 || [[#HdlsHandle]] | |||
|- | |||
| 0x8 || 0x4 || ? | |||
|- | |||
| 0xC || 0x4 || ? | |||
|- | |||
| 0x10 || 0x8 || ? | |||
|- | |||
| 0x18 || 0x1 || ? | |||
|- | |||
| 0x19 || 0x7 || Padding | |||
|} | |||
= HdlsStateList = | |||
This is a 0x408-byte struct. | |||
[9.0.0+] This is a 0x488-byte struct. | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset || Size || Description | |||
|- | |||
| 0x0 || 0x4 || s32 Total entries | |||
|- | |||
| 0x4 || 0x4 || Padding | |||
|- | |||
| 0x8 || <[[#HdlsStateListEntry]] size>*0x10 || Array of [[#HdlsStateListEntry]]. | |||
|} | |||
This contains a list of all controllers, including non-virtual controllers. | |||
= HdlsStateListEntry = | |||
This is a 0x40-byte struct. | |||
[9.0.0+] This is a 0x48-byte struct. | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset || Size || Description | |||
|- | |||
| 0x0 || 0x8 || [[#HdlsHandle]] | |||
|- | |||
| 0x8 || [[#HdlsDeviceInfo]] size || [[#HdlsDeviceInfo]]. With [[#ApplyHdlsStateList]] this is only used when creating new devices. | |||
|- | |||
| 0x8 + [[#HdlsDeviceInfo]] size, with 8-byte alignment || 0x24 || [[#HdlsState]] | |||
|- | |||
| <Immediately following the above> || 0x4 || Padding | |||
|} | |||
= HdlsDeviceInfo = | |||
This is "nn::hid::debug::HdlsDeviceInfo". This is a 0x10-byte struct. | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset || Size || Description | |||
|- | |||
| 0x0 || 0x4 || [[#DeviceTypeInternal]] | |||
|- | |||
| 0x4 || 0x4 || RGBA Single Body Color | |||
|- | |||
| 0x8 || 0x4 || RGBA Single Buttons Color | |||
|- | |||
| 0xC || 0x1 || [[#NpadInterfaceType]]. Additional type field used with the above type field, if the value doesn't match one of the following a default is used. Type Pro-Controller: value 0x3 indicates that the controller is connected via USB. Type bit21: value 0x3 = unknown. When value is 0x2, state is merged with an existing controller (when the type value is compatible with this). Otherwise, it's a dedicated controller. | |||
|- | |||
| 0xD || 0x3 || Padding | |||
|} | |||
[9.0.0+] This is a 0x14-byte struct. | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset || Size || Description | |||
|- | |||
| 0x0 || 0x1 || [[#DeviceTypeInternal]] | |||
|- | |||
| 0x1 || 0x1 || [[#NpadInterfaceType]]. Similar to the field from the old struct. | |||
|- | |- | ||
| 0x2 || 0x2 || Padding | | 0x2 || 0x2 || Padding | ||
Line 7,250: | Line 8,006: | ||
= HdlsState = | = HdlsState = | ||
This is a 0x24-byte struct. | This is "nn::hid::debug::HdlsState". This is a 0x24-byte struct. | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 7,268: | Line 8,024: | ||
| 0x10 || 0x10(4*2*2) || Joystick data. | | 0x10 || 0x10(4*2*2) || Joystick data. | ||
|- | |- | ||
| 0x20 || 0x1 || Unused for input. Set with output from [[#DumpHdlsStates]] (zero in some cases). | | 0x20 || 0x1 || Indicator. Unused for input. Set with output from [[#DumpHdlsStates]] (zero in some cases). | ||
|- | |- | ||
| 0x21 || 0x3 || Padding | | 0x21 || 0x3 || Padding | ||
|} | |} | ||
[9.0.0+]: | [9.0.0+] (0x28-bytes): | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! Offset || Size || Description | ! Offset || Size || Description | ||
|- | |- | ||
| 0x0 || | | 0x0 || 0x8 || [[#PowerInfo]] | ||
|- | |- | ||
| | | 0x8 || 0x8 || [[#NpadButton|Buttons]], masked with 0xfffffffff00fffff. See above table regarding HOME/Capture buttons. | ||
|- | |||
| 0x10 || 0x10(4*2*2) || Joystick data. | |||
|- | |||
| 0x20 || 0x1 || Indicator. Unused for input. Set with output from [[#DumpHdlsStates]] (zero in some cases). | |||
|- | |||
| 0x21 || 0x7 || Padding | |||
|} | |||
[12.0.0+] (0x40-bytes): | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset || Size || Description | |||
|- | |||
| 0x0 || 0x8 || [[#PowerInfo]] | |||
|- | |- | ||
| 0x8 || 0x8 || [[#NpadButton|Buttons]], masked with 0xfffffffff00fffff. See above table regarding HOME/Capture buttons. | | 0x8 || 0x8 || [[#NpadButton|Buttons]], masked with 0xfffffffff00fffff. See above table regarding HOME/Capture buttons. | ||
Line 7,286: | Line 8,056: | ||
| 0x10 || 0x10(4*2*2) || Joystick data. | | 0x10 || 0x10(4*2*2) || Joystick data. | ||
|- | |- | ||
| 0x20 || | | 0x20 || 0xC || VirtualSixAxisSensorAcceleration | ||
|- | |- | ||
| | | 0x2C || 0xC || VirtualSixAxisSensorAngle | ||
|- | |||
| 0x38 || 0x4 || [[#HdlsAttribute]] | |||
|- | |||
| 0x3C || 0x1 || Indicator. Unused for input. | |||
|- | |||
| 0x3D || 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,672: | Line 8,454: | ||
| 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 = | ||
Line 8,320: | Line 9,107: | ||
| 1 || RightJoyRail | | 1 || RightJoyRail | ||
|- | |- | ||
| 2 || [6.0.0+] | | 2 || [6.0.0+] InternalBus (for Lark microphone) | ||
|} | |} | ||
Line 8,338: | Line 9,125: | ||
Other values causes [[#EnableJoyPollingReceiveMode]] to assert. | Other values causes [[#EnableJoyPollingReceiveMode]] to assert. | ||
= StatusManagerType = | |||
This is "nn::hidbus::detail::StatusManagerType". | |||
{| class="wikitable" border="1" | |||
! Value | |||
! Description | |||
|- | |||
| 0 || None | |||
|- | |||
| 1 || 16 | |||
|- | |||
| 2 || 32 | |||
|} | |||
= ExternalDevices = | = ExternalDevices = |