HID services: Difference between revisions
No edit summary |
|||
(29 intermediate revisions by 2 users not shown) | |||
Line 79: | Line 79: | ||
|- | |- | ||
| 83 || [6.0.0+] [[#IsFirmwareUpdateAvailableForSixAxisSensor]] | | 83 || [6.0.0+] [[#IsFirmwareUpdateAvailableForSixAxisSensor]] | ||
|- | |||
| 84 || [13.0.0+] EnableSixAxisSensorUnalteredPassthrough | |||
|- | |||
| 85 || [13.0.0+] IsSixAxisSensorUnalteredPassthroughEnabled | |||
|- | |||
| 86 || [13.0.0+] StoreSixAxisSensorCalibrationParameter | |||
|- | |||
| 87 || [13.0.0+] LoadSixAxisSensorCalibrationParameter | |||
|- | |||
| 88 || [13.0.0+] GetSixAxisSensorIcInformation | |||
|- | |||
| 89 || [13.0.0+] ResetIsSixAxisSensorDeviceNewlyAssigned | |||
|- | |- | ||
| 91 || [[#ActivateGesture]] | | 91 || [[#ActivateGesture]] | ||
Line 157: | Line 169: | ||
|- | |- | ||
| 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 598: | ||
== 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 725: | Line 746: | ||
== 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]] should be used before this. | ||
Line 736: | Line 763: | ||
== 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 749: | Line 782: | ||
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 760: | Line 799: | ||
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 == | ||
Line 765: | Line 806: | ||
sdknso exposes the u64 as an u16. | sdknso exposes the u64 as an u16. | ||
See [[#hidGetPalmaOperationInfo]]. | |||
== WritePalmaWaveEntry == | == WritePalmaWaveEntry == | ||
Line 772: | Line 815: | ||
Note that the sysmodule will not properly close the TransferMemory handle if the [[#PalmaConnectionHandle]] is invalid. | 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 789: | Line 840: | ||
== 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 822: | Line 877: | ||
Takes a PID, an [[AM_services|AppletResourceUserId]], a s64 [[#NpadCommunicationMode]], no output. | Takes a PID, an [[AM_services|AppletResourceUserId]], a s64 [[#NpadCommunicationMode]], no output. | ||
Stubbed, just returns 0. | [2.0.0+] Stubbed, just returns 0. | ||
== GetNpadCommunicationMode == | == GetNpadCommunicationMode == | ||
Line 829: | Line 884: | ||
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. | ||
Stubbed, just returns hard-coded output mode=3. | [2.0.0+] Stubbed, just returns hard-coded output mode=3. | ||
== SetTouchScreenConfiguration == | == SetTouchScreenConfiguration == | ||
Line 886: | Line 941: | ||
|- | |- | ||
| 13 || [9.0.0+] GetTouchScreenConfiguration | | 13 || [9.0.0+] GetTouchScreenConfiguration | ||
|- | |||
| 14 || [11.0.0+] ProcessTouchScreenAutoTune | |||
|- | |||
| 15 || [13.0.0+] ForceStopTouchScreenManagement | |||
|- | |||
| 16 || [13.0.0+] ForceRestartTouchScreenManagement | |||
|- | |||
| 17 || [13.0.0+] IsTouchScreenManaged | |||
|- | |- | ||
| 20 || [[#DeactivateMouse]] | | 20 || [[#DeactivateMouse]] | ||
Line 921: | Line 984: | ||
| 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,046: | Line 1,109: | ||
|- | |- | ||
| 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,077: | Line 1,150: | ||
| 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,086: | Line 1,159: | ||
|- | |- | ||
| 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,098: | Line 1,173: | ||
|- | |- | ||
| 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,151: | Line 1,232: | ||
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,257: | Line 1,347: | ||
== AttachHdlsWorkBuffer == | == AttachHdlsWorkBuffer == | ||
Takes an input TransferMemory handle and an u64 for the TransferMemory size, no output. | Takes an input TransferMemory handle and an u64 for the TransferMemory size, no output. | ||
[13.0.0+] Now additionally returns an output [[#HdlsSessionId]]. | |||
Official user-processes use TransferMemory size=0x1000 and permissions=RW. | Official user-processes use TransferMemory size=0x1000 and permissions=RW. | ||
Line 1,266: | Line 1,358: | ||
== ReleaseHdlsWorkBuffer == | == ReleaseHdlsWorkBuffer == | ||
No input/output. | No input/output. | ||
[13.0.0+] Takes an input [[#HdlsSessionId]], no output. | |||
== DumpHdlsNpadAssignmentState == | == DumpHdlsNpadAssignmentState == | ||
No input/output. | No input/output. | ||
[13.0.0+] Takes an input [[#HdlsSessionId]], no output. | |||
After using this cmd, the output [[#HdlsNpadAssignment]] is located at tmem+0. | After using this cmd, the output [[#HdlsNpadAssignment]] is located at tmem+0. | ||
Line 1,274: | Line 1,370: | ||
== DumpHdlsStates == | == DumpHdlsStates == | ||
No input/output. | No input/output. | ||
[13.0.0+] Takes an input [[#HdlsSessionId]], no output. | |||
After using this cmd, the output [[#HdlsStateList]] struct is located at tmem+0. | After using this cmd, the output [[#HdlsStateList]] struct is located at tmem+0. | ||
Line 1,279: | Line 1,377: | ||
== ApplyHdlsNpadAssignmentState == | == ApplyHdlsNpadAssignmentState == | ||
Takes an input u8 bool, no output. | Takes an input u8 bool, no output. | ||
[13.0.0+] Takes an input bool and a [[#HdlsSessionId]], no output. | |||
Prior to using this cmd, the input [[#HdlsNpadAssignment]] is written to tmem+0 by the user-process. | Prior to using this cmd, the input [[#HdlsNpadAssignment]] is written to tmem+0 by the user-process. | ||
Line 1,284: | Line 1,384: | ||
== ApplyHdlsStateList == | == ApplyHdlsStateList == | ||
No input/output. | No input/output. | ||
[13.0.0+] Takes an input [[#HdlsSessionId]], no output. | |||
Prior to using this cmd, the input [[#HdlsStateList]] is written to tmem+0 by the user-process. | Prior to using this cmd, the input [[#HdlsStateList]] is written to tmem+0 by the user-process. | ||
Line 1,299: | Line 1,401: | ||
[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,410: | Line 1,517: | ||
|- | |- | ||
| 513 || [3.0.0+] EndPermitVibrationSession | | 513 || [3.0.0+] EndPermitVibrationSession | ||
|- | |||
| 514 || [12.0.0+] SendVibrationNotificationPattern | |||
|- | |- | ||
| 520 || EnableHandheldHids | | 520 || EnableHandheldHids | ||
Line 1,420: | Line 1,529: | ||
|- | |- | ||
| 524 || [10.0.0+] IsHandheldHidsEnabled | | 524 || [10.0.0+] IsHandheldHidsEnabled | ||
|- | |||
| 525 || [11.0.0+] IsJoyConAttachedOnAllRail | |||
|- | |- | ||
| 540 || AcquirePlayReportControllerUsageUpdateEvent | | 540 || AcquirePlayReportControllerUsageUpdateEvent | ||
Line 1,575: | Line 1,686: | ||
| 1200 || [10.0.0+] [[#IsButtonConfigSupported]] | | 1200 || [10.0.0+] [[#IsButtonConfigSupported]] | ||
|- | |- | ||
| 1201 || [10.0.0 | | 1201 || [11.0.0+] [[#IsButtonConfigEmbeddedSupported]] ([10.0.0-10.2.0] [[#DeleteButtonConfig]]) | ||
|- | |- | ||
| 1202 || [10.0.0 | | 1202 || [11.0.0+] [[#DeleteButtonConfig]] ([10.0.0-10.2.0] [[#SetButtonConfigEnabled]]) | ||
|- | |- | ||
| 1203 || [10.0.0 | | 1203 || [11.0.0+] [[#DeleteButtonConfigEmbedded]] ([10.0.0-10.2.0] [[#IsButtonConfigEnabled]]) | ||
|- | |- | ||
| 1204 || [10.0.0 | | 1204 || [11.0.0+] [[#SetButtonConfigEnabled]] ([10.0.0-10.2.0] [[#SetButtonConfigEmbedded]]) | ||
|- | |- | ||
| 1205 || [10.0.0 | | 1205 || [11.0.0+] [[#SetButtonConfigEmbeddedEnabled]] ([10.0.0-10.2.0] [[#SetButtonConfigFull]]) | ||
|- | |- | ||
| 1206 || [10.0.0 | | 1206 || [11.0.0+] [[#IsButtonConfigEnabled]] ([10.0.0-10.2.0] [[#SetButtonConfigLeft]]) | ||
|- | |- | ||
| 1207 || [10.0.0 | | 1207 || [11.0.0+] [[#IsButtonConfigEmbeddedEnabled]] ([10.0.0-10.2.0] [[#SetButtonConfigRight]]) | ||
|- | |- | ||
| 1208 || [10.0.0 | | 1208 || [11.0.0+] [[#SetButtonConfigEmbedded]] ([10.0.0-10.2.0] [[#GetButtonConfigEmbedded]]) | ||
|- | |- | ||
| 1209 || [10.0.0 | | 1209 || [11.0.0+] [[#SetButtonConfigFull]] ([10.0.0-10.2.0] [[#GetButtonConfigFull]]) | ||
|- | |- | ||
| 1210 || [10.0.0 | | 1210 || [10.0.0-10.2.0] [[#GetButtonConfigLeft]] | ||
|- | |- | ||
| 1211 || [10.0.0 | | 1211 || [11.0.0+] [[#SetButtonConfigRight]] ([10.0.0-10.2.0] [[#GetButtonConfigRight]]) | ||
|- | |- | ||
| | | 1212 || [11.0.0+] [[#GetButtonConfigEmbedded]] | ||
|- | |- | ||
| | | 1213 || [11.0.0+] [[#GetButtonConfigFull]] | ||
|- | |- | ||
| 1252 || [10.0.0+] [[#IsDefaultButtonConfigFull]] | | 1214 || [11.0.0+] [[#GetButtonConfigLeft]] | ||
|- | |||
| 1215 || [11.0.0+] [[#GetButtonConfigRight]] | |||
|- | |||
| 1250 || [10.0.0+] [[#IsCustomButtonConfigSupported]] | |||
|- | |||
| 1251 || [10.0.0+] [[#IsDefaultButtonConfigEmbedded]] | |||
|- | |||
| 1252 || [10.0.0+] [[#IsDefaultButtonConfigFull]] | |||
|- | |- | ||
| 1253 || [10.0.0+] [[#IsDefaultButtonConfigLeft]] | | 1253 || [10.0.0+] [[#IsDefaultButtonConfigLeft]] | ||
Line 1,615: | Line 1,734: | ||
| 1258 || [10.0.0+] [[#IsButtonConfigStorageRightEmpty]] | | 1258 || [10.0.0+] [[#IsButtonConfigStorageRightEmpty]] | ||
|- | |- | ||
| 1259 || [10.0.0 | | 1259 || [11.0.0-12.1.0] [[#GetButtonConfigStorageEmbeddedDeprecated]] ([10.0.0-10.2.0] [[#GetButtonConfigStorageEmbeddedDeprecated|GetButtonConfigStorageEmbedded]]) | ||
|- | |- | ||
| 1260 || [10.0.0 | | 1260 || [11.0.0-12.1.0] [[#GetButtonConfigStorageFullDeprecated]] ([10.0.0-10.2.0] [[#GetButtonConfigStorageFullDeprecated|GetButtonConfigStorageFull]]) | ||
|- | |- | ||
| 1261 || [10.0.0 | | 1261 || [11.0.0-12.1.0] [[#GetButtonConfigStorageLeftDeprecated]] ([10.0.0-10.2.0] [[#GetButtonConfigStorageLeftDeprecated|GetButtonConfigStorageLeft]]) | ||
|- | |- | ||
| 1262 || [10.0.0 | | 1262 || [11.0.0-12.1.0] [[#GetButtonConfigStorageRightDeprecated]] ([10.0.0-10.2.0] [[#GetButtonConfigStorageRightDeprecated|GetButtonConfigStorageRight]]) | ||
|- | |- | ||
| 1263 || [10.0.0 | | 1263 || [11.0.0-12.1.0] [[#SetButtonConfigStorageEmbeddedDeprecated]] ([10.0.0-10.2.0] [[#SetButtonConfigStorageEmbeddedDeprecated|SetButtonConfigStorageEmbedded]]) | ||
|- | |- | ||
| 1264 || [10.0.0 | | 1264 || [11.0.0-12.1.0] [[#SetButtonConfigStorageFullDeprecated]] ([10.0.0-10.2.0] [[#SetButtonConfigStorageFullDeprecated|SetButtonConfigStorageFull]]) | ||
|- | |- | ||
| 1265 || [10.0.0 | | 1265 || [11.0.0-12.1.0] [[#SetButtonConfigStorageLeftDeprecated]] ([10.0.0-10.2.0] [[#SetButtonConfigStorageLeftDeprecated|SetButtonConfigStorageLeft]]) | ||
|- | |- | ||
| 1266 || [10.0.0 | | 1266 || [11.0.0-12.1.0] [[#SetButtonConfigStorageRightDeprecated]] ([10.0.0-10.2.0] [[#SetButtonConfigStorageRightDeprecated|SetButtonConfigStorageRight]]) | ||
|- | |- | ||
| 1267 || [10.0.0+] [[#DeleteButtonConfigStorageEmbedded]] | | 1267 || [10.0.0+] [[#DeleteButtonConfigStorageEmbedded]] | ||
Line 1,664: | Line 1,783: | ||
|- | |- | ||
| 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,765: | Line 1,902: | ||
== 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,825: | Line 1,994: | ||
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,844: | Line 2,013: | ||
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,876: | Line 2,049: | ||
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,901: | Line 2,074: | ||
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,952: | Line 2,125: | ||
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]]. | |||
{| class="wikitable" border="1" | == GetButtonConfigStorageRight == | ||
|- | Takes an input s32, a type-0x16 output buffer containing a [[#ButtonConfigRight]], a type-0x1A output buffer containing a [[#StorageName]]. | ||
! Cmd || Name | |||
|- | == SetButtonConfigStorageEmbedded == | ||
| 500 || SetAppletResourceUserId | 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 == | |||
This is "nn::hidbus::IHidbusSystemServer". | |||
This was added with [5.0.0+]. | |||
{| class="wikitable" border="1" | |||
|- | |||
! Cmd || Name | |||
|- | |||
| 500 || SetAppletResourceUserId | |||
|- | |- | ||
| 501 || RegisterAppletResourceUserId | | 501 || RegisterAppletResourceUserId | ||
Line 2,693: | Line 2,894: | ||
== 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,702: | Line 2,903: | ||
== 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,770: | Line 2,971: | ||
== 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,839: | Line 3,040: | ||
== 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 4,361: | Line 4,562: | ||
| 0x43EC ([1.0.0-8.1.0] 0x440C) | | 0x43EC ([1.0.0-8.1.0] 0x440C) | ||
| 0x4 | | 0x4 | ||
| | | [[#NpadLagerType|LagerType]] | ||
|} | |} | ||
Line 5,936: | Line 6,137: | ||
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" | ||
Line 5,946: | Line 6,144: | ||
! 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 | |||
|- | |- | ||
| | | 14 | ||
| | | K | ||
|- | |- | ||
| | | 15 | ||
| | | L | ||
|- | |- | ||
| | | 16 | ||
| | | M | ||
|- | |- | ||
| | | 17 | ||
| | | N | ||
|- | |- | ||
| | | 18 | ||
| | | O | ||
|- | |- | ||
| | | 19 | ||
| | | P | ||
|- | |- | ||
| | | 20 | ||
| | | Q | ||
|- | |- | ||
| | | 21 | ||
| R | | R | ||
|- | |- | ||
| | | 22 | ||
| | | S | ||
|- | |- | ||
| | | 23 | ||
| | | T | ||
|- | |- | ||
| | | 24 | ||
| | | U | ||
|- | |- | ||
| | | 25 | ||
| | | V | ||
|- | |- | ||
| | | 26 | ||
| | | W | ||
|- | |- | ||
| | | 27 | ||
| | | X | ||
|- | |||
| 28 | |||
| Y | |||
|- | |||
| 29 | |||
| Z | |||
|- | |||
| 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:: | 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" | ||
|- | |- | ||
! 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::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" | |||
! Bits | |||
! Description | |||
! Notes | |||
|- | |- | ||
| | | 0 | ||
| NpadStyleFullKey | |||
| Pro Controller | |||
|- | |- | ||
| | | 1 | ||
| NpadStyleHandheld | |||
| Joy-Con controller in handheld mode | |||
|- | |- | ||
| | | 2 | ||
| NpadStyleJoyDual | |||
| Joy-Con controller in dual mode | |||
|- | |- | ||
| | | 3 | ||
| NpadStyleJoyLeft | |||
| Joy-Con left controller in single mode | |||
|- | |- | ||
| | | 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 | ||
| NpadStyleLagon | |||
| N64 controller | |||
|- | |- | ||
| | | 11 | ||
| NpadStyleLager | |||
| Sega Genesis controller | |||
|- | |- | ||
| | | 12-28 | ||
| Reserved | |||
| | |||
|- | |- | ||
| | | 29 | ||
| NpadStyleSystemExt | |||
| Generic external controller | |||
|- | |- | ||
| | | 30 | ||
| NpadStyleSystem | |||
| Generic controller | |||
|- | |- | ||
| | | 31 | ||
| Reserved | |||
| | |||
|} | |} | ||
= | = NpadDeviceTypeSet = | ||
This is "nn::hid:: | 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" | {| class="wikitable" border="1" | ||
|- | |- | ||
! Bit | |||
! Description | |||
|- | |- | ||
| | | 0 | ||
| IsChargingJoyDual | |||
|- | |- | ||
| | | 1 | ||
| IsChargingJoyLeft | |||
|- | |- | ||
| | | 2 | ||
| IsChargingJoyRight | |||
|- | |- | ||
| | | 3 | ||
| IsPoweredJoyDual | |||
|- | |- | ||
| | | 4 | ||
| IsPoweredJoyLeft | |||
|- | |||
| 5 | |||
| IsPoweredJoyRight | |||
|- | |||
| 9 | |||
| IsUnsuportedButtonPressedOnNpadSystem | |||
|- | |||
| 10 | |||
| IsUnsuportedButtonPressedOnNpadSystemExt | |||
|- | |||
| 11 | |||
| IsAbxyButtonOriented | |||
|- | |- | ||
| | | 12 | ||
| IsSlSrButtonOriented | |||
|- | |- | ||
| | | 13 | ||
| [4.0.0+] IsPlusAvailable | |||
|- | |- | ||
| | | 14 | ||
| [4.0.0+] IsMinusAvailable | |||
|- | |- | ||
| | | 15 | ||
| [8.0.0+] IsDirectionalButtonsAvailable | |||
|} | |} | ||
= | = NpadSystemButtonPropertiesSet = | ||
This is "nn::hid:: | 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:: | 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" | ||
Line 6,567: | Line 6,859: | ||
! Description | ! Description | ||
|- | |- | ||
| 0 || | | 0 || Embedded | ||
|- | |- | ||
| 1 || | | 1 || FullKeyController | ||
|- | |- | ||
| 2 || | | 2 || RightController | ||
|- | |- | ||
| 3 || | | 3 || LeftController | ||
|- | |- | ||
| 4 || | | 4 || DebugPadController | ||
|} | |} | ||
= | = UniquePadInterface = | ||
This is "nn::hid:: | This is "nn::hid::system::UniquePadInterface". | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 6,585: | Line 6,877: | ||
! Description | ! Description | ||
|- | |- | ||
| 0 || | | 0 || Embedded | ||
|- | |- | ||
| 1 || | | 1 || Rail | ||
|- | |- | ||
| 2 || | | 2 || Bluetooth | ||
|- | |- | ||
| 3 || | | 3 || Usb | ||
|} | |} | ||
= | = UniquePadSerialNumber = | ||
This is "nn::hid:: | 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" | ||
Line 6,601: | Line 6,899: | ||
! Description | ! Description | ||
|- | |- | ||
| 0 || | | 0 || ReleaseFromRight | ||
|- | |||
| 1 || ReleaseFromBottom | |||
|- | |||
| 2 || ReleaseFromLeft | |||
|- | |||
| 3 || ReleaseFromTop | |||
|- | |||
| 4 || Rotate | |||
|- | |- | ||
| | | 5 || Update | ||
|- | |- | ||
| | | 6 || Completed | ||
|- | |- | ||
| | | 7 || Clear | ||
|- | |- | ||
| | | 8 || ClearCompleted | ||
|} | |} | ||
= | = SixAxisSensorUserCalibrationStage = | ||
This is "nn::hid:: | This is "nn::hid::system::SixAxisSensorUserCalibrationStage". | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 6,619: | Line 6,925: | ||
! Description | ! Description | ||
|- | |- | ||
| 0 || | | 0 || Measuring | ||
|- | |- | ||
| 1 || | | 1 || Update | ||
|- | |- | ||
| 2 || | | 2 || Completed | ||
| | |} | ||
| | |||
= NpadJoyHoldType = | |||
This is "nn::hid::NpadJoyHoldType". | |||
{| class="wikitable" border="1" | |||
! Value | |||
! Description | |||
|- | |- | ||
| | | 0 || Vertical | ||
|- | |- | ||
| | | 1 || Horizontal | ||
|} | |||
= NpadJoyDeviceType = | |||
This is "nn::hid::NpadJoyDeviceType". | |||
{| class="wikitable" border="1" | |||
! Value | |||
! Description | |||
|- | |- | ||
| | | 0 || Left | ||
|- | |- | ||
| | | 1 || Right | ||
|} | |} | ||
= | = NpadHandheldActivationMode = | ||
This is "nn:: | 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 | ! Description | ||
|- | |- | ||
| 0 | | 0 || Dual | ||
| | |||
|- | |- | ||
| 1 | | 1 || Single | ||
| | |||
|- | |- | ||
| 2 | | 2 || None | ||
| | |} | ||
= NpadJoyAssignmentMode = | |||
This is "nn::hid::NpadJoyAssignmentMode". | |||
{| class="wikitable" border="1" | |||
! Value | |||
! Description | |||
|- | |- | ||
| | | 0 || Dual | ||
| | |||
|- | |- | ||
| | | 1 || Single | ||
| | |} | ||
= NpadCommunicationMode = | |||
This is "nn::hid::NpadCommunicationMode". | |||
{| class="wikitable" border="1" | |||
! Value | |||
! Description | |||
|- | |||
| 0 || 5ms | |||
|- | |- | ||
| | | 1 || 10ms | ||
| | |||
|- | |- | ||
| | | 2 || 15ms | ||
| | |||
|- | |- | ||
| | | 3 || Default | ||
| | |} | ||
= AppletDetailedUiType = | |||
This is "nn::hid::system::AppletDetailedUiType". | |||
{| class="wikitable" border="1" | |||
! Value | |||
! 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 | ||
|- | |- | ||
| | | 0x15000000 || [13.0.0+] Lagon | ||
|- | |- | ||
| | | 0xFFFFFFFF || Unknown | ||
|} | |} | ||
= | = AppletFooterUiType = | ||
This is "nn::hid::system:: | This is "nn::hid::system::AppletFooterUiType". | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Value | |||
! Description | |||
|- | |||
| 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 | ||
|- | |- | ||
| | | 21 || [13.0.0+] Lagon | ||
|} | |} | ||
= | = NpadIdType = | ||
This is "nn::hid:: | This is "nn::hid::NpadIdType". This is the controller index used in [[#SharedMemoryFormat|sharedmem]]. | ||
{| 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" | ||
Line 6,890: | Line 7,169: | ||
! Description | ! Description | ||
|- | |- | ||
| | | 1 || Bluetooth | ||
|- | |||
| 2 || Rail | |||
|- | |- | ||
| | | 3 || USB | ||
|- | |- | ||
| | | 4 || Unknown | ||
|} | |} | ||
= | = NpadLarkType = | ||
This is "nn::hid:: | This is "nn::hid::NpadLarkType". | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 6,904: | Line 7,185: | ||
! Description | ! Description | ||
|- | |- | ||
| 0 || | | 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 | ||
| | |||
| | |||
|} | |} | ||
= | = NpadLagerType = | ||
This is "nn::hid:: | This is "nn::hid::NpadLagerType". | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Value | ! Value | ||
! Description | ! Description | ||
|- | |- | ||
| 0 || | | 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" | ||
Line 6,959: | Line 7,235: | ||
! Description | ! Description | ||
|- | |- | ||
| 0 || | | 0 || None | ||
|- | |||
| 1 || Left | |||
|- | |||
| 2 || Up | |||
|- | |||
| 3 || Right | |||
|- | |- | ||
| | | 4 || Down | ||
|} | |} | ||
= | = GestureType = | ||
This is "nn::hid:: | This is "nn::hid::GestureType". | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 6,971: | Line 7,253: | ||
! Description | ! Description | ||
|- | |- | ||
| 0 || | | 0 || Idle | ||
|- | |||
| 1 || Complete | |||
|- | |||
| 2 || Cancel | |||
|- | |- | ||
| | | 3 || Touch | ||
|- | |- | ||
| | | 4 || Press | ||
| | |- | ||
| 5 || Tap | |||
|- | |- | ||
| 6 || Pan | |||
|- | |- | ||
| | | 7 || Swipe | ||
|- | |- | ||
| | | 8 || Pinch | ||
|- | |- | ||
| | | 9 || Rotate | ||
|} | |} | ||
= | = DeviceHandle = | ||
This is "nn::hid:: | This is "nn::xcd::DeviceHandle". This is a 8 byte value. | ||
= DeviceType = | |||
This is "nn::hid::system::DeviceType". | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! | ! Bits | ||
! Description | ! Description | ||
|- | |- | ||
| 0 | | | 0 | ||
| FullKey | |||
|- | |- | ||
| 1 | | | 1 | ||
| DebugPad | |||
|- | |- | ||
| 2 | | | 2 | ||
| HandheldLeft | |||
|- | |- | ||
| 3 | | | 3 | ||
| HandheldRight | |||
|- | |- | ||
| 4 | | | 4 | ||
| JoyLeft | |||
|- | |- | ||
| 5 | | | 5 | ||
| JoyRight | |||
|- | |- | ||
| 6 | | | 6 | ||
| Palma | |||
|- | |- | ||
| 7 | | | 7 | ||
| LarkHvcLeft | |||
|- | |- | ||
| 8 | | | 8 | ||
| LarkHvcRight | |||
|- | |- | ||
| 9 | | | 9 | ||
| LarkNesLeft | |||
|- | |- | ||
| 10 | | | 10 | ||
| LarkNesRight | |||
|- | |- | ||
| 11 || | | 11 | ||
| HandheldLarkHvcLeft | |||
|- | |||
| 12 | |||
| HandheldLarkHvcRight | |||
|- | |- | ||
| | | 13 | ||
| HandheldLarkNesLeft | |||
|- | |- | ||
| | | 14 | ||
| HandheldLarkNesRight | |||
|- | |- | ||
| | | 15 | ||
| Lucia | |||
|- | |- | ||
| | | 16-30 | ||
| Reserved | |||
|- | |- | ||
| | | 31 | ||
| System | |||
|} | |} | ||
= | = DeviceTypeInternal = | ||
This is "nn::hid:: | This is "nn::hid::detail::DeviceTypeInternal". | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! | ! Bits | ||
! Description | ! Description | ||
|- | |- | ||
| 0 | | | 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". | |||
This is "nn:: | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Value | ! Value | ||
! [[#DeviceType|DeviceType]] | |||
! [[#UniquePadType|UniquePadType]] | |||
! Description | ! 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" | {| 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. | |||
This is "nn::hid:: | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! Offset | ! Offset || Size || Description | ||
|- | |- | ||
| 0x0 | | 0x0 || 0x4 || TypeValue | ||
| 0x4 | |||
| | |||
|- | |- | ||
| | | 0x0 || 0x1 || NpadStyleIndex | ||
| | |||
| | |||
|- | |- | ||
| | | 0x1 || 0x1 || [[#NpadIdType|PlayerNumber]] | ||
| | |||
| [[# | |||
|- | |- | ||
| | | 0x2 || 0x1 || DeviceIdx | ||
| | |||
| | |||
|} | |} | ||
= | = VibrationDeviceInfo = | ||
This is "nn::hid:: | This is "nn::hid::VibrationDeviceInfo" / "nn::hid::VibrationDeviceInfoForIpc". This is a 0x8-byte struct. | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! Offset | ! Offset || Size || Description | ||
|- | |- | ||
| 0x0 | | 0x0 || 0x4 || [[#VibrationDeviceType|DeviceType]] | ||
| 0x4 | |- | ||
| | | 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:: | This is "nn::hid::VibrationValue". This is a 0x10-byte struct, which contains 4 float values. | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 7,255: | Line 7,555: | ||
|- | |- | ||
| 0x0 | | 0x0 | ||
| | | 0x4 | ||
| | | AmplitudeLow | ||
|- | |||
| 0x4 | |||
| 0x4 | |||
| FrequencyLow | |||
|- | |- | ||
| 0x8 | | 0x8 | ||
| 0x20 | | 0x4 | ||
| [[#KeyboardKeySet|Keys]] | | AmplitudeHigh | ||
|} | |- | ||
| 0xC | |||
= HdlsHandle = | | 0x4 | ||
This is "nn::hid::debug::HdlsHandle". This is a 0x8-byte struct with 8-byte alignment. | | FrequencyHigh | ||
|} | |||
= HdlsNpadAssignment = | |||
This is a 0x208-byte struct. | = VibrationGcErmCommand = | ||
This is "nn::hid::VibrationGcErmCommand". | |||
{| class="wikitable" border="1" | |||
|- | {| class="wikitable" border="1" | ||
! Offset || Size || Description | ! Value | ||
|- | ! Name | ||
| 0x0 || 0x4 || s32 Total entries | ! Description | ||
|- | |- | ||
| 0x4 || 0x4 || Padding | | 0 || Stop || Stops the vibration with a decay phase. | ||
|- | |- | ||
| 0x8 || 0x200(0x20*0x10) || Array of [[#HdlsNpadAssignmentEntry]]. | | 1 || Start || Starts the vibration. | ||
|} | |- | ||
| 2 || StopHard || Stops the vibration immediately, with no decay phase. | |||
= HdlsNpadAssignmentEntry = | |} | ||
This is a 0x20-byte struct. | |||
= AccelerometerPlayMode = | |||
{| class="wikitable" border="1" | This is "nn::hid::debug::AccelerometerPlayMode" (pre-10.0.0 this is "nn::hid::AccelerometerPlayMode"). | ||
|- | |||
! Offset || Size || Description | {| class="wikitable" border="1" | ||
|- | ! Value | ||
| 0x0 || 0x8 || [[#HdlsHandle]] | ! Description | ||
|- | |- | ||
| 0x8 || 0x4 || ? | | 0 || Loose | ||
|- | |- | ||
| 0xC || 0x4 || ? | | 1 || Tight | ||
|- | |} | ||
| 0x10 || 0x8 || ? | |||
|- | = GyroscopeZeroDriftMode = | ||
| 0x18 || 0x1 || ? | This is "nn::hid::GyroscopeZeroDriftMode". | ||
|- | |||
| 0x19 || 0x7 || Padding | {| class="wikitable" border="1" | ||
|} | ! Value | ||
! Description | |||
= HdlsStateList = | |- | ||
This is a 0x408-byte struct. | | 0 || Loose | ||
|- | |||
[9.0.0+] This is a 0x488-byte struct. | | 1 || Standard | ||
|- | |||
{| class="wikitable" border="1" | | 2 || Tight | ||
|- | |} | ||
! Offset || Size || Description | |||
|- | = PalmaConnectionHandle = | ||
| 0x0 || 0x4 || s32 Total entries | This is "nn::hid::PalmaConnectionHandle". This is a 0x8-byte struct with 8-byte alignment. | ||
|- | |||
| 0x4 || 0x4 || Padding | = PalmaOperationInfo = | ||
|- | This is "nn::hid::PalmaOperationInfo". This is a 0x148-byte struct. | ||
| 0x8 || <[[#HdlsStateListEntry]] size>*0x10 || Array of [[#HdlsStateListEntry]]. | |||
|} | {| class="wikitable" border="1" | ||
|- | |||
This contains a list of all controllers, including non-virtual controllers. | ! Offset || Size || Description | ||
|- | |||
= HdlsStateListEntry = | | 0x0 || 0x4 || [[#PalmaOperationType]] | ||
This is a 0x40-byte struct. | |- | ||
| 0x4 || 0x4 || Result | |||
[9.0.0+] This is a 0x48-byte struct. | |- | ||
| 0x8 || 0x140 || Buffer for [[#GetPalmaOperationInfo]]. | |||
{| class="wikitable" border="1" | |} | ||
|- | |||
! Offset || Size || Description | = PalmaOperationType = | ||
|- | This is "nn::hid::PalmaOperationType". | ||
| 0x0 || 0x8 || [[#HdlsHandle]] | |||
|- | {| class="wikitable" border="1" | ||
| 0x8 || [[#HdlsDeviceInfo]] size || [[#HdlsDeviceInfo]]. With [[#ApplyHdlsStateList]] this is only used when creating new devices. | ! Value | ||
|- | ! Description | ||
| 0x8 + [[#HdlsDeviceInfo]] size, with 8-byte alignment || 0x24 || [[#HdlsState]] | |- | ||
|- | | 0 || PlayActivity | ||
| <Immediately following the above> || 0x4 || Padding | |- | ||
|} | | 1 || SetFrModeType | ||
|- | |||
= HdlsDeviceInfo = | | 2 || ReadStep | ||
This is a 0x10-byte struct. | |- | ||
| 3 || EnableStep | |||
{| class="wikitable" border="1" | |- | ||
|- | | 4 || ResetStep | ||
! Offset || Size || Description | |- | ||
|- | | 5 || ReadApplicationSection | ||
| 0x0 || 0x4 || [[#DeviceTypeInternal]] | |- | ||
|- | | 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. | |||
= HdlsSessionId = | |||
This is "nn::hid::debug::detail::HdlsSessionId". 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 | | 0x4 || 0x4 || RGBA Single Body Color | ||
|- | |- | ||
Line 7,376: | Line 8,067: | ||
= 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,394: | Line 8,085: | ||
| 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,412: | Line 8,117: | ||
| 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,798: | Line 8,515: | ||
| 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,446: | Line 9,168: | ||
| 1 || RightJoyRail | | 1 || RightJoyRail | ||
|- | |- | ||
| 2 || [6.0.0+] | | 2 || [6.0.0+] InternalBus (for Lark microphone) | ||
|} | |} | ||
Line 8,464: | Line 9,186: | ||
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 = | ||
Line 8,515: | Line 9,251: | ||
* [10.0.0+] '''TouchScreenConfiguration.csv''' | * [10.0.0+] '''TouchScreenConfiguration.csv''' | ||
* [10.0.0+] '''TouchScreenFirmwareInfo.csv''' | * [10.0.0+] '''TouchScreenFirmwareInfo.csv''' | ||
* [13.0.0+] '''FTS_33000510.fts256''' | |||
* [13.0.0+] '''FTS_98000004.ftb''' | |||
[[Category:Services]] | [[Category:Services]] |