Changes

Jump to navigation Jump to search
16,661 bytes added ,  00:08, 21 January 2022
Line 79: Line 79:  
|-
 
|-
 
| 83 || [6.0.0+] [[#IsFirmwareUpdateAvailableForSixAxisSensor]]
 
| 83 || [6.0.0+] [[#IsFirmwareUpdateAvailableForSixAxisSensor]]
 +
|-
 +
| 84 || [13.0.0+] EnableSixAxisSensorUnalteredPassthrough
 +
|-
 +
| 85 || [13.0.0+] IsSixAxisSensorUnalteredPassthroughEnabled
 +
|-
 +
| 86 || [13.0.0+] StoreSixAxisSensorCalibrationParameter
 +
|-
 +
| 87 || [13.0.0+] LoadSixAxisSensorCalibrationParameter
 +
|-
 +
| 88 || [13.0.0+] GetSixAxisSensorIcInformation
 +
|-
 +
| 89 || [13.0.0+] ResetIsSixAxisSensorDeviceNewlyAssigned
 
|-
 
|-
 
| 91 || [[#ActivateGesture]]
 
| 91 || [[#ActivateGesture]]
Line 157: Line 169:  
|-
 
|-
 
| 211 || [7.0.0+] [[#IsVibrationDeviceMounted]]
 
| 211 || [7.0.0+] [[#IsVibrationDeviceMounted]]
 +
|-
 +
| 212 || [11.0.0+] [[#SendVibrationValueInBool]]
 
|-
 
|-
 
| 300 || [3.0.0+] [[#ActivateConsoleSixAxisSensor]]
 
| 300 || [3.0.0+] [[#ActivateConsoleSixAxisSensor]]
Line 584: Line 598:  
== IsVibrationDeviceMounted ==
 
== IsVibrationDeviceMounted ==
 
Takes a PID, an [[#VibrationDeviceHandle]], and an u64 [[AM_services|AppletResourceUserId]], returns an output u8 bool.
 
Takes a PID, an [[#VibrationDeviceHandle]], and an u64 [[AM_services|AppletResourceUserId]], returns an output u8 bool.
 +
 +
== SendVibrationValueInBool ==
 +
Takes a PID, a bool, a [[#VibrationDeviceHandle]], and an [[AM_services|AppletResourceUserId]], no output.
 +
 +
Stubbed, this just returns 0.
 +
 +
This is currently not exposed by sdknso.
    
== ActivateConsoleSixAxisSensor ==
 
== ActivateConsoleSixAxisSensor ==
Line 717: Line 738:     
== GetPalmaOperationInfo ==
 
== GetPalmaOperationInfo ==
Takes a [[#PalmaConnectionHandle]], a type-0x6 output buffer, returns an output u64.
+
Takes a [[#PalmaConnectionHandle]], a type-0x6 output buffer, returns an output u64 [[#PalmaOperationType]].
    
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.
Line 726: Line 747:  
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]].
+
See [[#GetPalmaOperationInfo]].
    
== SetPalmaFrModeType ==
 
== SetPalmaFrModeType ==
 
Takes an input [[#PalmaConnectionHandle]], an u64 [[#PalmaFrModeType]], no output.
 
Takes an input [[#PalmaConnectionHandle]], an u64 [[#PalmaFrModeType]], no output.
   −
See [[#hidGetPalmaOperationInfo]].
+
See [[#GetPalmaOperationInfo]].
    
== ReadPalmaStep ==
 
== ReadPalmaStep ==
 
Takes an input [[#PalmaConnectionHandle]], no output.
 
Takes an input [[#PalmaConnectionHandle]], no output.
   −
See [[#hidGetPalmaOperationInfo]].
+
See [[#GetPalmaOperationInfo]].
    
[[#EnablePalmaStep]] should be used before this.
 
[[#EnablePalmaStep]] should be used before this.
Line 743: Line 764:  
Takes an input bool, a [[#PalmaConnectionHandle]], no output.
 
Takes an input bool, a [[#PalmaConnectionHandle]], no output.
   −
See [[#hidGetPalmaOperationInfo]].
+
See [[#GetPalmaOperationInfo]].
    
== ResetPalmaStep ==
 
== ResetPalmaStep ==
 
Takes an input [[#PalmaConnectionHandle]], no output.
 
Takes an input [[#PalmaConnectionHandle]], no output.
   −
See [[#hidGetPalmaOperationInfo]].
+
See [[#GetPalmaOperationInfo]].
    
== 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]].
+
See [[#GetPalmaOperationInfo]].
    
== WritePalmaApplicationSection ==
 
== WritePalmaApplicationSection ==
Line 762: Line 783:  
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]].
+
See [[#GetPalmaOperationInfo]].
    
== ReadPalmaUniqueCode ==
 
== ReadPalmaUniqueCode ==
 
Takes an input [[#PalmaConnectionHandle]], no output.
 
Takes an input [[#PalmaConnectionHandle]], no output.
   −
See [[#hidGetPalmaOperationInfo]].
+
See [[#GetPalmaOperationInfo]].
    
== SetPalmaUniqueCodeInvalid ==
 
== SetPalmaUniqueCodeInvalid ==
 
Takes an input [[#PalmaConnectionHandle]], no output.
 
Takes an input [[#PalmaConnectionHandle]], no output.
   −
See [[#hidGetPalmaOperationInfo]].
+
See [[#GetPalmaOperationInfo]].
    
== WritePalmaActivityEntry ==
 
== WritePalmaActivityEntry ==
Line 779: Line 800:  
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]].
+
See [[#GetPalmaOperationInfo]].
    
== WritePalmaRgbLedPatternEntry ==
 
== WritePalmaRgbLedPatternEntry ==
Line 786: Line 807:  
sdknso exposes the u64 as an u16.
 
sdknso exposes the u64 as an u16.
   −
See [[#hidGetPalmaOperationInfo]].
+
See [[#GetPalmaOperationInfo]].
    
== WritePalmaWaveEntry ==
 
== WritePalmaWaveEntry ==
Line 795: Line 816:  
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]].
+
See [[#GetPalmaOperationInfo]].
    
== SetPalmaDataBaseIdentificationVersion ==
 
== SetPalmaDataBaseIdentificationVersion ==
 
Takes an input s32, a [[#PalmaConnectionHandle]], no output.
 
Takes an input s32, a [[#PalmaConnectionHandle]], no output.
   −
See [[#hidGetPalmaOperationInfo]].
+
See [[#GetPalmaOperationInfo]].
    
== GetPalmaDataBaseIdentificationVersion ==
 
== GetPalmaDataBaseIdentificationVersion ==
 
Takes an input [[#PalmaConnectionHandle]], no output.
 
Takes an input [[#PalmaConnectionHandle]], no output.
   −
See [[#hidGetPalmaOperationInfo]].
+
See [[#GetPalmaOperationInfo]].
    
== 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]].
+
See [[#GetPalmaOperationInfo]].
    
== GetPalmaOperationResult ==
 
== GetPalmaOperationResult ==
Line 820: Line 841:  
Takes an input u16, a [[#PalmaConnectionHandle]], no output.
 
Takes an input u16, a [[#PalmaConnectionHandle]], no output.
   −
See [[#hidGetPalmaOperationInfo]].
+
See [[#GetPalmaOperationInfo]].
    
== ResetPalmaPlayLog ==
 
== ResetPalmaPlayLog ==
 
Takes an input u16, a [[#PalmaConnectionHandle]], no output.
 
Takes an input u16, a [[#PalmaConnectionHandle]], no output.
   −
See [[#hidGetPalmaOperationInfo]].
+
See [[#GetPalmaOperationInfo]].
    
== SetIsPalmaAllConnectable ==
 
== SetIsPalmaAllConnectable ==
 
Takes a PID, a bool, an [[AM_services|AppletResourceUserId]], no output.
 
Takes a PID, a bool, an [[AM_services|AppletResourceUserId]], no output.
 +
 +
The sysmodule also calls the code which eventually runs from this, from various other funcs internally (bool value varies).
 +
 +
This updates various state. If needed, this uses either [[BTM_services|StartBleScanForGeneral]] or [[BTM_services|StopBleScanForGeneral]].
    
== SetIsPalmaPairedConnectable ==
 
== SetIsPalmaPairedConnectable ==
 
Takes a PID, a bool, an [[AM_services|AppletResourceUserId]], no output.
 
Takes a PID, a bool, an [[AM_services|AppletResourceUserId]], no output.
 +
 +
The actual cmd impl ignores the PID/AppletResourceUserId.
 +
 +
This code is also called by another func internally by the sysmodule, where flag = {whether bit6 in a field is set} (presumably [[#NpadStyleSet]]). This is eventually called from various funcs, including [[#SetSupportedNpadStyleSet]].
 +
 +
This updates various state. If needed, this uses either [[BTM_services|StartBleScanForPairedDevice]] or [[BTM_services|StopBleScanForPairedDevice]].
    
== PairPalma ==
 
== PairPalma ==
 
Takes an input [[#PalmaConnectionHandle]], no output.
 
Takes an input [[#PalmaConnectionHandle]], no output.
 +
 +
This eventually uses [[BTM_services#BlePairDevice|BlePairDevice]] if needed, and updates state.
    
== SetPalmaBoostMode ==
 
== SetPalmaBoostMode ==
Line 920: Line 953:  
|-
 
|-
 
| 13 || [9.0.0+] GetTouchScreenConfiguration
 
| 13 || [9.0.0+] GetTouchScreenConfiguration
 +
|-
 +
| 14 || [11.0.0+] ProcessTouchScreenAutoTune
 +
|-
 +
| 15 || [13.0.0+] ForceStopTouchScreenManagement
 +
|-
 +
| 16 || [13.0.0+] ForceRestartTouchScreenManagement
 +
|-
 +
| 17 || [13.0.0+] IsTouchScreenManaged
 
|-
 
|-
 
| 20 || [[#DeactivateMouse]]
 
| 20 || [[#DeactivateMouse]]
Line 955: Line 996:  
| 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,080: Line 1,121:  
|-
 
|-
 
| 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,111: Line 1,162:  
| 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,120: Line 1,171:  
|-
 
|-
 
| 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,132: Line 1,185:  
|-
 
|-
 
| 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,185: Line 1,244:     
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,359:  
== AttachHdlsWorkBuffer ==
 
== AttachHdlsWorkBuffer ==
 
Takes an input TransferMemory handle and an u64 for the TransferMemory size, no output.
 
Takes an input TransferMemory handle and an u64 for the TransferMemory size, no output.
 +
 +
[13.0.0+] Now additionally returns an output [[#HdlsSessionId]].
    
Official user-processes use TransferMemory size=0x1000 and permissions=RW.
 
Official user-processes use TransferMemory size=0x1000 and permissions=RW.
Line 1,300: Line 1,370:  
== ReleaseHdlsWorkBuffer ==
 
== ReleaseHdlsWorkBuffer ==
 
No input/output.
 
No input/output.
 +
 +
[13.0.0+] Takes an input [[#HdlsSessionId]], no output.
    
== DumpHdlsNpadAssignmentState ==
 
== DumpHdlsNpadAssignmentState ==
 
No input/output.
 
No input/output.
 +
 +
[13.0.0+] Takes an input [[#HdlsSessionId]], no output.
    
After using this cmd, the output [[#HdlsNpadAssignment]] is located at tmem+0.
 
After using this cmd, the output [[#HdlsNpadAssignment]] is located at tmem+0.
Line 1,308: Line 1,382:  
== DumpHdlsStates ==
 
== DumpHdlsStates ==
 
No input/output.
 
No input/output.
 +
 +
[13.0.0+] Takes an input [[#HdlsSessionId]], no output.
    
After using this cmd, the output [[#HdlsStateList]] struct is located at tmem+0.
 
After using this cmd, the output [[#HdlsStateList]] struct is located at tmem+0.
Line 1,313: Line 1,389:  
== ApplyHdlsNpadAssignmentState ==
 
== ApplyHdlsNpadAssignmentState ==
 
Takes an input u8 bool, no output.
 
Takes an input u8 bool, no output.
 +
 +
[13.0.0+] Takes an input bool and a [[#HdlsSessionId]], no output.
    
Prior to using this cmd, the input [[#HdlsNpadAssignment]] is written to tmem+0 by the user-process.
 
Prior to using this cmd, the input [[#HdlsNpadAssignment]] is written to tmem+0 by the user-process.
Line 1,318: Line 1,396:  
== ApplyHdlsStateList ==
 
== ApplyHdlsStateList ==
 
No input/output.
 
No input/output.
 +
 +
[13.0.0+] Takes an input [[#HdlsSessionId]], no output.
    
Prior to using this cmd, the input [[#HdlsStateList]] is written to tmem+0 by the user-process.
 
Prior to using this cmd, the input [[#HdlsStateList]] is written to tmem+0 by the user-process.
Line 1,333: Line 1,413:     
[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,444: Line 1,529:  
|-
 
|-
 
| 513 || [3.0.0+] EndPermitVibrationSession
 
| 513 || [3.0.0+] EndPermitVibrationSession
 +
|-
 +
| 514 || [12.0.0+] SendVibrationNotificationPattern
 
|-
 
|-
 
| 520 || EnableHandheldHids
 
| 520 || EnableHandheldHids
Line 1,454: Line 1,541:  
|-
 
|-
 
| 524 || [10.0.0+] IsHandheldHidsEnabled
 
| 524 || [10.0.0+] IsHandheldHidsEnabled
 +
|-
 +
| 525 || [11.0.0+] IsJoyConAttachedOnAllRail
 
|-
 
|-
 
| 540 || AcquirePlayReportControllerUsageUpdateEvent
 
| 540 || AcquirePlayReportControllerUsageUpdateEvent
Line 1,609: Line 1,698:  
| 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,649: Line 1,746:  
| 1258 || [10.0.0+] [[#IsButtonConfigStorageRightEmpty]]
 
| 1258 || [10.0.0+] [[#IsButtonConfigStorageRightEmpty]]
 
|-
 
|-
| 1259 || [10.0.0+] [[#GetButtonConfigStorageEmbedded]]
+
| 1259 || [11.0.0-12.1.0] [[#GetButtonConfigStorageEmbeddedDeprecated]] ([10.0.0-10.2.0] [[#GetButtonConfigStorageEmbeddedDeprecated|GetButtonConfigStorageEmbedded]])
 
|-
 
|-
| 1260 || [10.0.0+] [[#GetButtonConfigStorageFull]]
+
| 1260 || [11.0.0-12.1.0] [[#GetButtonConfigStorageFullDeprecated]] ([10.0.0-10.2.0] [[#GetButtonConfigStorageFullDeprecated|GetButtonConfigStorageFull]])
 
|-
 
|-
| 1261 || [10.0.0+] [[#GetButtonConfigStorageLeft]]
+
| 1261 || [11.0.0-12.1.0] [[#GetButtonConfigStorageLeftDeprecated]] ([10.0.0-10.2.0] [[#GetButtonConfigStorageLeftDeprecated|GetButtonConfigStorageLeft]])
 
|-
 
|-
| 1262 || [10.0.0+] [[#GetButtonConfigStorageRight]]
+
| 1262 || [11.0.0-12.1.0] [[#GetButtonConfigStorageRightDeprecated]] ([10.0.0-10.2.0] [[#GetButtonConfigStorageRightDeprecated|GetButtonConfigStorageRight]])
 
|-
 
|-
| 1263 || [10.0.0+] [[#SetButtonConfigStorageEmbedded]]
+
| 1263 || [11.0.0-12.1.0] [[#SetButtonConfigStorageEmbeddedDeprecated]] ([10.0.0-10.2.0] [[#SetButtonConfigStorageEmbeddedDeprecated|SetButtonConfigStorageEmbedded]])
 
|-
 
|-
| 1264 || [10.0.0+] [[#SetButtonConfigStorageFull]]
+
| 1264 || [11.0.0-12.1.0] [[#SetButtonConfigStorageFullDeprecated]] ([10.0.0-10.2.0] [[#SetButtonConfigStorageFullDeprecated|SetButtonConfigStorageFull]])
 
|-
 
|-
| 1265 || [10.0.0+] [[#SetButtonConfigStorageLeft]]
+
| 1265 || [11.0.0-12.1.0] [[#SetButtonConfigStorageLeftDeprecated]] ([10.0.0-10.2.0] [[#SetButtonConfigStorageLeftDeprecated|SetButtonConfigStorageLeft]])
 
|-
 
|-
| 1266 || [10.0.0+] [[#SetButtonConfigStorageRight]]
+
| 1266 || [11.0.0-12.1.0] [[#SetButtonConfigStorageRightDeprecated]] ([10.0.0-10.2.0] [[#SetButtonConfigStorageRightDeprecated|SetButtonConfigStorageRight]])
 
|-
 
|-
 
| 1267 || [10.0.0+] [[#DeleteButtonConfigStorageEmbedded]]
 
| 1267 || [10.0.0+] [[#DeleteButtonConfigStorageEmbedded]]
Line 1,698: Line 1,795:  
|-
 
|-
 
| 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,799: Line 1,914:  
== 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,859: Line 2,006:  
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,878: Line 2,025:  
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,910: Line 2,061:  
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,935: Line 2,086:  
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,985: Line 2,136:  
== GetHidButtonConfigRight ==
 
== GetHidButtonConfigRight ==
 
Takes an input [[#UniquePadId]], and a type-0x16 output buffer containing a [[#ButtonConfigRight]].
 
Takes an input [[#UniquePadId]], and a type-0x16 output buffer containing a [[#ButtonConfigRight]].
 +
 +
== GetButtonConfigStorageEmbedded ==
 +
Takes an input s32, a type-0x16 output buffer containing a [[#ButtonConfigEmbedded]], a type-0x1A output buffer containing a [[#StorageName]].
 +
 +
When the input s32 is larger than unsigned value 4, an error is returned.
 +
 +
== GetButtonConfigStorageFull ==
 +
Takes an input s32, a type-0x16 output buffer containing a [[#ButtonConfigFull]], a type-0x1A output buffer containing a [[#StorageName]].
 +
 +
== GetButtonConfigStorageLeft ==
 +
Takes an input s32, a type-0x16 output buffer containing a [[#ButtonConfigLeft]], a type-0x1A output buffer containing a [[#StorageName]].
 +
 +
== GetButtonConfigStorageRight ==
 +
Takes an input s32, a type-0x16 output buffer containing a [[#ButtonConfigRight]], a type-0x1A output buffer containing a [[#StorageName]].
 +
 +
== SetButtonConfigStorageEmbedded ==
 +
Takes an input s32, a type-0x15 input buffer containing a [[#ButtonConfigEmbedded]], a type-0x19 input buffer containing a [[#StorageName]].
 +
 +
When the input s32 is larger than unsigned value 4, this will immediately return (this cmd always returns 0 regardless).
 +
 +
== SetButtonConfigStorageFull ==
 +
Takes an input s32, a type-0x15 input buffer containing a [[#ButtonConfigFull]], a type-0x19 input buffer containing a [[#StorageName]].
 +
 +
== SetButtonConfigStorageLeft ==
 +
Takes an input s32, a type-0x15 input buffer containing a [[#ButtonConfigLeft]], a type-0x19 input buffer containing a [[#StorageName]].
 +
 +
== SetButtonConfigStorageRight ==
 +
Takes an input s32, a type-0x15 input buffer containing a [[#ButtonConfigRight]], a type-0x19 input buffer containing a [[#StorageName]].
    
== IHidbusSystemServer ==
 
== IHidbusSystemServer ==
Line 2,635: Line 2,814:  
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 0 || GetDataFormat
+
| 0 || [[#GetDataFormat]]
 
|-
 
|-
| 1 || SetDataFormat
+
| 1 || [[#SetDataFormat]]
 
|-
 
|-
| 2 || GetMcuState
+
| 2 || [[#GetMcuState]]
 
|-
 
|-
| 3 || SetMcuState
+
| 3 || [[#SetMcuState]]
 
|-
 
|-
| 4 || GetMcuVersionForNfc
+
| 4 || [[#GetMcuVersionForNfc]]
 
|-
 
|-
| 5 || CheckNfcDevicePower
+
| 5 || [[#CheckNfcDevicePower]]
 
|-
 
|-
| 6 || [5.0.0+] SetMcuStateImmediate
+
| 6 || [5.0.0+] [[#SetMcuStateImmediate]]
 
|-
 
|-
| 10 || SetNfcEvent
+
| 10 || [[#SetNfcEvent]]
 
|-
 
|-
| 11 || GetNfcInfo
+
| 11 || [[#GetNfcInfo]]
 
|-
 
|-
 
| 12 || StartNfcDiscovery
 
| 12 || StartNfcDiscovery
Line 2,682: Line 2,861:  
[5.0.0+] SetDataFormat, SetMcuState, and ClearMifareKey: now takes a total of 0xC-bytes of input instead of 0x10.
 
[5.0.0+] SetDataFormat, SetMcuState, and ClearMifareKey: now takes a total of 0xC-bytes of input instead of 0x10.
   −
[6.0.0+]: The buffer type used by GetNfcInfo is now 0x32 instead of 0x1A.
+
== GetDataFormat ==
 +
Takes an input 8-byte handle, returns an output u8.
 +
 
 +
== SetDataFormat ==
 +
Takes an input u8 and a 8-byte handle (4-byte alignment), no output.
 +
 
 +
== GetMcuState ==
 +
Takes an input 8-byte handle, returns an output u8.
 +
 
 +
== SetMcuState ==
 +
Takes an input u8 and a 8-byte handle (4-byte alignment), no output.
 +
 
 +
== GetMcuVersionForNfc ==
 +
Takes an input 8-byte handle, returns an output 0x20-byte struct.
 +
 
 +
== CheckNfcDevicePower ==
 +
Takes an input 8-byte handle, no output.
 +
 
 +
== SetMcuStateImmediate ==
 +
Takes an input u8 and a 8-byte handle (4-byte alignment), no output.
 +
 
 +
== SetNfcEvent ==
 +
Takes an input 8-byte handle, returns 2 output Event handles.
 +
 
 +
== GetNfcInfo ==
 +
Takes an input 8-byte handle and a type-0x1A output buffer.
 +
 
 +
[6.0.0+]: The buffer type is now 0x32 instead of 0x1A.
 +
 
 +
This buffer contains a 0x804-byte struct, for the NFC data sent in response to the various other cmds.
    
= hidbus =
 
= hidbus =
Line 2,727: Line 2,935:     
== GetBusHandle ==
 
== GetBusHandle ==
Takes an input u32 [[#NpadIdType]], an u64 [[#BusType]], an u64 [[AM_services|AppletResourceUserId]], returns an output u8 bool and a [[#BusHandle]].
+
Takes an input u32 [[#NpadIdType]], an u64 [[#BusType]] and an u64 [[AM_services|AppletResourceUserId]]. Returns an output bool '''HasHandle''' and a [[#BusHandle]].
   −
The bool indicates whether the [[#BusHandle]] is valid.
+
'''HasHandle''' indicates whether the [[#BusHandle]] is valid.
    
Official sw will assert when [[#BusHandle]] InternalIndex is >=0x11 (>=0x13 with [6.0.0+]). This same check is also done for all funcs using [[#BusHandle]] as input.
 
Official sw will assert when [[#BusHandle]] InternalIndex is >=0x11 (>=0x13 with [6.0.0+]). This same check is also done for all funcs using [[#BusHandle]] as input.
Line 2,736: Line 2,944:     
== IsExternalDeviceConnected ==
 
== IsExternalDeviceConnected ==
Takes an input [[#BusHandle]], returns an output u8 bool.
+
Takes an input [[#BusHandle]]. Returns an output bool '''IsAttached'''.
    
This is not used by sdknso.
 
This is not used by sdknso.
    
== Initialize ==
 
== Initialize ==
Takes an input [[#BusHandle]], an u64 [[AM_services|AppletResourceUserId]], no output.
+
Takes an input [[#BusHandle]] and an u64 [[AM_services|AppletResourceUserId]]. No output.
    
Prior to using this cmd, sdknso handles [[#GetSharedMemoryHandle|sharedmem]] mapping if not done previously.
 
Prior to using this cmd, sdknso handles [[#GetSharedMemoryHandle|sharedmem]] mapping if not done previously.
    
== Finalize ==
 
== Finalize ==
Takes an input [[#BusHandle]], an u64 [[AM_services|AppletResourceUserId]], no output.
+
Takes an input [[#BusHandle]] and an u64 [[AM_services|AppletResourceUserId]]. No output.
    
== EnableExternalDevice ==
 
== EnableExternalDevice ==
Takes an input u8 bool, a [[#BusHandle]], an u64, an u64 [[AM_services|AppletResourceUserId]], no output.
+
Takes an input bool '''IsEnabled''', a [[#BusHandle]], an u64 '''Version''' and an u64 [[AM_services|AppletResourceUserId]]. No output.
   −
sdknso passes value 0x38900050018 (0x3A600050018 with 7.x+) for the u64.
+
sdknso passes value 0x38900050018 (0x3A600050018 with 7.x+) for '''Version'''.
   −
The bool flag indicates whether to enable the device (true = enable, false = disable).  When false, this will use [[#DisableJoyPollingReceiveMode]] if needed.
+
'''IsEnabled''' indicates whether to enable the device (true = enable, false = disable).  When false, this will use [[#DisableJoyPollingReceiveMode]] if needed.
    
== GetExternalDeviceId ==
 
== GetExternalDeviceId ==
Takes an input [[#BusHandle]], returns an output u32 ExternalDeviceId.
+
Takes an input [[#BusHandle]]. Returns an output u32 '''DeviceId'''.
    
== SendCommandAsync ==
 
== SendCommandAsync ==
Takes a type-0x21 input buffer and a [[#BusHandle]], no output.
+
Takes a type-0x21 input buffer and a [[#BusHandle]]. No output.
    
== GetSendCommandAsynceResult ==
 
== GetSendCommandAsynceResult ==
Takes a type-0x22 output buffer and a [[#BusHandle]], returns an output u32.
+
Takes a type-0x22 output buffer and a [[#BusHandle]]. Returns an output u32 '''OutSize'''.
   −
Official sw copies the u32 to an output u64, for the actual output size.
+
Official sw copies '''OutSize''' to an output u64, for the actual output size.
    
== SetEventForSendCommandAsycResult ==
 
== SetEventForSendCommandAsycResult ==
Takes an input [[#BusHandle]], returns an output Event handle with EventClearMode=0.
+
Takes an input [[#BusHandle]]. Returns an output Event handle '''AttachmentDataReceiveEventHandle''' with EventClearMode=0.
    
Official sw with SendAndReceive clears this event (6.x+ sdknso), uses [[#SendCommandAsync]], waits on + clears this event, then uses [[#GetSendCommandAsynceResult]].
 
Official sw with SendAndReceive clears this event (6.x+ sdknso), uses [[#SendCommandAsync]], waits on + clears this event, then uses [[#GetSendCommandAsynceResult]].
    
== GetSharedMemoryHandle ==
 
== GetSharedMemoryHandle ==
No input, returns an output SharedMemory handle.
+
No input. Returns an output SharedMemory handle.
    
The SharedMemory is mapped with size 0x1000 and permissions=R--.
 
The SharedMemory is mapped with size 0x1000 and permissions=R--.
Line 2,804: Line 3,012:     
== EnableJoyPollingReceiveMode ==
 
== EnableJoyPollingReceiveMode ==
Takes a type-0x21 input buffer, a TransferMemory handle, an u32 tmem_size, an u32 [[#JoyPollingMode]], a [[#BusHandle]], no output.
+
Takes a type-0x21 input buffer, a TransferMemory handle, an u32 '''TransferMemorySize''', an u32 [[#JoyPollingMode]] and a [[#BusHandle]]. No output.
    
The TransferMemory is created with an user-specified output buffer, with permissions=R--.
 
The TransferMemory is created with an user-specified output buffer, with permissions=R--.
Line 2,873: Line 3,081:     
== DisableJoyPollingReceiveMode ==
 
== DisableJoyPollingReceiveMode ==
Takes an input [[#BusHandle]], no output.
+
Takes an input [[#BusHandle]]. No output.
    
== SetStatusManagerType ==
 
== SetStatusManagerType ==
Takes an input u32, no output.
+
Takes an input u32 [[#StatusManagerType]]. No output.
    
This is used by sdknso immediately after mapping [[#GetSharedMemoryHandle|sharedmem]] (before [[#Initialize]]) with hard-coded value 0x2.
 
This is used by sdknso immediately after mapping [[#GetSharedMemoryHandle|sharedmem]] (before [[#Initialize]]) with hard-coded value 0x2.
Line 4,395: Line 4,603:  
| 0x43EC ([1.0.0-8.1.0] 0x440C)
 
| 0x43EC ([1.0.0-8.1.0] 0x440C)
 
| 0x4
 
| 0x4
|  
+
| [[#NpadLagerType|LagerType]]
 
|}
 
|}
   Line 5,970: Line 6,178:  
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,980: Line 6,185:  
! Bit
 
! Bit
 
! Description
 
! Description
|-
  −
| 0
  −
| NumLockOn
  −
|-
  −
| 1
  −
| NumLockOff
  −
|-
  −
| 2
  −
| NumLockToggle
  −
|-
  −
| 3
  −
| CapsLockOn
   
|-
 
|-
 
| 4
 
| 4
| CapsLockOff
+
| A
 
|-
 
|-
 
| 5
 
| 5
| CapsLockToggle
+
| B
 
|-
 
|-
 
| 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
  −
| StickL
  −
|-
  −
| 5
  −
| StickR
  −
|-
  −
| 6
  −
| L
  −
|-
  −
| 7
  −
| R
  −
|-
  −
| 8
  −
| ZL
  −
|-
  −
| 9
  −
| ZR
  −
|-
  −
| 10
  −
| Plus
  −
|-
  −
| 11
  −
| Minus
  −
|-
  −
| 12
  −
| Left
  −
|-
  −
| 13
  −
| Up
   
|-
 
|-
 
| 14
 
| 14
| Right
+
| K
 
|-
 
|-
 
| 15
 
| 15
| Down
+
| L
 
|-
 
|-
 
| 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
  −
!  Notes
   
|-
 
|-
| 0
+
| 36
| NpadStyleFullKey
+
| D7
| Pro Controller
   
|-
 
|-
| 1
+
| 37
| NpadStyleHandheld
+
| D8
| Joy-Con controller in handheld mode
   
|-
 
|-
| 2
+
| 38
| NpadStyleJoyDual
+
| D9
| Joy-Con controller in dual mode
   
|-
 
|-
| 3
+
| 39
| NpadStyleJoyLeft
+
| D0
| Joy-Con left controller in single mode
   
|-
 
|-
| 4
+
| 40
| NpadStyleJoyRight
+
| Return
| Joy-Con right controller in single mode
   
|-
 
|-
| 5
+
| 41
| NpadStyleGc
+
| Escape
| GameCube controller
   
|-
 
|-
| 6
+
| 42
| NpadStylePalma
+
| Backspace
| Poké Ball Plus controller
   
|-
 
|-
| 7
+
| 43
| NpadStyleLark
+
| Tab
| NES/Famicom controller
   
|-
 
|-
| 8
+
| 44
| NpadStyleHandheldLark
+
| Space
| NES/Famicom controller in handheld mode
   
|-
 
|-
| 9
+
| 45
| NpadStyleLucia
+
| Minus
| SNES controller
   
|-
 
|-
| 10-28
+
| 46
| Reserved
+
| Plus
|
   
|-
 
|-
| 29
+
| 47
| NpadStyleSystemExt
+
| OpenBracket
| Generic external controller
   
|-
 
|-
| 30
+
| 48
| NpadStyleSystem
+
| CloseBracket
| Generic controller
   
|-
 
|-
| 31
+
| 49
| Reserved
+
| Pipe
|
+
|-
|}
+
| 50
 
+
| Tilde
= NpadDeviceTypeSet =
+
|-
This is "nn::hid::system::NpadDeviceType". This is a BitFlagSet object for [[#NpadDeviceType]].
+
| 51
 
+
| Semicolon
= 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
+
| 52
! Description
+
| Quote
 
|-
 
|-
| 0
+
| 53
| IsChargingJoyDual
+
| Backquote
 
|-
 
|-
| 1
+
| 54
| IsChargingJoyLeft
+
| Comma
 
|-
 
|-
| 2
+
| 55
| IsChargingJoyRight
+
| Period
 
|-
 
|-
| 3
+
| 56
| IsPoweredJoyDual
+
| Slash
 
|-
 
|-
| 4
+
| 57
| IsPoweredJoyLeft
+
| CapsLock
 
|-
 
|-
| 5
+
| 58
| IsPoweredJoyRight
+
| F1
 
|-
 
|-
| 9
+
| 59
| IsUnsuportedButtonPressedOnNpadSystem
+
| F2
 
|-
 
|-
| 10
+
| 60
| IsUnsuportedButtonPressedOnNpadSystemExt
+
| F3
 
|-
 
|-
| 11
+
| 61
| IsAbxyButtonOriented
+
| F4
 
|-
 
|-
| 12
+
| 62
| IsSlSrButtonOriented
+
| F5
 
|-
 
|-
| 13
+
| 63
| [4.0.0+] IsPlusAvailable
+
| F6
 
|-
 
|-
| 14
+
| 64
| [4.0.0+] IsMinusAvailable
+
| F7
 
|-
 
|-
| 15
+
| 65
| [8.0.0+] IsDirectionalButtonsAvailable
+
| F8
|}
  −
 
  −
= 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
+
| 66
! Description
+
| F9
 
|-
 
|-
| 0
+
| 67
| IsUnintendedHomeButtonInputProtectionEnabled
+
| F10
|}
+
|-
 
+
| 68
= AppletFooterUiAttributesSet =
+
| F11
This is "nn::hid::system::AppletFooterUiAttributesSet". This is a BitFlagSet object for [[#AppletFooterUiAttribute]].
+
|-
 
+
| 69
= UniquePadType =
+
| F12
This is "nn::hid::system::UniquePadType".
+
|-
 
+
| 70
{| class="wikitable" border="1"
+
| PrintScreen
!  Value
  −
!  Description
   
|-
 
|-
| 0 || Embedded
+
| 71
 +
| ScrollLock
 
|-
 
|-
| 1 || FullKeyController
+
| 72
 +
| Pause
 
|-
 
|-
| 2 || RightController
+
| 73
 +
| Insert
 
|-
 
|-
| 3 || LeftController
+
| 74
 +
| Home
 
|-
 
|-
| 4 || DebugPadController
+
| 75
|}
+
| PageUp
 
  −
= UniquePadInterface =
  −
This is "nn::hid::system::UniquePadInterface".
  −
 
  −
{| class="wikitable" border="1"
  −
!  Value
  −
!  Description
   
|-
 
|-
| 0 || Embedded
+
| 76
 +
| Delete
 
|-
 
|-
| 1 || Rail
+
| 77
 +
| End
 
|-
 
|-
| 2 || Bluetooth
+
| 78
 +
| PageDown
 
|-
 
|-
| 3 || Usb
+
| 79
|}
+
| RightArrow
 
  −
= 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
+
| 80
 +
| LeftArrow
 
|-
 
|-
| 1 || ReleaseFromBottom
+
| 81
 +
| DownArrow
 
|-
 
|-
| 2 || ReleaseFromLeft
+
| 82
 +
| UpArrow
 
|-
 
|-
| 3 || ReleaseFromTop
+
| 83
 +
| NumLock
 
|-
 
|-
| 4 || Rotate
+
| 84
 +
| NumPadDivide
 
|-
 
|-
| 5 || Update
+
| 85
 +
| NumPadMultiply
 
|-
 
|-
| 6 || Completed
+
| 86
 +
| NumPadSubtract
 
|-
 
|-
| 7 || Clear
+
| 87
 +
| NumPadAdd
 
|-
 
|-
| 8 || ClearCompleted
+
| 88
|}
+
| NumPadEnter
 
+
|-
= SixAxisSensorUserCalibrationStage =
+
| 89
This is "nn::hid::system::SixAxisSensorUserCalibrationStage".
+
| NumPad1
 
+
|-
{| class="wikitable" border="1"
+
| 90
!  Value
+
| NumPad2
!  Description
+
|-
 +
| 91
 +
| NumPad3
 
|-
 
|-
| 0 || Measuring
+
| 92
 +
| NumPad4
 
|-
 
|-
| 1 || Update
+
| 93
 +
| NumPad5
 
|-
 
|-
| 2 || Completed
+
| 94
|}
+
| NumPad6
 
  −
= NpadJoyHoldType =
  −
This is "nn::hid::NpadJoyHoldType".
  −
 
  −
{| class="wikitable" border="1"
  −
!  Value
  −
!  Description
   
|-
 
|-
| 0 || Vertical
+
| 95
 +
| NumPad7
 
|-
 
|-
| 1 || Horizontal
+
| 96
|}
+
| NumPad8
 
  −
= NpadJoyDeviceType =
  −
This is "nn::hid::NpadJoyDeviceType".
  −
 
  −
{| class="wikitable" border="1"
  −
!  Value
  −
!  Description
   
|-
 
|-
| 0 || Left
+
| 97
 +
| NumPad9
 
|-
 
|-
| 1 || Right
+
| 98
|}
+
| NumPad0
 
  −
= 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
+
| 99
 +
| NumPadDot
 
|-
 
|-
| 1 || Single
+
| 100
 +
| Backslash
 
|-
 
|-
| 2 || None
+
| 101
|}
+
| Application
 
  −
= NpadJoyAssignmentMode =
  −
This is "nn::hid::NpadJoyAssignmentMode".
  −
 
  −
{| class="wikitable" border="1"
  −
!  Value
  −
!  Description
   
|-
 
|-
| 0 || Dual
+
| 102
 +
| Power
 
|-
 
|-
| 1 || Single
+
| 103
|}
+
| NumPadEquals
 
  −
= NpadCommunicationMode =
  −
This is "nn::hid::NpadCommunicationMode".
  −
 
  −
{| class="wikitable" border="1"
  −
!  Value
  −
!  Description
   
|-
 
|-
| 0 || 5ms
+
| 104
 +
| F13
 
|-
 
|-
| 1 || 10ms
+
| 105
 +
| F14
 
|-
 
|-
| 2 || 15ms
+
| 106
 +
| F15
 
|-
 
|-
| 3 || Default
+
| 107
|}
+
| F16
 
  −
= AppletDetailedUiType =
  −
This is "nn::hid::system::AppletDetailedUiType".
  −
 
  −
{| class="wikitable" border="1"
  −
!  Value
  −
!  Description
  −
|-
  −
| 0x00000000 || None
  −
|-
  −
| 0x01000000 || HandheldNone
   
|-
 
|-
| 0x02000000 || HandheldJoyConLeftOnly
+
| 108
 +
| F17
 
|-
 
|-
| 0x02000001 || HandheldLarkHvc1Only
+
| 109
 +
| F18
 
|-
 
|-
| 0x02000002 || HandheldLarkNesLeftOnly
+
| 110
 +
| F19
 
|-
 
|-
| 0x03000000 || HandheldJoyConRightOnly
+
| 111
 +
| F20
 
|-
 
|-
| 0x03000001 || HandheldLarkHvc2Only
+
| 112
 +
| F21
 
|-
 
|-
| 0x03000002 || HandheldLarkNesRightOnly
+
| 113
 +
| F22
 
|-
 
|-
| 0x04000000 || HandheldJoyConLeftJoyConRight
+
| 114
 +
| F23
 
|-
 
|-
| 0x04000001 || HandheldJoyConLeftLarkHvc2
+
| 115
 +
| F24
 
|-
 
|-
| 0x04000002 || HandheldJoyConLeftLarkNesRight
+
| 133
 +
| NumPadComma
 
|-
 
|-
| 0x04000003 || HandheldLarkHvc1JoyConRight
+
| 135
 +
| Ro
 
|-
 
|-
| 0x04000004 || HandheldLarkHvc1LarkHvc2
+
| 136
 +
| KatakanaHiragana
 
|-
 
|-
| 0x04000005 || HandheldLarkHvc1LarkNesRight
+
| 137
 +
| Yen
 
|-
 
|-
| 0x04000006 || HandheldLarkNesLeftJoyConRight
+
| 138
 +
| Henkan
 
|-
 
|-
| 0x04000007 || HandheldLarkNesLeftLarkHvc2
+
| 139
 +
| Muhenkan
 
|-
 
|-
| 0x04000008 || HandheldLarkNesLeftLarkNesRight
+
| 140
 +
| NumPadCommaPc98
 
|-
 
|-
| 0x05000000 || JoyDual
+
| 144
 +
| HangulEnglish
 
|-
 
|-
| 0x06000000 || JoyDualLeftOnly
+
| 145
 +
| Hanja
 
|-
 
|-
| 0x07000000 || JoyDualRightOnly
+
| 146
 +
| Katakana
 
|-
 
|-
| 0x08000000 || JoyLeftHorizontal
+
| 147
 +
| Hiragana
 
|-
 
|-
| 0x09000000 || JoyLeftVertical
+
| 148
 +
| ZenkakuHankaku
 
|-
 
|-
| 0x0A000000 || JoyRightHorizontal
+
| 224
 +
| LeftControl
 
|-
 
|-
| 0x0B000000 || JoyRightVertical
+
| 225
 +
| LeftShift
 
|-
 
|-
| 0x0C000000 || SwitchProController
+
| 226
 +
| LeftAlt
 
|-
 
|-
| 0x0D000000 || CompatibleProController
+
| 227
 +
| LeftGui
 
|-
 
|-
| 0x0E000000 || CompatibleJoyCon
+
| 228
 +
| RightControl
 
|-
 
|-
| 0x0F000000 || LarkHvc1
+
| 229
 +
| RightShift
 
|-
 
|-
| 0x10000000 || LarkHvc2
+
| 230
 +
| RightAlt
 
|-
 
|-
| 0x11000000 || LarkNesLeft
+
| 231
|-
+
| RightGui
| 0x12000000 || LarkNesRight
+
|}
|-
+
 
| 0x13000000 || LuciaU
+
= KeyboardLockKeyEventSet =
|-
+
This is "nn::hid::system::KeyboardLockKeyEventSet". This is a BitFlagSet object for [[#KeyboardLockKeyEvent]].
| 0x13000001 || LuciaJ
+
 
|-
+
= KeyboardLockKeyEvent =
| 0x13000002 || LuciaE
+
This is "nn::hid::system::KeyboardLockKeyEvent". This is a 32-bit flag.
|-
  −
| 0x14000000 || Verification
  −
|-
  −
| 0xFFFFFFFF || Unknown
  −
|}
  −
 
  −
= AppletFooterUiType =
  −
This is "nn::hid::system::AppletFooterUiType".
      
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
!  Value
  −
!  Description
   
|-
 
|-
| 0 || None
+
! Bit
 +
! Description
 
|-
 
|-
| 1 || HandheldNone
+
| 0
 +
| NumLockOn
 
|-
 
|-
| 2 || HandheldJoyConLeftOnly
+
| 1
 +
| NumLockOff
 
|-
 
|-
| 3 || HandheldJoyConRightOnly
+
| 2
 +
| NumLockToggle
 
|-
 
|-
| 4 || HandheldJoyConLeftJoyConRight
+
| 3
 +
| CapsLockOn
 
|-
 
|-
| 5 || JoyDual
+
| 4
 +
| CapsLockOff
 
|-
 
|-
| 6 || JoyDualLeftOnly
+
| 5
 +
| CapsLockToggle
 
|-
 
|-
| 7 || JoyDualRightOnly
+
| 6
 +
| ScrollLockOn
 
|-
 
|-
| 8 || JoyLeftHorizontal
+
| 7
 +
| ScrollLockOff
 
|-
 
|-
| 9 || JoyLeftVertical
+
| 8
|-
+
| ScrollLockToggle
| 10 || JoyRightHorizontal
+
|}
|-
+
 
| 11 || JoyRightVertical
+
= BasicXpadButtonSet =
 +
This is "nn::hid::BasicXpadButtonSet". This is a BitFlagSet object for [[#BasicXpadButton]].
 +
 
 +
= HomeButtonSet =
 +
This is "nn::hid::system::HomeButtonSet". This is a BitFlagSet object for [[#HomeButton]].
 +
 
 +
= SleepButtonSet =
 +
This is "nn::hid::system::SleepButtonSet". This is a BitFlagSet object for [[#SleepButton]].
 +
 
 +
= CaptureButtonSet =
 +
This is "nn::hid::system::CaptureButtonSet". This is a BitFlagSet object for [[#CaptureButton]].
 +
 
 +
= NpadButtonSet =
 +
This is "nn::hid::NpadButtonSet". This is a BitFlagSet object for [[#NpadButton]].
 +
 
 +
= NpadButton =
 +
This is "nn::hid::NpadButton". This is a 64-bit flag.
 +
 
 +
{| class="wikitable" border="1"
 
|-
 
|-
| 12 || SwitchProController
+
! Bit
 +
! Description
 
|-
 
|-
| 13 || CompatibleProController
+
| 0
 +
| A
 
|-
 
|-
| 14 || CompatibleJoyCon
+
| 1
 +
| B
 
|-
 
|-
| 15 || LarkHvc1
+
| 2
 +
| X
 
|-
 
|-
| 16 || LarkHvc2
+
| 3
 +
| Y
 
|-
 
|-
| 17 || LarkNesLeft
+
| 4
 +
| StickL
 
|-
 
|-
| 18 || LarkNesRight
+
| 5
 +
| StickR
 
|-
 
|-
| 19 || Lucia
+
| 6
 +
| L
 
|-
 
|-
| 20 || Verification
+
| 7
|}
+
| R
 
  −
= NpadIdType =
  −
This is "nn::hid::NpadIdType". This is the controller index used in [[#SharedMemoryFormat|sharedmem]].
  −
 
  −
{| class="wikitable" border="1"
  −
!  Value
  −
!  Description
   
|-
 
|-
| 0x0 || No1
+
| 8
 +
| ZL
 
|-
 
|-
| 0x1 || No2
+
| 9
 +
| ZR
 
|-
 
|-
| 0x2 || No3
+
| 10
 +
| Plus
 
|-
 
|-
| 0x3 || No4
+
| 11
 +
| Minus
 
|-
 
|-
| 0x4 || No5
+
| 12
 +
| Left
 
|-
 
|-
| 0x5 || No6
+
| 13
 +
| Up
 
|-
 
|-
| 0x6 || No7
+
| 14
 +
| Right
 
|-
 
|-
| 0x7 || No8
+
| 15
 +
| Down
 
|-
 
|-
| 0x10 || Other
+
| 16
 +
| StickLLeft
 
|-
 
|-
| 0x20 || Handheld
+
| 17
|}
+
| StickLUp
 
  −
= NpadInterfaceType =
  −
This is "nn::hid::NpadInterfaceType".
  −
 
  −
{| class="wikitable" border="1"
  −
!  Value
  −
!  Description
   
|-
 
|-
| 1 || Bluetooth
+
| 18
 +
| StickLRight
 
|-
 
|-
| 2 || Rail
+
| 19
 +
| StickLDown
 
|-
 
|-
| 3 || USB
+
| 20
 +
| StickRLeft
 
|-
 
|-
| 4 || Unknown
+
| 21
|}
+
| StickRUp
 
  −
= NpadLarkType =
  −
This is "nn::hid::NpadLarkType".
  −
 
  −
{| class="wikitable" border="1"
  −
!  Value
  −
!  Description
   
|-
 
|-
| 0 || Invalid
+
| 22
 +
| StickRRight
 
|-
 
|-
| 1 || H1
+
| 23
 +
| StickRDown
 
|-
 
|-
| 2 || H2
+
| 24
 +
| LeftSL
 
|-
 
|-
| 3 || NL
+
| 25
 +
| LeftSR
 
|-
 
|-
| 4 || NR
+
| 26
|}
+
| RightSL
 
  −
= NpadLuciaType =
  −
This is "nn::hid::NpadLuciaType".
  −
 
  −
{| class="wikitable" border="1"
  −
!  Value
  −
!  Description
   
|-
 
|-
| 0 || Invalid
+
| 27
 +
| RightSR
 
|-
 
|-
| 1 || J
+
| 28
 +
| Palma
 
|-
 
|-
| 2 || E
+
| 29
 +
| Verification
 
|-
 
|-
| 3 || U
+
| 30
|}
+
| HandheldLeftB (Left B button on NES controllers in Handheld mode)
 
  −
= GestureDirection =
  −
This is "nn::hid::GestureDirection".
  −
 
  −
{| class="wikitable" border="1"
  −
!  Value
  −
!  Description
   
|-
 
|-
| 0 || None
+
| 31
 +
| LagonCLeft (Left C button in N64 controller)
 
|-
 
|-
| 1 || Left
+
| 32
 +
| LagonCUp (Up C button in N64 controller)
 
|-
 
|-
| 2 || Up
+
| 33
 +
| LagonCRight (Right C button in N64 controller)
 
|-
 
|-
| 3 || Right
+
| 34
|-
+
| LagonCDown (Down C button in N64 controller)
| 4 || Down
   
|}
 
|}
   −
= GestureType =
+
= AnalogStickCalibrationFlagsSet =
This is "nn::hid::GestureType".
+
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
  −
|-
  −
| 0 || Idle
  −
|-
  −
| 1 || Complete
  −
|-
  −
| 2 || Cancel
  −
|-
  −
| 3 || Touch
  −
|-
  −
| 4 || Press
  −
|-
  −
| 5 || Tap
  −
|-
  −
| 6 || Pan
  −
|-
  −
| 7 || Swipe
  −
|-
  −
| 8 || Pinch
  −
|-
  −
| 9 || Rotate
  −
|}
  −
 
  −
= DeviceHandle =
  −
This is "nn::xcd::DeviceHandle". This is a 8 byte value.
  −
 
  −
= DeviceType =
  −
This is "nn::hid::system::DeviceType".
  −
 
  −
{| class="wikitable" border="1"
  −
!  Bits
   
!  Description
 
!  Description
 +
!  Notes
 
|-
 
|-
 
| 0
 
| 0
| FullKey
+
| NpadStyleFullKey
 +
| Pro Controller
 
|-
 
|-
 
| 1
 
| 1
| DebugPad
+
| NpadStyleHandheld
 +
| Joy-Con controller in handheld mode
 
|-
 
|-
 
| 2
 
| 2
| HandheldLeft
+
| NpadStyleJoyDual
 +
| Joy-Con controller in dual mode
 
|-
 
|-
 
| 3
 
| 3
| HandheldRight
+
| NpadStyleJoyLeft
 +
| Joy-Con left controller in single mode
 
|-
 
|-
 
| 4
 
| 4
| JoyLeft
+
| NpadStyleJoyRight
 +
| Joy-Con right controller in single mode
 
|-
 
|-
 
| 5
 
| 5
| JoyRight
+
| NpadStyleGc
 +
| GameCube controller
 
|-
 
|-
 
| 6
 
| 6
| Palma
+
| NpadStylePalma
 +
| Poké Ball Plus controller
 
|-
 
|-
 
| 7
 
| 7
| LarkHvcLeft
+
| NpadStyleLark
 +
| NES/Famicom controller
 
|-
 
|-
 
| 8
 
| 8
| LarkHvcRight
+
| NpadStyleHandheldLark
 +
| NES/Famicom controller in handheld mode
 
|-
 
|-
 
| 9
 
| 9
| LarkNesLeft
+
| NpadStyleLucia
 +
| SNES controller
 
|-
 
|-
 
| 10
 
| 10
| LarkNesRight
+
| NpadStyleLagon
 +
| N64 controller
 
|-
 
|-
 
| 11
 
| 11
| HandheldLarkHvcLeft
+
| NpadStyleLager
 +
| Sega Genesis controller
 
|-
 
|-
| 12
+
| 12-28
| HandheldLarkHvcRight
+
| Reserved
 +
|
 
|-
 
|-
| 13
+
| 29
| HandheldLarkNesLeft
+
| NpadStyleSystemExt
 +
| Generic external controller
 
|-
 
|-
| 14
+
| 30
| HandheldLarkNesRight
+
| NpadStyleSystem
 +
| Generic controller
 
|-
 
|-
| 15
+
| 31
| Lucia
  −
|-
  −
| 16-30
   
| Reserved
 
| Reserved
|-
+
|
| 31
  −
| System
   
|}
 
|}
   −
= DeviceTypeInternal =
+
= NpadDeviceTypeSet =
This is "nn::hid::detail::DeviceTypeInternal".
+
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"
!  Bits
  −
!  Description
   
|-
 
|-
| 0-7
+
! Bit
| 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.
+
! Description
 
|-
 
|-
| 8-10
+
| 0
| Pro Controller
+
| IsChargingJoyDual
 
|-
 
|-
| 11
+
| 1
| Famicom left controller
+
| IsChargingJoyLeft
 
|-
 
|-
| 12
+
| 2
| Famicom right controller (with microphone)
+
| IsChargingJoyRight
 +
|-
 +
| 3
 +
| IsPoweredJoyDual
 +
|-
 +
| 4
 +
| IsPoweredJoyLeft
 +
|-
 +
| 5
 +
| IsPoweredJoyRight
 +
|-
 +
| 9
 +
| IsUnsuportedButtonPressedOnNpadSystem
 +
|-
 +
| 10
 +
| IsUnsuportedButtonPressedOnNpadSystemExt
 +
|-
 +
| 11
 +
| IsAbxyButtonOriented
 +
|-
 +
| 12
 +
| IsSlSrButtonOriented
 
|-
 
|-
 
| 13
 
| 13
| NES left controller
+
| [4.0.0+] IsPlusAvailable
 
|-
 
|-
 
| 14
 
| 14
| NES right controller
+
| [4.0.0+] IsMinusAvailable
 
|-
 
|-
| 15-16
+
| 15
| Invalid
+
| [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"
 
|-
 
|-
| 17
+
! Bit
| Generic external controller
+
! Description
 
|-
 
|-
| 18-20
+
| 0
| Invalid
+
| IsUnintendedHomeButtonInputProtectionEnabled
|-
  −
| 21-23
  −
| Generic controller
   
|}
 
|}
   −
[9.0.0+] This is "nn::hidtypes::DeviceType".
+
= AppletFooterUiAttributesSet =
 +
This is "nn::hid::system::AppletFooterUiAttributesSet". This is a BitFlagSet object for [[#AppletFooterUiAttribute]].
 +
 
 +
= UniquePadType =
 +
This is "nn::hid::system::UniquePadType".
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
!  Value
 
!  Value
!  [[#DeviceType|DeviceType]]
  −
!  [[#UniquePadType|UniquePadType]]
   
!  Description
 
!  Description
 
|-
 
|-
| 1 || JoyRight, HandheldRight || JoyRight || Joy-Con right controller
+
| 0 || Embedded
 
|-
 
|-
| 2 || JoyLeft, HandheldLeft || JoyLeft || Joy-Con left controller
+
| 1 || FullKeyController
 
|-
 
|-
| 3 || FullKey || FullKey || Pro Controller
+
| 2 || RightController
 
|-
 
|-
| 4 || JoyLeft || JoyLeft || Reserved
+
| 3 || LeftController
 
|-
 
|-
| 5 || JoyRight || JoyRight || Reserved
+
| 4 || DebugPadController
 +
|}
 +
 
 +
= UniquePadInterface =
 +
This is "nn::hid::system::UniquePadInterface".
 +
 
 +
{| class="wikitable" border="1"
 +
!  Value
 +
!  Description
 
|-
 
|-
| 6 || FullKey || FullKey || Reserved
+
| 0 || Embedded
 
|-
 
|-
| 7 || LarkHvcLeft, HandheldLarkHvcLeft || JoyLeft || Famicom left controller
+
| 1 || Rail
 
|-
 
|-
| 8 || LarkHvcRight, HandheldLarkHvcRight || JoyRight || Famicom right controller (with microphone)
+
| 2 || Bluetooth
 
|-
 
|-
| 9 || LarkNesLeft, HandheldLarkNesLeft || JoyLeft || NES left controller
+
| 3 || Usb
 +
|}
 +
 
 +
= UniquePadSerialNumber =
 +
This is "nn::hid::system::UniquePadSerialNumber". This is a 0x10 byte value.
 +
 
 +
= UniquePadId =
 +
This is "nn::hid::system::UniquePadId". This is a 8 byte value.
 +
 
 +
= AnalogStickManualCalibrationStage =
 +
This is "nn::hid::system::AnalogStickManualCalibrationStage".
 +
 
 +
{| class="wikitable" border="1"
 +
!  Value
 +
!  Description
 
|-
 
|-
| 10 || LarkNesRight, HandheldLarkNesRight || JoyRight || NES right controller
+
| 0 || ReleaseFromRight
 
|-
 
|-
| 11 || Lucia || FullKey || SNES controller
+
| 1 || ReleaseFromBottom
 
|-
 
|-
| 12 || Palma || Other || Poké Ball Plus controller
+
| 2 || ReleaseFromLeft
 
|-
 
|-
| 13 || FullKey || FullKey || Gc controller
+
| 3 || ReleaseFromTop
 
|-
 
|-
| 14 || HandheldLeft || JoyLeft || Reserved
+
| 4 || Rotate
 
|-
 
|-
| 15 || FullKey || FullKey || Reserved
+
| 5 || Update
 
|-
 
|-
| 16 || FullKey || FullKey || Reserved
+
| 6 || Completed
 
|-
 
|-
| 17 || DebugPad || DebugPad || Debug controller
+
| 7 || Clear
 
|-
 
|-
| 18 || HandheldRight || JoyRight || Reserved
+
| 8 || ClearCompleted
 +
|}
 +
 
 +
= SixAxisSensorUserCalibrationStage =
 +
This is "nn::hid::system::SixAxisSensorUserCalibrationStage".
 +
 
 +
{| class="wikitable" border="1"
 +
!  Value
 +
!  Description
 
|-
 
|-
| 19 || System || Other || Unknown (has [[#NpadStyleTag|NpadFullKey]] style tag)
+
| 0 || Measuring
 
|-
 
|-
| 20 || System || Other || Unknown (has [[#NpadStyleTag|NpadJoyDual]] style tag)
+
| 1 || Update
 
|-
 
|-
| 21 || System || Other || Unknown (has [[#NpadStyleTag|NpadJoyDual]] style tag)
+
| 2 || Completed
 
|}
 
|}
   −
= NpadPowerInfo =
+
= NpadJoyHoldType =
This is "nn::hid::system::NpadPowerInfo".
+
This is "nn::hid::NpadJoyHoldType".
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 +
!  Value
 +
!  Description
 
|-
 
|-
! Offset
+
| 0 || Vertical
! Size
+
|-
! Description
+
| 1 || Horizontal
 +
|}
 +
 
 +
= NpadJoyDeviceType =
 +
This is "nn::hid::NpadJoyDeviceType".
 +
 
 +
{| class="wikitable" border="1"
 +
! Value
 +
! Description
 
|-
 
|-
| 0x0
+
| 0 || Left
| 0x1
  −
| IsPowered
   
|-
 
|-
| 0x1
+
| 1 || Right
| 0x1
  −
| IsCharging
  −
|-
  −
| 0x2
  −
| 0x6
  −
| Reserved
  −
|-
  −
| 0x8
  −
| 0x6
  −
| [[#BatteryLevel|BatteryLevel]]
   
|}
 
|}
   −
= BatteryLevel =
+
= NpadHandheldActivationMode =
This is "nn::hid::system::NpadBatteryLevel". This is a 4 byte value.
+
This is "nn::hid::NpadHandheldActivationMode".
   −
= ConsoleSixAxisSensorHandle =
+
This controls how many joycons must be attached for handheld mode to be triggered (Dual = 2, Single = 1, None = 0).
This is "nn::hid::ConsoleSixAxisSensorHandle". This is a 4-byte struct with 4-byte alignment.
  −
 
  −
sdknso GetConsoleSixAxisSensorHandle always returns a handle with value 0x13.
      
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 +
!  Value
 +
!  Description
 
|-
 
|-
! Offset || Size || Description
+
| 0 || Dual
 
|-
 
|-
| 0x0 || 0x4 || TypeValue
+
| 1 || Single
 
|-
 
|-
| 0x0 || 0x1 ||
+
| 2 || None
|-
  −
| 0x1 || 0x1 ||  
   
|}
 
|}
   −
= SixAxisSensorHandle =
+
= NpadJoyAssignmentMode =
This is "nn::hid::SixAxisSensorHandle". This is a 4-byte struct with 4-byte alignment.
+
This is "nn::hid::NpadJoyAssignmentMode".
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 +
!  Value
 +
!  Description
 
|-
 
|-
! Offset || Size || Description
+
| 0 || Dual
 
|-
 
|-
| 0x0 || 0x4 || TypeValue
+
| 1 || Single
|-
+
|}
| 0x0 || 0x1 || NpadStyleIndex
  −
|-
  −
| 0x1 || 0x1 || [[#NpadIdType|PlayerNumber]]
  −
|-
  −
| 0x2 || 0x1 || DeviceIdx
  −
|}
     −
= VibrationDeviceHandle =
+
= NpadCommunicationMode =
This is "nn::hid::VibrationDeviceHandle". This is a 4-byte struct with 4-byte alignment.
+
This is "nn::hid::NpadCommunicationMode".
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 +
!  Value
 +
!  Description
 
|-
 
|-
! Offset || Size || Description
+
| 0 || 5ms
 
|-
 
|-
| 0x0 || 0x4 || TypeValue
+
| 1 || 10ms
 
|-
 
|-
| 0x0 || 0x1 || NpadStyleIndex
+
| 2 || 15ms
 
|-
 
|-
| 0x1 || 0x1 || [[#NpadIdType|PlayerNumber]]
+
| 3 || Default
|-
  −
| 0x2 || 0x1 || DeviceIdx
   
|}
 
|}
   −
= VibrationDeviceInfo =
+
= AppletDetailedUiType =
This is "nn::hid::VibrationDeviceInfo" / "nn::hid::VibrationDeviceInfoForIpc". This is a 0x8-byte struct.
+
This is "nn::hid::system::AppletDetailedUiType".
 
  −
{| class="wikitable" border="1"
  −
|-
  −
! Offset || Size || Description
  −
|-
  −
| 0x0 || 0x4 || [[#VibrationDeviceType|DeviceType]]
  −
|-
  −
| 0x4 || 0x4 || [[#VibrationDevicePosition|Position]]
  −
|}
  −
 
  −
= VibrationDeviceType =
  −
This is "nn::hid::VibrationDeviceType".
      
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 6,924: Line 7,060:  
!  Description
 
!  Description
 
|-
 
|-
| 0 || Unknown
+
| 0x00000000 || None
 +
|-
 +
| 0x01000000 || HandheldNone
 
|-
 
|-
| 1 || LinearResonantActuator
+
| 0x02000000 || HandheldJoyConLeftOnly
 
|-
 
|-
| 2 || GcErm
+
| 0x02000001 || HandheldLarkHvc1Only
|}
  −
 
  −
= VibrationDevicePosition =
  −
This is "nn::hid::VibrationDevicePosition".
  −
 
  −
{| class="wikitable" border="1"
  −
!  Value
  −
!  Description
   
|-
 
|-
| 0 || None
+
| 0x02000002 || HandheldLarkNesLeftOnly
 
|-
 
|-
| 1 || Left
+
| 0x03000000 || HandheldJoyConRightOnly
 
|-
 
|-
| 2 || Right
+
| 0x03000001 || HandheldLarkHvc2Only
|}
+
|-
 
+
| 0x03000002 || HandheldLarkNesRightOnly
= VibrationValue =
  −
This is "nn::hid::VibrationValue". This is a 0x10-byte struct, which contains 4 float values.
  −
 
  −
{| class="wikitable" border="1"
   
|-
 
|-
! Offset
+
| 0x04000000 || HandheldJoyConLeftJoyConRight
! Size
  −
! Description
   
|-
 
|-
| 0x0
+
| 0x04000001 || HandheldJoyConLeftLarkHvc2
| 0x4
  −
| AmplitudeLow
   
|-
 
|-
| 0x4
+
| 0x04000002 || HandheldJoyConLeftLarkNesRight
| 0x4
  −
| FrequencyLow
   
|-
 
|-
| 0x8
+
| 0x04000003 || HandheldLarkHvc1JoyConRight
| 0x4
  −
| AmplitudeHigh
   
|-
 
|-
| 0xC
+
| 0x04000004 || HandheldLarkHvc1LarkHvc2
| 0x4
  −
| FrequencyHigh
  −
|}
  −
 
  −
= VibrationGcErmCommand =
  −
This is "nn::hid::VibrationGcErmCommand".
  −
 
  −
{| class="wikitable" border="1"
  −
!  Value
  −
!  Name
  −
!  Description
   
|-
 
|-
| 0 || Stop || Stops the vibration with a decay phase.
+
| 0x04000005 || HandheldLarkHvc1LarkNesRight
 
|-
 
|-
| 1 || Start || Starts the vibration.
+
| 0x04000006 || HandheldLarkNesLeftJoyConRight
 
|-
 
|-
| 2 || StopHard || Stops the vibration immediately, with no decay phase.
+
| 0x04000007 || HandheldLarkNesLeftLarkHvc2
|}
  −
 
  −
= AccelerometerPlayMode =
  −
This is "nn::hid::debug::AccelerometerPlayMode" (pre-10.0.0 this is "nn::hid::AccelerometerPlayMode").
  −
 
  −
{| class="wikitable" border="1"
  −
!  Value
  −
!  Description
   
|-
 
|-
| 0 || Loose
+
| 0x04000008 || HandheldLarkNesLeftLarkNesRight
 
|-
 
|-
| 1 || Tight
+
| 0x05000000 || JoyDual
|}
  −
 
  −
= GyroscopeZeroDriftMode =
  −
This is "nn::hid::GyroscopeZeroDriftMode".
  −
 
  −
{| class="wikitable" border="1"
  −
!  Value
  −
!  Description
   
|-
 
|-
| 0 || Loose
+
| 0x06000000 || JoyDualLeftOnly
 
|-
 
|-
| 1 || Standard
+
| 0x07000000 || JoyDualRightOnly
 
|-
 
|-
| 2 || Tight
+
| 0x08000000 || JoyLeftHorizontal
|}
  −
 
  −
= 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
+
| 0x09000000 || JoyLeftVertical
 
|-
 
|-
| 0x0 || 0x4 || [[#PalmaOperationType]]
+
| 0x0A000000 || JoyRightHorizontal
 
|-
 
|-
| 0x4 || 0x4 || Result
+
| 0x0B000000 || JoyRightVertical
 
|-
 
|-
| 0x8 || 0x140 || Buffer for [[#GetPalmaOperationInfo]].
+
| 0x0C000000 || SwitchProController
|}
  −
 
  −
= PalmaOperationType =
  −
This is "nn::hid::PalmaOperationType".
  −
 
  −
{| class="wikitable" border="1"
  −
!  Value
  −
!  Description
   
|-
 
|-
| 0 || PlayActivity
+
| 0x0D000000 || CompatibleProController
 
|-
 
|-
| 1 || SetFrModeType
+
| 0x0E000000 || CompatibleJoyCon
 
|-
 
|-
| 2 || ReadStep
+
| 0x0F000000 || LarkHvc1
 
|-
 
|-
| 3 || EnableStep
+
| 0x10000000 || LarkHvc2
 
|-
 
|-
| 4 || ResetStep
+
| 0x11000000 || LarkNesLeft
 
|-
 
|-
| 5 || ReadApplicationSection
+
| 0x12000000 || LarkNesRight
 
|-
 
|-
| 6 || WriteApplicationSection
+
| 0x13000000 || LuciaU
 
|-
 
|-
| 7 || ReadUniqueCode
+
| 0x13000001 || LuciaJ
 
|-
 
|-
| 8 || SetUniqueCodeInvalid
+
| 0x13000002 || LuciaE
 
|-
 
|-
| 9 || WriteActivityEntry
+
| 0x14000000 || Verification
 
|-
 
|-
| 10 || WriteRgbLedPatternEntry
+
| 0x15000000 || [13.0.0+] Lagon
 
|-
 
|-
| 11 || WriteWaveEntry
+
| 0xFFFFFFFF || Unknown
|-
  −
| 12 || ReadDataBaseIdentificationVersion
  −
|-
  −
| 13 || WriteDataBaseIdentificationVersion
  −
|-
  −
| 14 || SuspendFeature
  −
|-
  −
| [[5.1.0]]+ 15 || ReadPlayLog
  −
|-
  −
| [[5.1.0]]+ 16 || ResetPlayLog
   
|}
 
|}
   −
= PalmaFrModeType =
+
= AppletFooterUiType =
This is "nn::hid::PalmaFrModeType".
+
This is "nn::hid::system::AppletFooterUiType".
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 7,078: Line 7,142:  
!  Description
 
!  Description
 
|-
 
|-
| 0 || Off
+
| 0 || None
 
|-
 
|-
| 1 || B01
+
| 1 || HandheldNone
 
|-
 
|-
| 2 || B02
+
| 2 || HandheldJoyConLeftOnly
 
|-
 
|-
| 3 || B03
+
| 3 || HandheldJoyConRightOnly
 
|-
 
|-
| 4 || Downloaded
+
| 4 || HandheldJoyConLeftJoyConRight
|}
  −
 
  −
= 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 || JoyDual
 
|-
 
|-
| 0x0 || 0x2 || RgbLedPatternIndex.
+
| 6 || JoyDualLeftOnly
 
|-
 
|-
| 0x2 || 0x2 || Padding
+
| 7 || JoyDualRightOnly
 
|-
 
|-
| 0x4 || 0x4 || [[#PalmaWaveSet|WaveSet]].
+
| 8 || JoyLeftHorizontal
 
|-
 
|-
| 0x8 || 0x2 || WaveIndex.
+
| 9 || JoyLeftVertical
|}
  −
 
  −
= PalmaWaveSet =
  −
This is "nn::hid::PalmaWaveSet".
  −
 
  −
{| class="wikitable" border="1"
  −
!  Value
  −
!  Description
   
|-
 
|-
| 0 || Small
+
| 10 || JoyRightHorizontal
 
|-
 
|-
| 1 || Medium
+
| 11 || JoyRightVertical
 
|-
 
|-
| 2 || Large
+
| 12 || SwitchProController
|}
+
|-
 
+
| 13 || CompatibleProController
= PalmaFeature =
+
|-
This is "nn::hid::PalmaFeature".
+
| 14 || CompatibleJoyCon
 
+
|-
{| class="wikitable" border="1"
+
| 15 || LarkHvc1
 
|-
 
|-
! Bit
+
| 16 || LarkHvc2
! Description
   
|-
 
|-
| 0
+
| 17 || LarkNesLeft
| FrMode
   
|-
 
|-
| 1
+
| 18 || LarkNesRight
| RumbleFeedback
   
|-
 
|-
| 2
+
| 19 || Lucia
| Step
   
|-
 
|-
| 3
+
| 20 || Verification
| MuteSwitch
   
|-
 
|-
 +
| 21 || [13.0.0+] Lagon
 
|}
 
|}
   −
= AbstractedPadState =
+
= NpadIdType =
 +
This is "nn::hid::NpadIdType". This is the controller index used in [[#SharedMemoryFormat|sharedmem]].
 +
 
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 +
!  Value
 +
!  Description
 
|-
 
|-
! Offset || Size || Description
+
| 0x0 || No1
 
|-
 
|-
| 0x0 || 0x4 || Type, only 1 bit can be set. Converted to [[#HdlsDeviceInfo]]::type internally by [[#SetAutoPilotVirtualPadState]].
+
| 0x1 || No2
 
|-
 
|-
| 0x4 || 0x1 || Flags. [[#SetAutoPilotVirtualPadState]] only uses bit0: when clear it will skip using the rest of the input and run [[#UnsetAutoPilotVirtualPadState]] internally.
+
| 0x2 || No3
 
|-
 
|-
| 0x5 || 0x3 || Padding
+
| 0x3 || No4
 
|-
 
|-
| 0x8 || 0x4 || RGBA Single Body Color
+
| 0x4 || No5
 
|-
 
|-
| 0xC || 0x4 || RGBA Single Buttons Color
+
| 0x5 || No6
 
|-
 
|-
| 0x10 || 0x1 || See [[#HiddbgHdlsDeviceInfo]]::[[#NpadInterfaceType]].
+
| 0x6 || No7
 
|-
 
|-
| 0x11 || 0x3 || Padding
+
| 0x7 || No8
 
|-
 
|-
| 0x14 || 0x24 || [[#HdlsState]]. Unknown if the last 4-bytes are included in this struct, [[#SetAutoPilotVirtualPadState]]/[[#hiddbgGetAbstractedPadsState]] only uses the first 0x20-bytes.
+
| 0x10 || Other
 
|-
 
|-
| 0x38 || 0x60 || Unused with [[#SetAutoPilotVirtualPadState]]/[[#GetAbstractedPadsState]].
+
| 0x20 || Handheld
 
|}
 
|}
   −
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.
+
= NpadInterfaceType =
 +
This is "nn::hid::NpadInterfaceType".
   −
Type:
   
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Bits
+
Value
!  [[#HdlsDeviceInfo]]::type bits
   
!  Description
 
!  Description
!  Notes
   
|-
 
|-
| 0 || 0 || ||  
+
| 1 || Bluetooth
 
|-
 
|-
| 1 || 15 || || [[#DeviceType]] |= BIT(1)
+
| 2 || Rail
 
|-
 
|-
| 2 || 1 || ||  
+
| 3 || USB
 
|-
 
|-
| 3 || 2 || ||  
+
| 4 || Unknown
 +
|}
 +
 
 +
= NpadLarkType =
 +
This is "nn::hid::NpadLarkType".
 +
 
 +
{| class="wikitable" border="1"
 +
!  Value
 +
!  Description
 
|-
 
|-
| 4 || 1 || ||  
+
| 0 || Invalid
 
|-
 
|-
| 5 || 2 || ||  
+
| 1 || H1
 
|-
 
|-
| 6 || 3 || ||  
+
| 2 || H2
 
|-
 
|-
| 7 || 11 || || [[#DeviceType]] |= BIT(11)
+
| 3 || NL
 
|-
 
|-
| 8 || 12 || || [[#DeviceType]] |= BIT(12)
+
| 4 || NR
 +
|}
 +
 
 +
= NpadLuciaType =
 +
This is "nn::hid::NpadLuciaType".
 +
 
 +
{| class="wikitable" border="1"
 +
!  Value
 +
!  Description
 
|-
 
|-
| 9 || 13 || || [[#DeviceType]] |= BIT(13)
+
| 0 || Invalid
 
|-
 
|-
| 10 || 14 || || [[#DeviceType]] |= BIT(14)
+
| 1 || J
 
|-
 
|-
| 11 || 15 || || [[#DeviceType]] |= BIT(11)
+
| 2 || E
 
|-
 
|-
| 12 || 12 || || [[#DeviceType]] |= BIT(12)
+
| 3 || U
 +
|}
 +
 
 +
= NpadLagerType =
 +
This is "nn::hid::NpadLagerType".
 +
 
 +
{| class="wikitable" border="1"
 +
!  Value
 +
!  Description
 
|-
 
|-
| 13 || 13 || || [[#DeviceType]] |= BIT(13)
+
| 0 || Invalid
 
|-
 
|-
| 14 || 14 || || [[#DeviceType]] |= BIT(14)
+
| 1 || J
 
|-
 
|-
| 15 || 17 || ||
+
| 2 || E
|-
  −
| 31 || 21 || || [[#DeviceType]] = BIT(31)
   
|-
 
|-
 +
| 3 || U
 
|}
 
|}
   −
The above "[[#DeviceType]] |=" notes only apply when type2 is 0x2.
+
= GestureDirection =
 
+
This is "nn::hid::GestureDirection".
= DebugPadAutoPilotState =
  −
This is "nn::hid::debug::DebugPadAutoPilotState"
      
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 +
!  Value
 +
!  Description
 
|-
 
|-
! Offset
+
| 0 || None
! Size
  −
! Description
   
|-
 
|-
| 0x0
+
| 1 || Left
| 0x4
  −
| [[#DebugPadAttributeSet|Attributes]]
   
|-
 
|-
| 0x4
+
| 2 || Up
| 0x4
  −
| [[#DebugPadButtonSet|Buttons]]
   
|-
 
|-
| 0x8
+
| 3 || Right
| 0x8
  −
| [[#AnalogStickState|AnalogStickL]]
   
|-
 
|-
| 0x10
+
| 4 || Down
| 0x8
  −
| [[#AnalogStickState|AnalogStickR]]
   
|}
 
|}
   −
= MouseAutoPilotState =
+
= GestureType =
This is "nn::hid::debug::MouseAutoPilotState".
+
This is "nn::hid::GestureType".
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 +
!  Value
 +
!  Description
 
|-
 
|-
! Offset
+
| 0 || Idle
! Size
  −
! Description
   
|-
 
|-
| 0x0
+
| 1 || Complete
| 0x4
  −
| X
   
|-
 
|-
| 0x4
+
| 2 || Cancel
| 0x4
  −
| Y
   
|-
 
|-
| 0x8
+
| 3 || Touch
| 0x4
  −
| DeltaX
   
|-
 
|-
| 0xC
+
| 4 || Press
| 0x4
  −
| DeltaY
   
|-
 
|-
| 0x10
+
| 5 || Tap
| 0x4
+
|-
| WheelDelta
+
| 6 || Pan
|-
+
|-
| 0x14
+
| 7 || Swipe
| 0x4
+
|-
| [[#MouseButtonSet|Buttons]]
+
| 8 || Pinch
|-
+
|-
| 0x18
+
| 9 || Rotate
| 0x4
+
|}
| [[#MouseAttributeSet|Attributes]]
+
 
|}
+
= DeviceHandle =
 
+
This is "nn::xcd::DeviceHandle". This is a 8 byte value.
= KeyboardAutoPilotState =
+
 
This is "nn::hid::debug::KeyboardAutoPilotState".
+
= DeviceType =
 
+
This is "nn::hid::system::DeviceType".
{| class="wikitable" border="1"
+
 
|-
+
{| class="wikitable" border="1"
! Offset
+
!  Bits
! Size
+
!  Description
! Description
+
|-
|-
+
| 0
| 0x0
+
| FullKey
| 0x8
+
|-
| [[#KeyboardModifierSet|Modifiers]]
+
| 1
|-
+
| DebugPad
| 0x8
+
|-
| 0x20
+
| 2
| [[#KeyboardKeySet|Keys]]
+
| HandheldLeft
|}
+
|-
 
+
| 3
= HdlsHandle =
+
| HandheldRight
This is "nn::hid::debug::HdlsHandle". This is a 0x8-byte struct with 8-byte alignment.
+
|-
 
+
| 4
= HdlsNpadAssignment =
+
| JoyLeft
This is a 0x208-byte struct.
+
|-
 
+
| 5
{| class="wikitable" border="1"
+
| JoyRight
|-
+
|-
! Offset || Size || Description
+
| 6
|-
+
| Palma
| 0x0 || 0x4 || s32 Total entries
+
|-
|-
+
| 7
| 0x4 || 0x4 || Padding
+
| LarkHvcLeft
|-
+
|-
| 0x8 || 0x200(0x20*0x10) || Array of [[#HdlsNpadAssignmentEntry]].
+
| 8
|}
+
| LarkHvcRight
 
+
|-
= HdlsNpadAssignmentEntry =
+
| 9
This is a 0x20-byte struct.
+
| LarkNesLeft
 
+
|-
{| class="wikitable" border="1"
+
| 10
|-
+
| LarkNesRight
! Offset || Size || Description
+
|-
|-
+
| 11
| 0x0 || 0x8 || [[#HdlsHandle]]
+
| HandheldLarkHvcLeft
|-
+
|-
| 0x8 || 0x4 || ?
+
| 12
|-
+
| HandheldLarkHvcRight
| 0xC || 0x4 || ?
+
|-
|-
+
| 13
| 0x10 || 0x8 || ?
+
| HandheldLarkNesLeft
|-
+
|-
| 0x18 || 0x1 || ?
+
| 14
|-
+
| HandheldLarkNesRight
| 0x19 || 0x7 || Padding
+
|-
|}
+
| 15
 
+
| Lucia
= HdlsStateList =
+
|-
This is a 0x408-byte struct.
+
| 16
 
+
| Lagon
[9.0.0+] This is a 0x488-byte struct.
+
|-
 
+
| 17
{| class="wikitable" border="1"
+
| Lager
|-
+
|-
! Offset || Size || Description
+
| 18-30
|-
+
| Reserved
| 0x0 || 0x4 || s32 Total entries
+
|-
|-
+
| 31
| 0x4 || 0x4 || Padding
+
| System
|-
+
|}
| 0x8 || <[[#HdlsStateListEntry]] size>*0x10 || Array of [[#HdlsStateListEntry]].
+
 
|}
+
= DeviceTypeInternal =
 
+
This is "nn::hid::detail::DeviceTypeInternal".
This contains a list of all controllers, including non-virtual controllers.
+
 
 
+
{| class="wikitable" border="1"
 +
!  Bits
 +
!  Description
 +
|-
 +
| 0-7
 +
| BIT(N*4+0) = Pro Controller, BIT(N*4+1) = Joy-Con Left, BIT(N*4+2) = Joy-Con Right, BIT(N*4+3) = invalid. Where N is 0-1.
 +
|-
 +
| 8-10
 +
| Pro Controller
 +
|-
 +
| 11
 +
| Famicom left controller
 +
|-
 +
| 12
 +
| Famicom right controller (with microphone)
 +
|-
 +
| 13
 +
| NES left controller
 +
|-
 +
| 14
 +
| NES right controller
 +
|-
 +
| 15-16
 +
| Invalid
 +
|-
 +
| 17
 +
| Generic external controller
 +
|-
 +
| 18-20
 +
| Invalid
 +
|-
 +
| 21-23
 +
| Generic controller
 +
|}
 +
 
 +
[9.0.0+] This is "nn::hidtypes::DeviceType".
 +
 
 +
{| class="wikitable" border="1"
 +
!  Value
 +
!  [[#DeviceType|DeviceType]]
 +
!  [[#UniquePadType|UniquePadType]]
 +
!  [[#AppletDetailedUiType|AppletDetailedUiType]]
 +
!  Description
 +
|-
 +
| 1 || JoyRight, HandheldRight || RightController || JoyDual, JoyRightHorizontal, JoyRightVertical, JoyDualRightOnly, HandheldJoyConRightOnly, HandheldJoyConLeftJoyConRight, HandheldLarkHvc1JoyConRight, HandheldLarkNesLeftJoyConRight, HandheldNone || Joy-Con right controller
 +
|-
 +
| 2 || JoyLeft, HandheldLeft || LeftController || JoyDual, JoyLeftHorizontal, JoyLeftVertical, JoyDualLeftOnly, HandheldJoyConLeftOnly, HandheldJoyConLeftJoyConRight, HandheldJoyConLeftLarkHvc2, HandheldJoyConLeftLarkNesRight, HandheldNone || Joy-Con left controller
 +
|-
 +
| 3 || FullKey || FullKeyController || SwitchProController || Pro Controller
 +
|-
 +
| 4 || JoyLeft || LeftController || || Reserved
 +
|-
 +
| 5 || JoyRight || RightController || || Reserved
 +
|-
 +
| 6 || FullKey || FullKeyController || || Reserved
 +
|-
 +
| 7 || LarkHvcLeft, HandheldLarkHvcLeft || LeftController || LarkHvc1, HandheldLarkHvc1Only, HandheldLarkHvc1JoyConRight, HandheldLarkHvc1LarkHvc2, HandheldLarkHvc1LarkNesRight, HandheldNone || Famicom left controller
 +
|-
 +
| 8 || LarkHvcRight, HandheldLarkHvcRight || RightController || LarkHvc2, HandheldLarkHvc2Only, HandheldJoyConLeftLarkHvc2, HandheldLarkHvc1LarkHvc2, HandheldLarkNesLeftLarkHvc2, HandheldNone || Famicom right controller (with microphone)
 +
|-
 +
| 9 || LarkNesLeft, HandheldLarkNesLeft || LeftController || LarkNesLeft, HandheldLarkNesLeftOnly, HandheldLarkNesLeftJoyConRight, HandheldLarkNesLeftLarkHvc2, HandheldLarkNesLeftLarkNesRight, HandheldNone || NES left controller
 +
|-
 +
| 10 || LarkNesRight, HandheldLarkNesRight || RightController || LarkNesRight, HandheldLarkNesRightOnly, HandheldJoyConLeftLarkNesRight, HandheldLarkHvc1LarkNesRight, HandheldLarkNesLeftLarkNesRight, HandheldNone || NES right controller
 +
|-
 +
| 11 || Lucia || FullKeyController || LuciaU, LuciaJ, LuciaE || SNES controller
 +
|-
 +
| 12 || Palma || Embedded || Unknown || Poké Ball Plus controller
 +
|-
 +
| 13 || FullKey || FullKeyController || || Gc controller
 +
|-
 +
| 14 || HandheldLeft || LeftController || || Reserved
 +
|-
 +
| 15 || FullKey || FullKeyController || || Reserved
 +
|-
 +
| 16 || FullKey || FullKeyController || || Reserved
 +
|-
 +
| 17 || DebugPad || DebugPadController || Verification || Debug controller
 +
|-
 +
| 18 || HandheldRight || RightController || || Reserved
 +
|-
 +
| 19 || System || Embedded || CompatibleProController || Third party Pro Controller
 +
|-
 +
| 20 || System || Embedded || CompatibleJoyCon, HandheldNone || Third party Joy-Con right controller
 +
|-
 +
| 21 || System || Embedded || CompatibleJoyCon, HandheldNone || Third party Joy-Con left controller
 +
|-
 +
| 22 || Lagon || FullKeyController || Lagon || N64 controller
 +
|-
 +
| 28 || Lager || FullKeyController || || Sega Genesis controller
 +
|}
 +
 
 +
= NpadPowerInfo =
 +
This is "nn::hid::system::NpadPowerInfo".
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0
 +
| 0x1
 +
| IsPowered
 +
|-
 +
| 0x1
 +
| 0x1
 +
| IsCharging
 +
|-
 +
| 0x2
 +
| 0x6
 +
| Reserved
 +
|-
 +
| 0x8
 +
| 0x6
 +
| [[#BatteryLevel|BatteryLevel]]
 +
|}
 +
 
 +
= BatteryLevel =
 +
This is "nn::hid::system::NpadBatteryLevel". This is a 4 byte value.
 +
 
 +
= ConsoleSixAxisSensorHandle =
 +
This is "nn::hid::ConsoleSixAxisSensorHandle". This is a 4-byte struct with 4-byte alignment.
 +
 
 +
sdknso GetConsoleSixAxisSensorHandle always returns a handle with value 0x13.
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset || Size || Description
 +
|-
 +
| 0x0 || 0x4 || TypeValue
 +
|-
 +
| 0x0 || 0x1 ||
 +
|-
 +
| 0x1 || 0x1 ||
 +
|}
 +
 
 +
= SixAxisSensorHandle =
 +
This is "nn::hid::SixAxisSensorHandle". This is a 4-byte struct with 4-byte alignment.
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset || Size || Description
 +
|-
 +
| 0x0 || 0x4 || TypeValue
 +
|-
 +
| 0x0 || 0x1 || NpadStyleIndex
 +
|-
 +
| 0x1 || 0x1 || [[#NpadIdType|PlayerNumber]]
 +
|-
 +
| 0x2 || 0x1 || DeviceIdx
 +
|}
 +
 
 +
= VibrationDeviceHandle =
 +
This is "nn::hid::VibrationDeviceHandle". This is a 4-byte struct with 4-byte alignment.
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset || Size || Description
 +
|-
 +
| 0x0 || 0x4 || TypeValue
 +
|-
 +
| 0x0 || 0x1 || NpadStyleIndex
 +
|-
 +
| 0x1 || 0x1 || [[#NpadIdType|PlayerNumber]]
 +
|-
 +
| 0x2 || 0x1 || DeviceIdx
 +
|}
 +
 
 +
= VibrationDeviceInfo =
 +
This is "nn::hid::VibrationDeviceInfo" / "nn::hid::VibrationDeviceInfoForIpc". This is a 0x8-byte struct.
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset || Size || Description
 +
|-
 +
| 0x0 || 0x4 || [[#VibrationDeviceType|DeviceType]]
 +
|-
 +
| 0x4 || 0x4 || [[#VibrationDevicePosition|Position]]
 +
|}
 +
 
 +
= VibrationDeviceType =
 +
This is "nn::hid::VibrationDeviceType".
 +
 
 +
{| class="wikitable" border="1"
 +
!  Value
 +
!  Description
 +
|-
 +
| 0 || Unknown
 +
|-
 +
| 1 || LinearResonantActuator
 +
|-
 +
| 2 || GcErm
 +
|}
 +
 
 +
= VibrationDevicePosition =
 +
This is "nn::hid::VibrationDevicePosition".
 +
 
 +
{| class="wikitable" border="1"
 +
!  Value
 +
!  Description
 +
|-
 +
| 0 || None
 +
|-
 +
| 1 || Left
 +
|-
 +
| 2 || Right
 +
|}
 +
 
 +
= VibrationValue =
 +
This is "nn::hid::VibrationValue". This is a 0x10-byte struct, which contains 4 float values.
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0
 +
| 0x4
 +
| AmplitudeLow
 +
|-
 +
| 0x4
 +
| 0x4
 +
| FrequencyLow
 +
|-
 +
| 0x8
 +
| 0x4
 +
| AmplitudeHigh
 +
|-
 +
| 0xC
 +
| 0x4
 +
| FrequencyHigh
 +
|}
 +
 
 +
= VibrationGcErmCommand =
 +
This is "nn::hid::VibrationGcErmCommand".
 +
 
 +
{| class="wikitable" border="1"
 +
!  Value
 +
!  Name
 +
!  Description
 +
|-
 +
| 0 || Stop || Stops the vibration with a decay phase.
 +
|-
 +
| 1 || Start || Starts the vibration.
 +
|-
 +
| 2 || StopHard || Stops the vibration immediately, with no decay phase.
 +
|}
 +
 
 +
= AccelerometerPlayMode =
 +
This is "nn::hid::debug::AccelerometerPlayMode" (pre-10.0.0 this is "nn::hid::AccelerometerPlayMode").
 +
 
 +
{| class="wikitable" border="1"
 +
!  Value
 +
!  Description
 +
|-
 +
| 0 || Loose
 +
|-
 +
| 1 || Tight
 +
|}
 +
 
 +
= GyroscopeZeroDriftMode =
 +
This is "nn::hid::GyroscopeZeroDriftMode".
 +
 
 +
{| class="wikitable" border="1"
 +
!  Value
 +
!  Description
 +
|-
 +
| 0 || Loose
 +
|-
 +
| 1 || Standard
 +
|-
 +
| 2 || Tight
 +
|}
 +
 
 +
= PalmaConnectionHandle =
 +
This is "nn::hid::PalmaConnectionHandle". This is a 0x8-byte struct with 8-byte alignment.
 +
 
 +
= PalmaOperationInfo =
 +
This is "nn::hid::PalmaOperationInfo". This is a 0x148-byte struct.
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset || Size || Description
 +
|-
 +
| 0x0 || 0x4 || [[#PalmaOperationType]]
 +
|-
 +
| 0x4 || 0x4 || Result
 +
|-
 +
| 0x8 || 0x140 || Buffer for [[#GetPalmaOperationInfo]].
 +
|}
 +
 
 +
= PalmaOperationType =
 +
This is "nn::hid::PalmaOperationType".
 +
 
 +
{| class="wikitable" border="1"
 +
!  Value
 +
!  Description
 +
|-
 +
| 0 || PlayActivity
 +
|-
 +
| 1 || SetFrModeType
 +
|-
 +
| 2 || ReadStep
 +
|-
 +
| 3 || EnableStep
 +
|-
 +
| 4 || ResetStep
 +
|-
 +
| 5 || ReadApplicationSection
 +
|-
 +
| 6 || WriteApplicationSection
 +
|-
 +
| 7 || ReadUniqueCode
 +
|-
 +
| 8 || SetUniqueCodeInvalid
 +
|-
 +
| 9 || WriteActivityEntry
 +
|-
 +
| 10 || WriteRgbLedPatternEntry
 +
|-
 +
| 11 || WriteWaveEntry
 +
|-
 +
| 12 || ReadDataBaseIdentificationVersion
 +
|-
 +
| 13 || WriteDataBaseIdentificationVersion
 +
|-
 +
| 14 || SuspendFeature
 +
|-
 +
| 15 || [5.1.0+] ReadPlayLog
 +
|-
 +
| 16 || [5.1.0+] ResetPlayLog
 +
|}
 +
 
 +
= PalmaFrModeType =
 +
This is "nn::hid::PalmaFrModeType".
 +
 
 +
{| class="wikitable" border="1"
 +
!  Value
 +
!  Description
 +
|-
 +
| 0 || Off
 +
|-
 +
| 1 || B01
 +
|-
 +
| 2 || B02
 +
|-
 +
| 3 || B03
 +
|-
 +
| 4 || Downloaded
 +
|}
 +
 
 +
= PalmaApplicationSectionAccessBuffer =
 +
This is "nn::hid::PalmaApplicationSectionAccessBuffer". This is a 0x100-byte struct.
 +
 
 +
= PalmaActivityEntry =
 +
This is "nn::hid::PalmaActivityEntry".
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset || Size || Description
 +
|-
 +
| 0x0 || 0x2 || RgbLedPatternIndex.
 +
|-
 +
| 0x2 || 0x2 || Padding
 +
|-
 +
| 0x4 || 0x4 || [[#PalmaWaveSet|WaveSet]].
 +
|-
 +
| 0x8 || 0x2 || WaveIndex.
 +
|}
 +
 
 +
= PalmaWaveSet =
 +
This is "nn::hid::PalmaWaveSet".
 +
 
 +
{| class="wikitable" border="1"
 +
!  Value
 +
!  Description
 +
|-
 +
| 0 || Small
 +
|-
 +
| 1 || Medium
 +
|-
 +
| 2 || Large
 +
|}
 +
 
 +
= PalmaFeature =
 +
This is "nn::hid::PalmaFeature".
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Bit
 +
! Description
 +
|-
 +
| 0
 +
| FrMode
 +
|-
 +
| 1
 +
| RumbleFeedback
 +
|-
 +
| 2
 +
| Step
 +
|-
 +
| 3
 +
| MuteSwitch
 +
|-
 +
|}
 +
 
 +
= AbstractedPadState =
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset || Size || Description
 +
|-
 +
| 0x0 || 0x4 || Type, only 1 bit can be set. Converted to [[#HdlsDeviceInfo]]::type internally by [[#SetAutoPilotVirtualPadState]].
 +
|-
 +
| 0x4 || 0x1 || Flags. [[#SetAutoPilotVirtualPadState]] only uses bit0: when clear it will skip using the rest of the input and run [[#UnsetAutoPilotVirtualPadState]] internally.
 +
|-
 +
| 0x5 || 0x3 || Padding
 +
|-
 +
| 0x8 || 0x4 || RGBA Single Body Color
 +
|-
 +
| 0xC || 0x4 || RGBA Single Buttons Color
 +
|-
 +
| 0x10 || 0x1 || See [[#HiddbgHdlsDeviceInfo]]::[[#NpadInterfaceType]].
 +
|-
 +
| 0x11 || 0x3 || Padding
 +
|-
 +
| 0x14 || 0x24 || [[#HdlsState]]. Unknown if the last 4-bytes are included in this struct, [[#SetAutoPilotVirtualPadState]]/[[#hiddbgGetAbstractedPadsState]] only uses the first 0x20-bytes.
 +
|-
 +
| 0x38 || 0x60 || Unused with [[#SetAutoPilotVirtualPadState]]/[[#GetAbstractedPadsState]].
 +
|}
 +
 
 +
Normally the input state is merged with an existing controller selected by Type. However in some cases (BIT(2-5) with type2!=0x2 and BIT(31)) it's detected as a dedicated controller.
 +
 
 +
Type:
 +
{| class="wikitable" border="1"
 +
!  Bits
 +
!  [[#HdlsDeviceInfo]]::type bits
 +
!  Description
 +
!  Notes
 +
|-
 +
| 0 || 0 || ||
 +
|-
 +
| 1 || 15 || || [[#DeviceType]] |= BIT(1)
 +
|-
 +
| 2 || 1 || ||
 +
|-
 +
| 3 || 2 || ||
 +
|-
 +
| 4 || 1 || ||
 +
|-
 +
| 5 || 2 || ||
 +
|-
 +
| 6 || 3 || ||
 +
|-
 +
| 7 || 11 || || [[#DeviceType]] |= BIT(11)
 +
|-
 +
| 8 || 12 || || [[#DeviceType]] |= BIT(12)
 +
|-
 +
| 9 || 13 || || [[#DeviceType]] |= BIT(13)
 +
|-
 +
| 10 || 14 || || [[#DeviceType]] |= BIT(14)
 +
|-
 +
| 11 || 15 || || [[#DeviceType]] |= BIT(11)
 +
|-
 +
| 12 || 12 || || [[#DeviceType]] |= BIT(12)
 +
|-
 +
| 13 || 13 || || [[#DeviceType]] |= BIT(13)
 +
|-
 +
| 14 || 14 || || [[#DeviceType]] |= BIT(14)
 +
|-
 +
| 15 || 17 || ||
 +
|-
 +
| 31 || 21 || || [[#DeviceType]] = BIT(31)
 +
|-
 +
|}
 +
 
 +
The above "[[#DeviceType]] |=" notes only apply when type2 is 0x2.
 +
 
 +
= DebugPadAutoPilotState =
 +
This is "nn::hid::debug::DebugPadAutoPilotState"
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0
 +
| 0x4
 +
| [[#DebugPadAttributeSet|Attributes]]
 +
|-
 +
| 0x4
 +
| 0x4
 +
| [[#DebugPadButtonSet|Buttons]]
 +
|-
 +
| 0x8
 +
| 0x8
 +
| [[#AnalogStickState|AnalogStickL]]
 +
|-
 +
| 0x10
 +
| 0x8
 +
| [[#AnalogStickState|AnalogStickR]]
 +
|}
 +
 
 +
= MouseAutoPilotState =
 +
This is "nn::hid::debug::MouseAutoPilotState".
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0
 +
| 0x4
 +
| X
 +
|-
 +
| 0x4
 +
| 0x4
 +
| Y
 +
|-
 +
| 0x8
 +
| 0x4
 +
| DeltaX
 +
|-
 +
| 0xC
 +
| 0x4
 +
| DeltaY
 +
|-
 +
| 0x10
 +
| 0x4
 +
| WheelDelta
 +
|-
 +
| 0x14
 +
| 0x4
 +
| [[#MouseButtonSet|Buttons]]
 +
|-
 +
| 0x18
 +
| 0x4
 +
| [[#MouseAttributeSet|Attributes]]
 +
|}
 +
 
 +
= KeyboardAutoPilotState =
 +
This is "nn::hid::debug::KeyboardAutoPilotState".
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0
 +
| 0x8
 +
| [[#KeyboardModifierSet|Modifiers]]
 +
|-
 +
| 0x8
 +
| 0x20
 +
| [[#KeyboardKeySet|Keys]]
 +
|}
 +
 
 +
= SleepButtonAutoPilotState =
 +
This is "nn::hid::debug::SleepButtonAutoPilotState". This is a 0x8-byte struct with 8-byte alignment.
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0 || 0x8 || Buttons (only bit0 is used)
 +
|}
 +
 
 +
= PowerInfo =
 +
This is "nn::hidtypes::PowerInfo".
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0 || 0x4 || BatteryLevel
 +
|-
 +
| 0x4 || 0x4 || [[#PowerAttribute]]
 +
|}
 +
 
 +
= PowerAttribute =
 +
This is "nn::hidtypes::PowerAttribute". This is a 32-bit flag.
 +
 
 +
{| class="wikitable" border="1"
 +
!  Bits
 +
!  Description
 +
|-
 +
| 0
 +
| IsPowered
 +
|-
 +
| 1
 +
| IsCharging
 +
|}
 +
 
 +
= HdlsAttribute =
 +
This is "nn::hidtypes::HdlsAttribute". This is a 32-bit flag.
 +
 
 +
{| class="wikitable" border="1"
 +
!  Bits
 +
!  Description
 +
|-
 +
| 0
 +
| HasVirtualSixAxisSensorAcceleration
 +
|-
 +
| 1
 +
| HasVirtualSixAxisSensorAngle
 +
|}
 +
 
 +
= HdlsHandle =
 +
This is "nn::hid::debug::HdlsHandle". This is a 0x8-byte struct with 8-byte alignment.
 +
 
 +
= HdlsSessionId =
 +
This is "nn::hid::debug::detail::HdlsSessionId". This is a 0x8-byte struct with 8-byte alignment.
 +
 
 +
= HdlsNpadAssignment =
 +
This is a 0x208-byte struct.
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset || Size || Description
 +
|-
 +
| 0x0 || 0x4 || s32 Total entries
 +
|-
 +
| 0x4 || 0x4 || Padding
 +
|-
 +
| 0x8 || 0x200(0x20*0x10) || Array of [[#HdlsNpadAssignmentEntry]].
 +
|}
 +
 
 +
= HdlsNpadAssignmentEntry =
 +
This is a 0x20-byte struct.
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset || Size || Description
 +
|-
 +
| 0x0 || 0x8 || [[#HdlsHandle]]
 +
|-
 +
| 0x8 || 0x4 || ?
 +
|-
 +
| 0xC || 0x4 || ?
 +
|-
 +
| 0x10 || 0x8 || ?
 +
|-
 +
| 0x18 || 0x1 || ?
 +
|-
 +
| 0x19 || 0x7 || Padding
 +
|}
 +
 
 +
= HdlsStateList =
 +
This is a 0x408-byte struct.
 +
 
 +
[9.0.0+] This is a 0x488-byte struct.
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset || Size || Description
 +
|-
 +
| 0x0 || 0x4 || s32 Total entries
 +
|-
 +
| 0x4 || 0x4 || Padding
 +
|-
 +
| 0x8 || <[[#HdlsStateListEntry]] size>*0x10 || Array of [[#HdlsStateListEntry]].
 +
|}
 +
 
 +
This contains a list of all controllers, including non-virtual controllers.
 +
 
 
= HdlsStateListEntry =
 
= HdlsStateListEntry =
 
This is a 0x40-byte struct.  
 
This is a 0x40-byte struct.  
Line 7,371: Line 8,092:     
= HdlsDeviceInfo =
 
= HdlsDeviceInfo =
This is a 0x10-byte struct.
+
This is "nn::hid::debug::HdlsDeviceInfo". This is a 0x10-byte struct.
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 7,410: Line 8,131:     
= 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,428: Line 8,149:  
| 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]]
 
|-
 
|-
| 0x4 || 0x4 || Flags. Used to set the main PowerInfo for [[#NpadSystemProperties]]. Bit0 -> IsPowered, bit1 -> IsCharging.
+
| 0x8 || 0x8 || [[#NpadButton|Buttons]], masked with 0xfffffffff00fffff. See above table regarding HOME/Capture buttons.
 +
|-
 +
| 0x10 || 0x10(4*2*2) || Joystick data.
 +
|-
 +
| 0x20 || 0x1 || Indicator. Unused for input. Set with output from [[#DumpHdlsStates]] (zero in some cases).
 +
|-
 +
| 0x21 || 0x7 || Padding
 +
|}
 +
 
 +
[12.0.0+] (0x40-bytes):
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset || Size || Description
 +
|-
 +
| 0x0 || 0x8 || [[#PowerInfo]]
 
|-
 
|-
 
| 0x8 || 0x8 || [[#NpadButton|Buttons]], masked with 0xfffffffff00fffff. See above table regarding HOME/Capture buttons.
 
| 0x8 || 0x8 || [[#NpadButton|Buttons]], masked with 0xfffffffff00fffff. See above table regarding HOME/Capture buttons.
Line 7,446: Line 8,181:  
| 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
 
|-
 
|-
| 0x21 || 0x3 || Padding
+
| 0x2C || 0xC || VirtualSixAxisSensorAngle
 +
|-
 +
| 0x38 || 0x4 || [[#HdlsAttribute]]
 +
|-
 +
| 0x3C || 0x1 || Indicator. Unused for input.
 +
|-
 +
| 0x3D || 0x3 || Padding
 
|}
 
|}
 +
 +
= DebugRegisteredDevice =
 +
This is "nn::hid::debug::RegisteredDevice". This is a 0x58-byte struct with 2-byte alignment.
 +
 +
= RegisteredDevice =
 +
This is "nn::hid::system::RegisteredDevice". This is a 0x68-byte struct with 4-byte alignment.
    
= NotificationLedPattern =
 
= NotificationLedPattern =
Line 7,832: Line 8,579:  
| 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,480: Line 9,232:  
| 1 || RightJoyRail
 
| 1 || RightJoyRail
 
|-
 
|-
| 2 || [6.0.0+] RightLarkRail (for microphone)
+
| 2 || [6.0.0+] InternalBus (for Lark microphone)
 
|}
 
|}
   Line 8,498: Line 9,250:     
Other values causes [[#EnableJoyPollingReceiveMode]] to assert.
 
Other values causes [[#EnableJoyPollingReceiveMode]] to assert.
 +
 +
= StatusManagerType =
 +
This is "nn::hidbus::detail::StatusManagerType".
 +
 +
{| class="wikitable" border="1"
 +
!  Value
 +
!  Description
 +
|-
 +
| 0 || None
 +
|-
 +
| 1 || 16
 +
|-
 +
| 2 || 32
 +
|}
    
= ExternalDevices =
 
= ExternalDevices =
Line 8,503: Line 9,269:  
* [[Ring-Con]]
 
* [[Ring-Con]]
 
* Famicom right controller (with microphone)
 
* Famicom right controller (with microphone)
 +
** [[#BusType]] is 2, ExternalDeviceId is 0x21. SendAndReceive is not used. EnableJoyPollingReceiveMode is used where the input buffer is an u32 with value 0, [[#JoyPollingMode]] = 2. GetJoyPollingReceivedData is used to get the output data.
 +
* Used by Starlink: Battle For Atlas.
 +
** [[#BusType]] is 1, ExternalDeviceId is 0x28. EnableJoyPollingReceiveMode is used where the input buffer is an u16 with value 0x09, [[#JoyPollingMode]] = 0. SendAndReceive is called from 1 func. GetJoyPollingReceivedData is used to determine whether to call the same func which calls SendAndReceive, which is only done if <code>out_size==0x4 && data[0]==0x09 && (data[1] & 1 == 1)</code>.
    
= RomFS =
 
= RomFS =
Line 8,549: Line 9,318:  
* [10.0.0+] '''TouchScreenConfiguration.csv'''
 
* [10.0.0+] '''TouchScreenConfiguration.csv'''
 
* [10.0.0+] '''TouchScreenFirmwareInfo.csv'''
 
* [10.0.0+] '''TouchScreenFirmwareInfo.csv'''
 +
* [13.0.0+] '''FTS_33000510.fts256'''
 +
* [13.0.0+] '''FTS_98000004.ftb'''
    
[[Category:Services]]
 
[[Category:Services]]

Navigation menu