HID services: Difference between revisions

No edit summary
mNo edit summary
 
(52 intermediate revisions by 4 users not shown)
Line 13: Line 13:
|-
|-
| 21 || [[#ActivateMouse]]
| 21 || [[#ActivateMouse]]
|-
| 22 || [19.0.0+] AddMouseWheelDelta
|-
|-
| 26 || [16.0.0+] ActivateDebugMouse
| 26 || [16.0.0+] ActivateDebugMouse
Line 95: Line 97:
|-
|-
| 91 || [[#ActivateGesture]]
| 91 || [[#ActivateGesture]]
|-
| 92 || [18.0.0+] SetGestureOutputRanges
|-
|-
| 100 || [[#SetSupportedNpadStyleSet]]
| 100 || [[#SetSupportedNpadStyleSet]]
Line 147: Line 151:
|-
|-
| 136 || [8.0.0+] [[#ClearNpadCaptureButtonAssignment]]
| 136 || [8.0.0+] [[#ClearNpadCaptureButtonAssignment]]
|-
| 137 || [20.0.0+] SetNpadGcAnalogStick8bitRawValue
|-
| 138 || [S2] [20.0.0+] [[#SetSceneIdForPrivateApp|SetSceneIdForPrivateApp]]
|-
| 139 || [S2] [20.0.0+] [[#GetSceneIdForPrivateApp|GetSceneIdForPrivateApp]]
|-
|-
| 200 || [[#GetVibrationDeviceInfo]]
| 200 || [[#GetVibrationDeviceInfo]]
Line 177: Line 187:
|-
|-
| 214 || [17.0.0+] SendVibrationValuesInMode
| 214 || [17.0.0+] SendVibrationValuesInMode
|-
| 220 || [S2] [20.0.0+] [[#IsOunceVibrationDeviceMounted|IsOunceVibrationDeviceMounted]]
|-
|-
| 300 || [3.0.0+] [[#ActivateConsoleSixAxisSensor]]
| 300 || [3.0.0+] [[#ActivateConsoleSixAxisSensor]]
Line 203: Line 215:
|-
|-
| 312 || [17.0.0+] ForceDeactivateConsoleSixAxisSensor
| 312 || [17.0.0+] ForceDeactivateConsoleSixAxisSensor
|-
| 320 || [21.0.0+] EnableNpadImu
|-
| 321 || [21.0.0+] DisableNpadImu
|-
|-
| 400 || [3.0.0+] [[#IsUsbFullKeyControllerEnabled]]
| 400 || [3.0.0+] [[#IsUsbFullKeyControllerEnabled]]
Line 281: Line 297:
|-
|-
| 529 || [8.0.0+] [[#SetDisallowedPalmaConnection]]
| 529 || [8.0.0+] [[#SetDisallowedPalmaConnection]]
|-
| 550 || [S2] [20.0.0+] [[#GetGlGrButtonConfigState|GetGlGrButtonConfigState]]
|-
|-
| 1000 || [[#SetNpadCommunicationMode]]
| 1000 || [[#SetNpadCommunicationMode]]
Line 290: Line 308:
| 1003 || [9.0.0+] [[#IsFirmwareUpdateNeededForNotification]]
| 1003 || [9.0.0+] [[#IsFirmwareUpdateNeededForNotification]]
|-
|-
| 1004 || [17.0.0+] SetTouchScreenResolution
| 1004 || [20.0.0+] [[#SetTouchScreenOutputRanges|SetTouchScreenOutputRanges]] ([17.0.0-19.0.1] SetTouchScreenResolution)
|-
| 1005 || [20.0.0+] EnableNxTouchScreenEmulationForTouchEnter
|-
|-
| 2000 || [10.0.0+] [[#ActivateDigitizer]]
| 2000 || [10.0.0+] [[#ActivateDigitizer]]
Line 317: Line 337:
|-
|-
| 3011 || [15.0.0+] ResetFullKeyKeyboardMap
| 3011 || [15.0.0+] ResetFullKeyKeyboardMap
|-
| 3012 || [21.0.0+] GetDebugPadGenericPadMap
|-
| 3013 || [21.0.0+] SetDebugPadGenericPadMap
|-
| 3014 || [21.0.0+] GetDebugPadKeyboardMap
|-
| 3015 || [21.0.0+] SetDebugPadKeyboardMap
|-
| 3110 || [S2] [[#InitializeJcms|InitializeJcms]]
|-
| 3111 || [S2] [[#FinalizeJcms|FinalizeJcms]]
|-
| 3112 || [S2] [[#StartJcms|StartJcms]]
|-
| 3113 || [S2] [[#StopJcms|StopJcms]]
|-
| 3130 || [S2] [20.0.0+] [[#InitializeNmouse|InitializeNmouse]]
|-
| 3131 || [S2] [20.0.0+] [[#FinalizeNmouse|FinalizeNmouse]]
|-
| 3132 || [S2] [20.0.0+] [[#SetNmousePointerRanges|SetNmousePointerRanges]]
|-
| 3133 || [S2] [20.0.0+] [[#GetNmousePointerRanges|GetNmousePointerRanges]]
|-
| 3135 || [S2] [20.0.0+] [[#EnableShowingCursor|EnableShowingCursor]]
|-
| 3136 || [S2] [20.0.0+] [[#SetNmouseButtonConfigJoyLeftJcms|SetNmouseButtonConfigJoyLeftJcms]]
|-
| 3137 || [S2] [20.0.0+] [[#SetNmouseButtonConfigJoyRightJcms|SetNmouseButtonConfigJoyRightJcms]]
|-
| 3138 || [S2] [20.0.0+] [[#SetMergedNmouseSourceTypes|SetMergedNmouseSourceTypes]]
|-
| 3139 || [S2] [20.0.0+] [[#InitializeNmouse2|InitializeNmouse2]]
|-
| 3140 || [S2] [20.0.0+] [[#SetNmousePointerPosition|SetNmousePointerPosition]]
|-
| 3141 || [S2] [20.0.0+] [[#EnableNmousePointer|EnableNmousePointer]]
|-
| 3142 || [S2] [20.0.0+] [[#RestrictNmousePointer|RestrictNmousePointer]]
|-
| 3143 || [S2] [20.0.0+]
|-
| 3150 || [21.0.0+] SetMouseLibraryVersion
|}
|}


Line 543: Line 607:
* 0x2: [6.0.0+]
* 0x2: [6.0.0+]
* 0x3: [8.0.0+]
* 0x3: [8.0.0+]
* 0x5: [18.0.0+]


== SetNpadJoyHoldType ==
== SetNpadJoyHoldType ==
Line 608: Line 673:
== ClearNpadCaptureButtonAssignment ==
== ClearNpadCaptureButtonAssignment ==
Takes a PID, an [[AM_services|AppletResourceUserId]], no output.
Takes a PID, an [[AM_services|AppletResourceUserId]], no output.
== SetSceneIdForPrivateApp ==
This is exclusive to S2.
Takes a PID, an [[AM_services|AppletResourceUserId]], an u64, no output.
The u64 is converted from a s32 by official sw.
== GetSceneIdForPrivateApp ==
This is exclusive to S2.
Takes a PID, an [[AM_services|AppletResourceUserId]], returns an output u64.
The u64 is converted to a s32 by official sw.


== GetVibrationDeviceInfo ==
== GetVibrationDeviceInfo ==
Line 659: Line 738:


This is currently not exposed by sdknso.
This is currently not exposed by sdknso.
== IsOunceVibrationDeviceMounted ==
This is exclusive to S2.
Takes a PID, a [[#VibrationDeviceHandle]], an [[AM_services|AppletResourceUserId]], returns an output bool.


== ActivateConsoleSixAxisSensor ==
== ActivateConsoleSixAxisSensor ==
Line 957: Line 1,041:
== SetDisallowedPalmaConnection ==
== SetDisallowedPalmaConnection ==
Takes a PID, an [[AM_services|AppletResourceUserId]], a type-0x9 input buffer containing an array of [[Bluetooth_Driver_services#Address|Address]], no output.
Takes a PID, an [[AM_services|AppletResourceUserId]], a type-0x9 input buffer containing an array of [[Bluetooth_Driver_services#Address|Address]], no output.
== GetGlGrButtonConfigState ==
This is exclusive to S2.
Takes a PID, an u32, an [[AM_services|AppletResourceUserId]], returns two output bools.


== SetNpadCommunicationMode ==
== SetNpadCommunicationMode ==
Line 977: Line 1,066:


sdknso passes hard-coded value 1 for the s32.
sdknso passes hard-coded value 1 for the s32.
== SetTouchScreenOutputRanges ==
Takes a PID, a s32 width, a s32 height, an [[AM_services|AppletResourceUserId]], no output.
This is used by user-processes prior to [[#ActivateTouchScreen|ActivateTouchScreen]], on newer versions.
User-processes can optionally specify input values for width/height during TouchScreen initiailization, with the default values being the relevant fixed width/height values for the platform which the user-process was built for.


== ActivateDigitizer ==
== ActivateDigitizer ==
Takes a PID and an [[AM_services|AppletResourceUserId]], no output.
Takes a PID and an [[AM_services|AppletResourceUserId]]. No output.
 
== InitializeJcms ==
This is exclusive to S2.


== IAppletResource ==
Takes a PID, a TransferMemory handle, an [[AM_services|AppletResourceUserId]], an u64 tmem_size, no output.
This is "nn::hid::IAppletResource".


{| class="wikitable" border="1"
The input TransferMemory is created with permissions = R--. The user-process later reads from the buffer used with this to get the JcmsState for the specified [[#JcmsHandle|JcmsHandle]].
|-
! Cmd || Name
|-
| 0 || [[#GetSharedMemoryHandle]]
|}


=== GetSharedMemoryHandle ===
== FinalizeJcms ==
No input. Returns a [[#SharedMemoryFormat|sharedmem]] handle.
This is exclusive to S2.


== IActiveVibrationDeviceList ==
Takes a PID and an [[AM_services|AppletResourceUserId]]. No output.
This is "nn::hid::IActiveVibrationDeviceList".


{| class="wikitable" border="1"
== StartJcms ==
|-
This is exclusive to S2.
 
Takes a PID, a [[#JcmsHandle|JcmsHandle]], an [[AM_services|AppletResourceUserId]], no output.
 
== StopJcms ==
This is exclusive to S2.
 
Takes a PID, a [[#JcmsHandle|JcmsHandle]], an [[AM_services|AppletResourceUserId]], no output.
 
== InitializeNmouse ==
This is exclusive to S2.
 
Takes a PID, a TransferMemory handle, an u8, two s32s (width/height), an [[AM_services|AppletResourceUserId]], an u64 tmem_size, no output.
 
Official sw converts the input [[#NmouseStateRange|NmouseStateRange]] to the relevant s32s (the s32s are not directly exposed).
 
Official sw passes value 0 for the u8.
 
After official sw finishes using this, it also uses [[#SetMergedNmouseSourceTypes|SetMergedNmouseSourceTypes]] with value 0x6.
 
The input TransferMemory is created with permissions = R--. The user-process later reads from the buffer used with this.
 
== FinalizeNmouse ==
This is exclusive to S2.
 
Takes a PID and an [[AM_services|AppletResourceUserId]], no output.
 
== SetNmousePointerRanges ==
This is exclusive to S2.
 
Takes a PID, two s32s (width/height), an [[AM_services|AppletResourceUserId]], no output.
 
This is also exposed as SetNmouseStateRanges, with the input [[#NmouseStateRange|NmouseStateRange]] being converted to the relevant s32s.
 
== GetNmousePointerRanges ==
This is exclusive to S2.
 
Takes a PID, an [[AM_services|AppletResourceUserId]], returns two output s32s (width/height).
 
This is also exposed as GetNmouseStateRanges, with the output data being compared to determine the output [[#NmouseStateRange|NmouseStateRange]].
 
== EnableShowingCursor ==
This is exclusive to S2.
 
Takes a PID, a bool, an [[AM_services|AppletResourceUserId]], no output.
 
== SetNmouseButtonConfigJoyLeftJcms ==
This is exclusive to S2.
 
Takes a PID, an [[AM_services|AppletResourceUserId]], a [[#NmouseButtonConfigJoyLeftJcms|NmouseButtonConfigJoyLeftJcms]], no output.
 
== SetNmouseButtonConfigJoyRightJcms ==
This is exclusive to S2.
 
Takes a PID, an [[AM_services|AppletResourceUserId]], a [[#NmouseButtonConfigJoyRightJcms|NmouseButtonConfigJoyRightJcms]], no output.
 
== SetMergedNmouseSourceTypes ==
This is exclusive to S2.
 
Takes a PID, an u32, an [[AM_services|AppletResourceUserId]], no output.
 
Official sw masks the u32 with bitmask 0x6.
 
The input u32 is a 32bit BitFlagSet of [[#NmouseType|NmouseType]].
 
== InitializeNmouse2 ==
Unofficial name.
 
This is exclusive to S2.
 
Takes a PID, a TransferMemory handle, a [[#NmousePointerType|NmousePointerType]], a s32 width, a s32 height, an u32, an [[AM_services|AppletResourceUserId]], an u64 tmem_size, no output.
 
The input TransferMemory is created with permissions = R--. The user-process later reads from the buffer used with this (same as with [[#InitializeNmouse|InitializeNmouse]]).
 
Official sw passes value 1 for the last u32.
 
This and the related nearby cmds are for Joy-Con 2 Mouse Mode.
 
== SetNmousePointerPosition ==
This is exclusive to S2.
 
Takes a PID, two s32s, an [[AM_services|AppletResourceUserId]], a [[#NmouseHandle|NmouseHandle]], no output.
 
== EnableNmousePointer ==
This is exclusive to S2.
 
Takes a PID, a bool, an [[AM_services|AppletResourceUserId]], a [[#NmouseHandle|NmouseHandle]], no output.
 
== RestrictNmousePointer ==
This is exclusive to S2.
 
Takes a PID, 4 floats, an [[AM_services|AppletResourceUserId]], no output.
 
== Cmd3143 ==
This is exclusive to S2.
 
Takes a PID, two u64s, no output.
 
== IAppletResource ==
This is "nn::hid::IAppletResource".
 
{| class="wikitable" border="1"
|-
! Cmd || Name
|-
| 0 || [[#GetSharedMemoryHandle]]
|}
 
=== GetSharedMemoryHandle ===
No input. Returns a [[#SharedMemoryFormat|sharedmem]] handle.
 
== IActiveVibrationDeviceList ==
This is "nn::hid::IActiveVibrationDeviceList".
 
{| class="wikitable" border="1"
|-
! Cmd || Name
! Cmd || Name
|-
|-
Line 1,035: Line 1,242:
|-
|-
| 17 || [13.0.0+] IsTouchScreenManaged
| 17 || [13.0.0+] IsTouchScreenManaged
|-
| 18 || [18.0.0+] SetTouchScreenAutoPilotStateWithAruid
|-
|-
| 20 || [[#DeactivateMouse]]
| 20 || [[#DeactivateMouse]]
Line 1,041: Line 1,250:
|-
|-
| 22 || [[#UnsetMouseAutoPilotState]]
| 22 || [[#UnsetMouseAutoPilotState]]
|-
| 23 || [21.0.0+] AddMouseSideWheelDelta
|-
|-
| 25 || [16.0.0+] SetDebugMouseAutoPilotState
| 25 || [16.0.0+] SetDebugMouseAutoPilotState
Line 1,123: Line 1,334:
|-
|-
| 152 || [10.0.0+] GetWhoAmI
| 152 || [10.0.0+] GetWhoAmI
|-
| 160 || [S2]
|-
| 161 || [S2]
|-
| 162 || [S2]
|-
| 170 || [S2]
|-
| 171 || [S2]
|-
| 172 || [S2]
|-
|-
| 201 || ActivateFirmwareUpdate
| 201 || ActivateFirmwareUpdate
Line 1,145: Line 1,368:
|-
|-
| 211 || [6.0.0+] StartFirmwareUpdateIndividual
| 211 || [6.0.0+] StartFirmwareUpdateIndividual
|-
| 212 || [19.0.0+] GetDetailFirmwareVersion
|-
| 213 || [20.0.0+] GetFirmwareVersionStringForDevMenu
|-
| 214 || [20.1.0+] GetDestinationFirmwareVersionStringForDevMenu
|-
|-
| 215 || [6.0.0+] SetUsbFirmwareForceUpdateEnabled
| 215 || [6.0.0+] SetUsbFirmwareForceUpdateEnabled
Line 1,213: Line 1,442:
|-
|-
| 251 || [12.0.0+] GetAnalogStickModuleParam
| 251 || [12.0.0+] GetAnalogStickModuleParam
|-
| 252 || [S2]
|-
| 253 || [19.0.0+] ClearStorageForShipment
|-
| 254 || [S2]
|-
| 255 || [S2]
|-
| 256 || [S2]
|-
| 261 || [21.0.0+] UpdateDesignInfo12
|-
| 266 || [21.0.0+] GetUniquePadButtonCount
|-
| 267 || [21.0.0+] SetAnalogStickCalibration
|-
| 268 || [21.0.0+] ResetAnalogStickCalibration
|-
|-
| 301 || [5.0.0-8.1.0] [[#GetAbstractedPadHandles]]
| 301 || [5.0.0-8.1.0] [[#GetAbstractedPadHandles]]
Line 1,246: Line 1,493:
| 350 || [5.0.0+] [[#AddRegisteredDevice]]
| 350 || [5.0.0+] [[#AddRegisteredDevice]]
|-
|-
| 351 || [17.0.0+] GetRegisteredDevicesCountDebug
| 351 || [17.0.0-18.1.0] GetRegisteredDevicesCountDebug
|-
|-
| 352 || [17.0.0+] DeleteRegisteredDevicesDebug
| 352 || [17.0.0-18.1.0] DeleteRegisteredDevicesDebug
|-
|-
| 400 || [6.0.0+] DisableExternalMcuOnNxDevice
| 400 || [6.0.0+] DisableExternalMcuOnNxDevice
Line 1,271: Line 1,518:
|-
|-
| 600 || [10.0.0+] ConvertPadState
| 600 || [10.0.0+] ConvertPadState
|-
| 601 || [18.0.0+] [[#IsButtonConfigSupported]]
|-
| 602 || [18.0.0+] [[#IsButtonConfigEmbeddedSupported]]
|-
| 603 || [18.0.0+] [[#DeleteButtonConfig]]
|-
| 604 || [18.0.0+] [[#DeleteButtonConfigEmbedded]]
|-
| 605 || [18.0.0+] [[#SetButtonConfigEnabled]]
|-
| 606 || [18.0.0+] [[#SetButtonConfigEmbeddedEnabled]]
|-
| 607 || [18.0.0+] [[#IsButtonConfigEnabled]]
|-
| 608 || [18.0.0+] [[#IsButtonConfigEmbeddedEnabled]]
|-
| 609 || [18.0.0+] [[#SetButtonConfigEmbedded]]
|-
| 610 || [18.0.0+] [[#SetButtonConfigFull]]
|-
| 611 || [18.0.0+] [[#SetButtonConfigLeft]]
|-
| 612 || [18.0.0+] [[#SetButtonConfigRight]]
|-
| 613 || [18.0.0+] [[#GetButtonConfigEmbedded]]
|-
| 614 || [18.0.0+] [[#GetButtonConfigFull]]
|-
| 615 || [18.0.0+] [[#GetButtonConfigLeft]]
|-
| 616 || [18.0.0+] [[#GetButtonConfigRight]]
|-
| 617 || [S2]
|-
| 618 || [S2]
|-
| 619 || [S2]
|-
| 620 || [S2]
|-
| 621 || [S2]
|-
| 622 || [S2]
|-
|-
| 650 || [12.0.0+] AddButtonPlayData
| 650 || [12.0.0+] AddButtonPlayData
Line 1,278: Line 1,569:
| 652 || [12.0.0+] StopButtonPlayData
| 652 || [12.0.0+] StopButtonPlayData
|-
|-
| 2000 || [10.0.0+] DeactivateDigitizer
| 700 || [21.0.0+] GetRailAttachEventCount
|-
| 2000 || [10.0.0+] [[#DeactivateDigitizer]]
|-
|-
| 2001 || [10.0.0+] SetDigitizerAutoPilotState
| 2001 || [10.0.0+] [[#SetDigitizerAutoPilotState]]
|-
|-
| 2002 || [10.0.0+] UnsetDigitizerAutoPilotState
| 2002 || [10.0.0+] [[#UnsetDigitizerAutoPilotState]]
|-
|-
| 3000 || [16.0.0+] ReloadFirmwareDebugSettings
| 3000 || [16.0.0+] ReloadFirmwareDebugSettings
Line 1,376: Line 1,669:


[9.0.0+] Now takes a total of 8-bytes of input, returns a total of 0x18-bytes of output.
[9.0.0+] Now takes a total of 8-bytes of input, returns a total of 0x18-bytes of output.
[18.0.0+] Now takes a total of 8-bytes of input, returns a total of 0x20-bytes of output.


== GetSixAxisSensorDriverStates ==
== GetSixAxisSensorDriverStates ==
Line 1,502: Line 1,797:


[11.0.0+] Takes an input [[#DebugRegisteredDevice]], no output.
[11.0.0+] Takes an input [[#DebugRegisteredDevice]], no output.
== DeactivateDigitizer ==
No input/output.
== SetDigitizerAutoPilotState ==
Takes an input [[#DigitizerAutoPilotState]]. No output.
== UnsetDigitizerAutoPilotState ==
No input/output.


= hid:sys =
= hid:sys =
Line 1,529: Line 1,833:
|-
|-
| 161 || [7.0.0+] GetPlatformConfig
| 161 || [7.0.0+] GetPlatformConfig
|-
| 171 || [S2]
|-
| 181 || [S2]
|-
|-
| 210 || AcquireNfcDeviceUpdateEventHandle
| 210 || AcquireNfcDeviceUpdateEventHandle
Line 1,538: Line 1,846:
| 213 || ActivateNfc
| 213 || ActivateNfc
|-
|-
| 214 || [4.0.0+] GetXcdHandleForNpadWithNfc
| 214 || [4.0.0-18.1.0] GetXcdHandleForNpadWithNfc
|-
|-
| 215 || [4.0.0+] IsNfcActivated
| 215 || [4.0.0+] IsNfcActivated
|-
|-
| 230 || AcquireIrSensorEventHandle
| 216 || [19.0.0+] GetAbstractedPadIdForNpadWithNfc
|-
|-
| 231 || ActivateIrSensor
| 217 || [19.0.0+] [[#SetNfcEvent]]
|-
|-
| 232 || [10.0.0+] GetIrSensorState
| 218 || [19.0.0+] [[#GetNfcInfo]]
|-
|-
| 233 || [10.0.0+] GetXcdHandleForNpadWithIrSensor
| 219 || [19.0.0+] StartNfcDiscovery
|-
|-
| 301 || ActivateNpadSystem
| 220 || [19.0.0+] StopNfcDiscovery
|-
|-
| 303 || ApplyNpadSystemCommonPolicy
| 221 || [19.0.0+] StartNtagRead
|-
|-
| 304 || EnableAssigningSingleOnSlSrPress
| 222 || [19.0.0+] StartNtagWrite
|-
|-
| 305 || DisableAssigningSingleOnSlSrPress
| 223 || [19.0.0+] SendNfcRawData
|-
|-
| 306 || GetLastActiveNpad
| 224 || [19.0.0+] RegisterMifareKey
|-
|-
| 307 || GetNpadSystemExtStyle
| 225 || [19.0.0+] ClearMifareKey
|-
|-
| 308 || [5.0.0+] ApplyNpadSystemCommonPolicyFull
| 226 || [19.0.0+] StartMifareRead
|-
|-
| 309 || [5.0.0+] GetNpadFullKeyGripColor
| 227 || [19.0.0+] StartMifareWrite
|-
| 230 || AcquireIrSensorEventHandle
|-
| 231 || ActivateIrSensor
|-
| 232 || [10.0.0+] GetIrSensorState
|-
| 233 || [10.0.0+] GetXcdHandleForNpadWithIrSensor
|-
| 234 || [19.0.0+] GetNpadJoyHoldType
|-
| 241 || [19.0.0+] [[#GetDataFormat]]
|-
| 242 || [19.0.0+] [[#SetDataFormat]]
|-
| 243 || [19.0.0+] [[#GetMcuState]]
|-
| 244 || [19.0.0+] [[#SetMcuState]]
|-
| 245 || [19.0.0+] [[#GetMcuVersionForNfc]]
|-
| 246 || [19.0.0+] [[#CheckNfcDevicePower]]
|-
| 247 || [19.0.0+] [[#SetMcuStateImmediate]]
|-
| 251 || [S2]
|-
| 252 || [S2]
|-
| 253 || [S2]
|-
| 301 || ActivateNpadSystem
|-
| 303 || ApplyNpadSystemCommonPolicy
|-
| 304 || EnableAssigningSingleOnSlSrPress
|-
| 305 || DisableAssigningSingleOnSlSrPress
|-
| 306 || GetLastActiveNpad
|-
| 307 || GetNpadSystemExtStyle
|-
| 308 || [5.0.0+] ApplyNpadSystemCommonPolicyFull
|-
| 309 || [5.0.0+] GetNpadFullKeyGripColor
|-
|-
| 310 || [6.0.0+] [[#GetMaskedSupportedNpadStyleSet]]
| 310 || [6.0.0+] [[#GetMaskedSupportedNpadStyleSet]]
Line 1,606: Line 1,960:
| 330 || [14.0.0+] CheckAbstractedPadConnection
| 330 || [14.0.0+] CheckAbstractedPadConnection
|-
|-
| 500 || SetAppletResourceUserId
| 332 || [19.0.0+] ConvertAppletDetailedUiTypeFromPlayReportType
|-
| 333 || [20.0.0+] SetNpadUserSpgApplet
|-
| 334 || [20.0.0+] AcquireUniquePadButtonStateChangedEventHandle
|-
| 500 || [[#SetAppletResourceUserId]]
|-
|-
| 501 || RegisterAppletResourceUserId
| 501 || [[#RegisterAppletResourceUserId]]
|-
|-
| 502 || UnregisterAppletResourceUserId
| 502 || [[#UnregisterAppletResourceUserId]]
|-
|-
| 503 || EnableAppletToGetInput
| 503 || EnableAppletToGetInput
Line 1,643: Line 2,003:
|-
|-
| 525 || [11.0.0+] IsJoyConAttachedOnAllRail
| 525 || [11.0.0+] IsJoyConAttachedOnAllRail
|-
| 526 || [19.0.0+] IsInvertedControllerConnectedOnRail
|-
|-
| 540 || AcquirePlayReportControllerUsageUpdateEvent
| 540 || AcquirePlayReportControllerUsageUpdateEvent
Line 1,650: Line 2,012:
| 542 || AcquirePlayReportRegisteredDeviceUpdateEvent
| 542 || AcquirePlayReportRegisteredDeviceUpdateEvent
|-
|-
| 543 || GetRegisteredDevicesOld ([1.0.0-4.1.0] GetRegisteredDevices)
| 543 || [5.0.0-18.1.0] GetRegisteredDevicesOld ([1.0.0-4.1.0] GetRegisteredDevices)
|-
|-
| 544 || [3.0.0+] AcquireConnectionTriggerTimeoutEvent
| 544 || [3.0.0+] AcquireConnectionTriggerTimeoutEvent
Line 1,663: Line 2,025:
|-
|-
| 549 || [6.0.0+] GetConnectableRegisteredDevices
| 549 || [6.0.0+] GetConnectableRegisteredDevices
|-
| 550 || [S2]
|-
| 551 || [20.0.0+] GetRegisteredDevicesForControllerSupport
|-
|-
| 700 || ActivateUniquePad
| 700 || ActivateUniquePad
Line 1,670: Line 2,036:
| 703 || [[#GetUniquePadIds]]
| 703 || [[#GetUniquePadIds]]
|-
|-
| 751 || AcquireJoyDetachOnBluetoothOffEventHandle
| 704 || [S2]
|-
|-
| 800 || ListSixAxisSensorHandles
| 705 || [S2]
|-
|-
| 801 || IsSixAxisSensorUserCalibrationSupported
| 707 || [S2]
|-
|-
| 802 || ResetSixAxisSensorCalibrationValues
| 711 || [20.0.0+] AcquireUniquePadConnectionOnHandheldForNsEventHandle
|-
|-
| 803 || StartSixAxisSensorUserCalibration
| 712 || [20.0.0+] GetUniquePadColor12
|-
|-
| 804 || CancelSixAxisSensorUserCalibration
| 721 || [S2]
|-
|-
| 805 || [3.0.0+] GetUniquePadBluetoothAddress
| 722 || [S2]
|-
|-
| 806 || [3.0.0+] DisconnectUniquePad
| 723 || [S2]
|-
|-
| 807 || [5.0.0+] [[#GetUniquePadType]]
| 724 || [S2]
|-
|-
| 808 || [5.0.0+] GetUniquePadInterface
| 725 || [S2]
|-
|-
| 809 || [5.0.0+] [[#GetUniquePadSerialNumber]]
| 726 || [S2]
|-
|-
| 810 || [5.0.0+] GetUniquePadControllerNumber
| 727 || [S2]
|-
|-
| 811 || [5.0.0+] GetSixAxisSensorUserCalibrationStage
| 728 || [S2]
|-
|-
| 812 || [8.0.0+] GetConsoleUniqueSixAxisSensorHandle
| 729 || [S2]
|-
|-
| 821 || StartAnalogStickManualCalibration
| 730 || [S2]
|-
|-
| 822 || RetryCurrentAnalogStickManualCalibrationStage
| 731 || [S2]
|-
|-
| 823 || CancelAnalogStickManualCalibration
| 732 || [S2]
|-
| 733 || [S2]
|-
| 734 || [S2]
|-
| 735 || [S2]
|-
| 736 || [S2]
|-
| 737 || [S2]
|-
| 738 || [S2]
|-
| 739 || [S2]
|-
| 740 || [S2]
|-
| 741 || [S2]
|-
| 742 || [S2]
|-
| 743 || [S2]
|-
| 744 || [S2]
|-
| 745 || [S2]
|-
| 746 || [S2]
|-
| 751 || AcquireJoyDetachOnBluetoothOffEventHandle
|-
| 800 || ListSixAxisSensorHandles
|-
| 801 || IsSixAxisSensorUserCalibrationSupported
|-
| 802 || ResetSixAxisSensorCalibrationValues
|-
| 803 || StartSixAxisSensorUserCalibration
|-
| 804 || CancelSixAxisSensorUserCalibration
|-
| 805 || [3.0.0+] GetUniquePadBluetoothAddress
|-
| 806 || [3.0.0+] DisconnectUniquePad
|-
| 807 || [5.0.0+] [[#GetUniquePadType]]
|-
| 808 || [5.0.0+] GetUniquePadInterface
|-
| 809 || [5.0.0+] [[#GetUniquePadSerialNumber]]
|-
| 810 || [5.0.0+] GetUniquePadControllerNumber
|-
| 811 || [5.0.0+] GetSixAxisSensorUserCalibrationStage
|-
| 812 || [8.0.0+] GetConsoleUniqueSixAxisSensorHandle
|-
| 813 || [18.0.0+] GetDeviceType
|-
| 821 || StartAnalogStickManualCalibration
|-
| 822 || RetryCurrentAnalogStickManualCalibrationStage
|-
| 823 || CancelAnalogStickManualCalibration
|-
|-
| 824 || ResetAnalogStickManualCalibration
| 824 || ResetAnalogStickManualCalibration
Line 1,757: Line 2,187:
|-
|-
| 1011 || [4.0.0+] DeactivateAudioControl
| 1011 || [4.0.0+] DeactivateAudioControl
|-
| 1012 || [20.0.0+] GetFirmwareVersionStringForUserSupportPage
|-
|-
| 1050 || [5.0.0+] IsSixAxisSensorAccurateUserCalibrationSupported
| 1050 || [5.0.0+] IsSixAxisSensorAccurateUserCalibrationSupported
Line 1,798: Line 2,230:
| 1157 || [10.0.0+] [[#CancelConnectionTrigger]]
| 1157 || [10.0.0+] [[#CancelConnectionTrigger]]
|-
|-
| 1200 || [10.0.0+] [[#IsButtonConfigSupported]]
| 1158 || [20.1.0+] SetConnectionLimitForSplay
|-
| 1159 || [20.1.0+] ClearConnectionLimitForSplay
|-
| 1200 || [10.0.0-17.0.1] [[#IsButtonConfigSupported]]
|-
|-
| 1201 || [11.0.0+] [[#IsButtonConfigEmbeddedSupported]] ([10.0.0-10.2.0] [[#DeleteButtonConfig]])
| 1201 || [11.0.0-17.0.1] [[#IsButtonConfigEmbeddedSupported]] ([10.0.0-10.2.0] [[#DeleteButtonConfig]])
|-
|-
| 1202 || [11.0.0+] [[#DeleteButtonConfig]] ([10.0.0-10.2.0] [[#SetButtonConfigEnabled]])
| 1202 || [11.0.0-17.0.1] [[#DeleteButtonConfig]] ([10.0.0-10.2.0] [[#SetButtonConfigEnabled]])
|-
|-
| 1203 || [11.0.0+] [[#DeleteButtonConfigEmbedded]] ([10.0.0-10.2.0] [[#IsButtonConfigEnabled]])
| 1203 || [11.0.0-17.0.1] [[#DeleteButtonConfigEmbedded]] ([10.0.0-10.2.0] [[#IsButtonConfigEnabled]])
|-
|-
| 1204 || [11.0.0+] [[#SetButtonConfigEnabled]] ([10.0.0-10.2.0] [[#SetButtonConfigEmbedded]])
| 1204 || [11.0.0-17.0.1] [[#SetButtonConfigEnabled]] ([10.0.0-10.2.0] [[#SetButtonConfigEmbedded]])
|-
|-
| 1205 || [11.0.0+] [[#SetButtonConfigEmbeddedEnabled]] ([10.0.0-10.2.0] [[#SetButtonConfigFull]])
| 1205 || [11.0.0-17.0.1] [[#SetButtonConfigEmbeddedEnabled]] ([10.0.0-10.2.0] [[#SetButtonConfigFull]])
|-
|-
| 1206 || [11.0.0+] [[#IsButtonConfigEnabled]] ([10.0.0-10.2.0] [[#SetButtonConfigLeft]])
| 1206 || [11.0.0-17.0.1] [[#IsButtonConfigEnabled]] ([10.0.0-10.2.0] [[#SetButtonConfigLeft]])
|-
|-
| 1207 || [11.0.0+] [[#IsButtonConfigEmbeddedEnabled]] ([10.0.0-10.2.0] [[#SetButtonConfigRight]])
| 1207 || [11.0.0-17.0.1] [[#IsButtonConfigEmbeddedEnabled]] ([10.0.0-10.2.0] [[#SetButtonConfigRight]])
|-
|-
| 1208 || [11.0.0+] [[#SetButtonConfigEmbedded]] ([10.0.0-10.2.0] [[#GetButtonConfigEmbedded]])
| 1208 || [11.0.0-17.0.1] [[#SetButtonConfigEmbedded]] ([10.0.0-10.2.0] [[#GetButtonConfigEmbedded]])
|-
|-
| 1209 || [11.0.0+] [[#SetButtonConfigFull]] ([10.0.0-10.2.0] [[#GetButtonConfigFull]])
| 1209 || [11.0.0-17.0.1] [[#SetButtonConfigFull]] ([10.0.0-10.2.0] [[#GetButtonConfigFull]])
|-
|-
| 1210 || [10.0.0-10.2.0] [[#GetButtonConfigLeft]]
| 1210 || [10.0.0-10.2.0] [[#GetButtonConfigLeft]]
|-
|-
| 1211 || [11.0.0+] [[#SetButtonConfigRight]] ([10.0.0-10.2.0] [[#GetButtonConfigRight]])
| 1211 || [11.0.0-17.0.1] [[#SetButtonConfigRight]] ([10.0.0-10.2.0] [[#GetButtonConfigRight]])
|-
|-
| 1212 || [11.0.0+] [[#GetButtonConfigEmbedded]]
| 1212 || [11.0.0-17.0.1] [[#GetButtonConfigEmbedded]]
|-
|-
| 1213 || [11.0.0+] [[#GetButtonConfigFull]]
| 1213 || [11.0.0-17.0.1] [[#GetButtonConfigFull]]
|-
|-
| 1214 || [11.0.0+] [[#GetButtonConfigLeft]]
| 1214 || [11.0.0-17.0.1] [[#GetButtonConfigLeft]]
|-
|-
| 1215 || [11.0.0+] [[#GetButtonConfigRight]]
| 1215 || [11.0.0-17.0.1] [[#GetButtonConfigRight]]
|-
|-
| 1250 || [10.0.0+] [[#IsCustomButtonConfigSupported]]
| 1250 || [10.0.0+] [[#IsCustomButtonConfigSupported]]
Line 1,914: Line 2,350:
| 1291 || [11.0.0+] [[#SetButtonConfigStorageRight]]
| 1291 || [11.0.0+] [[#SetButtonConfigStorageRight]]
|-
|-
| 1320 || [17.0.0+] WakeTouchScreenUp
| 1292 || [S2]
|-
| 1293 || [S2]
|-
| 1294 || [S2]
|-
| 1295 || [S2]
|-
| 1296 || [S2]
|-
| 1297 || [S2]
|-
|-
| 1321 || [17.0.0+] PutTouchScreenToSleep
| 1298 || [S2]
|-
|-
| 12010 || [11.0.0+] [[#SetButtonConfigLeft]]
| 1299 || [S2]
|}
|-
 
| 1300 || [S2]
== SendKeyboardLockKeyEvent ==
|-
Takes an u32 BitFlagSet [[#KeyboardLockKeyEvent]], no output.
| 1301 || [S2]
|-
| 1302 || [S2]
|-
| 1303 || [S2]
|-
| 1304 || [S2]
|-
| 1305 || [S2]
|-
| 1306 || [S2]
|-
| 1307 || [S2]
|-
| 1308 || [18.0.0+] SetButtonConfigVisible
|-
| 1309 || [18.0.0+] IsButtonConfigVisible
|-
| 1310 || [S2]
|-
| 1320 || [17.0.0+] WakeTouchScreenUp
|-
| 1321 || [17.0.0+] PutTouchScreenToSleep
|-
| 1322 || [20.0.0+] AcquireTouchScreenAsyncWakeCompletedEvent
|-
| 1323 || [21.0.0+] StartTouchScreenAutoTuneForSystemSettings
|-
| 1324 || [21.0.0+] AcquireTouchScreenAutoTuneCompletedEvent
|-
| 1325 || [21.0.0+] IsTouchScreenAutoTuneRequiredForRepairProviderReplacement
|-
| 1326 || [21.0.0+] SetTouchScreenOffset
|-
| 1327 || [22.0.0+] SetTouchStateSuppressed
|-
| 1350 || [S2]
|-
| 1351 || [S2]
|-
| 1352 || [S2]
|-
| 1360 || [S2]
|-
| 1361 || [S2]
|-
| 1362 || [S2]
|-
| 1380 || [S2]
|-
| 1381 || [S2]
|-
| 1382 || [S2]
|-
| 1383 || [S2]
|-
| 1384 || [S2]
|-
| 1385 || [S2]
|-
| 1386 || [S2]
|-
| 1387 || [S2]
|-
| 1388 || [S2]
|-
| 1400 || [S2]
|-
| 1401 || [S2]
|-
| 1420 || [19.0.0+] GetAppletResourceProperty
|-
| 1445 || [S2]
|-
| 1446 || [S2]
|-
| 1447 || [S2]
|-
| 1448 || [S2]
|-
| 1449 || [S2]
|-
| 1455 || [S2]
|-
| 1456 || [S2]
|-
| 1457 || [S2]
|-
| 1458 || [S2]
|-
| 1459 || [S2]
|-
| 1460 || [S2]
|-
| 1461 || [S2]
|-
| 1470 || [S2]
|-
| 1471 || [S2]
|-
| 1472 || [S2]
|-
| 1473 || [S2]
|-
| 1474 || [S2]
|-
| 1480 || [S2]
|-
| 1490 || [22.0.0+] GetInteractiveArea
|-
| 1491 || [22.0.0+] AcquireInteractiveAreaChangedEventHandle
|-
| 12010 || [11.0.0-17.0.1] [[#SetButtonConfigLeft]]
|}


== AcquireHomeButtonEventHandle ==
== SendKeyboardLockKeyEvent ==
Takes an u32 BitFlagSet [[#KeyboardLockKeyEvent]], no output.
 
== AcquireHomeButtonEventHandle ==
Takes a PID, an [[AM_services|AppletResourceUserId]], returns an output Event handle.
Takes a PID, an [[AM_services|AppletResourceUserId]], returns an output Event handle.


Line 1,969: Line 2,531:


The output buffer contains an array of [[#UniquePadId]].
The output buffer contains an array of [[#UniquePadId]].
== SetAppletResourceUserId ==
Takes an [[Applet_Manager_services|AppletResourceUserId]], no output.
Passing already set [[Applet_Manager_services|AppletResourceUserId]] makes it invalid and function returns 0x82CCA.
== RegisterAppletResourceUserId ==
Takes an input bool, an [[Applet_Manager_services|AppletResourceUserId]], no output.
If input bool is '''true''', the same flag changed by [[#SetAppletResourceUserId]] is set.
[20.4.0+] Takes an input bool, an u8, an [[Applet_Manager_services|AppletResourceUserId]], no output.
== UnregisterAppletResourceUserId ==
Takes an [[Applet_Manager_services|AppletResourceUserId]], no output.
Passing unregistered [[Applet_Manager_services|AppletResourceUserId]] causes crash with 0x82ECA error code.


== SetVibrationMasterVolume ==
== SetVibrationMasterVolume ==
Line 2,378: Line 2,957:
== SetButtonConfigStorageRight ==
== SetButtonConfigStorageRight ==
Takes an input s32, a type-0x15 input buffer containing a [[#ButtonConfigRight]], a type-0x19 input buffer containing a [[#StorageName]].
Takes an input s32, a type-0x15 input buffer containing a [[#ButtonConfigRight]], a type-0x19 input buffer containing a [[#StorageName]].
== Cmd1470 ==
This is exclusive to S2.
This is likely SetSelectorUiPresentationPolicy?
Takes a PID, an u8 SelectorUiPresentationPolicy, an [[AM_services|AppletResourceUserId]], no output.
== Cmd1471 ==
This is exclusive to S2.
This is likely GetSelectorUiPresentationPolicy?
Takes a PID, an [[AM_services|AppletResourceUserId]], returns an output u8 SelectorUiPresentationPolicy.


== IHidbusSystemServer ==
== IHidbusSystemServer ==
Line 3,023: Line 3,616:
= xcd:sys =
= xcd:sys =
This is "nn::xcd::detail::ISystemServer".
This is "nn::xcd::detail::ISystemServer".
This was removed with [19.0.0+].


{| class="wikitable" border="1"
{| class="wikitable" border="1"
Line 3,112: Line 3,707:


Official sw opens a temporary service-session for each func using this, with it being closed once done: no global session is kept open.
Official sw opens a temporary service-session for each func using this, with it being closed once done: no global session is kept open.
[S2] Official sw no longer supports this (this service still exists for S1-compat however).


{| class="wikitable" border="1"
{| class="wikitable" border="1"
Line 3,368: Line 3,965:
| 0x400
| 0x400
| [16.0.0+] [[#MouseSharedMemoryFormat|DebugMouse]]
| [16.0.0+] [[#MouseSharedMemoryFormat|DebugMouse]]
|-
| 0x3E200
| ?
| [?+] NpadCondition
|}
|}


Line 3,912: Line 4,513:
===== DigitizerState =====
===== DigitizerState =====
This is "nn::hid::DigitizerState".
This is "nn::hid::DigitizerState".
This is managed by the sysmodule "cs" (development only) through [[HID_services#hid:dbg|hid:dbg]] commands. No actual physical device is supported on NX.


{| class="wikitable" border="1"
{| class="wikitable" border="1"
Line 4,392: Line 4,995:
|-
|-
| 0x160
| 0x160
| 0x40
| 0x60
| [[#SixAxisSensorUserCalibrationStateLifo]]
| [[#SixAxisSensorUserCalibrationStateLifo]]
|-
|-
| 0x1A0
| 0x1C0
| 0x40
| 0x20
| UniquePadConfigMutex
| UniquePadConfigMutex
|}
|}
Line 4,800: Line 5,403:
|-
|-
| 0x4208
| 0x4208
| 0x40
| 0x20
| [1.0.0-8.1.0] Mutex
| [1.0.0-8.1.0] Mutex
|-
|-
Line 7,299: Line 7,902:
| "FK" || Pro Controller
| "FK" || Pro Controller
|-
|-
| "MY" || [[#DeviceTypeInternal|DeviceType]] 4 and [[#DeviceTypeInternal|DeviceType]] 5
| "MY" || MiyabiLeft and MiyabiRight
|-
|-
| "LC" || "Tarragon" ([[#DeviceTypeInternal|DeviceType]] 6) and [[#DeviceTypeInternal|DeviceType]] 30
| "LC" || Tarragon and Tarragon2
|-
|-
| "HL" || Famicom left controller
| "HL" || Famicom left controller
Line 7,686: Line 8,289:
= DeviceTypeInternal =
= DeviceTypeInternal =
This is "nn::hid::detail::DeviceTypeInternal".
This is "nn::hid::detail::DeviceTypeInternal".
[9.0.0+] This has been superseded by [[#DeviceType_2|DeviceType]].


{| class="wikitable" border="1"
{| class="wikitable" border="1"
Line 7,722: Line 8,327:
|}
|}


[9.0.0+] This is "nn::hidtypes::DeviceType".
= DeviceType =
This is "nn::hidtypes::DeviceType".


{| class="wikitable" border="1"
{| class="wikitable" border="1"
!  Value
!  Value
!  [[#DeviceType|DeviceType]]
!  [[#UniquePadType|UniquePadType]]
!  [[#AppletDetailedUiType|AppletDetailedUiType]]
!  Description
!  Description
|-
|-
| 0 || || || || Invalid
| 0 || Unknown
|-
|-
| 1 || JoyRight, HandheldRight || RightController || JoyDual, JoyRightHorizontal, JoyRightVertical, JoyDualRightOnly, HandheldJoyConRightOnly, HandheldJoyConLeftJoyConRight, HandheldLarkHvc1JoyConRight, HandheldLarkNesLeftJoyConRight, HandheldNone || Joy-Con right controller (USB PID 0x2007)
| 1 || [[#JoyConRight|JoyConRight]]
|-
|-
| 2 || JoyLeft, HandheldLeft || LeftController || JoyDual, JoyLeftHorizontal, JoyLeftVertical, JoyDualLeftOnly, HandheldJoyConLeftOnly, HandheldJoyConLeftJoyConRight, HandheldJoyConLeftLarkHvc2, HandheldJoyConLeftLarkNesRight, HandheldNone || Joy-Con left controller (USB PID 0x2006)
| 2 || [[#JoyConLeft|JoyConLeft]]
|-
|-
| 3 || FullKey || FullKeyController || SwitchProController || Pro Controller (USB PID 0x2009)
| 3 || [[#SwitchProController|SwitchProController]]
|-
|-
| 4 || JoyLeft || LeftController || ||
| 4 || MiyabiLeft
|-
|-
| 5 || JoyRight || RightController || ||
| 5 || MiyabiRight
|-
|-
| 6 || FullKey || FullKeyController || || "Tarragon" controller
| 6 || [[#Tarragon|Tarragon]]
|-
|-
| 7 || LarkHvcLeft, HandheldLarkHvcLeft || LeftController || LarkHvc1, HandheldLarkHvc1Only, HandheldLarkHvc1JoyConRight, HandheldLarkHvc1LarkHvc2, HandheldLarkHvc1LarkNesRight, HandheldNone || Famicom left controller
| 7 || [[#LarkH1|LarkH1]]
|-
|-
| 8 || LarkHvcRight, HandheldLarkHvcRight || RightController || LarkHvc2, HandheldLarkHvc2Only, HandheldJoyConLeftLarkHvc2, HandheldLarkHvc1LarkHvc2, HandheldLarkNesLeftLarkHvc2, HandheldNone || Famicom right controller (with microphone)
| 8 || [[#LarkH2|LarkH2]]
|-
|-
| 9 || LarkNesLeft, HandheldLarkNesLeft || LeftController || LarkNesLeft, HandheldLarkNesLeftOnly, HandheldLarkNesLeftJoyConRight, HandheldLarkNesLeftLarkHvc2, HandheldLarkNesLeftLarkNesRight, HandheldNone || NES left controller
| 9 || [[#LarkNL|LarkNL]]
|-
|-
| 10 || LarkNesRight, HandheldLarkNesRight || RightController || LarkNesRight, HandheldLarkNesRightOnly, HandheldJoyConLeftLarkNesRight, HandheldLarkHvc1LarkNesRight, HandheldLarkNesLeftLarkNesRight, HandheldNone || NES right controller
| 10 || [[#LarkNR|LarkNR]]
|-
|-
| 11 || Lucia || FullKeyController || LuciaU, LuciaJ, LuciaE || SNES controller (USB PID 0x2017)
| 11 || [[#Lucia|Lucia]]
|-
|-
| 12 || Palma || Embedded || Unknown || Poké Ball Plus controller
| 12 || [[#Palma|Palma]]
|-
|-
| 13 || FullKey || FullKeyController || || Gc controller
| 13 || [[#GcOnGggg|GcOnGggg]]
|-
|-
| 14 || HandheldLeft || LeftController || || "Fifty" left controller
| 14 || FiftyL
|-
|-
| 15 || FullKey || FullKeyController || ||
| 15 || UsbPad
|-
|-
| 16 || FullKey || FullKeyController || ||
| 16 || WinGenericPad
|-
|-
| 17 || DebugPad || DebugPadController || Verification || Debug controller
| 17 || Sio
|-
|-
| 18 || HandheldRight || RightController || || "Fifty" right controller
| 18 || FiftyR
|-
|-
| 19 || System || Embedded || CompatibleProController || Third party Pro Controller
| 19 || DebugSwitchProControllerCompatibleDevice
|-
|-
| 20 || System || Embedded || CompatibleJoyCon, HandheldNone || Third party Joy-Con right controller
| 20 || DebugJoyConLeftCompatibleDevice
|-
|-
| 21 || System || Embedded || CompatibleJoyCon, HandheldNone || Third party Joy-Con left controller
| 21 || DebugJoyConRightCompatibleDevice
|-
|-
| [12.0.0+] 22 || Lagon || FullKeyController || Lagon || N64 controller (USB PID 0x2019)
| 22 || [12.0.0+] [[#Lagon|Lagon]]
|-
|-
| [12.0.0+] 23 || || || || Joy-Con Charging Grip (USB PID 0x200E)
| 23 || [12.0.0+] [[#ExternalGrip|ExternalGrip]]
|-
|-
| [13.0.0+] 24 || || || || "Kotetsu" (Pro Controller MCU) in DFU mode (USB PID 0x200F)
| 24 || [13.0.0+] [[#SwitchProControllerDfu|SwitchProControllerDfu]]
|-
|-
| [13.0.0+] 25 || || || || "Kuina" (Joy-Con Charging Grip MCU) in DFU mode (USB PID 0x2008)
| 25 || [13.0.0+] [[#ExternalGripDfu|ExternalGripDfu]]
|-
|-
| [13.0.0+] 26 || || || || SNES controller MCU in DFU mode (USB PID 0x2018)
| 26 || [13.0.0+] [[#LuciaDfu|LuciaDfu]]
|-
|-
| [13.0.0+] 27 || || || || N64 controller MCU in DFU mode (USB PID 0x201A)
| 27 || [13.0.0+] [[#LagonDfu|LagonDfu]]
|-
|-
| [13.0.0+] 28 || Lager || FullKeyController || || Sega Genesis controller (USB PID 0x201E)
| 28 || [13.0.0+] [[#Lager|Lager]]
|-
|-
| [14.0.0+] 29 || || || || Sega Genesis controller MCU in DFU mode (USB PID 0x201F)
| 29 || [14.0.0+] [[#LagerDfu|LagerDfu]]
|-
|-
| [14.0.0+] 30 || FullKey || FullKeyController || ||
| 30 || [14.0.0+] [[#Tarragon2|Tarragon2]]
|}
|}
== JoyConRight ==
[[Joy-Con|Joy-Con]] right controller.
== JoyConLeft ==
[[Joy-Con|Joy-Con]] left controller.
== SwitchProController ==
[[Pro_Controller|Pro Controller]].
== Tarragon ==
Licensed Pro Controller.
== LarkH1 ==
Famicom left controller.
== LarkH2 ==
Famicom right controller (with microphone).
== LarkNL ==
NES left controller.
== LarkNR ==
NES right controller.
== Lucia ==
SNES controller.
== Palma ==
Poké Ball Plus controller.
== GcOnGggg ==
GameCube controller.
== Lagon ==
N64 controller.
== ExternalGrip ==
Joy-Con Charging Grip.
== SwitchProControllerDfu ==
"Kotetsu" (Pro Controller MCU) in DFU mode.
== ExternalGripDfu ==
"Kuina" (Joy-Con Charging Grip MCU) in DFU mode.
== LuciaDfu ==
SNES controller MCU in DFU mode.
== LagonDfu ==
N64 controller MCU in DFU mode.
== Lager ==
Sega Genesis controller.
== LagerDfu ==
Sega Genesis controller MCU in DFU mode.
== Tarragon2 ==
Licensed Pro Controller.


= VidPidDefinition =
= VidPidDefinition =
Line 7,829: Line 8,492:
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
! Vid || PidRangeMax || PidRangeMin || [[#DeviceTypeInternal|DeviceType]]
! Vid || PidRangeMax || PidRangeMin || [[#DeviceTypeInternal|DeviceType]] || Description
|-
| 0x57E || 0x2006 || 0x2006 || 2 || Nintendo [[HID_services#JoyConLeft|JoyConLeft]]
|-
|-
| 0x57E || 0x2006 || 0x2006 || 2
| 0x57E || 0x2007 || 0x2007 || 1 || Nintendo [[HID_services#JoyConRight|JoyConRight]]
|-
|-
| 0x57E || 0x2007 || 0x2007 || 1
| 0x57E || 0x2009 || 0x2009 || 3 || Nintendo [[HID_services#SwitchProController|SwitchProController]]
|-
|-
| 0x57E || 0x2009 || 0x2009 || 3
| 0x57E || 0x200F || 0x200F || 24 || Nintendo [[HID_services#SwitchProControllerDfu|SwitchProControllerDfu]]
|-
|-
| 0x57E || 0x200F || 0x200F || 24
| 0x57E || 0x200E || 0x200E || 23 || Nintendo [[HID_services#ExternalGrip|ExternalGrip]]
|-
|-
| 0x57E || 0x200E || 0x200E || 23
| 0x57E || 0x2008 || 0x2008 || 25 || Nintendo [[HID_services#ExternalGripDfu|ExternalGripDfu]]
|-
|-
| 0x57E || 0x2008 || 0x2008 || 25
| 0x57E || 0x2017 || 0x2017 || 11 || Nintendo [[HID_services#Lucia|Lucia]]
|-
|-
| 0x57E || 0x2017 || 0x2017 || 11
| 0x57E || 0x2018 || 0x2018 || 26 || Nintendo [[HID_services#LuciaDfu|LuciaDfu]]
|-
|-
| 0x57E || 0x2018 || 0x2018 || 26
| 0x57E || 0x2019 || 0x2019 || 22 || Nintendo [[HID_services#Lagon|Lagon]]
|-
|-
| 0x57E || 0x2019 || 0x2019 || 22
| 0x57E || 0x201A || 0x201A || 27 || Nintendo [[HID_services#LagonDfu|LagonDfu]]
|-
|-
| 0x57E || 0x201A || 0x201A || 27
| 0x57E || 0x201E || 0x201E || 28 || Nintendo [[HID_services#Lager|Lager]]
|-
|-
| 0x57E || 0x201E || 0x201E || 28
| 0x57E || 0x201F || 0x201F || 29 || Nintendo [[HID_services#LagerDfu|LagerDfu]]
|-
|-
| 0x57E || 0x201F || 0x201F || 29
| 0x57E || 0x337 || 0x337 || 13 || Nintendo [[HID_services#GcOnGggg|GcOnGggg]]
|-
|-
| 0x57E || 0x337 || 0x337 || 13
| 0x57E || 0x300E || 0x300E || [17.0.0+] 18 || Nintendo FiftyR
|-
|-
| 0xF0D || 0x92 || 0x92 || 15
| 0x57E || 0x300D || 0x300D || [17.0.0+] 14 || Nintendo FiftyL
|-
|-
| 0xF0D || 0xAB || 0xAA || 15
| 0xF0D || 0x92 || 0x92 || 15 || HORI Pokken Tournament DX Pro Pad
|-
|-
| 0xF0D || 0xC1 || 0xC1 || 15
| 0xF0D || 0xAB || 0xAA || 15 || HORI
|-
|-
| 0xF0D || 0xFF || 0xF0 || 15
| 0xF0D || 0xC1 || 0xC1 || 15 || HORIPAD for Nintendo Switch
|-
|-
| 0xF0D || 0x22F || 0x200 || 15
| 0xF0D || 0xFF || 0xF0 || 15 || HORI
|-
|-
| 0xE6F || 0x193 || 0x180 || 15
| 0xF0D || 0x22F || 0x200 || [1.0.0-20.0.1] 15 || HORI
|-
|-
| 0x20D6 || 0xA719 || 0xA710 || 15
| 0xF0D || 0x201 || 0x200 || [20.1.0+] 15 || HORI Split Pad Pro
|-
|-
| 0x20D6 || 0xA729 || 0xA720 || 15
| 0xF0D || 0x202 || 0x202 || [20.1.0+] 15 || HORI
|-
|-
| 0x33DD || 0xB || 0x1 || 15
| 0xF0D || 0x21F || 0x203 || [20.1.0+] 15 || HORI
|}
 
= NpadPowerInfo =
This is "nn::hid::system::NpadPowerInfo".
 
{| class="wikitable" border="1"
|-
|-
! Offset
| 0xF0D || 0x25F || 0x220 || [20.1.0+] 15 || HORI
! Size
! Description
|-
|-
| 0x0
| 0xF0D || 0x27F || 0x260 || [20.1.0+] 15 || HORI
|-
| 0xE6F || 0x193 || 0x180 || 15 || PDP
|-
| 0x20D6 || 0xA719 || 0xA710 || [1.0.0-20.0.1] 15 || PowerA
|-
| 0x20D6 || 0xA729 || 0xA720 || [1.0.0-20.0.1] 15 || PowerA
|-
| 0x20D6 || 0xA716 || 0xA710 || [20.1.0+] 15 || PowerA
|-
| 0x20D6 || 0xA717 || 0xA717 || [20.1.0+] 15 || PowerA
|-
| 0x20D6 || 0xA719 || 0xA718 || [20.1.0+] 15 || PowerA
|-
| 0x20D6 || 0xA720 || 0xA720 || [20.1.0+] 15 || PowerA
|-
| 0x20D6 || 0xA721 || 0xA721 || [20.1.0+] 15 || PowerA
|-
| 0x20D6 || 0xA726 || 0xA722 || [20.1.0+] 15 || PowerA
|-
| 0x20D6 || 0xA731 || 0xA727 || [20.1.0+] 15 || PowerA
|-
| 0x33DD || 0xB || 0x1 || 15 || ZUIKI
|}
 
= NpadPowerInfo =
This is "nn::hid::system::NpadPowerInfo".
 
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x1
| 0x1
| IsPowered
| IsPowered
Line 7,898: Line 8,589:
|-
|-
| 0x8
| 0x8
| 0x6
| 0x4
| [[#BatteryLevel|BatteryLevel]]
| [[#BatteryLevel|BatteryLevel]]
|}
|}
Line 8,192: Line 8,883:
| MuteSwitch
| MuteSwitch
|-
|-
|}
= JcmsHandle =
This is "nn::hid::JcmsHandle".
This is a 0x4-byte struct.
This is exclusive to S2.
{| class="wikitable" border="1"
|-
! Offset || Size || Description
|-
| 0x0 || 0x1 || [[#NpadIdType|NpadIdType]] (must be <8)
|-
| 0x1 || 0x1 || [[#JcmsType|JcmsType]]
|}
= JcmsType =
This is "nn::hid::JcmsType".
This is exclusive to S2.
{| class="wikitable" border="1"
!  Value
!  Description
|-
| 0 ||
|-
| 1 ||
|}
= NmouseHandle =
This is "nn::hid::NmouseHandle".
This is a 0x8-byte struct.
This is exclusive to S2.
{| class="wikitable" border="1"
|-
! Offset || Size || Description
|-
|}
= NmousePointerType =
This is u8 enum "nn::hid::NmousePointerType".
This is exclusive to S2.
{| class="wikitable" border="1"
!  Value
!  Description
|-
|}
= NmouseType =
This is "nn::hid::NmouseType".
This is exclusive to S2.
{| class="wikitable" border="1"
|-
! Bit
! Description
|-
| 1 ||
|-
| 2 ||
|}
= NmouseButtonConfigJoyLeftJcms =
This is "nn::hid::NmouseButtonConfigJoyLeftJcms".
This is a 0x8-byte struct.
This is exclusive to S2.
{| class="wikitable" border="1"
|-
! Offset || Size || Description
|-
|}
= NmouseButtonConfigJoyRightJcms =
This is "nn::hid::NmouseButtonConfigJoyRightJcms".
This is a 0x8-byte struct.
This is exclusive to S2.
{| class="wikitable" border="1"
|-
! Offset || Size || Description
|-
|}
= NmouseStateRange =
This is u8 enum "nn::hid::NmouseStateRange".
This is exclusive to S2.
{| class="wikitable" border="1"
!  Value
!  Description
|-
| 0 || 1280x720
|-
| 1 || 1920x1080
|-
| 2 || 2560x1440
|-
| 3 || 3840x2160
|}
|}


Line 8,357: Line 9,161:
|-
|-
| 0x0 || 0x8 || Buttons (only bit0 is used)
| 0x0 || 0x8 || Buttons (only bit0 is used)
|}
= DigitizerAutoPilotState =
This is "nn::hid::debug::DigitizerAutoPilotState".
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0 || 0x44 ||
|}
|}


Line 10,039: Line 10,855:
* '''ExpectVersionInfo.csv'''
* '''ExpectVersionInfo.csv'''
** List in the format "[device],[type],[version]" where "device" can be "JoyLeft", "JoyRight", "FullKey", "Palma" or "Handheld", "type" can be "BT", "MCU", "USB" or "SioH" and "version" is the hexadecimal representation of the firmware file's version.
** List in the format "[device],[type],[version]" where "device" can be "JoyLeft", "JoyRight", "FullKey", "Palma" or "Handheld", "type" can be "BT", "MCU", "USB" or "SioH" and "version" is the hexadecimal representation of the firmware file's version.
* [S2] [20.1.1+] '''ExpectVersionInfo.json'''
* '''FirmwareInfo.csv'''
* '''FirmwareInfo.csv'''
** List in the format "[device],[type],[version],[file]" where "device", "type" and "version" should match the values from "ExpectVersionInfo" and "file" is the name of the firmware file.
** List in the format "[device],[type],[version],[file]" where "device", "type" and "version" should match the values from "ExpectVersionInfo" and "file" is the name of the firmware file.
Line 10,057: Line 10,874:
* [6.1.0+] '''PalmaFw.bin'''
* [6.1.0+] '''PalmaFw.bin'''
** Poké Ball Plus BT firmware.
** Poké Ball Plus BT firmware.
* [8.1.1+] '''ExpectVersionInfo-platform.hoag.csv'''
* [S1] [8.1.1+] '''ExpectVersionInfo-platform.hoag.csv'''
** Same as "ExpectVersionInfo.csv" but for the Switch Lite platform.
** Same as "ExpectVersionInfo.csv" but for the Switch Lite platform.
* [8.1.1+] '''FirmwareInfo-platform.hoag.csv'''
* [S1] [8.1.1+] '''FirmwareInfo-platform.hoag.csv'''
** Same as "FirmwareInfo.csv" but for the Switch Lite platform.
** Same as "FirmwareInfo.csv" but for the Switch Lite platform.
* [8.1.1+] '''sioh.bin'''
* [S1] [8.1.1+] '''sioh.bin'''
** Switch Lite Joy-Con firmware.  
** Switch Lite Joy-Con firmware.  
* [8.1.1+] '''sioh_iap.bin'''
* [S1] [8.1.1+] '''sioh_iap.bin'''
** Switch Lite Joy-Con (IAP profile) firmware.
** Switch Lite Joy-Con (IAP profile) firmware.
* [10.0.0+] '''FTS_00120100.fts256'''
* [S1] [10.0.0+] '''FTS_00120100.fts256'''
** Touch Screen controller firmware in FTS256 format.
** Touch Screen controller firmware in FTS256 format.
* [10.0.0+] '''FTS_32000001.fts256'''
* [S1] [10.0.0+] '''FTS_32000001.fts256'''
** Touch Screen controller firmware in FTS256 format for panel vendor "Nissha".
** Touch Screen controller firmware in FTS256 format for panel vendor "Nissha".
* [10.0.0+] '''FTS_32000102.fts256'''
* [S1] [10.0.0+] '''FTS_32000102.fts256'''
** Touch Screen controller firmware in FTS256 format for panel vendor "GIS".
** Touch Screen controller firmware in FTS256 format for panel vendor "GIS".
* [10.0.0+] '''FTS_32000302.fts256'''
* [S1] [10.0.0+] '''FTS_32000302.fts256'''
** Touch Screen controller firmware in FTS256 format for panel vendor "Nissha_Hoag".
** Touch Screen controller firmware in FTS256 format for panel vendor "Nissha_Hoag".
* [10.0.0+] '''FTS_32000402.fts256'''
* [S1] [10.0.0+] '''FTS_32000402.fts256'''
** Touch Screen controller firmware in FTS256 format for panel vendor "GIS_Hoag".
** Touch Screen controller firmware in FTS256 format for panel vendor "GIS_Hoag".
* [10.0.0+] '''TouchScreenConfiguration.csv'''
* [S1] [10.0.0+] '''TouchScreenConfiguration.csv'''
** List in the format "[gpio],[gpio],[gpio],[config],[config]" where "gpio" can be "0" or "1" and "config" is an integer number.
** List in the format "[gpio],[gpio],[gpio],[config],[config]" where "gpio" can be "0" or "1" and "config" is an integer number.
* [10.0.0+] '''TouchScreenFirmwareInfo.csv'''
* [10.0.0+] '''TouchScreenFirmwareInfo.csv'''
** List in the format "[driver],[gpio],[gpio],[gpio],[version],[file]" where "driver" can be "FTM" or "FST2", "gpio" can be "0" or "1", "version" is the hexadecimal representation of the firmware file's version and "file" is the name of the firmware file.
** List in the format "[driver],[gpio],[gpio],[gpio],[version],[file]" where "driver" can be "FTM" or "FST2", "gpio" can be "0" or "1", "version" is the hexadecimal representation of the firmware file's version and "file" is the name of the firmware file.
** With [S2] there's only a single hex-value field between "driver" and "file". "driver" is "Innolux" or "Sharp".
* [13.0.0+] '''FTS_33000510.fts256'''
* [13.0.0+] '''FTS_33000510.fts256'''
** Touch Screen controller firmware in FTS256 format for panel vendor "Samsung_Aula".
** Touch Screen controller firmware in FTS256 format for panel vendor "Samsung_Aula".
Line 10,085: Line 10,903:
* [13.1.0-13.2.1] '''FTS_50000001.ftb'''
* [13.1.0-13.2.1] '''FTS_50000001.ftb'''
** Touch Screen controller firmware in FTB format for panel vendor "Nissha".
** Touch Screen controller firmware in FTB format for panel vendor "Nissha".
* [14.0.0+] '''FTS_50000002.ftb'''
* [S1] [14.0.0+] '''FTS_50000002.ftb'''
** Touch Screen controller firmware in FTB format for panel vendor "Nissha".
** Touch Screen controller firmware in FTB format for panel vendor "Nissha".
* [S2] [20.1.1+] '''JoyLeftImage1.json'''
* [S2] [20.1.1+] '''JoyLeftImage2.json'''
* [S2] [20.1.1+] '''JoyRightImage1.json'''
* [S2] [20.1.1+] '''JoyRightImage2.json'''
* [S2] '''NT36683_INX.bin'''
** Touch Screen controller firmware for panel vendor "Innolux".
* [S2] '''NT36683_SHP.bin'''
** Touch Screen controller firmware for panel vendor "Sharp".
* [S2] [20.1.1+] '''OunceJoyLeft.bin'''
* [S2] [20.1.1+] '''OunceJoyLeftBtPatch.bin'''
* [S2] [20.1.1+] '''OunceJoyRight.bin'''
* [S2] [20.1.1+] '''OunceJoyRightBtPatch.bin'''
* [S2] [20.1.1+] '''OunceProCon.bin'''
* [S2] [20.1.1+] '''OunceProConBtPatch.bin'''
* [S2] [20.1.1+] '''OunceProConDspFirmware.img'''
* [S2] [20.1.1+] '''ProConImage1.json'''
* [S2] [20.1.1+] '''ProConImage2.json'''
* [S2] [20.1.1+] '''ProConImage3.json'''


== Versions ==
== Versions ==
Line 10,127: Line 10,963:
| [14.0.0+]
| [14.0.0+]
| 0419
| 0419
|-
| [21.0.0+]
| 0420
|}
|}


Line 10,162: Line 11,001:
| [8.0.0+]
| [8.0.0+]
| 081B
| 081B
|-
| [20.1.0+]
| 0920
|}
|}


Line 10,172: Line 11,014:
| [1.0.0+]
| [1.0.0+]
| 0305
| 0305
|-
| [20.1.0+]
| 0403
|}
|}