HID services: Difference between revisions
(27 intermediate revisions by 3 users not shown) | |||
Line 265: | Line 265: | ||
== SetSupportedNpadStyleSet == | == SetSupportedNpadStyleSet == | ||
Takes an u32 [[#NpadStyleTag]]. | Takes a PID-descriptor, an u32 [[#NpadStyleTag]], and an u64 [[AM_services|AppletResourceUserId]], no output. | ||
== GetSupportedNpadStyleSet == | == GetSupportedNpadStyleSet == | ||
Takes a PID-descriptor and an u64 [[AM_services|AppletResourceUserId]], returns an u32 [[#NpadStyleTag]]. | |||
== SetSupportedNpadIdType == | == SetSupportedNpadIdType == | ||
Line 421: | Line 421: | ||
| 7 | | 7 | ||
| NpadLark | | NpadLark | ||
| NES controller. | | NES/Famicom controller. | ||
|- | |- | ||
| 8 | | 8 | ||
| NpadHandheldLark | | NpadHandheldLark | ||
| NES controller in handheld mode. | | NES/Famicom controller in handheld mode. | ||
|- | |- | ||
| 9-28 | | 9 | ||
| NpadLucia | |||
| Unknown. | |||
|- | |||
| 10-28 | |||
| Reserved | | Reserved | ||
| | | | ||
Line 433: | Line 437: | ||
| 29 | | 29 | ||
| NpadSystemExt | | NpadSystemExt | ||
| | | Generic external controller. | ||
|- | |- | ||
| 30 | | 30 | ||
| NpadSystem | | NpadSystem | ||
| | | Generic controller. | ||
|- | |- | ||
| 31 | | 31 | ||
Line 582: | Line 586: | ||
| 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 | ||
Line 596: | Line 600: | ||
| 235 || [7.0.0+] EnableAnalogStickPower | | 235 || [7.0.0+] EnableAnalogStickPower | ||
|- | |- | ||
| 301 || [5.0.0+] GetAbstractedPadHandles | | 301 || [5.0.0+] [[#GetAbstractedPadHandles]] | ||
|- | |- | ||
| 302 || [5.0.0+] GetAbstractedPadState | | 302 || [5.0.0+] [[#GetAbstractedPadState]] | ||
|- | |- | ||
| 303 || [5.0.0+] GetAbstractedPadsState | | 303 || [5.0.0+] [[#GetAbstractedPadsState]] | ||
|- | |- | ||
| 321 || [5.0.0+] SetAutoPilotVirtualPadState | | 321 || [5.0.0+] [[#SetAutoPilotVirtualPadState]] | ||
|- | |- | ||
| 322 || [5.0.0+] UnsetAutoPilotVirtualPadState | | 322 || [5.0.0+] [[#UnsetAutoPilotVirtualPadState]] | ||
|- | |- | ||
| 323 || [5.0.0+] UnsetAllAutoPilotVirtualPadState | | 323 || [5.0.0+] [[#UnsetAllAutoPilotVirtualPadState]] | ||
|- | |- | ||
| 324 || [7.0.0+] [[#AttachHdlsWorkBuffer]] | | 324 || [7.0.0+] [[#AttachHdlsWorkBuffer]] | ||
Line 670: | Line 674: | ||
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. | ||
== ReadSerialFlash == | |||
Takes an input TransferMemory handle, an input u32 offset, an input u64 size, and an u64 '''UniquePadId''', no output. | |||
Reads from the specified controller's spi-flash. The input size is the original size without page-alignment. The TransferMemory permissions is RW-. | |||
This doesn't seem to be usable? | |||
== 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 == | |||
Takes a type-0xA output buffer containing an array of u64 '''AbstractedPadHandle''', a type-0x22 output buffer containing an array of [[#AbstractedPadState]], and returns an output s32 for total entries. | |||
== SetAutoPilotVirtualPadState == | |||
Takes an input s8 '''AbstractedVirtualPadId''' and an input [[#AbstractedPadState]], no output. | |||
== UnsetAutoPilotVirtualPadState == | |||
Takes an input s8 '''AbstractedVirtualPadId''', no output. | |||
Clears AutoPilot state for the specified pad. | |||
== UnsetAllAutoPilotVirtualPadState == | |||
No input/output. | |||
Same as [[#UnsetAutoPilotVirtualPadState]] except this clears state for every pad. | |||
== AttachHdlsWorkBuffer == | == AttachHdlsWorkBuffer == | ||
Line 713: | Line 748: | ||
== 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. | ||
== AbstractedPadState == | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset || Size || Description | |||
|- | |||
| 0x0 || 0x4 || Type, only 1 bit can be set. Converted to [[#HdlsDeviceInfo]]::type internally by [[#SetAutoPilotVirtualPadState]]. | |||
|- | |||
| 0x4 || 0x1 || Flags. [[#SetAutoPilotVirtualPadState]] only uses bit0: when clear it will skip using the rest of the input and run [[#UnsetAutoPilotVirtualPadState]] internally. | |||
|- | |||
| 0x5 || 0x3 || Padding | |||
|- | |||
| 0x8 || 0x4 || RGBA Single Body Color | |||
|- | |||
| 0xC || 0x4 || RGBA Single Buttons Color | |||
|- | |||
| 0x10 || 0x1 || Type2. See [[#HiddbgHdlsDeviceInfo]]::type2. | |||
|- | |||
| 0x11 || 0x3 || Padding | |||
|- | |||
| 0x14 || 0x24 || [[#HdlsState]]. Unknown if the last 4-bytes are included in this struct, [[#SetAutoPilotVirtualPadState]]/[[#hiddbgGetAbstractedPadsState]] only uses the first 0x20-bytes. | |||
|- | |||
| 0x38 || 0x60 || Unused with [[#SetAutoPilotVirtualPadState]]/[[#GetAbstractedPadsState]]. | |||
|} | |||
Normally the input state is merged with an existing controller selected by Type. However in some cases (BIT(2-5) with type2!=0x2 and BIT(31)) it's detected as a dedicated controller. | |||
Type: | |||
{| class="wikitable" border="1" | |||
! Bits | |||
! [[#HdlsDeviceInfo]]::type bits | |||
! Description | |||
! Notes | |||
|- | |||
| 0 || 0 || || | |||
|- | |||
| 1 || 15 || || [[#DeviceType]] |= BIT(1) | |||
|- | |||
| 2 || 1 || || | |||
|- | |||
| 3 || 2 || || | |||
|- | |||
| 4 || 1 || || | |||
|- | |||
| 5 || 2 || || | |||
|- | |||
| 6 || 3 || || | |||
|- | |||
| 7 || 11 || || [[#DeviceType]] |= BIT(11) | |||
|- | |||
| 8 || 12 || || [[#DeviceType]] |= BIT(12) | |||
|- | |||
| 9 || 13 || || [[#DeviceType]] |= BIT(13) | |||
|- | |||
| 10 || 14 || || [[#DeviceType]] |= BIT(14) | |||
|- | |||
| 11 || 15 || || [[#DeviceType]] |= BIT(11) | |||
|- | |||
| 12 || 12 || || [[#DeviceType]] |= BIT(12) | |||
|- | |||
| 13 || 13 || || [[#DeviceType]] |= BIT(13) | |||
|- | |||
| 14 || 14 || || [[#DeviceType]] |= BIT(14) | |||
|- | |||
| 15 || 17 || || | |||
|- | |||
| 31 || 21 || || [[#DeviceType]] = BIT(31) | |||
|- | |||
|} | |||
The above "[[#DeviceType]] |=" notes only apply when type2 is 0x2. | |||
== HdlsNpadAssignment == | == HdlsNpadAssignment == | ||
This is a 0x208-byte struct. This | {| class="wikitable" border="1" | ||
|- | |||
! Offset || Size || Description | |||
|- | |||
| 0x0 || 0x4 || s32 Total entries | |||
|- | |||
| 0x4 || 0x4 || Padding | |||
|- | |||
| 0x8 || 0x200(0x20*0x10) || Array of [[#HdlsNpadAssignmentEntry]]. | |||
|} | |||
This is a 0x208-byte struct. | |||
=== HdlsNpadAssignmentEntry === | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset || Size || Description | |||
|- | |||
| 0x0 || 0x8 || HdlsHandle | |||
|- | |||
| 0x8 || 0x4 || ? | |||
|- | |||
| 0xC || 0x4 || ? | |||
|- | |||
| 0x10 || 0x8 || ? | |||
|- | |||
| 0x18 || 0x1 || ? | |||
|- | |||
| 0x19 || 0x7 || Padding | |||
|} | |||
This is a 0x20-byte struct. | |||
== HdlsStateList == | == HdlsStateList == | ||
Line 722: | Line 859: | ||
! Offset || Size || Description | ! Offset || Size || Description | ||
|- | |- | ||
| 0x0 || 0x4 || Total entries | | 0x0 || 0x4 || s32 Total entries | ||
|- | |- | ||
| 0x4 || 0x4 || Padding | | 0x4 || 0x4 || Padding | ||
Line 754: | Line 891: | ||
! Offset || Size || Description | ! Offset || Size || Description | ||
|- | |- | ||
| 0x0 || 0x4 || | | 0x0 || 0x4 || Only one bit can be set, see below. | ||
|- | |- | ||
| 0x4 || 0x4 || RGBA Single Body Color | | 0x4 || 0x4 || RGBA Single Body Color | ||
Line 760: | Line 897: | ||
| 0x8 || 0x4 || RGBA Single Buttons Color | | 0x8 || 0x4 || RGBA Single Buttons Color | ||
|- | |- | ||
| 0xC || 0x1 || | | 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. | ||
|- | |- | ||
| 0xD || 0x3 || Padding | | 0xD || 0x3 || Padding | ||
Line 766: | Line 903: | ||
This is a 0x10-byte struct. | This is a 0x10-byte struct. | ||
Bits for the above type field: | |||
{| 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 | |||
|- | |||
| 12 | |||
| | |||
| Famicom right controller (with microphone) | |||
|- | |||
| 13 | |||
| | |||
| NES left controller | |||
|- | |||
| 14 | |||
| | |||
| NES right controller | |||
|- | |||
| 15-16 | |||
| | |||
| Invalid | |||
|- | |||
| 17 | |||
| | |||
| Generic external controller | |||
|- | |||
| 18-20 | |||
| | |||
| Invalid | |||
|- | |||
| 21-23 | |||
| | |||
| Generic controller | |||
|} | |||
== HdlsState == | == HdlsState == | ||
Line 772: | Line 957: | ||
! Offset || Size || Description | ! Offset || Size || Description | ||
|- | |- | ||
| 0x0 || | | 0x0 || 0x1 || powerConnected for the main [[HID_Shared_Memory#Controllers|PowerInfo]]. | ||
|- | |||
| 0x1 || 0x1 || ORRed with powerConnected to set the value of the first byte for the controller [[HID_Shared_Memory#Flags|flags]]. | |||
|- | |||
| 0x2 || 0x6 || Unknown | |||
|- | |- | ||
| 0x8 || 0x4 || batteryCharge for the main [[HID_Shared_Memory#Controllers|PowerInfo]]. | | 0x8 || 0x4 || batteryCharge for the main [[HID_Shared_Memory#Controllers|PowerInfo]]. | ||
|- | |- | ||
| 0xC || 0x4 || Buttons | | 0xC || 0x4 || [[HID_Shared_Memory#Button_State|Buttons]]. Bit18 = HOME and bit19 = Capture. | ||
|- | |- | ||
| 0x10 || 0x10(4*2*2) || Joystick data, see [[HID_Shared_Memory#Controller_State]]. | | 0x10 || 0x10(4*2*2) || Joystick data, see [[HID_Shared_Memory#Controller_State]]. | ||
|- | |- | ||
| 0x20 || | | 0x20 || 0x1 || Unused for input. Set with output from [[#DumpHdlsStates]] (zero in some cases). | ||
|- | |||
| 0x21 || 0x3 || Padding | |||
|} | |} | ||
Line 840: | Line 1,031: | ||
| 309 || [5.0.0+] GetNpadFullKeyGripColor | | 309 || [5.0.0+] GetNpadFullKeyGripColor | ||
|- | |- | ||
| 310 || [6.0.0+] GetMaskedSupportedNpadStyleSet | | 310 || [6.0.0+] [[#GetMaskedSupportedNpadStyleSet]] | ||
|- | |- | ||
| 311 || SetNpadPlayerLedBlinkingDevice | | 311 || SetNpadPlayerLedBlinkingDevice | ||
Line 1,010: | Line 1,201: | ||
| 1150 || [8.0.0+] SetTouchScreenMagnification | | 1150 || [8.0.0+] SetTouchScreenMagnification | ||
|} | |} | ||
== GetMaskedSupportedNpadStyleSet == | |||
Takes an input u64 AppletResourceUserId, returns an output u32 [[#NpadStyleTag]]. | |||
Official sw uses the output from [[Applet_Manager_services|GetAppletResourceUserIdOfCallerApplet]] with this. | |||
== GetUniquePadsFromNpad == | == GetUniquePadsFromNpad == | ||
Line 1,214: | Line 1,410: | ||
|- | |- | ||
| 0x35 || 0x1 || Set to value 1. | | 0x35 || 0x1 || Set to value 1. | ||
|} | |||
== DeviceType == | |||
This is a bitmask describing the controller device type. | |||
{| class="wikitable" border="1" | |||
! Bits | |||
! Description | |||
! Notes | |||
|- | |||
| 0 | |||
| FullKey | |||
| Pro Controller and Gc controller. | |||
|- | |||
| 1 | |||
| | |||
| Unknown | |||
|- | |||
| 2 | |||
| HandheldLeft | |||
| Joy-Con/Famicom/NES left controller in handheld mode. | |||
|- | |||
| 3 | |||
| HandheldRight | |||
| Joy-Con/Famicom/NES right controller in handheld mode. | |||
|- | |||
| 4 | |||
| JoyLeft | |||
| Joy-Con left controller. | |||
|- | |||
| 5 | |||
| JoyRight | |||
| Joy-Con right controller. | |||
|- | |||
| 6 | |||
| Palma | |||
| Poké Ball Plus controller. | |||
|- | |||
| 7 | |||
| LarkLeft (HVC) | |||
| Famicom left controller. | |||
|- | |||
| 8 | |||
| LarkRight (HVC) | |||
| Famicom right controller (with microphone). | |||
|- | |||
| 9 | |||
| LarkLeft (NES) | |||
| NES left controller. | |||
|- | |||
| 10 | |||
| LarkRight (NES) | |||
| NES right controller. | |||
|- | |||
| 11-14 | |||
| | |||
| Reserved | |||
|- | |||
| 15 | |||
| SystemExt | |||
| Generic external controller. | |||
|- | |||
| 16-30 | |||
| | |||
| Reserved | |||
|- | |||
| 31 | |||
| System | |||
| Generic controller. | |||
|} | |} | ||
Line 1,320: | Line 1,585: | ||
== GetNpadIrCameraHandle == | == GetNpadIrCameraHandle == | ||
Takes an input u32. Returns an output [[#IrCameraHandle]]. | Takes an input u32 NpadTypeId. Returns an output [[#IrCameraHandle]]. | ||
== RunPointingProcessor == | == RunPointingProcessor == | ||
Line 1,596: | Line 1,861: | ||
├── NTD_4CD_2602.fts256 | ├── NTD_4CD_2602.fts256 | ||
├── NTD_4CD_3801.fts256 | ├── NTD_4CD_3801.fts256 | ||
└── NTD_4CD_xxxx.fts256 | └── NTD_4CD_xxxx.fts256 [7.0.0+] | ||
These are firmware files for the touchscreen controller. | These are firmware files for the touchscreen controller. | ||
= Firmware update = | = Firmware update = | ||
HID-sysmodule mounts the contents of title [[Title_list|0100000000000822]] as "systemData" or the contents of title [[Title_list|010000000000B22B]] as "systemDataD". Both titles contain the same files, but [[Title_list|0100000000000822]] is used on retail units while [[Title_list|010000000000B22B]] is used for development. | |||
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. | |||
* '''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. | |||
* '''raizo_ep2_ota.bin''' - Pro Controller BT firmware. | |||
* '''tera_ota.bin''' - Right Joy-Con MCU firmware. | |||
* '''tera_ota_iap.bin''' - Right Joy-Con MCU (IAP profile) firmware. | |||
* '''tera_fullkey_ota.bin''' - Pro Controller MCU firmware. | |||
* '''tera_fullkey_ota_iap.bin''' - Pro Controller MCU (IAP profile) firmware. | |||
* [6.0.0+] '''ProController.dfu''' - Pro Controller USB firmware. | |||
* [6.1.0+] '''PalmaFw.bin''' - Poké Ball Plus BT firmware. | |||
[[Category:Services]] | [[Category:Services]] |