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]] |