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]] should be used before this. |
Line 732: |
Line 751: |
| == 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 745: |
Line 770: |
| | | |
| sdknso exposes the first u64 as a s32. Data is copied from the input [[#PalmaApplicationSectionAccessBuffer]] with the specified size. | | sdknso exposes the first u64 as a s32. Data is copied from the input [[#PalmaApplicationSectionAccessBuffer]] with the specified size. |
| + | |
| + | See [[#hidGetPalmaOperationInfo]]. |
| | | |
| == ReadPalmaUniqueCode == | | == ReadPalmaUniqueCode == |
| Takes an input [[#PalmaConnectionHandle]], no output. | | Takes an input [[#PalmaConnectionHandle]], no output. |
| + | |
| + | See [[#hidGetPalmaOperationInfo]]. |
| | | |
| == SetPalmaUniqueCodeInvalid == | | == SetPalmaUniqueCodeInvalid == |
| Takes an input [[#PalmaConnectionHandle]], no output. | | Takes an input [[#PalmaConnectionHandle]], no output. |
| + | |
| + | See [[#hidGetPalmaOperationInfo]]. |
| | | |
| == WritePalmaActivityEntry == | | == WritePalmaActivityEntry == |
Line 756: |
Line 787: |
| | | |
| sdknso exposes the first u64 as an u16, while the rest are exposed as [[#PalmaActivityEntry]]. | | sdknso exposes the first u64 as an u16, while the rest are exposed as [[#PalmaActivityEntry]]. |
| + | |
| + | See [[#hidGetPalmaOperationInfo]]. |
| | | |
| == WritePalmaRgbLedPatternEntry == | | == WritePalmaRgbLedPatternEntry == |
Line 761: |
Line 794: |
| | | |
| sdknso exposes the u64 as an u16. | | sdknso exposes the u64 as an u16. |
| + | |
| + | See [[#hidGetPalmaOperationInfo]]. |
| | | |
| == WritePalmaWaveEntry == | | == WritePalmaWaveEntry == |
Line 768: |
Line 803: |
| | | |
| 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 785: |
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 817: |
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 822: |
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 878: |
Line 929: |
| |- | | |- |
| | 13 || [9.0.0+] GetTouchScreenConfiguration | | | 13 || [9.0.0+] GetTouchScreenConfiguration |
| + | |- |
| + | | 14 || [11.0.0+] ProcessTouchScreenAutoTune |
| |- | | |- |
| | 20 || [[#DeactivateMouse]] | | | 20 || [[#DeactivateMouse]] |
Line 913: |
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,038: |
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,069: |
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,078: |
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,090: |
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,143: |
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,291: |
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,402: |
Line 1,487: |
| |- | | |- |
| | 513 || [3.0.0+] EndPermitVibrationSession | | | 513 || [3.0.0+] EndPermitVibrationSession |
| + | |- |
| + | | 514 || [12.0.0+] SendVibrationNotificationPattern |
| |- | | |- |
| | 520 || EnableHandheldHids | | | 520 || EnableHandheldHids |
Line 1,412: |
Line 1,499: |
| |- | | |- |
| | 524 || [10.0.0+] IsHandheldHidsEnabled | | | 524 || [10.0.0+] IsHandheldHidsEnabled |
| + | |- |
| + | | 525 || [11.0.0+] IsJoyConAttachedOnAllRail |
| |- | | |- |
| | 540 || AcquirePlayReportControllerUsageUpdateEvent | | | 540 || AcquirePlayReportControllerUsageUpdateEvent |
Line 1,567: |
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 || [10.0.0+] [[#SetButtonConfigEnabled]] | + | | 1202 || [11.0.0+] [[#DeleteButtonConfig]] ([10.0.0-10.2.0] [[#SetButtonConfigEnabled]]) |
| |- | | |- |
− | | 1203 || [10.0.0+] [[#IsButtonConfigEnabled]] | + | | 1203 || [11.0.0+] [[#DeleteButtonConfigEmbedded]] ([10.0.0-10.2.0] [[#IsButtonConfigEnabled]]) |
| |- | | |- |
− | | 1204 || [10.0.0+] [[#SetButtonConfigEmbedded]] | + | | 1204 || [11.0.0+] [[#SetButtonConfigEnabled]] ([10.0.0-10.2.0] [[#SetButtonConfigEmbedded]]) |
| |- | | |- |
− | | 1205 || [10.0.0+] [[#SetButtonConfigFull]] | + | | 1205 || [11.0.0+] [[#SetButtonConfigEmbeddedEnabled]] ([10.0.0-10.2.0] [[#SetButtonConfigFull]]) |
| |- | | |- |
− | | 1206 || [10.0.0+] [[#SetButtonConfigLeft]] | + | | 1206 || [11.0.0+] [[#IsButtonConfigEnabled]] ([10.0.0-10.2.0] [[#SetButtonConfigLeft]]) |
| |- | | |- |
− | | 1207 || [10.0.0+] [[#SetButtonConfigRight]] | + | | 1207 || [11.0.0+] [[#IsButtonConfigEmbeddedEnabled]] ([10.0.0-10.2.0] [[#SetButtonConfigRight]]) |
| |- | | |- |
− | | 1208 || [10.0.0+] [[#GetButtonConfigEmbedded]] | + | | 1208 || [11.0.0+] [[#SetButtonConfigEmbedded]] ([10.0.0-10.2.0] [[#GetButtonConfigEmbedded]]) |
| |- | | |- |
− | | 1209 || [10.0.0+] [[#GetButtonConfigFull]] | + | | 1209 || [11.0.0+] [[#SetButtonConfigFull]] ([10.0.0-10.2.0] [[#GetButtonConfigFull]]) |
| |- | | |- |
− | | 1210 || [10.0.0+] [[#GetButtonConfigLeft]] | + | | 1210 || [10.0.0-10.2.0] [[#GetButtonConfigLeft]] |
| |- | | |- |
− | | 1211 || [10.0.0+] [[#GetButtonConfigRight]] | + | | 1211 || [11.0.0+] [[#SetButtonConfigRight]] ([10.0.0-10.2.0] [[#GetButtonConfigRight]]) |
| + | |- |
| + | | 1212 || [11.0.0+] [[#GetButtonConfigEmbedded]] |
| + | |- |
| + | | 1213 || [11.0.0+] [[#GetButtonConfigFull]] |
| + | |- |
| + | | 1214 || [11.0.0+] [[#GetButtonConfigLeft]] |
| + | |- |
| + | | 1215 || [11.0.0+] [[#GetButtonConfigRight]] |
| |- | | |- |
| | 1250 || [10.0.0+] [[#IsCustomButtonConfigSupported]] | | | 1250 || [10.0.0+] [[#IsCustomButtonConfigSupported]] |
Line 1,607: |
Line 1,704: |
| | 1258 || [10.0.0+] [[#IsButtonConfigStorageRightEmpty]] | | | 1258 || [10.0.0+] [[#IsButtonConfigStorageRightEmpty]] |
| |- | | |- |
− | | 1259 || [10.0.0+] [[#GetButtonConfigStorageEmbedded]] | + | | 1259 || [11.0.0+] [[#GetButtonConfigStorageEmbeddedDeprecated]] ([10.0.0-10.2.0] [[#GetButtonConfigStorageEmbeddedDeprecated|GetButtonConfigStorageEmbedded]]) |
| |- | | |- |
− | | 1260 || [10.0.0+] [[#GetButtonConfigStorageFull]] | + | | 1260 || [11.0.0+] [[#GetButtonConfigStorageFullDeprecated]] ([10.0.0-10.2.0] [[#GetButtonConfigStorageFullDeprecated|GetButtonConfigStorageFull]]) |
| |- | | |- |
− | | 1261 || [10.0.0+] [[#GetButtonConfigStorageLeft]] | + | | 1261 || [11.0.0+] [[#GetButtonConfigStorageLeftDeprecated]] ([10.0.0-10.2.0] [[#GetButtonConfigStorageLeftDeprecated|GetButtonConfigStorageLeft]]) |
| |- | | |- |
− | | 1262 || [10.0.0+] [[#GetButtonConfigStorageRight]] | + | | 1262 || [11.0.0+] [[#GetButtonConfigStorageRightDeprecated]] ([10.0.0-10.2.0] [[#GetButtonConfigStorageRightDeprecated|GetButtonConfigStorageRight]]) |
| |- | | |- |
− | | 1263 || [10.0.0+] [[#SetButtonConfigStorageEmbedded]] | + | | 1263 || [11.0.0+] [[#SetButtonConfigStorageEmbeddedDeprecated]] ([10.0.0-10.2.0] [[#SetButtonConfigStorageEmbeddedDeprecated|SetButtonConfigStorageEmbedded]]) |
| |- | | |- |
− | | 1264 || [10.0.0+] [[#SetButtonConfigStorageFull]] | + | | 1264 || [11.0.0+] [[#SetButtonConfigStorageFullDeprecated]] ([10.0.0-10.2.0] [[#SetButtonConfigStorageFullDeprecated|SetButtonConfigStorageFull]]) |
| |- | | |- |
− | | 1265 || [10.0.0+] [[#SetButtonConfigStorageLeft]] | + | | 1265 || [11.0.0+] [[#SetButtonConfigStorageLeftDeprecated]] ([10.0.0-10.2.0] [[#SetButtonConfigStorageLeftDeprecated|SetButtonConfigStorageLeft]]) |
| |- | | |- |
− | | 1266 || [10.0.0+] [[#SetButtonConfigStorageRight]] | + | | 1266 || [11.0.0+] [[#SetButtonConfigStorageRightDeprecated]] ([10.0.0-10.2.0] [[#SetButtonConfigStorageRightDeprecated|SetButtonConfigStorageRight]]) |
| |- | | |- |
| | 1267 || [10.0.0+] [[#DeleteButtonConfigStorageEmbedded]] | | | 1267 || [10.0.0+] [[#DeleteButtonConfigStorageEmbedded]] |
Line 1,656: |
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]] |
| |} | | |} |
| | | |
Line 1,757: |
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,817: |
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+] This will now Abort if the s32 is negative or >=5. | + | [10.1.0-10.2.0] This will now Abort if the s32 is negative or >=5. [11.0.0+] This value must now be unsigned <=4, otherwise 0 is returned. |
| | | |
| Uses [[Settings_services#GetButtonConfigSettingsEmbedded|GetButtonConfigSettingsEmbedded]] with count=5 (output s32 ignored). The input entry-index is used with this array. Then the output bool is set to [[Settings_services#ButtonConfigSettings|IsFull]] bit0 == 0. Then 0 is returned. | | Uses [[Settings_services#GetButtonConfigSettingsEmbedded|GetButtonConfigSettingsEmbedded]] with count=5 (output s32 ignored). The input entry-index is used with this array. Then the output bool is set to [[Settings_services#ButtonConfigSettings|IsFull]] bit0 == 0. Then 0 is returned. |
Line 1,836: |
Line 1,983: |
| Same as [[#IsButtonConfigStorageEmbeddedEmpty]] except with a different setsys cmd. | | Same as [[#IsButtonConfigStorageEmbeddedEmpty]] except with a different setsys cmd. |
| | | |
− | == GetButtonConfigStorageEmbedded == | + | == GetButtonConfigStorageEmbeddedDeprecated == |
| Takes an input s32 entry-index, and a type-0x16 output buffer containing a [[#ButtonConfigEmbedded]]. | | Takes an input s32 entry-index, and a type-0x16 output buffer containing a [[#ButtonConfigEmbedded]]. |
| | | |
− | [10.1.0+] This will now Abort if the s32 is negative or >=5. | + | [10.1.0-10.2.0] This will now Abort if the s32 is negative or >=5. |
| + | |
| + | [11.0.0+] This now calls the same func internally as [[#GetButtonConfigStorageEmbedded]], except the [[#StorageName]] isn't exposed. |
| | | |
| Uses [[Settings_services#GetButtonConfigSettingsEmbedded|GetButtonConfigSettingsEmbedded]] with count=5 (output s32 ignored). The input entry-index is used with this array. Then an error is thrown if [[Settings_services#ButtonConfigSettings|IsFull]] bit0 is clear. Then the data at +0x1C8 is converted to [[#ButtonConfigEmbedded]], copied to output, and returns 0. | | Uses [[Settings_services#GetButtonConfigSettingsEmbedded|GetButtonConfigSettingsEmbedded]] with count=5 (output s32 ignored). The input entry-index is used with this array. Then an error is thrown if [[Settings_services#ButtonConfigSettings|IsFull]] bit0 is clear. Then the data at +0x1C8 is converted to [[#ButtonConfigEmbedded]], copied to output, and returns 0. |
| | | |
− | == GetButtonConfigStorageFull == | + | == GetButtonConfigStorageFullDeprecated == |
| Takes an input s32 entry-index, and a type-0x16 output buffer containing a [[#ButtonConfigFull]]. | | Takes an input s32 entry-index, and a type-0x16 output buffer containing a [[#ButtonConfigFull]]. |
| | | |
− | Same as [[#GetButtonConfigStorageEmbedded]], except this uses a different setsys cmd, and uses a different conversion func / different output struct. | + | Same as [[#GetButtonConfigStorageEmbeddedDeprecated]], except this uses a different setsys cmd, and uses a different conversion func / different output struct. |
| | | |
− | == GetButtonConfigStorageLeft == | + | == GetButtonConfigStorageLeftDeprecated == |
| Takes an input s32 entry-index, and a type-0x16 output buffer containing a [[#ButtonConfigLeft]]. | | Takes an input s32 entry-index, and a type-0x16 output buffer containing a [[#ButtonConfigLeft]]. |
| | | |
− | Same as [[#GetButtonConfigStorageEmbedded]], except this uses a different setsys cmd, and uses a different conversion func / different output struct. | + | Same as [[#GetButtonConfigStorageEmbeddedDeprecated]], except this uses a different setsys cmd, and uses a different conversion func / different output struct. |
| | | |
− | == GetButtonConfigStorageRight == | + | == GetButtonConfigStorageRightDeprecated == |
| Takes an input s32 entry-index, and a type-0x16 output buffer containing a [[#ButtonConfigRight]]. | | Takes an input s32 entry-index, and a type-0x16 output buffer containing a [[#ButtonConfigRight]]. |
| | | |
− | Same as [[#GetButtonConfigStorageEmbedded]], except this uses a different setsys cmd, and uses a different conversion func / different output struct. | + | Same as [[#GetButtonConfigStorageEmbeddedDeprecated]], except this uses a different setsys cmd, and uses a different conversion func / different output struct. |
| | | |
− | == SetButtonConfigStorageEmbedded == | + | == SetButtonConfigStorageEmbeddedDeprecated == |
| Takes an input s32 entry-index, and a type-0x15 input buffer containing a [[#ButtonConfigEmbedded]]. | | Takes an input s32 entry-index, and a type-0x15 input buffer containing a [[#ButtonConfigEmbedded]]. |
| | | |
− | [10.1.0+] This will now Abort if the s32 is negative or >=5. | + | [10.1.0-10.2.0] This will now Abort if the s32 is negative or >=5. |
| + | |
| + | [11.0.0+] This now calls the same func internally as [[#SetButtonConfigStorageEmbedded]], except the [[#StorageName]] isn't exposed. |
| | | |
| If the input config matches the [[#IsDefaultButtonConfigEmbedded|default]], this first does: | | If the input config matches the [[#IsDefaultButtonConfigEmbedded|default]], this first does: |
Line 1,868: |
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. |
| | | |
− | == SetButtonConfigStorageFull == | + | == SetButtonConfigStorageFullDeprecated == |
| Takes an input s32 entry-index, and a type-0x15 input buffer containing a [[#ButtonConfigFull]]. | | Takes an input s32 entry-index, and a type-0x15 input buffer containing a [[#ButtonConfigFull]]. |
| | | |
− | Same as [[#SetButtonConfigStorageEmbedded]], except this uses different setsys cmds, and uses a different structs etc. | + | Same as [[#SetButtonConfigStorageEmbeddedDeprecated]], except this uses different setsys cmds, and uses a different structs etc. |
| | | |
− | == SetButtonConfigStorageLeft == | + | == SetButtonConfigStorageLeftDeprecated == |
| Takes an input s32 entry-index, and a type-0x15 input buffer containing a [[#ButtonConfigLeft]]. | | Takes an input s32 entry-index, and a type-0x15 input buffer containing a [[#ButtonConfigLeft]]. |
| | | |
− | Same as [[#SetButtonConfigStorageEmbedded]], except this uses different setsys cmds, and uses a different structs etc. | + | Same as [[#SetButtonConfigStorageEmbeddedDeprecated]], except this uses different setsys cmds, and uses a different structs etc. |
| | | |
− | == SetButtonConfigStorageRight == | + | == SetButtonConfigStorageRightDeprecated == |
| Takes an input s32 entry-index, and a type-0x15 input buffer containing a [[#ButtonConfigRight]]. | | Takes an input s32 entry-index, and a type-0x15 input buffer containing a [[#ButtonConfigRight]]. |
| | | |
− | Same as [[#SetButtonConfigStorageEmbedded]], except this uses different setsys cmds, and uses a different structs etc. | + | Same as [[#SetButtonConfigStorageEmbeddedDeprecated]], except this uses different setsys cmds, and uses a different structs etc. |
| | | |
| == DeleteButtonConfigStorageEmbedded == | | == DeleteButtonConfigStorageEmbedded == |
| Takes an input s32 entry-index, no output. | | Takes an input s32 entry-index, no output. |
| | | |
− | [10.1.0+] This will now Abort if the s32 is negative or >=5. | + | [10.1.0-10.2.0] This will now Abort if the s32 is negative or >=5. [11.0.0+] When the input s32 is larger than unsigned value 4, an error is returned. |
| | | |
| Uses [[Settings_services#GetButtonConfigSettingsEmbedded|GetButtonConfigSettingsEmbedded]] with count=5 (output s32 ignored). The input entry-index is used with this array. Then an error is thrown if [[Settings_services#ButtonConfigSettings|IsFull]] bit0 is clear. Then the data at +0x1C8 size 0x3E0 is cleared, IsFull bit0 is cleared, [[Settings_services#SetButtonConfigSettingsEmbedded|SetButtonConfigSettingsEmbedded]] is used with the updated array, and then returns 0. | | Uses [[Settings_services#GetButtonConfigSettingsEmbedded|GetButtonConfigSettingsEmbedded]] with count=5 (output s32 ignored). The input entry-index is used with this array. Then an error is thrown if [[Settings_services#ButtonConfigSettings|IsFull]] bit0 is clear. Then the data at +0x1C8 size 0x3E0 is cleared, IsFull bit0 is cleared, [[Settings_services#SetButtonConfigSettingsEmbedded|SetButtonConfigSettingsEmbedded]] is used with the updated array, and then returns 0. |
Line 1,893: |
Line 2,044: |
| Takes an input s32 entry-index, no output. | | Takes an input s32 entry-index, no output. |
| | | |
− | Same as [[#IsButtonConfigStorageEmbeddedEmpty]] except with different setsys cmds. | + | Same as [[#DeleteButtonConfigStorageEmbedded]] except with different setsys cmds. |
| | | |
| == DeleteButtonConfigStorageLeft == | | == DeleteButtonConfigStorageLeft == |
| Takes an input s32 entry-index, no output. | | Takes an input s32 entry-index, no output. |
| | | |
− | Same as [[#IsButtonConfigStorageEmbeddedEmpty]] except with different setsys cmds. | + | Same as [[#DeleteButtonConfigStorageEmbedded]] except with different setsys cmds. |
| | | |
| == DeleteButtonConfigStorageRight == | | == DeleteButtonConfigStorageRight == |
| Takes an input s32 entry-index, no output. | | Takes an input s32 entry-index, no output. |
| | | |
− | Same as [[#IsButtonConfigStorageEmbeddedEmpty]] except with different setsys cmds. | + | Same as [[#DeleteButtonConfigStorageEmbedded]] except with different setsys cmds. |
| | | |
| == IsUsingCustomButtonConfig == | | == IsUsingCustomButtonConfig == |
Line 1,943: |
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 5,928: |
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]]. |
| | | |
− | = KeyboardLockKeyEventSet = | + | = KeyboardKey = |
− | This is "nn::hid::system::KeyboardLockKeyEventSet". This is a BitFlagSet object for [[#KeyboardLockKeyEvent]]. | + | This is "nn::hid::KeyboardKey". This is a 256-bit flag. |
− | | |
− | = KeyboardLockKeyEvent =
| |
− | This is "nn::hid::system::KeyboardLockKeyEvent". This is a 32-bit flag.
| |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 5,939: |
Line 6,115: |
| ! Description | | ! Description |
| |- | | |- |
− | | 0 | + | | 4 |
− | | NumLockOn | + | | A |
| |- | | |- |
− | | 1
| + | | 5 |
− | | NumLockOff
| + | | B |
− | |-
| |
− | | 2
| |
− | | NumLockToggle
| |
− | |-
| |
− | | 3
| |
− | | CapsLockOn
| |
− | |-
| |
− | | 4
| |
− | | CapsLockOff
| |
− | |-
| |
− | | 5 | |
− | | CapsLockToggle | |
| |- | | |- |
| | 6 | | | 6 |
− | | ScrollLockOn | + | | C |
| |- | | |- |
| | 7 | | | 7 |
− | | ScrollLockOff | + | | D |
| |- | | |- |
| | 8 | | | 8 |
− | | ScrollLockToggle | + | | E |
− | |}
| |
− | | |
− | = BasicXpadButtonSet =
| |
− | This is "nn::hid::BasicXpadButtonSet". This is a BitFlagSet object for [[#BasicXpadButton]].
| |
− | | |
− | = HomeButtonSet =
| |
− | This is "nn::hid::system::HomeButtonSet". This is a BitFlagSet object for [[#HomeButton]].
| |
− | | |
− | = SleepButtonSet =
| |
− | This is "nn::hid::system::SleepButtonSet". This is a BitFlagSet object for [[#SleepButton]].
| |
− | | |
− | = CaptureButtonSet =
| |
− | This is "nn::hid::system::CaptureButtonSet". This is a BitFlagSet object for [[#CaptureButton]].
| |
− | | |
− | = NpadButtonSet =
| |
− | This is "nn::hid::NpadButtonSet". This is a BitFlagSet object for [[#NpadButton]].
| |
− | | |
− | = NpadButton =
| |
− | This is "nn::hid::NpadButton". This is a 64-bit flag.
| |
− | | |
− | {| class="wikitable" border="1"
| |
| |- | | |- |
− | ! Bit
| + | | 9 |
− | ! Description
| + | | F |
| |- | | |- |
− | | 0 | + | | 10 |
− | | A | + | | G |
| |- | | |- |
− | | 1 | + | | 11 |
− | | B | + | | H |
| |- | | |- |
− | | 2 | + | | 12 |
− | | X | + | | I |
| |- | | |- |
− | | 3 | + | | 13 |
− | | Y | + | | J |
| |- | | |- |
− | | 4 | + | | 14 |
− | | StickL | + | | K |
| |- | | |- |
− | | 5 | + | | 15 |
− | | StickR
| + | | L |
− | |-
| |
− | | 6
| |
− | | L | |
− | |-
| |
− | | 7
| |
− | | R
| |
− | |-
| |
− | | 8
| |
− | | ZL
| |
− | |-
| |
− | | 9
| |
− | | ZR
| |
− | |-
| |
− | | 10
| |
− | | Plus
| |
− | |-
| |
− | | 11
| |
− | | Minus
| |
− | |-
| |
− | | 12
| |
− | | Left
| |
− | |-
| |
− | | 13
| |
− | | Up
| |
− | |-
| |
− | | 14
| |
− | | Right
| |
− | |-
| |
− | | 15
| |
− | | Down
| |
| |- | | |- |
| | 16 | | | 16 |
− | | StickLLeft | + | | M |
| |- | | |- |
| | 17 | | | 17 |
− | | StickLUp | + | | N |
| |- | | |- |
| | 18 | | | 18 |
− | | StickLRight | + | | O |
| |- | | |- |
| | 19 | | | 19 |
− | | StickLDown | + | | P |
| |- | | |- |
| | 20 | | | 20 |
− | | StickRLeft | + | | Q |
| |- | | |- |
| | 21 | | | 21 |
− | | StickRUp | + | | R |
| |- | | |- |
| | 22 | | | 22 |
− | | StickRRight | + | | S |
| |- | | |- |
| | 23 | | | 23 |
− | | StickRDown | + | | T |
| |- | | |- |
| | 24 | | | 24 |
− | | LeftSL | + | | U |
| |- | | |- |
| | 25 | | | 25 |
− | | LeftSR | + | | V |
| |- | | |- |
| | 26 | | | 26 |
− | | RightSL | + | | W |
| |- | | |- |
| | 27 | | | 27 |
− | | RightSR | + | | X |
| |- | | |- |
| | 28 | | | 28 |
− | | Palma | + | | Y |
| |- | | |- |
| | 29 | | | 29 |
− | | | + | | Z |
| |- | | |- |
| | 30 | | | 30 |
− | | HandheldLeftB (Left B button on NES controllers in Handheld mode) | + | | D1 |
− | |} | + | |- |
− | | + | | 31 |
− | = AnalogStickCalibrationFlagsSet =
| + | | D2 |
− | This is "nn::hid::detail::AnalogStickCalibrationFlagsSet". This is a BitFlagSet object for [[#AnalogStickCalibrationFlags]].
| + | |- |
− | | + | | 32 |
− | = SixAxisSensorUserCalibrationFlagsSet =
| + | | D3 |
− | This is "nn::hid::detail::SixAxisSensorUserCalibrationFlagsSet". This is a BitFlagSet object for [[#SixAxisSensorUserCalibrationFlags]].
| + | |- |
− | | + | | 33 |
− | = NpadStyleSet =
| + | | D4 |
− | This is "nn::hid::NpadStyleSet". This is a BitFlagSet object for [[#NpadStyleTag]].
| + | |- |
− | | + | | 34 |
− | = NpadStyleTag =
| + | | D5 |
− | This is "nn::hid::NpadStyleTag".
| + | |- |
− | | + | | 35 |
− | {| class="wikitable" border="1"
| + | | D6 |
− | ! Bits
| + | |- |
− | ! Description
| + | | 36 |
− | ! Notes
| + | | D7 |
| + | |- |
| + | | 37 |
| + | | D8 |
| |- | | |- |
− | | 0 | + | | 38 |
− | | NpadStyleFullKey | + | | D9 |
− | | Pro Controller
| |
| |- | | |- |
− | | 1 | + | | 39 |
− | | NpadStyleHandheld | + | | D0 |
− | | Joy-Con controller in handheld mode
| |
| |- | | |- |
− | | 2 | + | | 40 |
− | | NpadStyleJoyDual | + | | Return |
− | | Joy-Con controller in dual mode
| |
| |- | | |- |
− | | 3 | + | | 41 |
− | | NpadStyleJoyLeft | + | | Escape |
− | | Joy-Con left controller in single mode
| |
| |- | | |- |
− | | 4 | + | | 42 |
− | | NpadStyleJoyRight | + | | Backspace |
− | | Joy-Con right controller in single mode
| |
| |- | | |- |
− | | 5 | + | | 43 |
− | | NpadStyleGc | + | | Tab |
− | | GameCube controller
| |
| |- | | |- |
− | | 6 | + | | 44 |
− | | NpadStylePalma | + | | Space |
− | | Poké Ball Plus controller
| |
| |- | | |- |
− | | 7 | + | | 45 |
− | | NpadStyleLark | + | | Minus |
− | | NES/Famicom controller
| |
| |- | | |- |
− | | 8 | + | | 46 |
− | | NpadStyleHandheldLark | + | | Plus |
− | | NES/Famicom controller in handheld mode
| |
| |- | | |- |
− | | 9 | + | | 47 |
− | | NpadStyleLucia | + | | OpenBracket |
− | | SNES controller
| |
| |- | | |- |
− | | 10-28 | + | | 48 |
− | | Reserved
| + | | CloseBracket |
− | | | |
| |- | | |- |
− | | 29 | + | | 49 |
− | | NpadStyleSystemExt | + | | Pipe |
− | | Generic external controller
| |
| |- | | |- |
− | | 30 | + | | 50 |
− | | NpadStyleSystem | + | | Tilde |
− | | Generic controller
| |
| |- | | |- |
− | | 31 | + | | 51 |
− | | Reserved | + | | Semicolon |
− | | | + | |- |
− | |} | + | | 52 |
− | | + | | Quote |
− | = NpadDeviceTypeSet =
| + | |- |
− | This is "nn::hid::system::NpadDeviceType". This is a BitFlagSet object for [[#NpadDeviceType]].
| + | | 53 |
− | | + | | Backquote |
− | = NpadSystemPropertiesSet =
| |
− | This is "nn::hid::detail::NpadSystemPropertiesSet". This is a BitFlagSet object for [[#NpadSystemProperties]].
| |
− | | |
− | = NpadSystemProperties =
| |
− | This is "nn::hid::NpadSystemProperties". This is a 64-bit flag.
| |
− | | |
− | {| class="wikitable" border="1"
| |
| |- | | |- |
− | ! Bit
| + | | 54 |
− | ! Description
| + | | Comma |
| |- | | |- |
− | | 0 | + | | 55 |
− | | IsChargingJoyDual | + | | Period |
| |- | | |- |
− | | 1 | + | | 56 |
− | | IsChargingJoyLeft | + | | Slash |
| |- | | |- |
− | | 2 | + | | 57 |
− | | IsChargingJoyRight | + | | CapsLock |
| |- | | |- |
− | | 3 | + | | 58 |
− | | IsPoweredJoyDual | + | | F1 |
| |- | | |- |
− | | 4 | + | | 59 |
− | | IsPoweredJoyLeft | + | | F2 |
| |- | | |- |
− | | 5 | + | | 60 |
− | | IsPoweredJoyRight | + | | F3 |
| |- | | |- |
− | | 9 | + | | 61 |
− | | IsUnsuportedButtonPressedOnNpadSystem | + | | F4 |
| |- | | |- |
− | | 10 | + | | 62 |
− | | IsUnsuportedButtonPressedOnNpadSystemExt | + | | F5 |
| |- | | |- |
− | | 11 | + | | 63 |
− | | IsAbxyButtonOriented | + | | F6 |
| |- | | |- |
− | | 12 | + | | 64 |
− | | IsSlSrButtonOriented | + | | F7 |
| |- | | |- |
− | | 13 | + | | 65 |
− | | [4.0.0+] IsPlusAvailable | + | | F8 |
| |- | | |- |
− | | 14 | + | | 66 |
− | | [4.0.0+] IsMinusAvailable | + | | F9 |
| |- | | |- |
− | | 15 | + | | 67 |
− | | [8.0.0+] IsDirectionalButtonsAvailable | + | | F10 |
− | |}
| |
− | | |
− | = NpadSystemButtonPropertiesSet =
| |
− | This is "nn::hid::detail::NpadSystemButtonPropertiesSet". This is a BitFlagSet object for [[#NpadSystemButtonProperties]].
| |
− | | |
− | = NpadSystemButtonProperties =
| |
− | This is "nn::hid::NpadSystemButtonProperties". This is a 32-bit flag.
| |
− | | |
− | {| class="wikitable" border="1"
| |
| |- | | |- |
− | ! Bit
| + | | 68 |
− | ! Description
| + | | F11 |
| |- | | |- |
− | | 0 | + | | 69 |
− | | IsUnintendedHomeButtonInputProtectionEnabled | + | | F12 |
− | |} | + | |- |
− | | + | | 70 |
− | = AppletFooterUiAttributesSet =
| + | | PrintScreen |
− | This is "nn::hid::system::AppletFooterUiAttributesSet". This is a BitFlagSet object for [[#AppletFooterUiAttribute]].
| + | |- |
− | | + | | 71 |
− | = UniquePadType =
| + | | ScrollLock |
− | This is "nn::hid::system::UniquePadType".
| + | |- |
− | | + | | 72 |
− | {| class="wikitable" border="1"
| + | | Pause |
− | ! Value
| |
− | ! Description
| |
| |- | | |- |
− | | 0 || Embedded | + | | 73 |
| + | | Insert |
| |- | | |- |
− | | 1 || FullKeyController | + | | 74 |
| + | | Home |
| |- | | |- |
− | | 2 || RightController | + | | 75 |
| + | | PageUp |
| |- | | |- |
− | | 3 || LeftController | + | | 76 |
| + | | Delete |
| |- | | |- |
− | | 4 || DebugPadController | + | | 77 |
− | |}
| + | | End |
− | | |
− | = UniquePadInterface =
| |
− | This is "nn::hid::system::UniquePadInterface".
| |
− | | |
− | {| class="wikitable" border="1"
| |
− | ! Value
| |
− | ! Description
| |
| |- | | |- |
− | | 0 || Embedded | + | | 78 |
| + | | PageDown |
| |- | | |- |
− | | 1 || Rail | + | | 79 |
| + | | RightArrow |
| |- | | |- |
− | | 2 || Bluetooth | + | | 80 |
| + | | LeftArrow |
| |- | | |- |
− | | 3 || Usb | + | | 81 |
− | |}
| + | | DownArrow |
− | | |
− | = 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 | + | | 82 |
| + | | UpArrow |
| |- | | |- |
− | | 1 || ReleaseFromBottom | + | | 83 |
| + | | NumLock |
| |- | | |- |
− | | 2 || ReleaseFromLeft | + | | 84 |
| + | | NumPadDivide |
| |- | | |- |
− | | 3 || ReleaseFromTop | + | | 85 |
| + | | NumPadMultiply |
| |- | | |- |
− | | 4 || Rotate | + | | 86 |
| + | | NumPadSubtract |
| |- | | |- |
− | | 5 || Update | + | | 87 |
| + | | NumPadAdd |
| |- | | |- |
− | | 6 || Completed | + | | 88 |
| + | | NumPadEnter |
| |- | | |- |
− | | 7 || Clear | + | | 89 |
| + | | NumPad1 |
| |- | | |- |
− | | 8 || ClearCompleted | + | | 90 |
− | |} | + | | NumPad2 |
− | | + | |- |
− | = SixAxisSensorUserCalibrationStage =
| + | | 91 |
− | This is "nn::hid::system::SixAxisSensorUserCalibrationStage".
| + | | NumPad3 |
− | | + | |- |
− | {| class="wikitable" border="1"
| + | | 92 |
− | ! Value
| + | | NumPad4 |
− | ! Description
| + | |- |
| + | | 93 |
| + | | NumPad5 |
| |- | | |- |
− | | 0 || Measuring | + | | 94 |
| + | | NumPad6 |
| |- | | |- |
− | | 1 || Update | + | | 95 |
| + | | NumPad7 |
| |- | | |- |
− | | 2 || Completed | + | | 96 |
− | |}
| + | | NumPad8 |
− | | |
− | = NpadJoyHoldType =
| |
− | This is "nn::hid::NpadJoyHoldType".
| |
− | | |
− | {| class="wikitable" border="1"
| |
− | ! Value
| |
− | ! Description
| |
| |- | | |- |
− | | 0 || Vertical | + | | 97 |
| + | | NumPad9 |
| |- | | |- |
− | | 1 || Horizontal | + | | 98 |
− | |}
| + | | NumPad0 |
− | | |
− | = NpadJoyDeviceType =
| |
− | This is "nn::hid::NpadJoyDeviceType".
| |
− | | |
− | {| class="wikitable" border="1"
| |
− | ! Value
| |
− | ! Description
| |
| |- | | |- |
− | | 0 || Left | + | | 99 |
| + | | NumPadDot |
| |- | | |- |
− | | 1 || Right | + | | 100 |
− | |}
| + | | Backslash |
− | | |
− | = NpadHandheldActivationMode =
| |
− | This is "nn::hid::NpadHandheldActivationMode".
| |
− | | |
− | This controls how many joycons must be attached for handheld mode to be triggered (Dual = 2, Single = 1, None = 0).
| |
− | | |
− | {| class="wikitable" border="1"
| |
− | ! Value
| |
− | ! Description
| |
| |- | | |- |
− | | 0 || Dual | + | | 101 |
| + | | Application |
| |- | | |- |
− | | 1 || Single | + | | 102 |
| + | | Power |
| |- | | |- |
− | | 2 || None | + | | 103 |
− | |}
| + | | NumPadEquals |
− | | |
− | = NpadJoyAssignmentMode =
| |
− | This is "nn::hid::NpadJoyAssignmentMode".
| |
− | | |
− | {| class="wikitable" border="1"
| |
− | ! Value
| |
− | ! Description
| |
| |- | | |- |
− | | 0 || Dual | + | | 104 |
| + | | F13 |
| |- | | |- |
− | | 1 || Single | + | | 105 |
− | |}
| + | | F14 |
− | | |
− | = NpadCommunicationMode =
| |
− | This is "nn::hid::NpadCommunicationMode".
| |
− | | |
− | {| class="wikitable" border="1"
| |
− | ! Value
| |
− | ! Description
| |
| |- | | |- |
− | | 0 || 5ms | + | | 106 |
| + | | F15 |
| |- | | |- |
− | | 1 || 10ms | + | | 107 |
| + | | F16 |
| |- | | |- |
− | | 2 || 15ms | + | | 108 |
| + | | F17 |
| |- | | |- |
− | | 3 || Default | + | | 109 |
− | |}
| + | | F18 |
− | | |
− | = AppletDetailedUiType =
| |
− | This is "nn::hid::system::AppletDetailedUiType".
| |
− | | |
− | {| class="wikitable" border="1"
| |
− | ! Value
| |
− | ! Description
| |
| |- | | |- |
− | | 0x00000000 || None | + | | 110 |
| + | | F19 |
| |- | | |- |
− | | 0x01000000 || HandheldNone | + | | 111 |
| + | | F20 |
| |- | | |- |
− | | 0x02000000 || HandheldJoyConLeftOnly | + | | 112 |
| + | | F21 |
| |- | | |- |
− | | 0x02000001 || HandheldLarkHvc1Only | + | | 113 |
| + | | F22 |
| |- | | |- |
− | | 0x02000002 || HandheldLarkNesLeftOnly | + | | 114 |
| + | | F23 |
| |- | | |- |
− | | 0x03000000 || HandheldJoyConRightOnly | + | | 115 |
| + | | F24 |
| |- | | |- |
− | | 0x03000001 || HandheldLarkHvc2Only | + | | 133 |
| + | | NumPadComma |
| |- | | |- |
− | | 0x03000002 || HandheldLarkNesRightOnly | + | | 135 |
| + | | Ro |
| |- | | |- |
− | | 0x04000000 || HandheldJoyConLeftJoyConRight | + | | 136 |
| + | | KatakanaHiragana |
| |- | | |- |
− | | 0x04000001 || HandheldJoyConLeftLarkHvc2 | + | | 137 |
| + | | Yen |
| |- | | |- |
− | | 0x04000002 || HandheldJoyConLeftLarkNesRight | + | | 138 |
| + | | Henkan |
| |- | | |- |
− | | 0x04000003 || HandheldLarkHvc1JoyConRight | + | | 139 |
| + | | Muhenkan |
| |- | | |- |
− | | 0x04000004 || HandheldLarkHvc1LarkHvc2 | + | | 140 |
| + | | NumPadCommaPc98 |
| |- | | |- |
− | | 0x04000005 || HandheldLarkHvc1LarkNesRight | + | | 144 |
| + | | HangulEnglish |
| |- | | |- |
− | | 0x04000006 || HandheldLarkNesLeftJoyConRight | + | | 145 |
| + | | Hanja |
| |- | | |- |
− | | 0x04000007 || HandheldLarkNesLeftLarkHvc2 | + | | 146 |
| + | | Katakana |
| |- | | |- |
− | | 0x04000008 || HandheldLarkNesLeftLarkNesRight | + | | 147 |
| + | | Hiragana |
| |- | | |- |
− | | 0x05000000 || JoyDual | + | | 148 |
| + | | ZenkakuHankaku |
| |- | | |- |
− | | 0x06000000 || JoyDualLeftOnly | + | | 224 |
| + | | LeftControl |
| |- | | |- |
− | | 0x07000000 || JoyDualRightOnly | + | | 225 |
| + | | LeftShift |
| |- | | |- |
− | | 0x08000000 || JoyLeftHorizontal | + | | 226 |
| + | | LeftAlt |
| |- | | |- |
− | | 0x09000000 || JoyLeftVertical | + | | 227 |
| + | | LeftGui |
| |- | | |- |
− | | 0x0A000000 || JoyRightHorizontal | + | | 228 |
| + | | RightControl |
| |- | | |- |
− | | 0x0B000000 || JoyRightVertical | + | | 229 |
| + | | RightShift |
| |- | | |- |
− | | 0x0C000000 || SwitchProController | + | | 230 |
| + | | RightAlt |
| |- | | |- |
− | | 0x0D000000 || CompatibleProController | + | | 231 |
| + | | RightGui |
| + | |} |
| + | |
| + | = KeyboardLockKeyEventSet = |
| + | 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" |
| |- | | |- |
− | | 0x0E000000 || CompatibleJoyCon
| + | ! Bit |
| + | ! Description |
| |- | | |- |
− | | 0x0F000000 || LarkHvc1 | + | | 0 |
| + | | NumLockOn |
| |- | | |- |
− | | 0x10000000 || LarkHvc2 | + | | 1 |
| + | | NumLockOff |
| |- | | |- |
− | | 0x11000000 || LarkNesLeft | + | | 2 |
| + | | NumLockToggle |
| |- | | |- |
− | | 0x12000000 || LarkNesRight | + | | 3 |
| + | | CapsLockOn |
| |- | | |- |
− | | 0x13000000 || LuciaU | + | | 4 |
| + | | CapsLockOff |
| |- | | |- |
− | | 0x13000001 || LuciaJ | + | | 5 |
| + | | CapsLockToggle |
| |- | | |- |
− | | 0x13000002 || LuciaE | + | | 6 |
| + | | ScrollLockOn |
| |- | | |- |
− | | 0x14000000 || Verification | + | | 7 |
| + | | ScrollLockOff |
| |- | | |- |
− | | 0xFFFFFFFF || Unknown | + | | 8 |
| + | | ScrollLockToggle |
| |} | | |} |
| | | |
− | = AppletFooterUiType = | + | = BasicXpadButtonSet = |
− | This is "nn::hid::system::AppletFooterUiType". | + | 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" | | {| class="wikitable" border="1" |
− | ! Value
| |
− | ! Description
| |
| |- | | |- |
− | | 0 || None
| + | ! Bit |
| + | ! Description |
| |- | | |- |
− | | 1 || HandheldNone | + | | 0 |
| + | | A |
| |- | | |- |
− | | 2 || HandheldJoyConLeftOnly | + | | 1 |
| + | | B |
| + | |- |
| + | | 2 |
| + | | X |
| |- | | |- |
− | | 3 || HandheldJoyConRightOnly | + | | 3 |
| + | | Y |
| |- | | |- |
− | | 4 || HandheldJoyConLeftJoyConRight | + | | 4 |
| + | | StickL |
| |- | | |- |
− | | 5 || JoyDual | + | | 5 |
| + | | StickR |
| |- | | |- |
− | | 6 || JoyDualLeftOnly | + | | 6 |
| + | | L |
| |- | | |- |
− | | 7 || JoyDualRightOnly | + | | 7 |
| + | | R |
| |- | | |- |
− | | 8 || JoyLeftHorizontal | + | | 8 |
| + | | ZL |
| |- | | |- |
− | | 9 || JoyLeftVertical | + | | 9 |
| + | | ZR |
| |- | | |- |
− | | 10 || JoyRightHorizontal | + | | 10 |
| + | | Plus |
| |- | | |- |
− | | 11 || JoyRightVertical | + | | 11 |
| + | | Minus |
| |- | | |- |
− | | 12 || SwitchProController | + | | 12 |
| + | | Left |
| |- | | |- |
− | | 13 || CompatibleProController | + | | 13 |
| + | | Up |
| |- | | |- |
− | | 14 || CompatibleJoyCon | + | | 14 |
| + | | Right |
| |- | | |- |
− | | 15 || LarkHvc1 | + | | 15 |
| + | | Down |
| |- | | |- |
− | | 16 || LarkHvc2 | + | | 16 |
| + | | StickLLeft |
| |- | | |- |
− | | 17 || LarkNesLeft | + | | 17 |
| + | | StickLUp |
| |- | | |- |
− | | 18 || LarkNesRight | + | | 18 |
| + | | StickLRight |
| |- | | |- |
− | | 19 || Lucia | + | | 19 |
| + | | StickLDown |
| |- | | |- |
− | | 20 || Verification | + | | 20 |
− | |}
| + | | StickRLeft |
− | | |
− | = NpadIdType =
| |
− | This is "nn::hid::NpadIdType". This is the controller index used in [[#SharedMemoryFormat|sharedmem]].
| |
− | | |
− | {| class="wikitable" border="1"
| |
− | ! Value
| |
− | ! Description
| |
| |- | | |- |
− | | 0x0 || No1 | + | | 21 |
| + | | StickRUp |
| |- | | |- |
− | | 0x1 || No2 | + | | 22 |
| + | | StickRRight |
| |- | | |- |
− | | 0x2 || No3 | + | | 23 |
| + | | StickRDown |
| |- | | |- |
− | | 0x3 || No4 | + | | 24 |
| + | | LeftSL |
| |- | | |- |
− | | 0x4 || No5 | + | | 25 |
| + | | LeftSR |
| |- | | |- |
− | | 0x5 || No6 | + | | 26 |
| + | | RightSL |
| |- | | |- |
− | | 0x6 || No7 | + | | 27 |
| + | | RightSR |
| |- | | |- |
− | | 0x7 || No8 | + | | 28 |
| + | | Palma |
| |- | | |- |
− | | 0x10 || Other | + | | 29 |
| + | | |
| |- | | |- |
− | | 0x20 || Handheld | + | | 30 |
| + | | HandheldLeftB (Left B button on NES controllers in Handheld mode) |
| |} | | |} |
| | | |
− | = NpadInterfaceType = | + | = AnalogStickCalibrationFlagsSet = |
− | This is "nn::hid::NpadInterfaceType". | + | This is "nn::hid::detail::AnalogStickCalibrationFlagsSet". This is a BitFlagSet object for [[#AnalogStickCalibrationFlags]]. |
| + | |
| + | = SixAxisSensorUserCalibrationFlagsSet = |
| + | This is "nn::hid::detail::SixAxisSensorUserCalibrationFlagsSet". This is a BitFlagSet object for [[#SixAxisSensorUserCalibrationFlags]]. |
| + | |
| + | = NpadStyleSet = |
| + | This is "nn::hid::NpadStyleSet". This is a BitFlagSet object for [[#NpadStyleTag]]. |
| + | |
| + | = NpadStyleTag = |
| + | This is "nn::hid::NpadStyleTag". |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
− | ! Value | + | ! Bits |
| ! Description | | ! Description |
| + | ! Notes |
| |- | | |- |
− | | 1 || Bluetooth | + | | 0 |
| + | | NpadStyleFullKey |
| + | | Pro Controller |
| |- | | |- |
− | | 2 || Rail | + | | 1 |
| + | | NpadStyleHandheld |
| + | | Joy-Con controller in handheld mode |
| |- | | |- |
− | | 3 || USB | + | | 2 |
| + | | NpadStyleJoyDual |
| + | | Joy-Con controller in dual mode |
| |- | | |- |
− | | 4 || Unknown | + | | 3 |
− | |} | + | | NpadStyleJoyLeft |
− | | + | | Joy-Con left controller in single mode |
− | = NpadLarkType =
| |
− | This is "nn::hid::NpadLarkType".
| |
− | | |
− | {| class="wikitable" border="1"
| |
− | ! Value
| |
− | ! Description
| |
| |- | | |- |
− | | 0 || Invalid | + | | 4 |
| + | | NpadStyleJoyRight |
| + | | Joy-Con right controller in single mode |
| |- | | |- |
− | | 1 || H1 | + | | 5 |
| + | | NpadStyleGc |
| + | | GameCube controller |
| |- | | |- |
− | | 2 || H2 | + | | 6 |
| + | | NpadStylePalma |
| + | | Poké Ball Plus controller |
| |- | | |- |
− | | 3 || NL | + | | 7 |
| + | | NpadStyleLark |
| + | | NES/Famicom controller |
| |- | | |- |
− | | 4 || NR | + | | 8 |
− | |} | + | | NpadStyleHandheldLark |
− | | + | | NES/Famicom controller in handheld mode |
− | = NpadLuciaType =
| |
− | This is "nn::hid::NpadLuciaType".
| |
− | | |
− | {| class="wikitable" border="1"
| |
− | ! Value
| |
− | ! Description
| |
| |- | | |- |
− | | 0 || Invalid | + | | 9 |
| + | | NpadStyleLucia |
| + | | SNES controller |
| |- | | |- |
− | | 1 || J | + | | 10-28 |
| + | | Reserved |
| + | | |
| |- | | |- |
− | | 2 || E | + | | 29 |
| + | | NpadStyleSystemExt |
| + | | Generic external controller |
| + | |- |
| + | | 30 |
| + | | NpadStyleSystem |
| + | | Generic controller |
| |- | | |- |
− | | 3 || U | + | | 31 |
| + | | Reserved |
| + | | |
| |} | | |} |
| | | |
− | = GestureDirection = | + | = NpadDeviceTypeSet = |
− | This is "nn::hid::GestureDirection". | + | 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" |
− | ! Value
| |
− | ! Description
| |
| |- | | |- |
− | | 0 || None
| + | ! Bit |
| + | ! Description |
| |- | | |- |
− | | 1 || Left | + | | 0 |
| + | | IsChargingJoyDual |
| |- | | |- |
− | | 2 || Up | + | | 1 |
| + | | IsChargingJoyLeft |
| |- | | |- |
− | | 3 || Right | + | | 2 |
| + | | IsChargingJoyRight |
| |- | | |- |
− | | 4 || Down | + | | 3 |
− | |}
| + | | IsPoweredJoyDual |
− | | |
− | = GestureType =
| |
− | This is "nn::hid::GestureType".
| |
− | | |
− | {| class="wikitable" border="1"
| |
− | ! Value
| |
− | ! Description
| |
| |- | | |- |
− | | 0 || Idle | + | | 4 |
| + | | IsPoweredJoyLeft |
| |- | | |- |
− | | 1 || Complete | + | | 5 |
| + | | IsPoweredJoyRight |
| |- | | |- |
− | | 2 || Cancel | + | | 9 |
| + | | IsUnsuportedButtonPressedOnNpadSystem |
| |- | | |- |
− | | 3 || Touch | + | | 10 |
| + | | IsUnsuportedButtonPressedOnNpadSystemExt |
| |- | | |- |
− | | 4 || Press | + | | 11 |
| + | | IsAbxyButtonOriented |
| + | |- |
| + | | 12 |
| + | | IsSlSrButtonOriented |
| |- | | |- |
− | | 5 || Tap | + | | 13 |
| + | | [4.0.0+] IsPlusAvailable |
| |- | | |- |
− | | 6 || Pan | + | | 14 |
| + | | [4.0.0+] IsMinusAvailable |
| |- | | |- |
− | | 7 || Swipe | + | | 15 |
| + | | [8.0.0+] IsDirectionalButtonsAvailable |
| + | |} |
| + | |
| + | = NpadSystemButtonPropertiesSet = |
| + | This is "nn::hid::detail::NpadSystemButtonPropertiesSet". This is a BitFlagSet object for [[#NpadSystemButtonProperties]]. |
| + | |
| + | = NpadSystemButtonProperties = |
| + | This is "nn::hid::NpadSystemButtonProperties". This is a 32-bit flag. |
| + | |
| + | {| class="wikitable" border="1" |
| |- | | |- |
− | | 8 || Pinch
| + | ! Bit |
| + | ! Description |
| |- | | |- |
− | | 9 || Rotate | + | | 0 |
| + | | IsUnintendedHomeButtonInputProtectionEnabled |
| |} | | |} |
| | | |
− | = DeviceHandle = | + | = AppletFooterUiAttributesSet = |
− | This is "nn::xcd::DeviceHandle". This is a 8 byte value. | + | This is "nn::hid::system::AppletFooterUiAttributesSet". This is a BitFlagSet object for [[#AppletFooterUiAttribute]]. |
| | | |
− | = DeviceType = | + | = UniquePadType = |
− | This is "nn::hid::system::DeviceType". | + | This is "nn::hid::system::UniquePadType". |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
− | ! Bits | + | ! Value |
| ! Description | | ! Description |
| |- | | |- |
− | | 0 | + | | 0 || Embedded |
− | | FullKey | |
| |- | | |- |
− | | 1 | + | | 1 || FullKeyController |
− | | DebugPad | |
| |- | | |- |
− | | 2 | + | | 2 || RightController |
− | | HandheldLeft | |
| |- | | |- |
− | | 3 | + | | 3 || LeftController |
− | | HandheldRight | |
| |- | | |- |
− | | 4 | + | | 4 || DebugPadController |
− | | JoyLeft | + | |} |
− | |- | + | |
− | | 5 | + | = UniquePadInterface = |
− | | JoyRight | + | This is "nn::hid::system::UniquePadInterface". |
| + | |
| + | {| class="wikitable" border="1" |
| + | ! Value |
| + | ! Description |
| + | |- |
| + | | 0 || Embedded |
| |- | | |- |
− | | 6 | + | | 1 || Rail |
− | | Palma | |
| |- | | |- |
− | | 7 | + | | 2 || Bluetooth |
− | | LarkHvcLeft | |
| |- | | |- |
− | | 8 | + | | 3 || Usb |
− | | LarkHvcRight | + | |} |
| + | |
| + | = 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 |
| |- | | |- |
− | | 9 | + | | 0 || ReleaseFromRight |
− | | LarkNesLeft | |
| |- | | |- |
− | | 10 | + | | 1 || ReleaseFromBottom |
− | | LarkNesRight | |
| |- | | |- |
− | | 11 | + | | 2 || ReleaseFromLeft |
− | | HandheldLarkHvcLeft | |
| |- | | |- |
− | | 12 | + | | 3 || ReleaseFromTop |
− | | HandheldLarkHvcRight | |
| |- | | |- |
− | | 13 | + | | 4 || Rotate |
− | | HandheldLarkNesLeft | |
| |- | | |- |
− | | 14 | + | | 5 || Update |
− | | HandheldLarkNesRight | |
| |- | | |- |
− | | 15 | + | | 6 || Completed |
− | | Lucia | |
| |- | | |- |
− | | 16-30 | + | | 7 || Clear |
− | | Reserved | |
| |- | | |- |
− | | 31 | + | | 8 || ClearCompleted |
− | | System | |
| |} | | |} |
| | | |
− | = DeviceTypeInternal = | + | = SixAxisSensorUserCalibrationStage = |
− | This is "nn::hid::detail::DeviceTypeInternal". | + | This is "nn::hid::system::SixAxisSensorUserCalibrationStage". |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
− | ! Bits | + | ! Value |
| ! Description | | ! Description |
| |- | | |- |
− | | 0-7 | + | | 0 || Measuring |
− | | BIT(N*4+0) = Pro Controller, BIT(N*4+1) = Joy-Con Left, BIT(N*4+2) = Joy-Con Right, BIT(N*4+3) = invalid. Where N is 0-1. | |
| |- | | |- |
− | | 8-10 | + | | 1 || Update |
− | | Pro Controller | |
| |- | | |- |
− | | 11 | + | | 2 || Completed |
− | | Famicom left controller | + | |} |
| + | |
| + | = NpadJoyHoldType = |
| + | This is "nn::hid::NpadJoyHoldType". |
| + | |
| + | {| class="wikitable" border="1" |
| + | ! Value |
| + | ! Description |
| |- | | |- |
− | | 12 | + | | 0 || Vertical |
− | | Famicom right controller (with microphone) | |
| |- | | |- |
− | | 13 | + | | 1 || Horizontal |
− | | 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".
| + | = NpadJoyDeviceType = |
| + | This is "nn::hid::NpadJoyDeviceType". |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| ! Value | | ! Value |
− | ! [[#DeviceType|DeviceType]]
| |
− | ! [[#UniquePadType|UniquePadType]]
| |
| ! Description | | ! Description |
| |- | | |- |
− | | 1 || JoyRight, HandheldRight || JoyRight || Joy-Con right controller | + | | 0 || Left |
| |- | | |- |
− | | 2 || JoyLeft, HandheldLeft || JoyLeft || Joy-Con left controller | + | | 1 || Right |
− | |-
| + | |} |
− | | 3 || FullKey || FullKey || Pro Controller
| + | |
| + | = NpadHandheldActivationMode = |
| + | This is "nn::hid::NpadHandheldActivationMode". |
| + | |
| + | This controls how many joycons must be attached for handheld mode to be triggered (Dual = 2, Single = 1, None = 0). |
| + | |
| + | {| class="wikitable" border="1" |
| + | ! Value |
| + | ! Description |
| |- | | |- |
− | | 4 || JoyLeft || JoyLeft || Reserved | + | | 0 || Dual |
| |- | | |- |
− | | 5 || JoyRight || JoyRight || Reserved | + | | 1 || Single |
| |- | | |- |
− | | 6 || FullKey || FullKey || Reserved | + | | 2 || None |
| + | |} |
| + | |
| + | = NpadJoyAssignmentMode = |
| + | This is "nn::hid::NpadJoyAssignmentMode". |
| + | |
| + | {| class="wikitable" border="1" |
| + | ! Value |
| + | ! Description |
| |- | | |- |
− | | 7 || LarkHvcLeft, HandheldLarkHvcLeft || JoyLeft || Famicom left controller | + | | 0 || Dual |
| |- | | |- |
− | | 8 || LarkHvcRight, HandheldLarkHvcRight || JoyRight || Famicom right controller (with microphone) | + | | 1 || Single |
| + | |} |
| + | |
| + | = NpadCommunicationMode = |
| + | This is "nn::hid::NpadCommunicationMode". |
| + | |
| + | {| class="wikitable" border="1" |
| + | ! Value |
| + | ! Description |
| |- | | |- |
− | | 9 || LarkNesLeft, HandheldLarkNesLeft || JoyLeft || NES left controller | + | | 0 || 5ms |
| |- | | |- |
− | | 10 || LarkNesRight, HandheldLarkNesRight || JoyRight || NES right controller | + | | 1 || 10ms |
| |- | | |- |
− | | 11 || Lucia || FullKey || SNES controller | + | | 2 || 15ms |
| |- | | |- |
− | | 12 || Palma || Other || Poké Ball Plus controller | + | | 3 || Default |
| + | |} |
| + | |
| + | = AppletDetailedUiType = |
| + | This is "nn::hid::system::AppletDetailedUiType". |
| + | |
| + | {| class="wikitable" border="1" |
| + | ! Value |
| + | ! Description |
| |- | | |- |
− | | 13 || FullKey || FullKey || Gc controller | + | | 0x00000000 || None |
| |- | | |- |
− | | 14 || HandheldLeft || JoyLeft || Reserved | + | | 0x01000000 || HandheldNone |
| |- | | |- |
− | | 15 || FullKey || FullKey || Reserved | + | | 0x02000000 || HandheldJoyConLeftOnly |
| |- | | |- |
− | | 16 || FullKey || FullKey || Reserved | + | | 0x02000001 || HandheldLarkHvc1Only |
| |- | | |- |
− | | 17 || DebugPad || DebugPad || Debug controller | + | | 0x02000002 || HandheldLarkNesLeftOnly |
| + | |- |
| + | | 0x03000000 || HandheldJoyConRightOnly |
| |- | | |- |
− | | 18 || HandheldRight || JoyRight || Reserved | + | | 0x03000001 || HandheldLarkHvc2Only |
| |- | | |- |
− | | 19 || System || Other || Unknown (has [[#NpadStyleTag|NpadFullKey]] style tag) | + | | 0x03000002 || HandheldLarkNesRightOnly |
| |- | | |- |
− | | 20 || System || Other || Unknown (has [[#NpadStyleTag|NpadJoyDual]] style tag) | + | | 0x04000000 || HandheldJoyConLeftJoyConRight |
| |- | | |- |
− | | 21 || System || Other || Unknown (has [[#NpadStyleTag|NpadJoyDual]] style tag) | + | | 0x04000001 || HandheldJoyConLeftLarkHvc2 |
− | |}
| |
− | | |
− | = NpadPowerInfo =
| |
− | This is "nn::hid::system::NpadPowerInfo".
| |
− | | |
− | {| class="wikitable" border="1"
| |
| |- | | |- |
− | ! Offset
| + | | 0x04000002 || HandheldJoyConLeftLarkNesRight |
− | ! Size
| |
− | ! Description
| |
| |- | | |- |
− | | 0x0 | + | | 0x04000003 || HandheldLarkHvc1JoyConRight |
− | | 0x1 | |
− | | IsPowered | |
| |- | | |- |
− | | 0x1 | + | | 0x04000004 || HandheldLarkHvc1LarkHvc2 |
− | | 0x1 | |
− | | IsCharging | |
| |- | | |- |
− | | 0x2 | + | | 0x04000005 || HandheldLarkHvc1LarkNesRight |
− | | 0x6 | |
− | | Reserved | |
| |- | | |- |
− | | 0x8 | + | | 0x04000006 || HandheldLarkNesLeftJoyConRight |
− | | 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
| + | | 0x04000007 || HandheldLarkNesLeftLarkHvc2 |
| |- | | |- |
− | | 0x0 || 0x4 || TypeValue | + | | 0x04000008 || HandheldLarkNesLeftLarkNesRight |
| |- | | |- |
− | | 0x0 || 0x1 || | + | | 0x05000000 || JoyDual |
| |- | | |- |
− | | 0x1 || 0x1 || | + | | 0x06000000 || JoyDualLeftOnly |
− | |} | + | |- |
− | | + | | 0x07000000 || JoyDualRightOnly |
− | = SixAxisSensorHandle =
| + | |- |
− | This is "nn::hid::SixAxisSensorHandle". This is a 4-byte struct with 4-byte alignment.
| + | | 0x08000000 || JoyLeftHorizontal |
− | | + | |- |
− | {| class="wikitable" border="1"
| + | | 0x09000000 || JoyLeftVertical |
| + | |- |
| + | | 0x0A000000 || JoyRightHorizontal |
| |- | | |- |
− | ! Offset || Size || Description
| + | | 0x0B000000 || JoyRightVertical |
| |- | | |- |
− | | 0x0 || 0x4 || TypeValue | + | | 0x0C000000 || SwitchProController |
| |- | | |- |
− | | 0x0 || 0x1 || NpadStyleIndex | + | | 0x0D000000 || CompatibleProController |
| |- | | |- |
− | | 0x1 || 0x1 || [[#NpadIdType|PlayerNumber]] | + | | 0x0E000000 || CompatibleJoyCon |
| |- | | |- |
− | | 0x2 || 0x1 || DeviceIdx | + | | 0x0F000000 || LarkHvc1 |
− | |}
| |
− | | |
− | = VibrationDeviceHandle =
| |
− | This is "nn::hid::VibrationDeviceHandle". This is a 4-byte struct with 4-byte alignment.
| |
− | | |
− | {| class="wikitable" border="1"
| |
| |- | | |- |
− | ! Offset || Size || Description
| + | | 0x10000000 || LarkHvc2 |
| |- | | |- |
− | | 0x0 || 0x4 || TypeValue | + | | 0x11000000 || LarkNesLeft |
| |- | | |- |
− | | 0x0 || 0x1 || NpadStyleIndex | + | | 0x12000000 || LarkNesRight |
| |- | | |- |
− | | 0x1 || 0x1 || [[#NpadIdType|PlayerNumber]] | + | | 0x13000000 || LuciaU |
| |- | | |- |
− | | 0x2 || 0x1 || DeviceIdx | + | | 0x13000001 || LuciaJ |
− | |}
| |
− | | |
− | = VibrationDeviceInfo =
| |
− | This is "nn::hid::VibrationDeviceInfo" / "nn::hid::VibrationDeviceInfoForIpc". This is a 0x8-byte struct.
| |
− | | |
− | {| class="wikitable" border="1"
| |
| |- | | |- |
− | ! Offset || Size || Description
| + | | 0x13000002 || LuciaE |
| |- | | |- |
− | | 0x0 || 0x4 || [[#VibrationDeviceType|DeviceType]] | + | | 0x14000000 || Verification |
| |- | | |- |
− | | 0x4 || 0x4 || [[#VibrationDevicePosition|Position]] | + | | 0xFFFFFFFF || Unknown |
| |} | | |} |
| | | |
− | = VibrationDeviceType = | + | = AppletFooterUiType = |
− | This is "nn::hid::VibrationDeviceType". | + | This is "nn::hid::system::AppletFooterUiType". |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 6,882: |
Line 7,049: |
| ! Description | | ! Description |
| |- | | |- |
− | | 0 || Unknown | + | | 0 || None |
| |- | | |- |
− | | 1 || LinearResonantActuator | + | | 1 || HandheldNone |
| |- | | |- |
− | | 2 || GcErm | + | | 2 || HandheldJoyConLeftOnly |
− | |}
| |
− | | |
− | = VibrationDevicePosition =
| |
− | This is "nn::hid::VibrationDevicePosition".
| |
− | | |
− | {| class="wikitable" border="1"
| |
− | ! Value
| |
− | ! Description
| |
| |- | | |- |
− | | 0 || None | + | | 3 || HandheldJoyConRightOnly |
| |- | | |- |
− | | 1 || Left | + | | 4 || HandheldJoyConLeftJoyConRight |
| |- | | |- |
− | | 2 || Right | + | | 5 || JoyDual |
− | |}
| |
− | | |
− | = VibrationValue =
| |
− | This is "nn::hid::VibrationValue". This is a 0x10-byte struct, which contains 4 float values.
| |
− | | |
− | {| class="wikitable" border="1"
| |
| |- | | |- |
− | ! Offset
| + | | 6 || JoyDualLeftOnly |
− | ! Size
| |
− | ! Description
| |
| |- | | |- |
− | | 0x0 | + | | 7 || JoyDualRightOnly |
− | | 0x4 | |
− | | AmplitudeLow | |
| |- | | |- |
− | | 0x4 | + | | 8 || JoyLeftHorizontal |
− | | 0x4 | |
− | | FrequencyLow | |
| |- | | |- |
− | | 0x8 | + | | 9 || JoyLeftVertical |
− | | 0x4 | |
− | | AmplitudeHigh | |
| |- | | |- |
− | | 0xC | + | | 10 || JoyRightHorizontal |
− | | 0x4 | |
− | | FrequencyHigh | |
− | |}
| |
− | | |
− | = VibrationGcErmCommand =
| |
− | This is "nn::hid::VibrationGcErmCommand".
| |
− | | |
− | {| class="wikitable" border="1"
| |
− | ! Value
| |
− | ! Name
| |
− | ! Description
| |
| |- | | |- |
− | | 0 || Stop || Stops the vibration with a decay phase. | + | | 11 || JoyRightVertical |
| |- | | |- |
− | | 1 || Start || Starts the vibration. | + | | 12 || SwitchProController |
| |- | | |- |
− | | 2 || StopHard || Stops the vibration immediately, with no decay phase. | + | | 13 || CompatibleProController |
| + | |- |
| + | | 14 || CompatibleJoyCon |
| + | |- |
| + | | 15 || LarkHvc1 |
| + | |- |
| + | | 16 || LarkHvc2 |
| + | |- |
| + | | 17 || LarkNesLeft |
| + | |- |
| + | | 18 || LarkNesRight |
| + | |- |
| + | | 19 || Lucia |
| + | |- |
| + | | 20 || Verification |
| |} | | |} |
| | | |
− | = AccelerometerPlayMode = | + | = NpadIdType = |
− | This is "nn::hid::debug::AccelerometerPlayMode" (pre-10.0.0 this is "nn::hid::AccelerometerPlayMode"). | + | This is "nn::hid::NpadIdType". This is the controller index used in [[#SharedMemoryFormat|sharedmem]]. |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 6,951: |
Line 7,099: |
| ! Description | | ! Description |
| |- | | |- |
− | | 0 || Loose | + | | 0x0 || No1 |
| + | |- |
| + | | 0x1 || No2 |
| + | |- |
| + | | 0x2 || No3 |
| + | |- |
| + | | 0x3 || No4 |
| + | |- |
| + | | 0x4 || No5 |
| + | |- |
| + | | 0x5 || No6 |
| + | |- |
| + | | 0x6 || No7 |
| + | |- |
| + | | 0x7 || No8 |
| + | |- |
| + | | 0x10 || Other |
| |- | | |- |
− | | 1 || Tight | + | | 0x20 || Handheld |
| |} | | |} |
| | | |
− | = GyroscopeZeroDriftMode = | + | = NpadInterfaceType = |
− | This is "nn::hid::GyroscopeZeroDriftMode". | + | This is "nn::hid::NpadInterfaceType". |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 6,963: |
Line 7,127: |
| ! Description | | ! Description |
| |- | | |- |
− | | 0 || Loose | + | | 1 || Bluetooth |
| + | |- |
| + | | 2 || Rail |
| |- | | |- |
− | | 1 || Standard | + | | 3 || USB |
| |- | | |- |
− | | 2 || Tight | + | | 4 || Unknown |
| |} | | |} |
| | | |
− | = PalmaConnectionHandle = | + | = NpadLarkType = |
− | This is "nn::hid::PalmaConnectionHandle". This is a 0x8-byte struct with 8-byte alignment. | + | This is "nn::hid::NpadLarkType". |
− | | |
− | = PalmaOperationInfo =
| |
− | This is "nn::hid::PalmaOperationInfo". This is a 0x148-byte struct.
| |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| + | ! Value |
| + | ! Description |
| + | |- |
| + | | 0 || Invalid |
| |- | | |- |
− | ! Offset || Size || Description
| + | | 1 || H1 |
| |- | | |- |
− | | 0x0 || 0x4 || [[#PalmaOperationType]] | + | | 2 || H2 |
| |- | | |- |
− | | 0x4 || 0x4 || Result | + | | 3 || NL |
| |- | | |- |
− | | 0x8 || 0x140 || Buffer for [[#GetPalmaOperationInfo]]. | + | | 4 || NR |
| |} | | |} |
| | | |
− | = PalmaOperationType = | + | = NpadLuciaType = |
− | This is "nn::hid::PalmaOperationType". | + | This is "nn::hid::NpadLuciaType". |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 6,994: |
Line 7,161: |
| ! Description | | ! Description |
| |- | | |- |
− | | 0 || PlayActivity | + | | 0 || Invalid |
| |- | | |- |
− | | 1 || SetFrModeType | + | | 1 || J |
| |- | | |- |
− | | 2 || ReadStep | + | | 2 || E |
| |- | | |- |
− | | 3 || EnableStep | + | | 3 || U |
| + | |} |
| + | |
| + | = GestureDirection = |
| + | This is "nn::hid::GestureDirection". |
| + | |
| + | {| class="wikitable" border="1" |
| + | ! Value |
| + | ! Description |
| |- | | |- |
− | | 4 || ResetStep | + | | 0 || None |
| |- | | |- |
− | | 5 || ReadApplicationSection | + | | 1 || Left |
| |- | | |- |
− | | 6 || WriteApplicationSection | + | | 2 || Up |
| |- | | |- |
− | | 7 || ReadUniqueCode | + | | 3 || Right |
| |- | | |- |
− | | 8 || SetUniqueCodeInvalid | + | | 4 || Down |
| + | |} |
| + | |
| + | = GestureType = |
| + | This is "nn::hid::GestureType". |
| + | |
| + | {| class="wikitable" border="1" |
| + | ! Value |
| + | ! Description |
| |- | | |- |
− | | 9 || WriteActivityEntry | + | | 0 || Idle |
| |- | | |- |
− | | 10 || WriteRgbLedPatternEntry | + | | 1 || Complete |
| |- | | |- |
− | | 11 || WriteWaveEntry | + | | 2 || Cancel |
| |- | | |- |
− | | 12 || ReadDataBaseIdentificationVersion | + | | 3 || Touch |
| |- | | |- |
− | | 13 || WriteDataBaseIdentificationVersion | + | | 4 || Press |
| + | |- |
| + | | 5 || Tap |
| + | |- |
| + | | 6 || Pan |
| |- | | |- |
− | | 14 || SuspendFeature | + | | 7 || Swipe |
| |- | | |- |
− | | [[5.1.0]]+ 15 || ReadPlayLog | + | | 8 || Pinch |
| |- | | |- |
− | | [[5.1.0]]+ 16 || ResetPlayLog | + | | 9 || Rotate |
| |} | | |} |
| | | |
− | = PalmaFrModeType = | + | = DeviceHandle = |
− | This is "nn::hid::PalmaFrModeType". | + | 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" |
− | ! Value | + | ! Bits |
| ! Description | | ! Description |
| |- | | |- |
− | | 0 || Off | + | | 0 |
| + | | FullKey |
| |- | | |- |
− | | 1 || B01 | + | | 1 |
| + | | DebugPad |
| |- | | |- |
− | | 2 || B02 | + | | 2 |
| + | | HandheldLeft |
| |- | | |- |
− | | 3 || B03 | + | | 3 |
| + | | HandheldRight |
| |- | | |- |
− | | 4 || Downloaded | + | | 4 |
− | |}
| + | | JoyLeft |
− | | |
− | = 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
| + | | 5 |
| + | | JoyRight |
| |- | | |- |
− | | 0x0 || 0x2 || RgbLedPatternIndex. | + | | 6 |
| + | | Palma |
| |- | | |- |
− | | 0x2 || 0x2 || Padding | + | | 7 |
| + | | LarkHvcLeft |
| |- | | |- |
− | | 0x4 || 0x4 || [[#PalmaWaveSet|WaveSet]]. | + | | 8 |
| + | | LarkHvcRight |
| |- | | |- |
− | | 0x8 || 0x2 || WaveIndex. | + | | 9 |
− | |}
| + | | LarkNesLeft |
− | | |
− | = PalmaWaveSet =
| |
− | This is "nn::hid::PalmaWaveSet".
| |
− | | |
− | {| class="wikitable" border="1"
| |
− | ! Value
| |
− | ! Description
| |
| |- | | |- |
− | | 0 || Small | + | | 10 |
| + | | LarkNesRight |
| |- | | |- |
− | | 1 || Medium | + | | 11 |
| + | | HandheldLarkHvcLeft |
| |- | | |- |
− | | 2 || Large | + | | 12 |
− | |}
| + | | HandheldLarkHvcRight |
− | | |
− | = PalmaFeature =
| |
− | This is "nn::hid::PalmaFeature".
| |
− | | |
− | {| class="wikitable" border="1"
| |
| |- | | |- |
− | ! Bit
| + | | 13 |
− | ! Description
| + | | HandheldLarkNesLeft |
| |- | | |- |
− | | 0 | + | | 14 |
− | | FrMode | + | | HandheldLarkNesRight |
| |- | | |- |
− | | 1 | + | | 15 |
− | | RumbleFeedback | + | | Lucia |
| |- | | |- |
− | | 2 | + | | 16-30 |
− | | Step
| + | | Reserved |
− | |-
| |
− | | 3 | |
− | | MuteSwitch
| |
| |- | | |- |
| + | | 31 |
| + | | System |
| |} | | |} |
| | | |
− | = AbstractedPadState = | + | = DeviceTypeInternal = |
| + | This is "nn::hid::detail::DeviceTypeInternal". |
| + | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| + | ! Bits |
| + | ! Description |
| |- | | |- |
− | ! Offset || Size || 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. |
| |- | | |- |
− | | 0x0 || 0x4 || Type, only 1 bit can be set. Converted to [[#HdlsDeviceInfo]]::type internally by [[#SetAutoPilotVirtualPadState]]. | + | | 8-10 |
| + | | Pro Controller |
| |- | | |- |
− | | 0x4 || 0x1 || Flags. [[#SetAutoPilotVirtualPadState]] only uses bit0: when clear it will skip using the rest of the input and run [[#UnsetAutoPilotVirtualPadState]] internally. | + | | 11 |
| + | | Famicom left controller |
| |- | | |- |
− | | 0x5 || 0x3 || Padding | + | | 12 |
| + | | Famicom right controller (with microphone) |
| |- | | |- |
− | | 0x8 || 0x4 || RGBA Single Body Color | + | | 13 |
| + | | NES left controller |
| |- | | |- |
− | | 0xC || 0x4 || RGBA Single Buttons Color | + | | 14 |
| + | | NES right controller |
| |- | | |- |
− | | 0x10 || 0x1 || See [[#HiddbgHdlsDeviceInfo]]::[[#NpadInterfaceType]]. | + | | 15-16 |
| + | | Invalid |
| |- | | |- |
− | | 0x11 || 0x3 || Padding | + | | 17 |
| + | | Generic external controller |
| |- | | |- |
− | | 0x14 || 0x24 || [[#HdlsState]]. Unknown if the last 4-bytes are included in this struct, [[#SetAutoPilotVirtualPadState]]/[[#hiddbgGetAbstractedPadsState]] only uses the first 0x20-bytes. | + | | 18-20 |
| + | | Invalid |
| |- | | |- |
− | | 0x38 || 0x60 || Unused with [[#SetAutoPilotVirtualPadState]]/[[#GetAbstractedPadsState]]. | + | | 21-23 |
| + | | Generic controller |
| |} | | |} |
| | | |
− | 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.
| + | [9.0.0+] This is "nn::hidtypes::DeviceType". |
| | | |
− | Type:
| |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
− | ! Bits | + | ! Value |
− | ! [[#HdlsDeviceInfo]]::type bits | + | ! [[#DeviceType|DeviceType]] |
| + | ! [[#UniquePadType|UniquePadType]] |
| ! Description | | ! Description |
− | ! Notes
| |
| |- | | |- |
− | | 0 || 0 || || | + | | 1 || JoyRight, HandheldRight || JoyRight || Joy-Con right controller |
| |- | | |- |
− | | 1 || 15 || || [[#DeviceType]] |= BIT(1) | + | | 2 || JoyLeft, HandheldLeft || JoyLeft || Joy-Con left controller |
| |- | | |- |
− | | 2 || 1 || || | + | | 3 || FullKey || FullKey || Pro Controller |
| |- | | |- |
− | | 3 || 2 || || | + | | 4 || JoyLeft || JoyLeft || Reserved |
| |- | | |- |
− | | 4 || 1 || || | + | | 5 || JoyRight || JoyRight || Reserved |
| |- | | |- |
− | | 5 || 2 || || | + | | 6 || FullKey || FullKey || Reserved |
| |- | | |- |
− | | 6 || 3 || || | + | | 7 || LarkHvcLeft, HandheldLarkHvcLeft || JoyLeft || Famicom left controller |
| |- | | |- |
− | | 7 || 11 || || [[#DeviceType]] |= BIT(11) | + | | 8 || LarkHvcRight, HandheldLarkHvcRight || JoyRight || Famicom right controller (with microphone) |
| |- | | |- |
− | | 8 || 12 || || [[#DeviceType]] |= BIT(12) | + | | 9 || LarkNesLeft, HandheldLarkNesLeft || JoyLeft || NES left controller |
| |- | | |- |
− | | 9 || 13 || || [[#DeviceType]] |= BIT(13) | + | | 10 || LarkNesRight, HandheldLarkNesRight || JoyRight || NES right controller |
| |- | | |- |
− | | 10 || 14 || || [[#DeviceType]] |= BIT(14) | + | | 11 || Lucia || FullKey || SNES controller |
| |- | | |- |
− | | 11 || 15 || || [[#DeviceType]] |= BIT(11) | + | | 12 || Palma || Other || Poké Ball Plus controller |
| |- | | |- |
− | | 12 || 12 || || [[#DeviceType]] |= BIT(12) | + | | 13 || FullKey || FullKey || Gc controller |
| |- | | |- |
− | | 13 || 13 || || [[#DeviceType]] |= BIT(13) | + | | 14 || HandheldLeft || JoyLeft || Reserved |
| + | |- |
| + | | 15 || FullKey || FullKey || Reserved |
| + | |- |
| + | | 16 || FullKey || FullKey || Reserved |
| + | |- |
| + | | 17 || DebugPad || DebugPad || Debug controller |
| |- | | |- |
− | | 14 || 14 || || [[#DeviceType]] |= BIT(14) | + | | 18 || HandheldRight || JoyRight || Reserved |
| |- | | |- |
− | | 15 || 17 || || | + | | 19 || System || Other || Unknown (has [[#NpadStyleTag|NpadFullKey]] style tag) |
| |- | | |- |
− | | 31 || 21 || || [[#DeviceType]] = BIT(31) | + | | 20 || System || Other || Unknown (has [[#NpadStyleTag|NpadJoyDual]] style tag) |
| |- | | |- |
| + | | 21 || System || Other || Unknown (has [[#NpadStyleTag|NpadJoyDual]] style tag) |
| |} | | |} |
| | | |
− | The above "[[#DeviceType]] |=" notes only apply when type2 is 0x2.
| + | = NpadPowerInfo = |
− | | + | This is "nn::hid::system::NpadPowerInfo". |
− | = DebugPadAutoPilotState = | |
− | This is "nn::hid::debug::DebugPadAutoPilotState" | |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 7,183: |
Line 7,380: |
| |- | | |- |
| | 0x0 | | | 0x0 |
− | | 0x4 | + | | 0x1 |
− | | [[#DebugPadAttributeSet|Attributes]] | + | | IsPowered |
| |- | | |- |
− | | 0x4 | + | | 0x1 |
− | | 0x4 | + | | 0x1 |
− | | [[#DebugPadButtonSet|Buttons]] | + | | IsCharging |
| |- | | |- |
− | | 0x8 | + | | 0x2 |
− | | 0x8 | + | | 0x6 |
− | | [[#AnalogStickState|AnalogStickL]] | + | | Reserved |
| |- | | |- |
− | | 0x10
| |
| | 0x8 | | | 0x8 |
− | | [[#AnalogStickState|AnalogStickR]] | + | | 0x6 |
| + | | [[#BatteryLevel|BatteryLevel]] |
| |} | | |} |
| | | |
− | = MouseAutoPilotState = | + | = BatteryLevel = |
− | This is "nn::hid::debug::MouseAutoPilotState". | + | 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" | | {| class="wikitable" border="1" |
| |- | | |- |
− | ! Offset | + | ! Offset || Size || Description |
− | ! Size
| |
− | ! Description
| |
| |- | | |- |
− | | 0x0 | + | | 0x0 || 0x4 || TypeValue |
− | | 0x4 | |
− | | X | |
| |- | | |- |
− | | 0x4 | + | | 0x0 || 0x1 || |
− | | 0x4 | |
− | | Y | |
| |- | | |- |
− | | 0x8 | + | | 0x1 || 0x1 || |
− | | 0x4 | |
− | | DeltaX | |
− | |- | |
− | | 0xC | |
− | | 0x4
| |
− | | DeltaY
| |
− | |-
| |
− | | 0x10
| |
− | | 0x4
| |
− | | WheelDelta
| |
− | |-
| |
− | | 0x14
| |
− | | 0x4
| |
− | | [[#MouseButtonSet|Buttons]]
| |
− | |-
| |
− | | 0x18
| |
− | | 0x4
| |
− | | [[#MouseAttributeSet|Attributes]]
| |
| |} | | |} |
| | | |
− | = KeyboardAutoPilotState = | + | = SixAxisSensorHandle = |
− | This is "nn::hid::debug::KeyboardAutoPilotState". | + | This is "nn::hid::SixAxisSensorHandle". This is a 4-byte struct with 4-byte alignment. |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
− | ! Offset | + | ! Offset || Size || Description |
− | ! Size
| + | |- |
− | ! Description
| + | | 0x0 || 0x4 || TypeValue |
| + | |- |
| + | | 0x0 || 0x1 || NpadStyleIndex |
| |- | | |- |
− | | 0x0 | + | | 0x1 || 0x1 || [[#NpadIdType|PlayerNumber]] |
− | | 0x8 | |
− | | [[#KeyboardModifierSet|Modifiers]] | |
| |- | | |- |
− | | 0x8 | + | | 0x2 || 0x1 || DeviceIdx |
− | | 0x20 | |
− | | [[#KeyboardKeySet|Keys]] | |
| |} | | |} |
| | | |
− | = HdlsHandle = | + | = VibrationDeviceHandle = |
− | This is "nn::hid::debug::HdlsHandle". This is a 0x8-byte struct with 8-byte alignment. | + | This is "nn::hid::VibrationDeviceHandle". This is a 4-byte struct with 4-byte alignment. |
− | | |
− | = HdlsNpadAssignment =
| |
− | This is a 0x208-byte struct.
| |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 7,265: |
Line 7,438: |
| ! Offset || Size || Description | | ! Offset || Size || Description |
| |- | | |- |
− | | 0x0 || 0x4 || s32 Total entries | + | | 0x0 || 0x4 || TypeValue |
| + | |- |
| + | | 0x0 || 0x1 || NpadStyleIndex |
| |- | | |- |
− | | 0x4 || 0x4 || Padding | + | | 0x1 || 0x1 || [[#NpadIdType|PlayerNumber]] |
| |- | | |- |
− | | 0x8 || 0x200(0x20*0x10) || Array of [[#HdlsNpadAssignmentEntry]]. | + | | 0x2 || 0x1 || DeviceIdx |
− | |} | + | |} |
− | | + | |
− | = HdlsNpadAssignmentEntry = | + | = VibrationDeviceInfo = |
− | This is a 0x20-byte struct. | + | This is "nn::hid::VibrationDeviceInfo" / "nn::hid::VibrationDeviceInfoForIpc". This is a 0x8-byte struct. |
− | | + | |
− | {| class="wikitable" border="1" | + | {| class="wikitable" border="1" |
− | |- | + | |- |
− | ! Offset || Size || Description | + | ! Offset || Size || Description |
− | |- | + | |- |
− | | 0x0 || 0x8 || [[#HdlsHandle]] | + | | 0x0 || 0x4 || [[#VibrationDeviceType|DeviceType]] |
− | |- | + | |- |
− | | 0x8 || 0x4 || ? | + | | 0x4 || 0x4 || [[#VibrationDevicePosition|Position]] |
− | |- | + | |} |
− | | 0xC || 0x4 || ? | + | |
− | |- | + | = VibrationDeviceType = |
− | | 0x10 || 0x8 || ? | + | This is "nn::hid::VibrationDeviceType". |
− | |- | + | |
− | | 0x18 || 0x1 || ? | + | {| class="wikitable" border="1" |
− | |- | + | ! Value |
− | | 0x19 || 0x7 || Padding | + | ! Description |
− | |} | + | |- |
− | | + | | 0 || Unknown |
− | = HdlsStateList = | + | |- |
− | This is a 0x408-byte struct. | + | | 1 || LinearResonantActuator |
− | | + | |- |
− | [9.0.0+] This is a 0x488-byte struct. | + | | 2 || GcErm |
− | | + | |} |
− | {| class="wikitable" border="1" | + | |
− | |- | + | = VibrationDevicePosition = |
− | ! Offset || Size || Description | + | This is "nn::hid::VibrationDevicePosition". |
− | |- | + | |
− | | 0x0 || 0x4 || s32 Total entries | + | {| class="wikitable" border="1" |
− | |- | + | ! Value |
− | | 0x4 || 0x4 || Padding | + | ! Description |
− | |- | + | |- |
− | | 0x8 || <[[#HdlsStateListEntry]] size>*0x10 || Array of [[#HdlsStateListEntry]]. | + | | 0 || None |
− | |} | + | |- |
− | | + | | 1 || Left |
− | This contains a list of all controllers, including non-virtual controllers. | + | |- |
− | | + | | 2 || Right |
− | = HdlsStateListEntry = | + | |} |
− | This is a 0x40-byte struct. | + | |
− | | + | = VibrationValue = |
− | [9.0.0+] This is a 0x48-byte struct. | + | This is "nn::hid::VibrationValue". This is a 0x10-byte struct, which contains 4 float values. |
− | | + | |
− | {| class="wikitable" border="1" | + | {| class="wikitable" border="1" |
− | |- | + | |- |
− | ! Offset || Size || Description | + | ! Offset |
− | |- | + | ! Size |
− | | 0x0 || 0x8 || [[#HdlsHandle]] | + | ! Description |
− | |- | + | |- |
− | | 0x8 || [[#HdlsDeviceInfo]] size || [[#HdlsDeviceInfo]]. With [[#ApplyHdlsStateList]] this is only used when creating new devices. | + | | 0x0 |
− | |- | + | | 0x4 |
− | | 0x8 + [[#HdlsDeviceInfo]] size, with 8-byte alignment || 0x24 || [[#HdlsState]] | + | | AmplitudeLow |
− | |- | + | |- |
− | | <Immediately following the above> || 0x4 || Padding | + | | 0x4 |
− | |} | + | | 0x4 |
− | | + | | FrequencyLow |
− | = HdlsDeviceInfo = | + | |- |
− | This is a 0x10-byte struct. | + | | 0x8 |
− | | + | | 0x4 |
− | {| class="wikitable" border="1" | + | | AmplitudeHigh |
− | |- | + | |- |
− | ! Offset || Size || Description | + | | 0xC |
− | |- | + | | 0x4 |
− | | 0x0 || 0x4 || [[#DeviceTypeInternal]] | + | | FrequencyHigh |
− | |- | + | |} |
− | | 0x4 || 0x4 || RGBA Single Body Color | + | |
− | |- | + | = VibrationGcErmCommand = |
− | | 0x8 || 0x4 || RGBA Single Buttons Color | + | This is "nn::hid::VibrationGcErmCommand". |
− | |- | + | |
− | | 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. | + | {| class="wikitable" border="1" |
− | |- | + | ! Value |
− | | 0xD || 0x3 || Padding | + | ! 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. | | [9.0.0+] This is a 0x14-byte struct. |
| | | |
Line 7,368: |
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,386: |
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 || 0x4 || BatteryLevel for the main PowerInfo. | + | | 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). |
| |- | | |- |
− | | 0x4 || 0x4 || Flags. Used to set the main PowerInfo for [[#NpadSystemProperties]]. Bit0 -> IsPowered, bit1 -> IsCharging. | + | | 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,404: |
Line 8,056: |
| | 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 || 0xC || VirtualSixAxisSensorAcceleration |
| + | |- |
| + | | 0x2C || 0xC || VirtualSixAxisSensorAngle |
| |- | | |- |
− | | 0x21 || 0x3 || Padding | + | | 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,790: |
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,438: |
Line 9,107: |
| | 1 || RightJoyRail | | | 1 || RightJoyRail |
| |- | | |- |
− | | 2 || [6.0.0+] RightLarkRail (for microphone) | + | | 2 || [6.0.0+] InternalBus (for Lark microphone) |
| |} | | |} |
| | | |