HID services: Difference between revisions
(45 intermediate revisions by 3 users not shown) | |||
Line 90: | Line 90: | ||
| 102 || [[#SetSupportedNpadIdType]] | | 102 || [[#SetSupportedNpadIdType]] | ||
|- | |- | ||
| 103 || ActivateNpad | | 103 || [[#ActivateNpad]] | ||
|- | |- | ||
| 104 || DeactivateNpad | | 104 || [[#DeactivateNpad]] | ||
|- | |- | ||
| 106 || [[#AcquireNpadStyleSetUpdateEventHandle]] | | 106 || [[#AcquireNpadStyleSetUpdateEventHandle]] | ||
Line 100: | Line 100: | ||
| 108 || GetPlayerLedPattern | | 108 || GetPlayerLedPattern | ||
|- | |- | ||
| 109 || [5.0.0+] ActivateNpadWithRevision | | 109 || [5.0.0+] [[#ActivateNpadWithRevision]] | ||
|- | |- | ||
| 120 || SetNpadJoyHoldType | | 120 || [[#SetNpadJoyHoldType]] | ||
|- | |- | ||
| 121 || GetNpadJoyHoldType | | 121 || [[#GetNpadJoyHoldType]] | ||
|- | |- | ||
| 122 || [[#SetNpadJoyAssignmentModeSingleByDefault]] | | 122 || [[#SetNpadJoyAssignmentModeSingleByDefault]] | ||
Line 160: | Line 160: | ||
| 211 || [7.0.0+] [[#IsVibrationDeviceMounted]] | | 211 || [7.0.0+] [[#IsVibrationDeviceMounted]] | ||
|- | |- | ||
| 300 || [3.0.0+] ActivateConsoleSixAxisSensor | | 300 || [3.0.0+] [[#ActivateConsoleSixAxisSensor]] | ||
|- | |- | ||
| 301 || [3.0.0+] StartConsoleSixAxisSensor | | 301 || [3.0.0+] StartConsoleSixAxisSensor | ||
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 274: | Line 282: | ||
The input buffer contains an array of u32 [[#NpadIdType]]. | The input buffer contains an array of u32 [[#NpadIdType]]. | ||
== ActivateNpad == | |||
Takes a PID-descriptor and an [[AM_services|AppletResourceUserId]]. No output. | |||
On newer sysvers this runs the same code as [[#ActivateNpadWithRevision]], with revision=0. | |||
== DeactivateNpad == | |||
Takes a PID-descriptor and an [[AM_services|AppletResourceUserId]]. No output. | |||
This just returns 0. | |||
== 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. | ||
== ActivateNpadWithRevision == | |||
Takes a PID-descriptor, a s32 revision, and an [[AM_services|AppletResourceUserId]]. No output. | |||
Revisions: | |||
* 0x0: Initial [[#ActivateNpad|revision]], pre-5.0.0. | |||
* 0x1: [5.0.0+] | |||
* 0x2: [6.0.0+] | |||
* 0x3: [8.0.0+] | |||
== SetNpadJoyHoldType == | |||
Takes a PID-descriptor, a s64, and an [[AM_services|AppletResourceUserId]]. No output. | |||
== GetNpadJoyHoldType == | |||
Takes a PID-descriptor and an [[AM_services|AppletResourceUserId]]. Returns an output s64. | |||
== SetNpadJoyAssignmentModeSingleByDefault == | == SetNpadJoyAssignmentModeSingleByDefault == | ||
Line 321: | Line 354: | ||
== IsVibrationDeviceMounted == | == IsVibrationDeviceMounted == | ||
Takes a | Takes a PID, an [[#VibrationDeviceHandle]], and an u64 [[AM_services|AppletResourceUserId]], returns an output u8 bool. | ||
== ActivateConsoleSixAxisSensor == | |||
Takes a PID and an u64 [[AM_services|AppletResourceUserId]], no output. | |||
== ActivateSevenSixAxisSensor == | == ActivateSevenSixAxisSensor == | ||
Takes a PID and an u64 [[AM_services|AppletResourceUserId]], no output. | Takes a PID and an u64 [[AM_services|AppletResourceUserId]], no output. | ||
Unused by official sw, [[#ActivateConsoleSixAxisSensor]] is used instead. However, internally ActivateSevenSixAxisSensor is identical to [[#ActivateConsoleSixAxisSensor]]. Deactivation is done with hiddbg DeactivateConsoleSixAxisSensor. | |||
== StartSevenSixAxisSensor == | == StartSevenSixAxisSensor == | ||
Line 348: | Line 386: | ||
== 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 472: | ||
| 9 | | 9 | ||
| NpadLucia | | NpadLucia | ||
| | | SNES controller. | ||
|- | |- | ||
| 10-28 | | 10-28 | ||
Line 450: | Line 493: | ||
== 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 529: | ||
|- | |- | ||
| 12 || UnsetTouchScreenAutoPilotState | | 12 || UnsetTouchScreenAutoPilotState | ||
|- | |||
| 13 || [9.0.0+] GetTouchScreenConfiguration | |||
|- | |- | ||
| 20 || DeactivateMouse | | 20 || DeactivateMouse | ||
Line 488: | Line 550: | ||
| 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 642: | ||
| 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 | ||
|- | |- | ||
| 228 || [6.0.0+] AcquireOperationEventHandle | | 228 || [6.0.0+] [[#AcquireOperationEventHandle]] | ||
|- | |- | ||
| 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]] | ||
|- | |- | ||
| 232 || [6.0.0+] EnableShipmentMode | | 232 || [6.0.0+] EnableShipmentMode | ||
Line 596: | Line 660: | ||
| 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 | ||
|- | |- | ||
| | | 236 || [9.0.0+] RequestKuinaUartClockCal | ||
|- | |||
| 237 || [9.0.0+] GetKuinaUartClockCal | |||
|- | |||
| 238 || [9.0.0+] SetKuinaUartClockTrim | |||
|- | |||
| 239 || [9.0.0+] KuinaLoopbackTest | |||
|- | |||
| 240 || [9.0.0+] RequestBatteryVoltage | |||
|- | |||
| 241 || [9.0.0+] GetBatteryVoltage | |||
|- | |- | ||
| | | 242 || [9.0.0+] GetUniquePadPowerInfo | ||
|- | |- | ||
| | | 243 || [9.0.0+] RebootUniquePad | ||
|- | |- | ||
| | | 244 || [9.0.0+] RequestKuinaFirmwareVersion | ||
|- | |- | ||
| 322 || [5.0.0 | | 245 || [9.0.0+] GetKuinaFirmwareVersion | ||
|- | |||
| 246 || [9.0.0+] GetVidPid | |||
|- | |||
| 301 || [5.0.0-8.1.0] [[#GetAbstractedPadHandles]] | |||
|- | |||
| 302 || [5.0.0-8.1.0] [[#GetAbstractedPadState]] | |||
|- | |||
| 303 || [5.0.0-8.1.0] [[#GetAbstractedPadsState]] | |||
|- | |||
| 321 || [5.0.0-8.1.0] [[#SetAutoPilotVirtualPadState]] | |||
|- | |||
| 322 || [5.0.0-8.1.0] [[#UnsetAutoPilotVirtualPadState]] | |||
|- | |- | ||
| 323 || [5.0.0+] [[#UnsetAllAutoPilotVirtualPadState]] | | 323 || [5.0.0+] [[#UnsetAllAutoPilotVirtualPadState]] | ||
Line 639: | Line 725: | ||
|- | |- | ||
| 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 766: | ||
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. | |||
== AcquireOperationEventHandle == | |||
Takes an input u64 '''UniquePadId''', returns an output Event handle. The EventClearMode used by official sw is user-specified. | |||
This is not used internally by sdk-nso besides exposing it to the user. With the sdk-nso for [9.0.0+] the wrapper funcs for this was removed (sdk-nso still has the actual cmd). | |||
This must be used before [[#ReadSerialFlash]]/[[#WriteSerialFlash]]. Afterwards, this Event is used to wait for the async operation started by [[#ReadSerialFlash]]/[[#WriteSerialFlash]] to finish. After waiting on the Event, [[#GetOperationResult]] should be used. | |||
== ReadSerialFlash == | == ReadSerialFlash == | ||
Line 680: | Line 789: | ||
Reads from the specified controller's spi-flash. The input size is the original size without page-alignment. The TransferMemory permissions is RW-. | Reads from the specified controller's spi-flash. The input size is the original size without page-alignment. The TransferMemory permissions is RW-. | ||
See also [[#AcquireOperationEventHandle]]. | |||
With the sdk-nso for [9.0.0+] the wrapper funcs for this was removed (sdk-nso still has the actual cmd). | |||
== | == WriteSerialFlash == | ||
Takes | 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--. | |||
== GetAbstractedPadState == | See also [[#AcquireOperationEventHandle]]. | ||
Takes an input u64 '''AbstractedPadHandle''', returns an output [[#AbstractedPadState]]. | |||
With the sdk-nso for [9.0.0+] the wrapper funcs for this was removed (sdk-nso still has the actual cmd). | |||
== GetOperationResult == | |||
Takes an input u64 '''UniquePadId''', no output. | |||
Get the Result for the Operation and handles cleanup, for the specified controller. | |||
This is not used internally by sdk-nso besides exposing it to the user. With the sdk-nso for [9.0.0+] the wrapper funcs for this was removed (sdk-nso still has the actual cmd). | |||
== GetUniquePadDeviceTypeSetInternal == | |||
Takes an input u64 '''UniquePadId''', returns an [[#DeviceTypeInternal]]. | |||
== GetAbstractedPadHandles == | |||
Takes a type-0xA output buffer containing an array of u64 '''AbstractedPadHandle''' and returns an output s32 for total entries. | |||
Returns a handle for each controller detected by the system. | |||
== GetAbstractedPadState == | |||
Takes an input u64 '''AbstractedPadHandle''', returns an output [[#AbstractedPadState]]. | |||
== GetAbstractedPadsState == | == GetAbstractedPadsState == | ||
Line 748: | Line 878: | ||
== 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 896: | ||
| 0xC || 0x4 || RGBA Single Buttons Color | | 0xC || 0x4 || RGBA Single Buttons Color | ||
|- | |- | ||
| 0x10 || 0x1 || | | 0x10 || 0x1 || See [[#HiddbgHdlsDeviceInfo]]::[[#NpadInterfaceType]]. | ||
|- | |- | ||
| 0x11 || 0x3 || Padding | | 0x11 || 0x3 || Padding | ||
Line 863: | Line 995: | ||
| 0x4 || 0x4 || Padding | | 0x4 || 0x4 || Padding | ||
|- | |- | ||
| 0x8 || | | 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 1,009: | ||
| 0x0 || 0x8 || HdlsHandle | | 0x0 || 0x8 || HdlsHandle | ||
|- | |- | ||
| 0x8 || | | 0x8 || [[#HdlsDeviceInfo]] size || [[#HdlsDeviceInfo]]. With [[#ApplyHdlsStateList]] this is only used when creating new devices. | ||
|- | |- | ||
| | | 0x8 + [[#HdlsDeviceInfo]] size, with 8-byte alignment || 0x24 || [[#HdlsState]] | ||
|- | |- | ||
| | | <Immediately following the above> || 0x4 || Padding | ||
|} | |} | ||
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 1,023: | ||
! Offset || Size || Description | ! Offset || Size || Description | ||
|- | |- | ||
| 0x0 || 0x4 || | | 0x0 || 0x4 || [[#DeviceTypeInternal]] | ||
|- | |- | ||
| 0x4 || 0x4 || RGBA Single Body Color | | 0x4 || 0x4 || RGBA Single Body Color | ||
Line 897: | Line 1,029: | ||
| 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 | ||
|} | |} | ||
[9.0.0+]: | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
| | ! Offset || Size || Description | ||
| | |- | ||
| | | 0x0 || 0x1 || [[#DeviceTypeInternal]] | ||
|- | |- | ||
| | | 0x1 || 0x1 || [[#NpadInterfaceType]]. Similar to the field from the old struct. | ||
| | |||
| | |||
|- | |- | ||
| 11 | | 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 "nn::hid::detail::DeviceTypeInternal", only 1 bit can be set: | |||
{| class="wikitable" border="1" | |||
! Bits | |||
! Description | |||
! Notes | |||
|- | |||
| 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 | | Famicom left controller | ||
Line 952: | Line 1,109: | ||
|} | |} | ||
== HdlsState == | u8 values for "nn::hidtypes::DeviceType", must match one of the these values: | ||
{| class="wikitable" border="1" | |||
! Value | |||
! Description | |||
! Notes | |||
|- | |||
| 1 || JoyRight || | |||
|- | |||
| 2 || JoyLeft || | |||
|- | |||
| 3 || FullKey || | |||
|- | |||
| 4 || JoyLeft || | |||
|- | |||
| 5 || JoyRight || | |||
|- | |||
| 6 || FullKey || | |||
|- | |||
| 7 || LarkLeft (HVC) || | |||
|- | |||
| 8 || LarkRight (HVC) || | |||
|- | |||
| 9 || LarkLeft (NES) || | |||
|- | |||
| 10 || LarkRight (NES) || | |||
|- | |||
| 11 || Invalid || | |||
|- | |||
| 12 || Palma || | |||
|- | |||
| 13 || FullKey || | |||
|- | |||
| 14 || Invalid || | |||
|- | |||
| 15 || FullKey || | |||
|- | |||
| 16 || Controller is missing in sharedmem. | |||
|- | |||
| 17-18 || Invalid || | |||
|- | |||
| 19 || [[#DeviceType]] System with [[#NpadStyleTag]] |= NpadFullKey | |||
|- | |||
| 20 || [[#DeviceType]] System with [[#NpadStyleTag]] |= NpadJoyDual | |||
|- | |||
| 21 || [[#DeviceType]] System with [[#NpadStyleTag]] |= NpadJoyDual | |||
|} | |||
== HdlsState == | |||
Pre-9.0.0: | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 974: | Line 1,181: | ||
|} | |} | ||
This is a 0x24-byte struct. | [9.0.0+]: | ||
{| class="wikitable" border="1" | |||
|- | |||
! Offset || Size || Description | |||
|- | |||
| 0x0 || 0x4 || batteryCharge for the main [[HID_Shared_Memory#Controllers|PowerInfo]]. | |||
|- | |||
| 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 = | = hid:sys = | ||
This is "nn::hid::IHidSystemServer". | This is "nn::hid::IHidSystemServer". | ||
Line 1,036: | Line 1,261: | ||
|- | |- | ||
| 312 || [6.0.0+] SetSupportedNpadStyleSetAll | | 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]] | | 321 || [3.0.0+] [[#GetUniquePadsFromNpad]] | ||
Line 1,066: | Line 1,297: | ||
|- | |- | ||
| 521 || DisableHandheldHids | | 521 || DisableHandheldHids | ||
|- | |||
| 522 || [9.0.0+] SetJoyConRailEnabled | |||
|- | |||
| 523 || [9.0.0+] IsJoyConRailEnabled | |||
|- | |- | ||
| 540 || AcquirePlayReportControllerUsageUpdateEvent | | 540 || AcquirePlayReportControllerUsageUpdateEvent | ||
Line 1,140: | Line 1,375: | ||
|- | |- | ||
| 830 || [7.0.0+] [[#SetNotificationLedPattern]] | | 830 || [7.0.0+] [[#SetNotificationLedPattern]] | ||
|- | |||
| 831 || [9.0.0+] [[#SetNotificationLedPatternWithTimeout]] | |||
|- | |||
| 832 || [9.0.0+] [[#PrepareHidsForNotificationWake]] | |||
|- | |- | ||
| 850 || [3.0.0+] IsUsbFullKeyControllerEnabled | | 850 || [3.0.0+] IsUsbFullKeyControllerEnabled | ||
Line 1,200: | Line 1,439: | ||
|- | |- | ||
| 1150 || [8.0.0+] SetTouchScreenMagnification | | 1150 || [8.0.0+] SetTouchScreenMagnification | ||
|- | |||
| 1151 || [9.0.0+] GetTouchScreenFirmwareVersion | |||
|- | |||
| 1152 || [9.0.0+] SetTouchScreenDefaultConfiguration | |||
|- | |||
| 1153 || [9.0.0+] GetTouchScreenDefaultConfiguration | |||
|- | |||
| 1154 || [9.0.0+] IsFirmwareAvailableForNotification | |||
|- | |||
| 1155 || [9.0.0+] SetForceHandheldStyleVibration | |||
|- | |||
| 1156 || [9.0.0+] SendConnectionTriggerWithoutTimeoutEvent | |||
|} | |} | ||
Line 1,208: | Line 1,459: | ||
== GetUniquePadsFromNpad == | == GetUniquePadsFromNpad == | ||
Takes an input u32 [[#NpadIdType]], a type-0xA output buffer, and returns an output | 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,216: | Line 1,467: | ||
== GetUniquePadIds == | == GetUniquePadIds == | ||
Takes a type-0xA output buffer, and returns an output | 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,231: | Line 1,482: | ||
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]. | ||
[9.0.0+] This runs code similar to [[#SetNotificationLedPatternWithTimeout]], except it passes the following param values to an internal func: flag=1 and TimeSpan=0 (with [[#SetNotificationLedPatternWithTimeout]] these are flag=0 and TimeSpan={input value}). | |||
== 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,490: | Line 1,749: | ||
! Cmd || Name | ! Cmd || Name | ||
|- | |- | ||
| 500 || | | 500 || SetAppletResourceUserId | ||
|- | |- | ||
| 501 || | | 501 || RegisterAppletResourceUserId | ||
|- | |- | ||
| 502 || | | 502 || UnregisterAppletResourceUserId | ||
|} | |} | ||
Line 1,664: | Line 1,923: | ||
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" | ||
|- | |- | ||
! Cmd || Name | ! Cmd || Name | ||
|- | |- | ||
| 0 || AcquireDevice | | 0 || [[#AcquireDevice]] | ||
|- | |- | ||
| 1 || ReleaseDevice | | 1 || [[#ReleaseDevice]] | ||
|- | |- | ||
| 2 || | | 2 || [[#GetCtrlSession]] | ||
|- | |- | ||
| 3 || | | 3 || [[#GetReadSession]] | ||
|- | |- | ||
| [1.0.0-2.3.0] | | 4 || [1.0.0-2.3.0] [[#GetWriteSession]] | ||
|} | |} | ||
== AcquireDevice == | |||
Takes an input s32, no output. | |||
== ReleaseDevice == | |||
Takes an input s32, no output. | |||
== GetCtrlSession == | |||
Takes an input u32, returns an [[#ICtrlSession]]. | |||
== GetReadSession == | |||
Takes an input u32, returns an [[#IReadSession]]. | |||
== 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" | ||
|- | |- | ||
! Cmd || Name | ! Cmd || Name | ||
|- | |- | ||
| 0 || GetString | | 0 || GetString | ||
|- | |- | ||
| 1 || GetCodeBook | | 1 || GetCodeBook | ||
|- | |- | ||
| 2 || GetReport | | 2 || GetReport | ||
|- | |- | ||
| 3 || SetReport | | 3 || SetReport | ||
|- | |- | ||
| 4 || GetIdle | | 4 || GetIdle | ||
|- | |- | ||
| 5 || SetIdle | | 5 || SetIdle | ||
|- | |- | ||
| 6 || GetProtocol | | 6 || GetProtocol | ||
|- | |- | ||
| 7 || SetProtocol | | 7 || SetProtocol | ||
|- | |- | ||
| 8 || GetDescriptor | | 8 || GetDescriptor | ||
|- | |- | ||
| 9 || SetDescriptor | | 9 || SetDescriptor | ||
|- | |- | ||
| 10 || GetStateChangeEvent | | 10 || GetStateChangeEvent | ||
|- | |- | ||
| 11 || SignalStateChangeEvent | | 11 || SignalStateChangeEvent | ||
|- | |- | ||
| 12 || [3.0.0+] Write | | 12 || [3.0.0+] Write | ||
|} | |} | ||
All of these use USB [[USB_services|CtrlXfer]], except for | All of these use USB [[USB_services|CtrlXfer]], except for GetStateChangeEvent and SignalStateChangeEvent, and GetCodeBook which copies 0x4000-bytes from state to output. | ||
== 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" | ||
|- | |- | ||
! Cmd || Name | ! Cmd || Name | ||
|- | |- | ||
| 0 || Read | | 0 || [[#Read]] | ||
|} | |} | ||
=== Read === | |||
Uses [[USB_services|PostBufferAsync]] etc with the INPUT endpoint. The size must be <=0x1000. The actual transfer size is returned in an output u64. The data is copied from the tmpbuf to the output buffer using the actual-transfer-size. | |||
[3.0.0+] | [3.0.0+] Now takes a total of 8-bytes of input. | ||
== IWriteSession == | == IWriteSession == | ||
Line 1,738: | Line 2,019: | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! Cmd || Name | ! Cmd || Name | ||
|- | |- | ||
| 0 || | | 0 || [[#Write]] | ||
|} | |} | ||
=== Write === | |||
This is the inverse of [[#IReadSession]] cmd0. Uses the OUTPUT endpoint with an input buffer. | |||
= ahid:hdr = | = ahid:hdr = | ||
Line 1,747: | Line 2,031: | ||
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,784: | Line 2,070: | ||
| 5 || CheckNfcDevicePower | | 5 || CheckNfcDevicePower | ||
|- | |- | ||
| 6 || [5.0.0+] | | 6 || [5.0.0+] SetMcuStateImmediate | ||
|- | |- | ||
| 10 || SetNfcEvent | | 10 || SetNfcEvent | ||
Line 1,850: | Line 2,136: | ||
| 12 || DisableJoyPollingReceiveMode | | 12 || DisableJoyPollingReceiveMode | ||
|- | |- | ||
| [5.0.0-6.2.0] | | 13 || [5.0.0-6.2.0] GetPollingData | ||
|- | |- | ||
| 14 || [6.0.0+] SetStatusManagerType | | 14 || [6.0.0+] SetStatusManagerType | ||
Line 1,877: | Line 2,163: | ||
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 " | * '''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,887: | Line 2,173: | ||
* [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]] |