Changes

Jump to navigation Jump to search
5,455 bytes added ,  00:08, 21 January 2022
Line 79: Line 79:  
|-
 
|-
 
| 83 || [6.0.0+] [[#IsFirmwareUpdateAvailableForSixAxisSensor]]
 
| 83 || [6.0.0+] [[#IsFirmwareUpdateAvailableForSixAxisSensor]]
 +
|-
 +
| 84 || [13.0.0+] EnableSixAxisSensorUnalteredPassthrough
 +
|-
 +
| 85 || [13.0.0+] IsSixAxisSensorUnalteredPassthroughEnabled
 +
|-
 +
| 86 || [13.0.0+] StoreSixAxisSensorCalibrationParameter
 +
|-
 +
| 87 || [13.0.0+] LoadSixAxisSensorCalibrationParameter
 +
|-
 +
| 88 || [13.0.0+] GetSixAxisSensorIcInformation
 +
|-
 +
| 89 || [13.0.0+] ResetIsSixAxisSensorDeviceNewlyAssigned
 
|-
 
|-
 
| 91 || [[#ActivateGesture]]
 
| 91 || [[#ActivateGesture]]
Line 726: Line 738:     
== GetPalmaOperationInfo ==
 
== GetPalmaOperationInfo ==
Takes a [[#PalmaConnectionHandle]], a type-0x6 output buffer, returns an output u64.
+
Takes a [[#PalmaConnectionHandle]], a type-0x6 output buffer, returns an output u64 [[#PalmaOperationType]].
    
sdknso passes [[#PalmaOperationInfo]]+0x8 size 0x140 for the output buffer. [5.1.0+] After using the cmd successfully, [[#GetPalmaOperationResult]] is used.
 
sdknso passes [[#PalmaOperationInfo]]+0x8 size 0x140 for the output buffer. [5.1.0+] After using the cmd successfully, [[#GetPalmaOperationResult]] is used.
Line 735: Line 747:  
Takes an input [[#PalmaConnectionHandle]], an u64 (exposed by sdknso as an u16), no output.
 
Takes an input [[#PalmaConnectionHandle]], an u64 (exposed by sdknso as an u16), no output.
   −
See [[#hidGetPalmaOperationInfo]].
+
See [[#GetPalmaOperationInfo]].
    
== SetPalmaFrModeType ==
 
== SetPalmaFrModeType ==
 
Takes an input [[#PalmaConnectionHandle]], an u64 [[#PalmaFrModeType]], no output.
 
Takes an input [[#PalmaConnectionHandle]], an u64 [[#PalmaFrModeType]], no output.
   −
See [[#hidGetPalmaOperationInfo]].
+
See [[#GetPalmaOperationInfo]].
    
== ReadPalmaStep ==
 
== ReadPalmaStep ==
 
Takes an input [[#PalmaConnectionHandle]], no output.
 
Takes an input [[#PalmaConnectionHandle]], no output.
   −
See [[#hidGetPalmaOperationInfo]].
+
See [[#GetPalmaOperationInfo]].
    
[[#EnablePalmaStep]] should be used before this.
 
[[#EnablePalmaStep]] should be used before this.
Line 752: Line 764:  
Takes an input bool, a [[#PalmaConnectionHandle]], no output.
 
Takes an input bool, a [[#PalmaConnectionHandle]], no output.
   −
See [[#hidGetPalmaOperationInfo]].
+
See [[#GetPalmaOperationInfo]].
    
== ResetPalmaStep ==
 
== ResetPalmaStep ==
 
Takes an input [[#PalmaConnectionHandle]], no output.
 
Takes an input [[#PalmaConnectionHandle]], no output.
   −
See [[#hidGetPalmaOperationInfo]].
+
See [[#GetPalmaOperationInfo]].
    
== ReadPalmaApplicationSection ==
 
== ReadPalmaApplicationSection ==
Line 764: Line 776:  
sdknso exposes the first u64 as a s32. sdknso will Abort if the input value for the second u64 is >0x100.
 
sdknso exposes the first u64 as a s32. sdknso will Abort if the input value for the second u64 is >0x100.
   −
See [[#hidGetPalmaOperationInfo]].
+
See [[#GetPalmaOperationInfo]].
    
== WritePalmaApplicationSection ==
 
== WritePalmaApplicationSection ==
Line 771: Line 783:  
sdknso exposes the first u64 as a s32. Data is copied from the input [[#PalmaApplicationSectionAccessBuffer]] with the specified size.
 
sdknso exposes the first u64 as a s32. Data is copied from the input [[#PalmaApplicationSectionAccessBuffer]] with the specified size.
   −
See [[#hidGetPalmaOperationInfo]].
+
See [[#GetPalmaOperationInfo]].
    
== ReadPalmaUniqueCode ==
 
== ReadPalmaUniqueCode ==
 
Takes an input [[#PalmaConnectionHandle]], no output.
 
Takes an input [[#PalmaConnectionHandle]], no output.
   −
See [[#hidGetPalmaOperationInfo]].
+
See [[#GetPalmaOperationInfo]].
    
== SetPalmaUniqueCodeInvalid ==
 
== SetPalmaUniqueCodeInvalid ==
 
Takes an input [[#PalmaConnectionHandle]], no output.
 
Takes an input [[#PalmaConnectionHandle]], no output.
   −
See [[#hidGetPalmaOperationInfo]].
+
See [[#GetPalmaOperationInfo]].
    
== WritePalmaActivityEntry ==
 
== WritePalmaActivityEntry ==
Line 788: Line 800:  
sdknso exposes the first u64 as an u16, while the rest are exposed as [[#PalmaActivityEntry]].
 
sdknso exposes the first u64 as an u16, while the rest are exposed as [[#PalmaActivityEntry]].
   −
See [[#hidGetPalmaOperationInfo]].
+
See [[#GetPalmaOperationInfo]].
    
== WritePalmaRgbLedPatternEntry ==
 
== WritePalmaRgbLedPatternEntry ==
Line 795: Line 807:  
sdknso exposes the u64 as an u16.
 
sdknso exposes the u64 as an u16.
   −
See [[#hidGetPalmaOperationInfo]].
+
See [[#GetPalmaOperationInfo]].
    
== WritePalmaWaveEntry ==
 
== WritePalmaWaveEntry ==
Line 804: Line 816:  
Note that the sysmodule will not properly close the TransferMemory handle if the [[#PalmaConnectionHandle]] is invalid.
 
Note that the sysmodule will not properly close the TransferMemory handle if the [[#PalmaConnectionHandle]] is invalid.
   −
See [[#hidGetPalmaOperationInfo]].
+
See [[#GetPalmaOperationInfo]].
    
== SetPalmaDataBaseIdentificationVersion ==
 
== SetPalmaDataBaseIdentificationVersion ==
 
Takes an input s32, a [[#PalmaConnectionHandle]], no output.
 
Takes an input s32, a [[#PalmaConnectionHandle]], no output.
   −
See [[#hidGetPalmaOperationInfo]].
+
See [[#GetPalmaOperationInfo]].
    
== GetPalmaDataBaseIdentificationVersion ==
 
== GetPalmaDataBaseIdentificationVersion ==
 
Takes an input [[#PalmaConnectionHandle]], no output.
 
Takes an input [[#PalmaConnectionHandle]], no output.
   −
See [[#hidGetPalmaOperationInfo]].
+
See [[#GetPalmaOperationInfo]].
    
== SuspendPalmaFeature ==
 
== SuspendPalmaFeature ==
 
Takes an input "nn::util::BitFlagSet<32, [[#PalmaFeature]]>", a [[#PalmaConnectionHandle]], no output.
 
Takes an input "nn::util::BitFlagSet<32, [[#PalmaFeature]]>", a [[#PalmaConnectionHandle]], no output.
   −
See [[#hidGetPalmaOperationInfo]].
+
See [[#GetPalmaOperationInfo]].
    
== GetPalmaOperationResult ==
 
== GetPalmaOperationResult ==
Line 829: Line 841:  
Takes an input u16, a [[#PalmaConnectionHandle]], no output.
 
Takes an input u16, a [[#PalmaConnectionHandle]], no output.
   −
See [[#hidGetPalmaOperationInfo]].
+
See [[#GetPalmaOperationInfo]].
    
== ResetPalmaPlayLog ==
 
== ResetPalmaPlayLog ==
 
Takes an input u16, a [[#PalmaConnectionHandle]], no output.
 
Takes an input u16, a [[#PalmaConnectionHandle]], no output.
   −
See [[#hidGetPalmaOperationInfo]].
+
See [[#GetPalmaOperationInfo]].
    
== SetIsPalmaAllConnectable ==
 
== SetIsPalmaAllConnectable ==
 
Takes a PID, a bool, an [[AM_services|AppletResourceUserId]], no output.
 
Takes a PID, a bool, an [[AM_services|AppletResourceUserId]], no output.
 +
 +
The sysmodule also calls the code which eventually runs from this, from various other funcs internally (bool value varies).
 +
 +
This updates various state. If needed, this uses either [[BTM_services|StartBleScanForGeneral]] or [[BTM_services|StopBleScanForGeneral]].
    
== SetIsPalmaPairedConnectable ==
 
== SetIsPalmaPairedConnectable ==
 
Takes a PID, a bool, an [[AM_services|AppletResourceUserId]], no output.
 
Takes a PID, a bool, an [[AM_services|AppletResourceUserId]], no output.
 +
 +
The actual cmd impl ignores the PID/AppletResourceUserId.
 +
 +
This code is also called by another func internally by the sysmodule, where flag = {whether bit6 in a field is set} (presumably [[#NpadStyleSet]]). This is eventually called from various funcs, including [[#SetSupportedNpadStyleSet]].
 +
 +
This updates various state. If needed, this uses either [[BTM_services|StartBleScanForPairedDevice]] or [[BTM_services|StopBleScanForPairedDevice]].
    
== PairPalma ==
 
== PairPalma ==
 
Takes an input [[#PalmaConnectionHandle]], no output.
 
Takes an input [[#PalmaConnectionHandle]], no output.
 +
 +
This eventually uses [[BTM_services#BlePairDevice|BlePairDevice]] if needed, and updates state.
    
== SetPalmaBoostMode ==
 
== SetPalmaBoostMode ==
Line 931: Line 955:  
|-
 
|-
 
| 14 || [11.0.0+] ProcessTouchScreenAutoTune
 
| 14 || [11.0.0+] ProcessTouchScreenAutoTune
 +
|-
 +
| 15 || [13.0.0+] ForceStopTouchScreenManagement
 +
|-
 +
| 16 || [13.0.0+] ForceRestartTouchScreenManagement
 +
|-
 +
| 17 || [13.0.0+] IsTouchScreenManaged
 
|-
 
|-
 
| 20 || [[#DeactivateMouse]]
 
| 20 || [[#DeactivateMouse]]
Line 1,329: Line 1,359:  
== AttachHdlsWorkBuffer ==
 
== AttachHdlsWorkBuffer ==
 
Takes an input TransferMemory handle and an u64 for the TransferMemory size, no output.
 
Takes an input TransferMemory handle and an u64 for the TransferMemory size, no output.
 +
 +
[13.0.0+] Now additionally returns an output [[#HdlsSessionId]].
    
Official user-processes use TransferMemory size=0x1000 and permissions=RW.
 
Official user-processes use TransferMemory size=0x1000 and permissions=RW.
Line 1,338: Line 1,370:  
== ReleaseHdlsWorkBuffer ==
 
== ReleaseHdlsWorkBuffer ==
 
No input/output.
 
No input/output.
 +
 +
[13.0.0+] Takes an input [[#HdlsSessionId]], no output.
    
== DumpHdlsNpadAssignmentState ==
 
== DumpHdlsNpadAssignmentState ==
 
No input/output.
 
No input/output.
 +
 +
[13.0.0+] Takes an input [[#HdlsSessionId]], no output.
    
After using this cmd, the output [[#HdlsNpadAssignment]] is located at tmem+0.
 
After using this cmd, the output [[#HdlsNpadAssignment]] is located at tmem+0.
Line 1,346: Line 1,382:  
== DumpHdlsStates ==
 
== DumpHdlsStates ==
 
No input/output.
 
No input/output.
 +
 +
[13.0.0+] Takes an input [[#HdlsSessionId]], no output.
    
After using this cmd, the output [[#HdlsStateList]] struct is located at tmem+0.
 
After using this cmd, the output [[#HdlsStateList]] struct is located at tmem+0.
Line 1,351: Line 1,389:  
== ApplyHdlsNpadAssignmentState ==
 
== ApplyHdlsNpadAssignmentState ==
 
Takes an input u8 bool, no output.
 
Takes an input u8 bool, no output.
 +
 +
[13.0.0+] Takes an input bool and a [[#HdlsSessionId]], no output.
    
Prior to using this cmd, the input [[#HdlsNpadAssignment]] is written to tmem+0 by the user-process.
 
Prior to using this cmd, the input [[#HdlsNpadAssignment]] is written to tmem+0 by the user-process.
Line 1,356: Line 1,396:  
== ApplyHdlsStateList ==
 
== ApplyHdlsStateList ==
 
No input/output.
 
No input/output.
 +
 +
[13.0.0+] Takes an input [[#HdlsSessionId]], no output.
    
Prior to using this cmd, the input [[#HdlsStateList]] is written to tmem+0 by the user-process.
 
Prior to using this cmd, the input [[#HdlsStateList]] is written to tmem+0 by the user-process.
Line 1,704: Line 1,746:  
| 1258 || [10.0.0+] [[#IsButtonConfigStorageRightEmpty]]
 
| 1258 || [10.0.0+] [[#IsButtonConfigStorageRightEmpty]]
 
|-
 
|-
| 1259 || [11.0.0+] [[#GetButtonConfigStorageEmbeddedDeprecated]] ([10.0.0-10.2.0] [[#GetButtonConfigStorageEmbeddedDeprecated|GetButtonConfigStorageEmbedded]])
+
| 1259 || [11.0.0-12.1.0] [[#GetButtonConfigStorageEmbeddedDeprecated]] ([10.0.0-10.2.0] [[#GetButtonConfigStorageEmbeddedDeprecated|GetButtonConfigStorageEmbedded]])
 
|-
 
|-
| 1260 || [11.0.0+] [[#GetButtonConfigStorageFullDeprecated]] ([10.0.0-10.2.0] [[#GetButtonConfigStorageFullDeprecated|GetButtonConfigStorageFull]])
+
| 1260 || [11.0.0-12.1.0] [[#GetButtonConfigStorageFullDeprecated]] ([10.0.0-10.2.0] [[#GetButtonConfigStorageFullDeprecated|GetButtonConfigStorageFull]])
 
|-
 
|-
| 1261 || [11.0.0+] [[#GetButtonConfigStorageLeftDeprecated]] ([10.0.0-10.2.0] [[#GetButtonConfigStorageLeftDeprecated|GetButtonConfigStorageLeft]])
+
| 1261 || [11.0.0-12.1.0] [[#GetButtonConfigStorageLeftDeprecated]] ([10.0.0-10.2.0] [[#GetButtonConfigStorageLeftDeprecated|GetButtonConfigStorageLeft]])
 
|-
 
|-
| 1262 || [11.0.0+] [[#GetButtonConfigStorageRightDeprecated]] ([10.0.0-10.2.0] [[#GetButtonConfigStorageRightDeprecated|GetButtonConfigStorageRight]])
+
| 1262 || [11.0.0-12.1.0] [[#GetButtonConfigStorageRightDeprecated]] ([10.0.0-10.2.0] [[#GetButtonConfigStorageRightDeprecated|GetButtonConfigStorageRight]])
 
|-
 
|-
| 1263 || [11.0.0+] [[#SetButtonConfigStorageEmbeddedDeprecated]] ([10.0.0-10.2.0] [[#SetButtonConfigStorageEmbeddedDeprecated|SetButtonConfigStorageEmbedded]])
+
| 1263 || [11.0.0-12.1.0] [[#SetButtonConfigStorageEmbeddedDeprecated]] ([10.0.0-10.2.0] [[#SetButtonConfigStorageEmbeddedDeprecated|SetButtonConfigStorageEmbedded]])
 
|-
 
|-
| 1264 || [11.0.0+] [[#SetButtonConfigStorageFullDeprecated]] ([10.0.0-10.2.0] [[#SetButtonConfigStorageFullDeprecated|SetButtonConfigStorageFull]])
+
| 1264 || [11.0.0-12.1.0] [[#SetButtonConfigStorageFullDeprecated]] ([10.0.0-10.2.0] [[#SetButtonConfigStorageFullDeprecated|SetButtonConfigStorageFull]])
 
|-
 
|-
| 1265 || [11.0.0+] [[#SetButtonConfigStorageLeftDeprecated]] ([10.0.0-10.2.0] [[#SetButtonConfigStorageLeftDeprecated|SetButtonConfigStorageLeft]])
+
| 1265 || [11.0.0-12.1.0] [[#SetButtonConfigStorageLeftDeprecated]] ([10.0.0-10.2.0] [[#SetButtonConfigStorageLeftDeprecated|SetButtonConfigStorageLeft]])
 
|-
 
|-
| 1266 || [11.0.0+] [[#SetButtonConfigStorageRightDeprecated]] ([10.0.0-10.2.0] [[#SetButtonConfigStorageRightDeprecated|SetButtonConfigStorageRight]])
+
| 1266 || [11.0.0-12.1.0] [[#SetButtonConfigStorageRightDeprecated]] ([10.0.0-10.2.0] [[#SetButtonConfigStorageRightDeprecated|SetButtonConfigStorageRight]])
 
|-
 
|-
 
| 1267 || [10.0.0+] [[#DeleteButtonConfigStorageEmbedded]]
 
| 1267 || [10.0.0+] [[#DeleteButtonConfigStorageEmbedded]]
Line 2,772: Line 2,814:  
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 0 || GetDataFormat
+
| 0 || [[#GetDataFormat]]
 
|-
 
|-
| 1 || SetDataFormat
+
| 1 || [[#SetDataFormat]]
 
|-
 
|-
| 2 || GetMcuState
+
| 2 || [[#GetMcuState]]
 
|-
 
|-
| 3 || SetMcuState
+
| 3 || [[#SetMcuState]]
 
|-
 
|-
| 4 || GetMcuVersionForNfc
+
| 4 || [[#GetMcuVersionForNfc]]
 
|-
 
|-
| 5 || CheckNfcDevicePower
+
| 5 || [[#CheckNfcDevicePower]]
 
|-
 
|-
| 6 || [5.0.0+] SetMcuStateImmediate
+
| 6 || [5.0.0+] [[#SetMcuStateImmediate]]
 
|-
 
|-
| 10 || SetNfcEvent
+
| 10 || [[#SetNfcEvent]]
 
|-
 
|-
| 11 || GetNfcInfo
+
| 11 || [[#GetNfcInfo]]
 
|-
 
|-
 
| 12 || StartNfcDiscovery
 
| 12 || StartNfcDiscovery
Line 2,819: Line 2,861:  
[5.0.0+] SetDataFormat, SetMcuState, and ClearMifareKey: now takes a total of 0xC-bytes of input instead of 0x10.
 
[5.0.0+] SetDataFormat, SetMcuState, and ClearMifareKey: now takes a total of 0xC-bytes of input instead of 0x10.
   −
[6.0.0+]: The buffer type used by GetNfcInfo is now 0x32 instead of 0x1A.
+
== GetDataFormat ==
 +
Takes an input 8-byte handle, returns an output u8.
 +
 
 +
== SetDataFormat ==
 +
Takes an input u8 and a 8-byte handle (4-byte alignment), no output.
 +
 
 +
== GetMcuState ==
 +
Takes an input 8-byte handle, returns an output u8.
 +
 
 +
== SetMcuState ==
 +
Takes an input u8 and a 8-byte handle (4-byte alignment), no output.
 +
 
 +
== GetMcuVersionForNfc ==
 +
Takes an input 8-byte handle, returns an output 0x20-byte struct.
 +
 
 +
== CheckNfcDevicePower ==
 +
Takes an input 8-byte handle, no output.
 +
 
 +
== SetMcuStateImmediate ==
 +
Takes an input u8 and a 8-byte handle (4-byte alignment), no output.
 +
 
 +
== SetNfcEvent ==
 +
Takes an input 8-byte handle, returns 2 output Event handles.
 +
 
 +
== GetNfcInfo ==
 +
Takes an input 8-byte handle and a type-0x1A output buffer.
 +
 
 +
[6.0.0+]: The buffer type is now 0x32 instead of 0x1A.
 +
 
 +
This buffer contains a 0x804-byte struct, for the NFC data sent in response to the various other cmds.
    
= hidbus =
 
= hidbus =
Line 4,532: Line 4,603:  
| 0x43EC ([1.0.0-8.1.0] 0x440C)
 
| 0x43EC ([1.0.0-8.1.0] 0x440C)
 
| 0x4
 
| 0x4
|  
+
| [[#NpadLagerType|LagerType]]
 
|}
 
|}
   Line 6,662: Line 6,733:  
|-
 
|-
 
| 29
 
| 29
|  
+
| Verification
 
|-
 
|-
 
| 30
 
| 30
 
| HandheldLeftB (Left B button on NES controllers in Handheld mode)
 
| HandheldLeftB (Left B button on NES controllers in Handheld mode)
 +
|-
 +
| 31
 +
| LagonCLeft (Left C button in N64 controller)
 +
|-
 +
| 32
 +
| LagonCUp (Up C button in N64 controller)
 +
|-
 +
| 33
 +
| LagonCRight (Right C button in N64 controller)
 +
|-
 +
| 34
 +
| LagonCDown (Down C button in N64 controller)
 
|}
 
|}
   Line 6,725: Line 6,808:  
| SNES controller
 
| SNES controller
 
|-
 
|-
| 10-28
+
| 10
 +
| NpadStyleLagon
 +
| N64 controller
 +
|-
 +
| 11
 +
| NpadStyleLager
 +
| Sega Genesis controller
 +
|-
 +
| 12-28
 
| Reserved
 
| Reserved
 
|
 
|
Line 7,038: Line 7,129:  
|-
 
|-
 
| 0x14000000 || Verification
 
| 0x14000000 || Verification
 +
|-
 +
| 0x15000000 || [13.0.0+] Lagon
 
|-
 
|-
 
| 0xFFFFFFFF || Unknown
 
| 0xFFFFFFFF || Unknown
Line 7,090: Line 7,183:  
|-
 
|-
 
| 20 || Verification
 
| 20 || Verification
 +
|-
 +
| 21 || [13.0.0+] Lagon
 
|}
 
|}
   Line 7,156: Line 7,251:  
= NpadLuciaType =
 
= NpadLuciaType =
 
This is "nn::hid::NpadLuciaType".
 
This is "nn::hid::NpadLuciaType".
 +
 +
{| class="wikitable" border="1"
 +
!  Value
 +
!  Description
 +
|-
 +
| 0 || Invalid
 +
|-
 +
| 1 || J
 +
|-
 +
| 2 || E
 +
|-
 +
| 3 || U
 +
|}
 +
 +
= NpadLagerType =
 +
This is "nn::hid::NpadLagerType".
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 7,274: Line 7,385:  
| Lucia
 
| Lucia
 
|-
 
|-
| 16-30
+
| 16
 +
| Lagon
 +
|-
 +
| 17
 +
| Lager
 +
|-
 +
| 18-30
 
| Reserved
 
| Reserved
 
|-
 
|-
Line 7,325: Line 7,442:  
!  [[#DeviceType|DeviceType]]
 
!  [[#DeviceType|DeviceType]]
 
!  [[#UniquePadType|UniquePadType]]
 
!  [[#UniquePadType|UniquePadType]]
 +
!  [[#AppletDetailedUiType|AppletDetailedUiType]]
 
!  Description
 
!  Description
 
|-
 
|-
| 1 || JoyRight, HandheldRight || JoyRight || Joy-Con right controller
+
| 1 || JoyRight, HandheldRight || RightController || JoyDual, JoyRightHorizontal, JoyRightVertical, JoyDualRightOnly, HandheldJoyConRightOnly, HandheldJoyConLeftJoyConRight, HandheldLarkHvc1JoyConRight, HandheldLarkNesLeftJoyConRight, HandheldNone || Joy-Con right controller
 +
|-
 +
| 2 || JoyLeft, HandheldLeft || LeftController || JoyDual, JoyLeftHorizontal, JoyLeftVertical, JoyDualLeftOnly, HandheldJoyConLeftOnly, HandheldJoyConLeftJoyConRight, HandheldJoyConLeftLarkHvc2, HandheldJoyConLeftLarkNesRight, HandheldNone || Joy-Con left controller
 +
|-
 +
| 3 || FullKey || FullKeyController || SwitchProController || Pro Controller
 
|-
 
|-
| 2 || JoyLeft, HandheldLeft || JoyLeft || Joy-Con left controller
+
| 4 || JoyLeft || LeftController || || Reserved
 
|-
 
|-
| 3 || FullKey || FullKey || Pro Controller
+
| 5 || JoyRight || RightController || || Reserved
 
|-
 
|-
| 4 || JoyLeft || JoyLeft || Reserved
+
| 6 || FullKey || FullKeyController || || Reserved
 
|-
 
|-
| 5 || JoyRight || JoyRight || Reserved
+
| 7 || LarkHvcLeft, HandheldLarkHvcLeft || LeftController || LarkHvc1, HandheldLarkHvc1Only, HandheldLarkHvc1JoyConRight, HandheldLarkHvc1LarkHvc2, HandheldLarkHvc1LarkNesRight, HandheldNone || Famicom left controller
 
|-
 
|-
| 6 || FullKey || FullKey || Reserved
+
| 8 || LarkHvcRight, HandheldLarkHvcRight || RightController || LarkHvc2, HandheldLarkHvc2Only, HandheldJoyConLeftLarkHvc2, HandheldLarkHvc1LarkHvc2, HandheldLarkNesLeftLarkHvc2, HandheldNone || Famicom right controller (with microphone)
 
|-
 
|-
| 7 || LarkHvcLeft, HandheldLarkHvcLeft || JoyLeft || Famicom left controller
+
| 9 || LarkNesLeft, HandheldLarkNesLeft || LeftController || LarkNesLeft, HandheldLarkNesLeftOnly, HandheldLarkNesLeftJoyConRight, HandheldLarkNesLeftLarkHvc2, HandheldLarkNesLeftLarkNesRight, HandheldNone || NES left controller
 
|-
 
|-
| 8 || LarkHvcRight, HandheldLarkHvcRight || JoyRight || Famicom right controller (with microphone)
+
| 10 || LarkNesRight, HandheldLarkNesRight || RightController || LarkNesRight, HandheldLarkNesRightOnly, HandheldJoyConLeftLarkNesRight, HandheldLarkHvc1LarkNesRight, HandheldLarkNesLeftLarkNesRight, HandheldNone || NES right controller
 
|-
 
|-
| 9 || LarkNesLeft, HandheldLarkNesLeft || JoyLeft || NES left controller
+
| 11 || Lucia || FullKeyController || LuciaU, LuciaJ, LuciaE || SNES controller
 
|-
 
|-
| 10 || LarkNesRight, HandheldLarkNesRight || JoyRight || NES right controller
+
| 12 || Palma || Embedded || Unknown || Poké Ball Plus controller
 
|-
 
|-
| 11 || Lucia || FullKey || SNES controller
+
| 13 || FullKey || FullKeyController || || Gc controller
 
|-
 
|-
| 12 || Palma || Other || Poké Ball Plus controller
+
| 14 || HandheldLeft || LeftController || || Reserved
 
|-
 
|-
| 13 || FullKey || FullKey || Gc controller
+
| 15 || FullKey || FullKeyController || || Reserved
 
|-
 
|-
| 14 || HandheldLeft || JoyLeft || Reserved
+
| 16 || FullKey || FullKeyController || || Reserved
 
|-
 
|-
| 15 || FullKey || FullKey || Reserved
+
| 17 || DebugPad || DebugPadController || Verification || Debug controller
 
|-
 
|-
| 16 || FullKey || FullKey || Reserved
+
| 18 || HandheldRight || RightController || || Reserved
 
|-
 
|-
| 17 || DebugPad || DebugPad || Debug controller
+
| 19 || System || Embedded || CompatibleProController || Third party Pro Controller
 
|-
 
|-
| 18 || HandheldRight || JoyRight || Reserved
+
| 20 || System || Embedded || CompatibleJoyCon, HandheldNone || Third party Joy-Con right controller
 
|-
 
|-
| 19 || System || Other || Unknown (has [[#NpadStyleTag|NpadFullKey]] style tag)
+
| 21 || System || Embedded || CompatibleJoyCon, HandheldNone || Third party Joy-Con left controller
 
|-
 
|-
| 20 || System || Other || Unknown (has [[#NpadStyleTag|NpadJoyDual]] style tag)
+
| 22 || Lagon || FullKeyController || Lagon || N64 controller
 
|-
 
|-
| 21 || System || Other || Unknown (has [[#NpadStyleTag|NpadJoyDual]] style tag)
+
| 28 || Lager || FullKeyController || || Sega Genesis controller
 
|}
 
|}
   Line 7,608: Line 7,730:  
| 14 || SuspendFeature
 
| 14 || SuspendFeature
 
|-
 
|-
| [[5.1.0]]+ 15 || ReadPlayLog
+
| 15 || [5.1.0+] ReadPlayLog
 
|-
 
|-
| [[5.1.0]]+ 16 || ResetPlayLog
+
| 16 || [5.1.0+] ResetPlayLog
 
|}
 
|}
   Line 7,895: Line 8,017:  
= HdlsHandle =
 
= HdlsHandle =
 
This is "nn::hid::debug::HdlsHandle". This is a 0x8-byte struct with 8-byte alignment.
 
This is "nn::hid::debug::HdlsHandle". This is a 0x8-byte struct with 8-byte alignment.
 +
 +
= HdlsSessionId =
 +
This is "nn::hid::debug::detail::HdlsSessionId". This is a 0x8-byte struct with 8-byte alignment.
    
= HdlsNpadAssignment =
 
= HdlsNpadAssignment =
Line 9,144: Line 9,269:  
* [[Ring-Con]]
 
* [[Ring-Con]]
 
* Famicom right controller (with microphone)
 
* Famicom right controller (with microphone)
 +
** [[#BusType]] is 2, ExternalDeviceId is 0x21. SendAndReceive is not used. EnableJoyPollingReceiveMode is used where the input buffer is an u32 with value 0, [[#JoyPollingMode]] = 2. GetJoyPollingReceivedData is used to get the output data.
 +
* Used by Starlink: Battle For Atlas.
 +
** [[#BusType]] is 1, ExternalDeviceId is 0x28. EnableJoyPollingReceiveMode is used where the input buffer is an u16 with value 0x09, [[#JoyPollingMode]] = 0. SendAndReceive is called from 1 func. GetJoyPollingReceivedData is used to determine whether to call the same func which calls SendAndReceive, which is only done if <code>out_size==0x4 && data[0]==0x09 && (data[1] & 1 == 1)</code>.
    
= RomFS =
 
= RomFS =
Line 9,190: Line 9,318:  
* [10.0.0+] '''TouchScreenConfiguration.csv'''
 
* [10.0.0+] '''TouchScreenConfiguration.csv'''
 
* [10.0.0+] '''TouchScreenFirmwareInfo.csv'''
 
* [10.0.0+] '''TouchScreenFirmwareInfo.csv'''
 +
* [13.0.0+] '''FTS_33000510.fts256'''
 +
* [13.0.0+] '''FTS_98000004.ftb'''
    
[[Category:Services]]
 
[[Category:Services]]

Navigation menu