Changes

7,094 bytes added ,  16:15, 12 October 2019
Line 192: Line 192:  
| 404 || [4.0.0+] HasLeftRightBattery
 
| 404 || [4.0.0+] HasLeftRightBattery
 
|-
 
|-
| 405 || [4.0.0+] GetNpadInterfaceType
+
| 405 || [4.0.0+] [[#GetNpadInterfaceType]]
 
|-
 
|-
 
| 406 || [4.0.0+] GetNpadLeftRightInterfaceType
 
| 406 || [4.0.0+] GetNpadLeftRightInterfaceType
 +
|-
 +
| 407 || [9.0.0+] GetNpadOfHighestBatteryLevelForJoyLeft
 +
|-
 +
| 408 || [9.0.0+] GetNpadOfHighestBatteryLevelForJoyRight
 
|-
 
|-
 
| 500 || [5.0.0+] GetPalmaConnectionHandle
 
| 500 || [5.0.0+] GetPalmaConnectionHandle
Line 259: Line 263:  
|-
 
|-
 
| 1001 || GetNpadCommunicationMode
 
| 1001 || GetNpadCommunicationMode
 +
|-
 +
| 1002 || [9.0.0+] SetTouchScreenConfiguration
 +
|-
 +
| 1003 || [9.0.0+] IsFirmwareUpdateNeededForNotification
 
|}
 
|}
   Line 265: Line 273:     
== SetSupportedNpadStyleSet ==
 
== SetSupportedNpadStyleSet ==
Takes an u32 [[#NpadStyleTag]].
+
Takes a PID-descriptor, an u32 [[#NpadStyleTag]], and an u64 [[AM_services|AppletResourceUserId]], no output.
    
== GetSupportedNpadStyleSet ==
 
== GetSupportedNpadStyleSet ==
Returns an u32 [[#NpadStyleTag]].
+
Takes a PID-descriptor and an u64 [[AM_services|AppletResourceUserId]], returns an u32 [[#NpadStyleTag]].
    
== SetSupportedNpadIdType ==
 
== SetSupportedNpadIdType ==
Line 276: Line 284:     
== AcquireNpadStyleSetUpdateEventHandle ==
 
== AcquireNpadStyleSetUpdateEventHandle ==
Takes an input u32, an u64 [[AM_services|AppletResourceUserId]], and an u64. Returns an output event handle, autoclear for this is user-specified.
+
Takes a PID, an input u32, an u64 [[AM_services|AppletResourceUserId]], and an u64. Returns an output event handle, autoclear for this is user-specified.
    
The value for the last u64 doesn't seem to matter (?): official sw sets this to the address of the structure used for storing the event which is initialized after using this cmd.
 
The value for the last u64 doesn't seem to matter (?): official sw sets this to the address of the structure used for storing the event which is initialized after using this cmd.
Line 321: Line 329:     
== IsVibrationDeviceMounted ==
 
== IsVibrationDeviceMounted ==
Takes a total of 0x10-bytes of input and a PID, returns an output u8 bool.
+
Takes a PID, an [[#VibrationDeviceHandle]], and an u64 [[AM_services|AppletResourceUserId]], returns an output u8 bool.
    
== ActivateSevenSixAxisSensor ==
 
== ActivateSevenSixAxisSensor ==
Line 348: Line 356:  
== ResetSevenSixAxisSensorTimestamp ==
 
== ResetSevenSixAxisSensorTimestamp ==
 
Takes a PID and an u64 [[AM_services|AppletResourceUserId]], no output.
 
Takes a PID and an u64 [[AM_services|AppletResourceUserId]], no output.
 +
 +
== GetNpadInterfaceType ==
 +
Takes an input u32 NpadIdType, returns an output u8 [[#NpadInterfaceType]].
 +
 +
The NpadInterfaceType must be 1-4, otherwise this will assert.
    
== VibrationDeviceHandle ==
 
== VibrationDeviceHandle ==
Line 429: Line 442:  
| 9
 
| 9
 
| NpadLucia
 
| NpadLucia
| Unknown.
+
| SNES controller.
 
|-
 
|-
 
| 10-28
 
| 10-28
Line 450: Line 463:  
== NpadIdType ==
 
== NpadIdType ==
 
This is an u32. This is the controller index used in [[HID_Shared_Memory#Controllers|sharedmem]]. 0x20 is handheld.
 
This is an u32. This is the controller index used in [[HID_Shared_Memory#Controllers|sharedmem]]. 0x20 is handheld.
 +
 +
== NpadInterfaceType ==
 +
This is the output u8 returned by [[#GetNpadInterfaceType]].
 +
 +
{| class="wikitable" border="1"
 +
!  Value
 +
!  Description
 +
!  Notes
 +
|-
 +
| 1 || Bluetooth ||
 +
|-
 +
| 2 || Rail ||
 +
|-
 +
| 3 || USB ||
 +
|-
 +
| 4 || Unknown ||
 +
|}
    
= hid:dbg =
 
= hid:dbg =
Line 469: Line 499:  
|-
 
|-
 
| 12 || UnsetTouchScreenAutoPilotState
 
| 12 || UnsetTouchScreenAutoPilotState
 +
|-
 +
| 13 || [9.0.0+] GetTouchScreenConfiguration
 
|-
 
|-
 
| 20 || DeactivateMouse
 
| 20 || DeactivateMouse
Line 488: Line 520:  
| 52 || UnsetXpadAutoPilotState
 
| 52 || UnsetXpadAutoPilotState
 
|-
 
|-
| 60 || DeactivateJoyXpad
+
| 53 ([1.0.0-8.1.0] 60) || [[#DeactivateJoyXpad]]
 +
|-
 +
| 60 || [9.0.0+] ClearNpadSystemCommonPolicy
 
|-
 
|-
 
| 91 || DeactivateGesture
 
| 91 || DeactivateGesture
Line 578: Line 612:  
| 224 || [5.0.0+] [[#UpdateDesignInfo]]
 
| 224 || [5.0.0+] [[#UpdateDesignInfo]]
 
|-
 
|-
| 225 || [5.0.0+] GetUniquePadDriverState
+
| 225 || [5.0.0+] [[#GetUniquePadDriverState]]
 
|-
 
|-
| 226 || [5.0.0+] GetSixAxisSensorDriverStates
+
| 226 || [5.0.0+] [[#GetSixAxisSensorDriverStates]]
 
|-
 
|-
 
| 227 || [5.0.0+] GetRxPacketHistory
 
| 227 || [5.0.0+] GetRxPacketHistory
Line 588: Line 622:  
| 229 || [6.0.0+] [[#ReadSerialFlash]]
 
| 229 || [6.0.0+] [[#ReadSerialFlash]]
 
|-
 
|-
| 230 || [6.0.0+] WriteSerialFlash
+
| 230 || [6.0.0+] [[#WriteSerialFlash]]
 
|-
 
|-
 
| 231 || [6.0.0+] GetOperationResult
 
| 231 || [6.0.0+] GetOperationResult
Line 596: Line 630:  
| 233 || [6.0.0+] ClearPairingInfo
 
| 233 || [6.0.0+] ClearPairingInfo
 
|-
 
|-
| 234 || [6.0.0+] GetUniquePadDeviceTypeSetInternal
+
| 234 || [6.0.0+] [[#GetUniquePadDeviceTypeSetInternal]]
 
|-
 
|-
 
| 235 || [7.0.0+] EnableAnalogStickPower
 
| 235 || [7.0.0+] EnableAnalogStickPower
 
|-
 
|-
| 301 || [5.0.0+] [[#GetAbstractedPadHandles]]
+
| 236 || [9.0.0+] RequestKuinaUartClockCal
 
|-
 
|-
| 302 || [5.0.0+] [[#GetAbstractedPadState]]
+
| 237 || [9.0.0+] GetKuinaUartClockCal
 
|-
 
|-
| 303 || [5.0.0+] [[#GetAbstractedPadsState]]
+
| 238 || [9.0.0+] SetKuinaUartClockTrim
 
|-
 
|-
| 321 || [5.0.0+] [[#SetAutoPilotVirtualPadState]]
+
| 239 || [9.0.0+] KuinaLoopbackTest
 
|-
 
|-
| 322 || [5.0.0+] [[#UnsetAutoPilotVirtualPadState]]
+
| 240 || [9.0.0+] RequestBatteryVoltage
 
|-
 
|-
| 323 || [5.0.0+] [[#UnsetAllAutoPilotVirtualPadState]]
+
| 241 || [9.0.0+] GetBatteryVoltage
 
|-
 
|-
| 324 || [7.0.0+] [[#AttachHdlsWorkBuffer]]
+
| 242 || [9.0.0+] GetUniquePadPowerInfo
 
|-
 
|-
| 325 || [7.0.0+] [[#ReleaseHdlsWorkBuffer]]
+
| 243 || [9.0.0+] RebootUniquePad
 
|-
 
|-
| 326 || [7.0.0+] [[#DumpHdlsNpadAssignmentState]]
+
| 244 || [9.0.0+] RequestKuinaFirmwareVersion
 
|-
 
|-
| 327 || [7.0.0+] [[#DumpHdlsStates]]
+
| 245 || [9.0.0+] GetKuinaFirmwareVersion
 
|-
 
|-
| 328 || [7.0.0+] [[#ApplyHdlsNpadAssignmentState]]
+
| 246 || [9.0.0+] GetVidPid
 
|-
 
|-
| 329 || [7.0.0+] [[#ApplyHdlsStateList]]
+
| 301 || [5.0.0-8.1.0] [[#GetAbstractedPadHandles]]
 
|-
 
|-
| 330 || [7.0.0+] [[#AttachHdlsVirtualDevice]]
+
| 302 || [5.0.0-8.1.0] [[#GetAbstractedPadState]]
 
|-
 
|-
| 331 || [7.0.0+] [[#DetachHdlsVirtualDevice]]
+
| 303 || [5.0.0-8.1.0] [[#GetAbstractedPadsState]]
 
|-
 
|-
| 332 || [7.0.0+] [[#SetHdlsState]]
+
| 321 || [5.0.0-8.1.0] [[#SetAutoPilotVirtualPadState]]
 +
|-
 +
| 322 || [5.0.0-8.1.0] [[#UnsetAutoPilotVirtualPadState]]
 +
|-
 +
| 323 || [5.0.0+] [[#UnsetAllAutoPilotVirtualPadState]]
 +
|-
 +
| 324 || [7.0.0+] [[#AttachHdlsWorkBuffer]]
 +
|-
 +
| 325 || [7.0.0+] [[#ReleaseHdlsWorkBuffer]]
 +
|-
 +
| 326 || [7.0.0+] [[#DumpHdlsNpadAssignmentState]]
 +
|-
 +
| 327 || [7.0.0+] [[#DumpHdlsStates]]
 +
|-
 +
| 328 || [7.0.0+] [[#ApplyHdlsNpadAssignmentState]]
 +
|-
 +
| 329 || [7.0.0+] [[#ApplyHdlsStateList]]
 +
|-
 +
| 330 || [7.0.0+] [[#AttachHdlsVirtualDevice]]
 +
|-
 +
| 331 || [7.0.0+] [[#DetachHdlsVirtualDevice]]
 +
|-
 +
| 332 || [7.0.0+] [[#SetHdlsState]]
 
|-
 
|-
 
| 350 || [5.0.0+] AddRegisteredDevice
 
| 350 || [5.0.0+] AddRegisteredDevice
Line 639: Line 695:  
|-
 
|-
 
| 501 || [8.0.0+] IsFactoryBootEnabled
 
| 501 || [8.0.0+] IsFactoryBootEnabled
 +
|-
 +
| 550 || [9.0.0+] SetAnalogStickModelDataTemporarily
 +
|-
 +
| 551 || [9.0.0+] GetAnalogStickModelData
 +
|-
 +
| 552 || [9.0.0+] ResetAnalogStickModelData
 
|}
 
|}
   Line 674: Line 736:     
Sends the spi-write subcommand to the specified controller, for writing to offset 0x6050 size 0xD. The first 3-bytes from each u32 is used for the spi-write-data, with the u8 being copied immediately afterwards the color data.
 
Sends the spi-write subcommand to the specified controller, for writing to offset 0x6050 size 0xD. The first 3-bytes from each u32 is used for the spi-write-data, with the u8 being copied immediately afterwards the color data.
 +
 +
== GetUniquePadDriverState ==
 +
Takes a total of 8-bytes of input, returns a total of 0x20-bytes of output.
 +
 +
[9.0.0+] Now takes a total of 8-bytes of input, returns a total of 0x18-bytes of output.
 +
 +
== GetSixAxisSensorDriverStates ==
 +
Takes a total of 8-bytes of input and a type-0xA output buffer, returns a total of 8-bytes of output.
 +
 +
[9.0.0+] Now takes a total of 8-bytes of input and a type-0x6 output buffer, returns a total of 8-bytes of output.
    
== ReadSerialFlash ==
 
== ReadSerialFlash ==
Line 681: Line 753:     
This doesn't seem to be usable?
 
This doesn't seem to be usable?
 +
 +
== WriteSerialFlash ==
 +
Takes an input TransferMemory handle, an input u32 offset, an input u64 tmem_size, an input u64 size, and an u64 '''UniquePadId''', no output.
 +
 +
Writes to the specified controller's spi-flash. The TransferMemory permissions is R--.
 +
 +
== GetUniquePadDeviceTypeSetInternal ==
 +
Takes an input u64 '''UniquePadId''', returns an [[#DeviceTypeInternal]].
    
== GetAbstractedPadHandles ==
 
== GetAbstractedPadHandles ==
Line 748: Line 828:  
== SetHdlsState ==
 
== SetHdlsState ==
 
Takes an input [[#HdlsState]] and an input 8-byte '''HdlsHandle''', no output.
 
Takes an input [[#HdlsState]] and an input 8-byte '''HdlsHandle''', no output.
 +
 +
[9.0.0+] Input order was swapped: now takes an input 8-byte '''HdlsHandle''' and a [[#HdlsState]], no output.
    
== AbstractedPadState ==
 
== AbstractedPadState ==
Line 764: Line 846:  
| 0xC || 0x4 || RGBA Single Buttons Color
 
| 0xC || 0x4 || RGBA Single Buttons Color
 
|-
 
|-
| 0x10 || 0x1 || Type2. See [[#HiddbgHdlsDeviceInfo]]::type2.
+
| 0x10 || 0x1 || See [[#HiddbgHdlsDeviceInfo]]::[[#NpadInterfaceType]].
 
|-
 
|-
 
| 0x11 || 0x3 || Padding
 
| 0x11 || 0x3 || Padding
Line 863: Line 945:  
| 0x4 || 0x4 || Padding
 
| 0x4 || 0x4 || Padding
 
|-
 
|-
| 0x8 || 0x400(0x40*0x10) || Array of [[#HdlsStateListEntry]].
+
| 0x8 || <[[#HdlsStateListEntry]] size>*0x10 || Array of [[#HdlsStateListEntry]].
 
|}
 
|}
   −
This is a 0x408-byte struct.
+
This is a 0x408-byte struct. [9.0.0+] This is a 0x488-byte struct.
    
This contains a list of all controllers, including non-virtual controllers.
 
This contains a list of all controllers, including non-virtual controllers.
Line 877: Line 959:  
| 0x0 || 0x8 || HdlsHandle
 
| 0x0 || 0x8 || HdlsHandle
 
|-
 
|-
| 0x8 || 0x10 || [[#HdlsDeviceInfo]]. With [[#ApplyHdlsStateList]] this is only used when creating new devices.
+
| 0x8 || [[#HdlsDeviceInfo]] size || [[#HdlsDeviceInfo]]. With [[#ApplyHdlsStateList]] this is only used when creating new devices.
 
|-
 
|-
| 0x18 || 0x24 || [[#HdlsState]]
+
| 0x8 + [[#HdlsDeviceInfo]] size, with 8-byte alignment || 0x24 || [[#HdlsState]]
 
|-
 
|-
| 0x3C || 0x4 || Padding
+
| <Immediately following the above> || 0x4 || Padding
 
|}
 
|}
   −
This is a 0x40-byte struct.
+
This is a 0x40-byte struct. [9.0.0+] This is a 0x48-byte struct.
    
== HdlsDeviceInfo ==
 
== HdlsDeviceInfo ==
Line 891: Line 973:  
! Offset || Size || Description
 
! Offset || Size || Description
 
|-
 
|-
| 0x0 || 0x4 || Only one bit can be set, see below.
+
| 0x0 || 0x4 || [[#DeviceTypeInternal]]
 
|-
 
|-
 
| 0x4 || 0x4 || RGBA Single Body Color
 
| 0x4 || 0x4 || RGBA Single Body Color
Line 897: Line 979:  
| 0x8 || 0x4 || RGBA Single Buttons Color
 
| 0x8 || 0x4 || RGBA Single Buttons Color
 
|-
 
|-
| 0xC || 0x1 || Additional type field used with the above type field, if the value doesn't match one of the following a default is used. Type Pro-Controller: value 0x3 indicates that the controller is connected via USB. Type bit21: value 0x3 = unknown. When value is 0x2, state is merged with an existing controller (when the type value is compatible with this). Otherwise, it's a dedicated controller.
+
| 0xC || 0x1 || [[#NpadInterfaceType]]. Additional type field used with the above type field, if the value doesn't match one of the following a default is used. Type Pro-Controller: value 0x3 indicates that the controller is connected via USB. Type bit21: value 0x3 = unknown. When value is 0x2, state is merged with an existing controller (when the type value is compatible with this). Otherwise, it's a dedicated controller.
 
|-
 
|-
 
| 0xD || 0x3 || Padding
 
| 0xD || 0x3 || Padding
 
|}
 
|}
   −
This is a 0x10-byte struct.
+
[9.0.0+]:
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset || Size || Description
 +
|-
 +
| 0x0 || 0x1 || [[#DeviceTypeInternal]]
 +
|-
 +
| 0x1 || 0x1 || [[#NpadInterfaceType]]. Similar to the field from the old struct.
 +
|-
 +
| 0x2 || 0x2 || Padding
 +
|-
 +
| 0x4 || 0x4 || RGBA Single Body Color
 +
|-
 +
| 0x8 || 0x4 || RGBA Single Buttons Color
 +
|-
 +
| 0xC || 0x4 || RGBA Unknown Body Color
 +
|-
 +
| 0x10 || 0x4 || RGBA Unknown Buttons Color
 +
|}
 +
 
 +
This is a 0x10-byte struct. [9.0.0+] This is a 0x14-byte struct.
 +
 
 +
== DeviceTypeInternal ==
 +
This is an u32 "nn::hid::detail::DeviceTypeInternal".
 +
 
 +
[9.0.0+] This an u8 "nn::hidtypes::DeviceType".
   −
Bits for the above type field:
+
Bits for "nn::hid::detail::DeviceTypeInternal", only 1 bit can be set:
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 913: Line 1,020:  
| 0-7
 
| 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.
+
| 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
 
| 8-10
 
|  
 
|  
| Pro-Controller
+
| Pro Controller
 
|-
 
|-
 
| 11
 
| 11
 
|  
 
|  
| Famicom-Controller
+
| Famicom left controller
 
|-
 
|-
 
| 12
 
| 12
 
|  
 
|  
| Famicom-Controller II with microphone
+
| Famicom right controller (with microphone)
 
|-
 
|-
 
| 13
 
| 13
 
|  
 
|  
| NES-Controller ([[#DeviceType]]=0x200)
+
| NES left controller
 
|-
 
|-
 
| 14
 
| 14
 
|  
 
|  
| NES-Controller ([[#DeviceType]]=0x400)
+
| NES right controller
 
|-
 
|-
 
| 15-16
 
| 15-16
Line 941: Line 1,048:  
| 17
 
| 17
 
|  
 
|  
| Unknown ([[#DeviceType]]=0x8000)
+
| Generic external controller
 
|-
 
|-
 
| 18-20
 
| 18-20
Line 949: Line 1,056:  
| 21-23
 
| 21-23
 
|  
 
|  
| Unknown ([[#DeviceType]]=0x80000000)
+
| Generic controller
 
|}
 
|}
   −
== HdlsState ==
+
u8 values for "nn::hidtypes::DeviceType", must match one of the these values:
 +
 
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 +
!  Value
 +
!  Description
 +
!  Notes
 
|-
 
|-
! Offset || Size || Description
+
| 1 || JoyRight ||  
 
|-
 
|-
| 0x0 || 0x1 || powerConnected for the main [[HID_Shared_Memory#Controllers|PowerInfo]].
+
| 2 || JoyLeft ||  
 
|-
 
|-
| 0x1 || 0x1 || ORRed with powerConnected to set the value of the first byte for the controller [[HID_Shared_Memory#Flags|flags]].
+
| 3 || FullKey ||  
 
|-
 
|-
| 0x2 || 0x6 || Unknown
+
| 4 || JoyLeft ||  
 
|-
 
|-
| 0x8 || 0x4 || batteryCharge for the main [[HID_Shared_Memory#Controllers|PowerInfo]].
+
| 5 || JoyRight ||  
 
|-
 
|-
| 0xC || 0x4 || [[HID_Shared_Memory#Button_State|Buttons]]. Bit18 = HOME and bit19 = Capture.
+
| 6 || FullKey ||  
 
|-
 
|-
| 0x10 || 0x10(4*2*2) || Joystick data, see [[HID_Shared_Memory#Controller_State]].
+
| 7 || LarkLeft (HVC) ||  
 
|-
 
|-
| 0x20 || 0x1 || Unused for input. Set with output from [[#DumpHdlsStates]] (zero in some cases).
+
| 8 || LarkRight (HVC) ||  
|-
  −
| 0x21 || 0x3 || Padding
  −
|}
  −
 
  −
This is a 0x24-byte struct.
  −
 
  −
= hid:sys =
  −
This is "nn::hid::IHidSystemServer".
  −
 
  −
{| class="wikitable" border="1"
   
|-
 
|-
! Cmd || Name
+
| 9 || LarkLeft (NES) ||  
 
|-
 
|-
| 31 || SendKeyboardLockKeyEvent
+
| 10 || LarkRight (NES) ||  
 
|-
 
|-
| 101 || AcquireHomeButtonEventHandle
+
| 11 || Invalid ||  
 
|-
 
|-
| 111 || ActivateHomeButton
+
| 12 || Palma ||  
 
|-
 
|-
| 121 || AcquireSleepButtonEventHandle
+
| 13 || FullKey ||  
 
|-
 
|-
| 131 || ActivateSleepButton
+
| 14 || Invalid ||  
 
|-
 
|-
| 141 || AcquireCaptureButtonEventHandle
+
| 15 || FullKey ||  
 
|-
 
|-
| 151 || ActivateCaptureButton
+
| 16 || Controller is missing in sharedmem.
 
|-
 
|-
| 161 || [7.0.0+] GetPlatformConfig
+
| 17-18 || Invalid ||  
 
|-
 
|-
| 210 || AcquireNfcDeviceUpdateEventHandle
+
| 19 || [[#DeviceType]] System with [[#NpadStyleTag]] |= NpadFullKey
 
|-
 
|-
| 211 || GetNpadsWithNfc
+
| 20 || [[#DeviceType]] System with [[#NpadStyleTag]] |= NpadJoyDual
 
|-
 
|-
| 212 || AcquireNfcActivateEventHandle
+
| 21 || [[#DeviceType]] System with [[#NpadStyleTag]] |= NpadJoyDual
 +
|}
 +
 
 +
== HdlsState ==
 +
 
 +
Pre-9.0.0:
 +
{| class="wikitable" border="1"
 
|-
 
|-
| 213 || ActivateNfc
+
! Offset || Size || Description
 
|-
 
|-
| 214 || [4.0.0+] GetXcdHandleForNpadWithNfc
+
| 0x0 || 0x1 || powerConnected for the main [[HID_Shared_Memory#Controllers|PowerInfo]].
 
|-
 
|-
| 215 || [4.0.0+] IsNfcActivated
+
| 0x1 || 0x1 || ORRed with powerConnected to set the value of the first byte for the controller [[HID_Shared_Memory#Flags|flags]].
 
|-
 
|-
| 230 || AcquireIrSensorEventHandle
+
| 0x2 || 0x6 || Unknown
 
|-
 
|-
| 231 || ActivateIrSensor
+
| 0x8 || 0x4 || batteryCharge for the main [[HID_Shared_Memory#Controllers|PowerInfo]].
 
|-
 
|-
| 301 || ActivateNpadSystem
+
| 0xC || 0x4 || [[HID_Shared_Memory#Button_State|Buttons]]. Bit18 = HOME and bit19 = Capture.
 
|-
 
|-
| 303 || ApplyNpadSystemCommonPolicy
+
| 0x10 || 0x10(4*2*2) || Joystick data, see [[HID_Shared_Memory#Controller_State]].
 
|-
 
|-
| 304 || EnableAssigningSingleOnSlSrPress
+
| 0x20 || 0x1 || Unused for input. Set with output from [[#DumpHdlsStates]] (zero in some cases).
 
|-
 
|-
| 305 || DisableAssigningSingleOnSlSrPress
+
| 0x21 || 0x3 || Padding
 +
|}
 +
 
 +
[9.0.0+]:
 +
{| class="wikitable" border="1"
 
|-
 
|-
| 306 || GetLastActiveNpad
+
! Offset || Size || Description
 
|-
 
|-
| 307 || GetNpadSystemExtStyle
+
| 0x0 || 0x4 || batteryCharge for the main [[HID_Shared_Memory#Controllers|PowerInfo]].
 
|-
 
|-
| 308 || [5.0.0+] ApplyNpadSystemCommonPolicyFull
+
| 0x4 || 0x4 || Unknown
 +
|-
 +
| 0x8 || 0x8 || [[HID_Shared_Memory#Button_State|Buttons]], masked with 0xfffffffff00fffff. See above table regarding HOME/Capture buttons.
 +
|-
 +
| 0x10 || 0x10(4*2*2) || Joystick data, see [[HID_Shared_Memory#Controller_State]].
 +
|-
 +
| 0x20 || 0x1 || Unused for input. Set with output from [[#DumpHdlsStates]] (zero in some cases).
 +
|-
 +
| 0x21 || 0x3 || Padding
 +
|}
 +
 
 +
This is a 0x24-byte struct.
 +
 
 +
= hid:sys =
 +
This is "nn::hid::IHidSystemServer".
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Cmd || Name
 +
|-
 +
| 31 || SendKeyboardLockKeyEvent
 +
|-
 +
| 101 || AcquireHomeButtonEventHandle
 +
|-
 +
| 111 || ActivateHomeButton
 +
|-
 +
| 121 || AcquireSleepButtonEventHandle
 +
|-
 +
| 131 || ActivateSleepButton
 +
|-
 +
| 141 || AcquireCaptureButtonEventHandle
 +
|-
 +
| 151 || ActivateCaptureButton
 +
|-
 +
| 161 || [7.0.0+] GetPlatformConfig
 +
|-
 +
| 210 || AcquireNfcDeviceUpdateEventHandle
 +
|-
 +
| 211 || GetNpadsWithNfc
 +
|-
 +
| 212 || AcquireNfcActivateEventHandle
 +
|-
 +
| 213 || ActivateNfc
 +
|-
 +
| 214 || [4.0.0+] GetXcdHandleForNpadWithNfc
 +
|-
 +
| 215 || [4.0.0+] IsNfcActivated
 +
|-
 +
| 230 || AcquireIrSensorEventHandle
 +
|-
 +
| 231 || ActivateIrSensor
 +
|-
 +
| 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]]
 +
|-
 +
| 311 || SetNpadPlayerLedBlinkingDevice
 +
|-
 +
| 312 || [6.0.0+] SetSupportedNpadStyleSetAll
 +
|-
 +
| 313 || [9.0.0+] GetNpadCaptureButtonAssignment
 +
|-
 +
| 314 || [9.0.0+] GetAppletFooterUiType
 +
|-
 +
| 315 || [9.0.0+] GetAppletDetailedUiType
 +
|-
 +
| 321 || [3.0.0+] [[#GetUniquePadsFromNpad]]
 +
|-
 +
| 322 || GetIrSensorState
 +
|-
 +
| 323 || GetXcdHandleForNpadWithIrSensor
 +
|-
 +
| 500 || SetAppletResourceUserId
 +
|-
 +
| 501 || RegisterAppletResourceUserId
 +
|-
 +
| 502 || UnregisterAppletResourceUserId
 +
|-
 +
| 503 || EnableAppletToGetInput
 +
|-
 +
| 504 || SetAruidValidForVibration
 +
|-
 +
| 505 || EnableAppletToGetSixAxisSensor
 +
|-
 +
| 510 || [[#SetVibrationMasterVolume]]
 +
|-
 +
| 511 || GetVibrationMasterVolume
 +
|-
 +
| 512 || [3.0.0+] BeginPermitVibrationSession
 +
|-
 +
| 513 || [3.0.0+] EndPermitVibrationSession
 +
|-
 +
| 520 || EnableHandheldHids
 +
|-
 +
| 521 || DisableHandheldHids
 +
|-
 +
| 522 || [9.0.0+] SetJoyConRailEnabled
 +
|-
 +
| 523 || [9.0.0+] IsJoyConRailEnabled
 +
|-
 +
| 540 || AcquirePlayReportControllerUsageUpdateEvent
 +
|-
 +
| 541 || GetPlayReportControllerUsages
 +
|-
 +
| 542 || AcquirePlayReportRegisteredDeviceUpdateEvent
 +
|-
 +
| 543 || GetRegisteredDevicesOld ([1.0.0-4.1.0] GetRegisteredDevices)
 
|-
 
|-
| 309 || [5.0.0+] GetNpadFullKeyGripColor
+
| 544 || [3.0.0+] AcquireConnectionTriggerTimeoutEvent
 
|-
 
|-
| 310 || [6.0.0+] GetMaskedSupportedNpadStyleSet
+
| 545 || [3.0.0+] SendConnectionTrigger
 
|-
 
|-
| 311 || SetNpadPlayerLedBlinkingDevice
+
| 546 || [3.0.0+] AcquireDeviceRegisteredEventForControllerSupport
 
|-
 
|-
| 312 || [6.0.0+] SetSupportedNpadStyleSetAll
+
| 547 || [3.0.0+] GetAllowedBluetoothLinksCount
 
|-
 
|-
| 321 || [3.0.0+] [[#GetUniquePadsFromNpad]]
+
| 548 || [5.0.0+] GetRegisteredDevices
 
|-
 
|-
| 322 || GetIrSensorState
+
| 549 || [6.0.0+] GetConnectableRegisteredDevices
 
|-
 
|-
| 323 || GetXcdHandleForNpadWithIrSensor
+
| 700 || ActivateUniquePad
 
|-
 
|-
| 500 || SetAppletResourceUserId
+
| 702 || AcquireUniquePadConnectionEventHandle
 
|-
 
|-
| 501 || RegisterAppletResourceUserId
+
| 703 || [[#GetUniquePadIds]]
 
|-
 
|-
| 502 || UnregisterAppletResourceUserId
+
| 751 || AcquireJoyDetachOnBluetoothOffEventHandle
 
|-
 
|-
| 503 || EnableAppletToGetInput
+
| 800 || ListSixAxisSensorHandles
 
|-
 
|-
| 504 || SetAruidValidForVibration
+
| 801 || IsSixAxisSensorUserCalibrationSupported
 
|-
 
|-
| 505 || EnableAppletToGetSixAxisSensor
+
| 802 || ResetSixAxisSensorCalibrationValues
 
|-
 
|-
| 510 || [[#SetVibrationMasterVolume]]
+
| 803 || StartSixAxisSensorUserCalibration
 
|-
 
|-
| 511 || GetVibrationMasterVolume
+
| 804 || CancelSixAxisSensorUserCalibration
 
|-
 
|-
| 512 || [3.0.0+] BeginPermitVibrationSession
+
| 805 || [3.0.0+] GetUniquePadBluetoothAddress
 
|-
 
|-
| 513 || [3.0.0+] EndPermitVibrationSession
+
| 806 || [3.0.0+] DisconnectUniquePad
 
|-
 
|-
| 520 || EnableHandheldHids
+
| 807 || [5.0.0+] GetUniquePadType
 
|-
 
|-
| 521 || DisableHandheldHids
+
| 808 || [5.0.0+] GetUniquePadInterface
 
|-
 
|-
| 540 || AcquirePlayReportControllerUsageUpdateEvent
+
| 809 || [5.0.0+] GetUniquePadSerialNumber
 
|-
 
|-
| 541 || GetPlayReportControllerUsages
+
| 810 || [5.0.0+] GetUniquePadControllerNumber
 
|-
 
|-
| 542 || AcquirePlayReportRegisteredDeviceUpdateEvent
+
| 811 || [5.0.0+] GetSixAxisSensorUserCalibrationStage
 
|-
 
|-
| 543 || GetRegisteredDevicesOld ([1.0.0-4.1.0] GetRegisteredDevices)
+
| 812 || [8.0.0+] GetConsoleUniqueSixAxisSensorHandle
 
|-
 
|-
| 544 || [3.0.0+] AcquireConnectionTriggerTimeoutEvent
+
| 821 || StartAnalogStickManualCalibration
 
|-
 
|-
| 545 || [3.0.0+] SendConnectionTrigger
+
| 822 || RetryCurrentAnalogStickManualCalibrationStage
 
|-
 
|-
| 546 || [3.0.0+] AcquireDeviceRegisteredEventForControllerSupport
+
| 823 || CancelAnalogStickManualCalibration
 
|-
 
|-
| 547 || [3.0.0+] GetAllowedBluetoothLinksCount
+
| 824 || ResetAnalogStickManualCalibration
 
|-
 
|-
| 548 || [5.0.0+] GetRegisteredDevices
+
| 825 || [5.0.0+] GetAnalogStickState
 
|-
 
|-
| 549 || [6.0.0+] GetConnectableRegisteredDevices
+
| 826 || [5.0.0+] GetAnalogStickManualCalibrationStage
 
|-
 
|-
| 700 || ActivateUniquePad
+
| 827 || [5.0.0+] IsAnalogStickButtonPressed
 
|-
 
|-
| 702 || AcquireUniquePadConnectionEventHandle
+
| 828 || [5.0.0+] IsAnalogStickInReleasePosition
 
|-
 
|-
| 703 || [[#GetUniquePadIds]]
+
| 829 || [5.0.0+] IsAnalogStickInCircumference
 
|-
 
|-
| 751 || AcquireJoyDetachOnBluetoothOffEventHandle
+
| 830 || [7.0.0+] [[#SetNotificationLedPattern]]
 
|-
 
|-
| 800 || ListSixAxisSensorHandles
+
| 831 || [9.0.0+] [[#SetNotificationLedPatternWithTimeout]]
 
|-
 
|-
| 801 || IsSixAxisSensorUserCalibrationSupported
+
| 832 || [9.0.0+] [[#PrepareHidsForNotificationWake]]
 
|-
 
|-
| 802 || ResetSixAxisSensorCalibrationValues
+
| 850 || [3.0.0+] IsUsbFullKeyControllerEnabled
 
|-
 
|-
| 803 || StartSixAxisSensorUserCalibration
+
| 851 || [3.0.0+] EnableUsbFullKeyController
 
|-
 
|-
| 804 || CancelSixAxisSensorUserCalibration
+
| 852 || [3.0.0+] IsUsbConnected
 
|-
 
|-
| 805 || [3.0.0+] GetUniquePadBluetoothAddress
+
| 870 || [5.1.0+] IsHandheldButtonPressedOnConsoleMode
 
|-
 
|-
| 806 || [3.0.0+] DisconnectUniquePad
+
| 900 || ActivateInputDetector
 
|-
 
|-
| 807 || [5.0.0+] GetUniquePadType
+
| 901 || [[#NotifyInputDetector]]
 
|-
 
|-
| 808 || [5.0.0+] GetUniquePadInterface
+
| 1000 || [3.0.0+] InitializeFirmwareUpdate
 
|-
 
|-
| 809 || [5.0.0+] GetUniquePadSerialNumber
+
| 1001 || [3.0.0+] GetFirmwareVersion
 
|-
 
|-
| 810 || [5.0.0+] GetUniquePadControllerNumber
+
| 1002 || [3.0.0+] GetAvailableFirmwareVersion
 
|-
 
|-
| 811 || [5.0.0+] GetSixAxisSensorUserCalibrationStage
+
| 1003 || [3.0.0+] IsFirmwareUpdateAvailable
 
|-
 
|-
| 812 || [8.0.0+] GetConsoleUniqueSixAxisSensorHandle
+
| 1004 || [3.0.0+] CheckFirmwareUpdateRequired
 
|-
 
|-
| 821 || StartAnalogStickManualCalibration
+
| 1005 || [3.0.0+] StartFirmwareUpdate
 
|-
 
|-
| 822 || RetryCurrentAnalogStickManualCalibrationStage
+
| 1006 || [3.0.0+] AbortFirmwareUpdate
 
|-
 
|-
| 823 || CancelAnalogStickManualCalibration
+
| 1007 || [3.0.0+] GetFirmwareUpdateState
 
|-
 
|-
| 824 || ResetAnalogStickManualCalibration
+
| 1008 || [4.0.0+] ActivateAudioControl
 
|-
 
|-
| 825 || [5.0.0+] GetAnalogStickState
+
| 1009 || [4.0.0+] AcquireAudioControlEventHandle
 
|-
 
|-
| 826 || [5.0.0+] GetAnalogStickManualCalibrationStage
+
| 1010 || [4.0.0+] GetAudioControlStates
 
|-
 
|-
| 827 || [5.0.0+] IsAnalogStickButtonPressed
+
| 1011 || [4.0.0+] DeactivateAudioControl
 
|-
 
|-
| 828 || [5.0.0+] IsAnalogStickInReleasePosition
+
| 1050 || [5.0.0+] IsSixAxisSensorAccurateUserCalibrationSupported
 
|-
 
|-
| 829 || [5.0.0+] IsAnalogStickInCircumference
+
| 1051 || [5.0.0+] StartSixAxisSensorAccurateUserCalibration
 
|-
 
|-
| 830 || [7.0.0+] [[#SetNotificationLedPattern]]
+
| 1052 || [5.0.0+] CancelSixAxisSensorAccurateUserCalibration
 
|-
 
|-
| 850 || [3.0.0+] IsUsbFullKeyControllerEnabled
+
| 1053 || [5.0.0+] GetSixAxisSensorAccurateUserCalibrationState
 
|-
 
|-
| 851 || [3.0.0+] EnableUsbFullKeyController
+
| 1100 || [5.0.0+] [[#GetHidbusSystemServiceObject]]
 
|-
 
|-
| 852 || [3.0.0+] IsUsbConnected
+
| 1120 || [6.0.0+] SetFirmwareHotfixUpdateSkipEnabled
 
|-
 
|-
| 870 || [5.1.0+] IsHandheldButtonPressedOnConsoleMode
+
| 1130 || [6.0.0+] InitializeUsbFirmwareUpdate
 
|-
 
|-
| 900 || ActivateInputDetector
+
| 1131 || [6.0.0+] FinalizeUsbFirmwareUpdate
 
|-
 
|-
| 901 || [[#NotifyInputDetector]]
+
| 1132 || [6.0.0+] CheckUsbFirmwareUpdateRequired
 
|-
 
|-
| 1000 || [3.0.0+] InitializeFirmwareUpdate
+
| 1133 || [6.0.0+] StartUsbFirmwareUpdate
 
|-
 
|-
| 1001 || [3.0.0+] GetFirmwareVersion
+
| 1134 || [6.0.0+] GetUsbFirmwareUpdateState
 
|-
 
|-
| 1002 || [3.0.0+] GetAvailableFirmwareVersion
+
| 1150 || [8.0.0+] SetTouchScreenMagnification
 
|-
 
|-
| 1003 || [3.0.0+] IsFirmwareUpdateAvailable
+
| 1151 || [9.0.0+] GetTouchScreenFirmwareVersion
 
|-
 
|-
| 1004 || [3.0.0+] CheckFirmwareUpdateRequired
+
| 1152 || [9.0.0+] SetTouchScreenDefaultConfiguration
 
|-
 
|-
| 1005 || [3.0.0+] StartFirmwareUpdate
+
| 1153 || [9.0.0+] GetTouchScreenDefaultConfiguration
|-
  −
| 1006 || [3.0.0+] AbortFirmwareUpdate
   
|-
 
|-
| 1007 || [3.0.0+] GetFirmwareUpdateState
+
| 1154 || [9.0.0+] IsFirmwareAvailableForNotification
 
|-
 
|-
| 1008 || [4.0.0+] ActivateAudioControl
+
| 1155 || [9.0.0+] SetForceHandheldStyleVibration
 
|-
 
|-
| 1009 || [4.0.0+] AcquireAudioControlEventHandle
+
| 1156 || [9.0.0+] SendConnectionTriggerWithoutTimeoutEvent
|-
+
|}
| 1010 || [4.0.0+] GetAudioControlStates
+
 
|-
+
== GetMaskedSupportedNpadStyleSet ==
| 1011 || [4.0.0+] DeactivateAudioControl
+
Takes an input u64 AppletResourceUserId, returns an output u32 [[#NpadStyleTag]].
|-
+
 
| 1050 || [5.0.0+] IsSixAxisSensorAccurateUserCalibrationSupported
+
Official sw uses the output from [[Applet_Manager_services|GetAppletResourceUserIdOfCallerApplet]] with this.
|-
+
 
| 1051 || [5.0.0+] StartSixAxisSensorAccurateUserCalibration
  −
|-
  −
| 1052 || [5.0.0+] CancelSixAxisSensorAccurateUserCalibration
  −
|-
  −
| 1053 || [5.0.0+] GetSixAxisSensorAccurateUserCalibrationState
  −
|-
  −
| 1100 || [5.0.0+] [[#GetHidbusSystemServiceObject]]
  −
|-
  −
| 1120 || [6.0.0+] SetFirmwareHotfixUpdateSkipEnabled
  −
|-
  −
| 1130 || [6.0.0+] InitializeUsbFirmwareUpdate
  −
|-
  −
| 1131 || [6.0.0+] FinalizeUsbFirmwareUpdate
  −
|-
  −
| 1132 || [6.0.0+] CheckUsbFirmwareUpdateRequired
  −
|-
  −
| 1133 || [6.0.0+] StartUsbFirmwareUpdate
  −
|-
  −
| 1134 || [6.0.0+] GetUsbFirmwareUpdateState
  −
|-
  −
| 1150 || [8.0.0+] SetTouchScreenMagnification
  −
|}
  −
 
   
== GetUniquePadsFromNpad ==
 
== GetUniquePadsFromNpad ==
Takes an input u32 [[#NpadIdType]], a type-0xA output buffer, and returns an output u64 for total output entries.
+
Takes an input u32 [[#NpadIdType]], a type-0xA output buffer, and returns an output s64 for total output entries (which is copied to a s32 by official sw).
    
The output buffer contains an array of u64 '''UniquePadId'''.
 
The output buffer contains an array of u64 '''UniquePadId'''.
Line 1,211: Line 1,417:     
== GetUniquePadIds ==
 
== GetUniquePadIds ==
Takes a type-0xA output buffer, and returns an output u64 for total output entries.
+
Takes a type-0xA output buffer, and returns an output s64 for total output entries (which is copied to a s32 by official sw).
    
The output buffer contains an array of u64 '''UniquePadId'''.
 
The output buffer contains an array of u64 '''UniquePadId'''.
Line 1,226: Line 1,432:     
This sends subcommand 0x38 to the specified controller, for setting the pattern for the HOME button notification LED. The input structure is converted to the format used by this [https://github.com/dekuNukem/Nintendo_Switch_Reverse_Engineering/blob/master/bluetooth_hid_subcommands_notes.md#subcommand-0x38-set-home-light subcommand].
 
This sends subcommand 0x38 to the specified controller, for setting the pattern for the HOME button notification LED. The input structure is converted to the format used by this [https://github.com/dekuNukem/Nintendo_Switch_Reverse_Engineering/blob/master/bluetooth_hid_subcommands_notes.md#subcommand-0x38-set-home-light subcommand].
 +
 +
== SetNotificationLedPatternWithTimeout ==
 +
Takes an input [[#NotificationLedPattern]], an u64 '''UniquePadId''', and an s64 TimeSpan, no output.
 +
 +
== PrepareHidsForNotificationWake ==
 +
Takes a type-0x9 input buffer containing an array of u64 '''UniquePadId''', no output.
    
== GetHidbusSystemServiceObject ==
 
== GetHidbusSystemServiceObject ==
Line 1,659: Line 1,871:  
This is "nn::ahid::IServerSession".
 
This is "nn::ahid::IServerSession".
   −
Used for USB HID devices.  
+
Used for USB HID devices.
 +
 
 +
This service no longer exists in [9.0.0+].
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 1,665: Line 1,879:  
! Cmd || Name || Notes
 
! Cmd || Name || Notes
 
|-
 
|-
| 0 || || Takes an input s32, no output.
+
| 0 || AcquireDevice || Takes an input s32, no output.
 
|-
 
|-
| 1 || || Takes an input s32, no output.
+
| 1 || ReleaseDevice || Takes an input s32, no output.
 
|-
 
|-
| 2 || || Takes an input u32, returns an [[#ICtrlSession]].
+
| 2 || GetCtrlSession || Takes an input u32, returns an [[#ICtrlSession]].
 
|-
 
|-
| 3 || || Takes an input u32, returns an [[#IReadSession]].
+
| 3 || GetReadSession || Takes an input u32, returns an [[#IReadSession]].
 
|-
 
|-
| [1.0.0-2.3.0] 4 || || Takes an input u32, returns an [[#IWriteSession]].
+
| [1.0.0-2.3.0] 4 || GetWriteSession || Takes an input u32, returns an [[#IWriteSession]].
 
|}
 
|}
    
== ICtrlSession ==
 
== ICtrlSession ==
 
This is "nn::ahid::ICtrlSession".
 
This is "nn::ahid::ICtrlSession".
 +
 +
This no longer exists in [9.0.0+].
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 1,683: Line 1,899:  
! Cmd || Name || Notes
 
! Cmd || Name || Notes
 
|-
 
|-
| 0 || ||  
+
| 0 || GetString ||  
 
|-
 
|-
| 1 || ||  
+
| 1 || GetCodeBook ||  
 
|-
 
|-
| 2 || ||  
+
| 2 || GetReport ||  
 
|-
 
|-
| 3 || ||  
+
| 3 || SetReport ||  
 
|-
 
|-
| 4 || ||  
+
| 4 || GetIdle ||  
 
|-
 
|-
| 5 || ||  
+
| 5 || SetIdle ||  
 
|-
 
|-
| 6 || ||  
+
| 6 || GetProtocol ||  
 
|-
 
|-
| 7 || ||  
+
| 7 || SetProtocol ||  
 
|-
 
|-
| 8 || ||  
+
| 8 || GetDescriptor ||  
 
|-
 
|-
| 9 || ||  
+
| 9 || SetDescriptor ||  
 
|-
 
|-
| 10 || ||  
+
| 10 || GetStateChangeEvent ||  
 
|-
 
|-
| 11 || ||  
+
| 11 || SignalStateChangeEvent ||  
 
|-
 
|-
| 12 || [3.0.0+] ||  
+
| 12 || [3.0.0+] Write ||  
 
|}
 
|}
   Line 1,714: Line 1,930:  
== IReadSession ==
 
== IReadSession ==
 
This is "nn::ahid::IReadSession".
 
This is "nn::ahid::IReadSession".
 +
 +
This no longer exists in [9.0.0+].
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 1,719: Line 1,937:  
! Cmd || Name || Notes
 
! Cmd || Name || Notes
 
|-
 
|-
| 0 || ||  
+
| 0 || Read ||  
 
|}
 
|}
   Line 1,735: Line 1,953:  
! Cmd || Name || Notes
 
! Cmd || Name || Notes
 
|-
 
|-
| 0 || || This is the inverse of [[#IReadSession]] cmd0. Uses the OUTPUT endpoint with an input buffer.
+
| 0 || Write || This is the inverse of [[#IReadSession]] cmd0. Uses the OUTPUT endpoint with an input buffer.
 
|}
 
|}
   Line 1,742: Line 1,960:     
Used internally for USB HID devices.
 
Used internally for USB HID devices.
 +
 +
This service no longer exists in [9.0.0+].
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 1,747: Line 1,967:  
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 0 ||  
+
| 0 || GetDeviceEntries
 
|-
 
|-
| 1 ||  
+
| 1 || GetDeviceList
 
|-
 
|-
| 2 ||  
+
| 2 || GetDeviceParameters
 
|-
 
|-
| 3 ||  
+
| 3 || AttachDevice
 
|-
 
|-
| 4 ||
+
| 4 || DetachDevice
 
|-
 
|-
| 5 || [6.0.0+]
+
| 5 || [6.0.0+] SetDeviceFilter
 
|}
 
|}
   Line 1,859: Line 2,079:     
These are firmware files for the touchscreen controller.
 
These are firmware files for the touchscreen controller.
 +
 +
[9.0.0+] The hid-sysmodule RomFS now contains:
 +
  ftmFwUpdate
 +
    ├── FTS_00120100.fts256
 +
    ├── FTS_32000001.fts256
 +
    ├── FTS_32000102.fts256
 +
    ├── FTS_32000302.fts256
 +
    └── FTS_32000402.fts256
    
= Firmware update =
 
= Firmware update =
Line 1,864: Line 2,092:     
These titles contain the following files:
 
These titles contain the following files:
* '''ExpectVersionInfo.csv''' - List in the format "[device],[type],[version]" where "device" can be "JoyLeft", "JoyRight", "FullKey" or "Palma", "type" can be "BT", "MCU" or "USB" and "version" is the hexadecimal representation of the firmware file's version.
+
* '''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.
 
* '''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.
 
* '''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.
 
* '''ukyosakyo_ep2_ota.bin''' - Left/Right Joy-Con BT firmware.
 
* '''ukyosakyo_ep2_ota.bin''' - Left/Right Joy-Con BT firmware.
Line 1,874: Line 2,102:  
* [6.0.0+] '''ProController.dfu''' - Pro Controller USB firmware.
 
* [6.0.0+] '''ProController.dfu''' - Pro Controller USB firmware.
 
* [6.1.0+] '''PalmaFw.bin''' - Poké Ball Plus BT firmware.
 
* [6.1.0+] '''PalmaFw.bin''' - Poké Ball Plus BT firmware.
 +
* [9.0.0+] '''ExpectVersionInfo-platform.hoag.csv''' - Same as "ExpectVersionInfo.csv" but for the Switch Lite platform.
 +
* [9.0.0+] '''FirmwareInfo-platform.hoag.csv''' - Same as "FirmwareInfo.csv" but for the Switch Lite platform.
 +
* [9.0.0+] '''sioh.bin''' - Switch Lite Joy-Con firmware.
 +
* [9.0.0+] '''sioh_iap.bin''' - Switch Lite Joy-Con (IAP profile) firmware.
    
[[Category:Services]]
 
[[Category:Services]]