Difference between revisions of "HID services"
Jump to navigation
Jump to search
(359 intermediate revisions by 6 users not shown) | |||
Line 1: | Line 1: | ||
− | |||
− | |||
= hid = | = hid = | ||
This is "nn::hid::IHidServer". | This is "nn::hid::IHidServer". | ||
Line 10: | Line 8: | ||
| 0 || [[#CreateAppletResource]] | | 0 || [[#CreateAppletResource]] | ||
|- | |- | ||
− | | 1 || ActivateDebugPad | + | | 1 || [[#ActivateDebugPad]] |
|- | |- | ||
− | | 11 || ActivateTouchScreen | + | | 11 || [[#ActivateTouchScreen]] |
|- | |- | ||
− | | 21 || ActivateMouse | + | | 21 || [[#ActivateMouse]] |
|- | |- | ||
− | | 31 || ActivateKeyboard | + | | 31 || [[#ActivateKeyboard]] |
|- | |- | ||
− | | 32 || [6.0.0+] SendKeyboardLockKeyEvent | + | | 32 || [6.0.0+] [[#SendKeyboardLockKeyEvent]] |
|- | |- | ||
− | | 40 || AcquireXpadIdEventHandle | + | | 40 || [[#AcquireXpadIdEventHandle]] |
|- | |- | ||
− | | 41 || ReleaseXpadIdEventHandle | + | | 41 || [[#ReleaseXpadIdEventHandle]] |
|- | |- | ||
− | | 51 || ActivateXpad | + | | 51 || [[#ActivateXpad]] |
|- | |- | ||
− | | 55 || GetXpadIds | + | | 55 || [[#GetXpadIds]] |
|- | |- | ||
− | | 56 || ActivateJoyXpad | + | | 56 || [[#ActivateJoyXpad]] |
|- | |- | ||
− | | 58 || GetJoyXpadLifoHandle | + | | 58 || [[#GetJoyXpadLifoHandle]] |
|- | |- | ||
− | | 59 || GetJoyXpadIds | + | | 59 || [[#GetJoyXpadIds]] |
|- | |- | ||
− | | 60 || ActivateSixAxisSensor | + | | 60 || [[#ActivateSixAxisSensor]] |
|- | |- | ||
− | | 61 || DeactivateSixAxisSensor | + | | 61 || [[#DeactivateSixAxisSensor]] |
|- | |- | ||
− | | 62 || GetSixAxisSensorLifoHandle | + | | 62 || [[#GetSixAxisSensorLifoHandle]] |
|- | |- | ||
− | | 63 || ActivateJoySixAxisSensor | + | | 63 || [[#ActivateJoySixAxisSensor]] |
|- | |- | ||
− | | 64 || DeactivateJoySixAxisSensor | + | | 64 || [[#DeactivateJoySixAxisSensor]] |
|- | |- | ||
− | | 65 || GetJoySixAxisSensorLifoHandle | + | | 65 || [[#GetJoySixAxisSensorLifoHandle]] |
|- | |- | ||
− | | 66 || StartSixAxisSensor | + | | 66 || [[#StartSixAxisSensor]] |
|- | |- | ||
− | | 67 || StopSixAxisSensor | + | | 67 || [[#StopSixAxisSensor]] |
|- | |- | ||
− | | 68 || IsSixAxisSensorFusionEnabled | + | | 68 || [[#IsSixAxisSensorFusionEnabled]] |
|- | |- | ||
− | | 69 || EnableSixAxisSensorFusion | + | | 69 || [[#EnableSixAxisSensorFusion]] |
|- | |- | ||
− | | 70 || SetSixAxisSensorFusionParameters | + | | 70 || [[#SetSixAxisSensorFusionParameters]] |
|- | |- | ||
− | | 71 || GetSixAxisSensorFusionParameters | + | | 71 || [[#GetSixAxisSensorFusionParameters]] |
|- | |- | ||
− | | 72 || ResetSixAxisSensorFusionParameters | + | | 72 || [[#ResetSixAxisSensorFusionParameters]] |
|- | |- | ||
− | | 73 || SetAccelerometerParameters | + | | 73 || [[#SetAccelerometerParameters]] |
|- | |- | ||
− | | 74 || GetAccelerometerParameters | + | | 74 || [[#GetAccelerometerParameters]] |
|- | |- | ||
− | | 75 || ResetAccelerometerParameters | + | | 75 || [[#ResetAccelerometerParameters]] |
|- | |- | ||
− | | 76 || SetAccelerometerPlayMode | + | | 76 || [[#SetAccelerometerPlayMode]] |
|- | |- | ||
− | | 77 || GetAccelerometerPlayMode | + | | 77 || [[#GetAccelerometerPlayMode]] |
|- | |- | ||
− | | 78 || ResetAccelerometerPlayMode | + | | 78 || [[#ResetAccelerometerPlayMode]] |
|- | |- | ||
− | | 79 || SetGyroscopeZeroDriftMode | + | | 79 || [[#SetGyroscopeZeroDriftMode]] |
|- | |- | ||
− | | 80 || GetGyroscopeZeroDriftMode | + | | 80 || [[#GetGyroscopeZeroDriftMode]] |
|- | |- | ||
− | | 81 || ResetGyroscopeZeroDriftMode | + | | 81 || [[#ResetGyroscopeZeroDriftMode]] |
|- | |- | ||
− | | 82 || IsSixAxisSensorAtRest | + | | 82 || [[#IsSixAxisSensorAtRest]] |
|- | |- | ||
− | | 83 || [6.0.0+] IsFirmwareUpdateAvailableForSixAxisSensor | + | | 83 || [6.0.0+] [[#IsFirmwareUpdateAvailableForSixAxisSensor]] |
|- | |- | ||
− | | 91 || ActivateGesture | + | | 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]] | ||
|- | |- | ||
| 100 || [[#SetSupportedNpadStyleSet]] | | 100 || [[#SetSupportedNpadStyleSet]] | ||
Line 90: | Line 100: | ||
| 102 || [[#SetSupportedNpadIdType]] | | 102 || [[#SetSupportedNpadIdType]] | ||
|- | |- | ||
− | | 103 || ActivateNpad | + | | 103 || [[#ActivateNpad]] |
|- | |- | ||
− | | 104 || DeactivateNpad | + | | 104 || [[#DeactivateNpad]] |
|- | |- | ||
| 106 || [[#AcquireNpadStyleSetUpdateEventHandle]] | | 106 || [[#AcquireNpadStyleSetUpdateEventHandle]] | ||
|- | |- | ||
− | | 107 || DisconnectNpad | + | | 107 || [[#DisconnectNpad]] |
|- | |- | ||
− | | 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 114: | Line 124: | ||
| 125 || [[#MergeSingleJoyAsDualJoy]] | | 125 || [[#MergeSingleJoyAsDualJoy]] | ||
|- | |- | ||
− | | 126 || StartLrAssignmentMode | + | | 126 || [[#StartLrAssignmentMode]] |
|- | |- | ||
− | | 127 || StopLrAssignmentMode | + | | 127 || [[#StopLrAssignmentMode]] |
|- | |- | ||
− | | 128 || SetNpadHandheldActivationMode | + | | 128 || [[#SetNpadHandheldActivationMode]] |
|- | |- | ||
| 129 || [[#GetNpadHandheldActivationMode]] | | 129 || [[#GetNpadHandheldActivationMode]] | ||
|- | |- | ||
− | | 130 || SwapNpadAssignment | + | | 130 || [[#SwapNpadAssignment]] |
|- | |- | ||
− | | 131 || IsUnintendedHomeButtonInputProtectionEnabled | + | | 131 || [[#IsUnintendedHomeButtonInputProtectionEnabled]] |
|- | |- | ||
− | | 132 || EnableUnintendedHomeButtonInputProtection | + | | 132 || [[#EnableUnintendedHomeButtonInputProtection]] |
|- | |- | ||
− | | 133 || [5.0.0+] SetNpadJoyAssignmentModeSingleWithDestination | + | | 133 || [5.0.0+] [[#SetNpadJoyAssignmentModeSingleWithDestination]] |
|- | |- | ||
− | | 134 || [6.1.0+] SetNpadAnalogStickUseCenterClamp | + | | 134 || [6.1.0+] [[#SetNpadAnalogStickUseCenterClamp]] |
|- | |- | ||
− | | 135 || [8.0.0+] SetNpadCaptureButtonAssignment | + | | 135 || [8.0.0+] [[#SetNpadCaptureButtonAssignment]] |
|- | |- | ||
− | | 136 || [8.0.0+] ClearNpadCaptureButtonAssignment | + | | 136 || [8.0.0+] [[#ClearNpadCaptureButtonAssignment]] |
|- | |- | ||
| 200 || [[#GetVibrationDeviceInfo]] | | 200 || [[#GetVibrationDeviceInfo]] | ||
Line 150: | Line 160: | ||
| 206 || [[#SendVibrationValues]] | | 206 || [[#SendVibrationValues]] | ||
|- | |- | ||
− | | 207 || [4.0.0+] SendVibrationGcErmCommand | + | | 207 || [4.0.0+] [[#SendVibrationGcErmCommand]] |
|- | |- | ||
− | | 208 || [4.0.0+] GetActualVibrationGcErmCommand | + | | 208 || [4.0.0+] [[#GetActualVibrationGcErmCommand]] |
|- | |- | ||
− | | 209 || [4.0.0+] BeginPermitVibrationSession | + | | 209 || [4.0.0+] [[#BeginPermitVibrationSession]] |
|- | |- | ||
− | | 210 || [4.0.0+] EndPermitVibrationSession | + | | 210 || [4.0.0+] [[#EndPermitVibrationSession]] |
|- | |- | ||
| 211 || [7.0.0+] [[#IsVibrationDeviceMounted]] | | 211 || [7.0.0+] [[#IsVibrationDeviceMounted]] | ||
|- | |- | ||
− | | 300 || ActivateConsoleSixAxisSensor | + | | 212 || [11.0.0+] [[#SendVibrationValueInBool]] |
+ | |- | ||
+ | | 300 || [3.0.0+] [[#ActivateConsoleSixAxisSensor]] | ||
|- | |- | ||
− | | 301 || StartConsoleSixAxisSensor | + | | 301 || [3.0.0+] [[#StartConsoleSixAxisSensor]] |
|- | |- | ||
− | | 302 || StopConsoleSixAxisSensor | + | | 302 || [3.0.0+] [[#StopConsoleSixAxisSensor]] |
|- | |- | ||
| 303 || [5.0.0+] [[#ActivateSevenSixAxisSensor]] | | 303 || [5.0.0+] [[#ActivateSevenSixAxisSensor]] | ||
Line 176: | Line 188: | ||
| 307 || [5.0.0+] [[#FinalizeSevenSixAxisSensor]] | | 307 || [5.0.0+] [[#FinalizeSevenSixAxisSensor]] | ||
|- | |- | ||
− | | 308 || [5.0.0+] SetSevenSixAxisSensorFusionStrength | + | | 308 || [5.0.0+] [[#SetSevenSixAxisSensorFusionStrength]] |
|- | |- | ||
− | | 309 || [5.0.0+] GetSevenSixAxisSensorFusionStrength | + | | 309 || [5.0.0+] [[#GetSevenSixAxisSensorFusionStrength]] |
|- | |- | ||
| 310 || [6.0.0+] [[#ResetSevenSixAxisSensorTimestamp]] | | 310 || [6.0.0+] [[#ResetSevenSixAxisSensorTimestamp]] | ||
|- | |- | ||
− | | 400 || IsUsbFullKeyControllerEnabled | + | | 400 || [3.0.0+] [[#IsUsbFullKeyControllerEnabled]] |
+ | |- | ||
+ | | 401 || [3.0.0+] [[#EnableUsbFullKeyController]] | ||
+ | |- | ||
+ | | 402 || [3.0.0+] [[#IsUsbFullKeyControllerConnected]] | ||
|- | |- | ||
− | | | + | | 403 || [4.0.0+] [[#HasBattery]] |
|- | |- | ||
− | | | + | | 404 || [4.0.0+] [[#HasLeftRightBattery]] |
|- | |- | ||
− | | | + | | 405 || [4.0.0+] [[#GetNpadInterfaceType]] |
|- | |- | ||
− | | | + | | 406 || [4.0.0+] [[#GetNpadLeftRightInterfaceType]] |
|- | |- | ||
− | | | + | | 407 || [10.0.0+] [[#GetNpadOfHighestBatteryLevel]] ([9.0.0+] GetNpadOfHighestBatteryLevelForJoyLeft) |
|- | |- | ||
− | | | + | | 408 || [9.0.0-9.2.0] GetNpadOfHighestBatteryLevelForJoyRight |
|- | |- | ||
− | | 500 || [5.0.0+] GetPalmaConnectionHandle | + | | 500 || [5.0.0+] [[#GetPalmaConnectionHandle]] |
|- | |- | ||
− | | 501 || [5.0.0+] InitializePalma | + | | 501 || [5.0.0+] [[#InitializePalma]] |
|- | |- | ||
− | | 502 || [5.0.0+] AcquirePalmaOperationCompleteEvent | + | | 502 || [5.0.0+] [[#AcquirePalmaOperationCompleteEvent]] |
|- | |- | ||
− | | 503 || [5.0.0+] GetPalmaOperationInfo | + | | 503 || [5.0.0+] [[#GetPalmaOperationInfo]] |
|- | |- | ||
− | | 504 || [5.0.0+] PlayPalmaActivity | + | | 504 || [5.0.0+] [[#PlayPalmaActivity]] |
|- | |- | ||
− | | 505 || [5.0.0+] SetPalmaFrModeType | + | | 505 || [5.0.0+] [[#SetPalmaFrModeType]] |
|- | |- | ||
− | | 506 || [5.0.0+] ReadPalmaStep | + | | 506 || [5.0.0+] [[#ReadPalmaStep]] |
|- | |- | ||
− | | 507 || [5.0.0+] EnablePalmaStep | + | | 507 || [5.0.0+] [[#EnablePalmaStep]] |
|- | |- | ||
− | | 508 || [5.0.0+] ResetPalmaStep | + | | 508 || [5.0.0+] [[#ResetPalmaStep]] |
|- | |- | ||
− | | 509 || [5.0.0+] ReadPalmaApplicationSection | + | | 509 || [5.0.0+] [[#ReadPalmaApplicationSection]] |
|- | |- | ||
− | | 510 || [5.0.0+] WritePalmaApplicationSection | + | | 510 || [5.0.0+] [[#WritePalmaApplicationSection]] |
|- | |- | ||
− | | 511 || [5.0.0+] ReadPalmaUniqueCode | + | | 511 || [5.0.0+] [[#ReadPalmaUniqueCode]] |
|- | |- | ||
− | | 512 || [5.0.0+] SetPalmaUniqueCodeInvalid | + | | 512 || [5.0.0+] [[#SetPalmaUniqueCodeInvalid]] |
|- | |- | ||
− | | 513 || [5.0.0+] WritePalmaActivityEntry | + | | 513 || [5.0.0+] [[#WritePalmaActivityEntry]] |
|- | |- | ||
− | | 514 || [5.0.0+] WritePalmaRgbLedPatternEntry | + | | 514 || [5.0.0+] [[#WritePalmaRgbLedPatternEntry]] |
|- | |- | ||
− | | 515 || [5.0.0+] WritePalmaWaveEntry | + | | 515 || [5.0.0+] [[#WritePalmaWaveEntry]] |
|- | |- | ||
− | | 516 || [5.0.0+] SetPalmaDataBaseIdentificationVersion | + | | 516 || [5.0.0+] [[#SetPalmaDataBaseIdentificationVersion]] |
|- | |- | ||
− | | 517 || [5.0.0+] GetPalmaDataBaseIdentificationVersion | + | | 517 || [5.0.0+] [[#GetPalmaDataBaseIdentificationVersion]] |
|- | |- | ||
− | | 518 || [5.0.0+] SuspendPalmaFeature | + | | 518 || [5.0.0+] [[#SuspendPalmaFeature]] |
|- | |- | ||
− | | 519 || [5.1.0+] GetPalmaOperationResult | + | | 519 || [5.1.0+] [[#GetPalmaOperationResult]] |
|- | |- | ||
− | | 520 || [5.1.0+] ReadPalmaPlayLog | + | | 520 || [5.1.0+] [[#ReadPalmaPlayLog]] |
|- | |- | ||
− | | 521 || [5.1.0+] ResetPalmaPlayLog | + | | 521 || [5.1.0+] [[#ResetPalmaPlayLog]] |
|- | |- | ||
− | | 522 || [5.1.0+] SetIsPalmaAllConnectable | + | | 522 || [5.1.0+] [[#SetIsPalmaAllConnectable]] |
|- | |- | ||
− | | 523 || [5.1.0+] SetIsPalmaPairedConnectable | + | | 523 || [5.1.0+] [[#SetIsPalmaPairedConnectable]] |
|- | |- | ||
− | | 524 || [5.1.0+] PairPalma | + | | 524 || [5.1.0+] [[#PairPalma]] |
|- | |- | ||
− | | 525 || [5.1.0+] SetPalmaBoostMode | + | | 525 || [5.1.0+] [[#SetPalmaBoostMode]] |
|- | |- | ||
− | | 526 || [7.0.0+] CancelWritePalmaWaveEntry | + | | 526 || [7.0.0+] [[#CancelWritePalmaWaveEntry]] |
|- | |- | ||
− | | 527 || [8.0.0+] EnablePalmaBoostMode | + | | 527 || [8.0.0+] [[#EnablePalmaBoostMode]] |
|- | |- | ||
− | | 528 || [8.0.0+] GetPalmaBluetoothAddress | + | | 528 || [8.0.0+] [[#GetPalmaBluetoothAddress]] |
|- | |- | ||
− | | 529 || [8.0.0+] SetDisallowedPalmaConnection | + | | 529 || [8.0.0+] [[#SetDisallowedPalmaConnection]] |
|- | |- | ||
− | | 1000 || SetNpadCommunicationMode | + | | 1000 || [[#SetNpadCommunicationMode]] |
|- | |- | ||
− | | 1001 || GetNpadCommunicationMode | + | | 1001 || [[#GetNpadCommunicationMode]] |
+ | |- | ||
+ | | 1002 || [9.0.0+] [[#SetTouchScreenConfiguration]] | ||
+ | |- | ||
+ | | 1003 || [9.0.0+] [[#IsFirmwareUpdateNeededForNotification]] | ||
+ | |- | ||
+ | | 2000 || [10.0.0+] [[#ActivateDigitizer]] | ||
|} | |} | ||
Line 264: | Line 286: | ||
Takes a PID and an u64 [[AM_services|AppletResourceUserId]]. Returns an [[#IAppletResource]]. | Takes a PID and an u64 [[AM_services|AppletResourceUserId]]. Returns an [[#IAppletResource]]. | ||
− | == | + | == ActivateDebugPad == |
− | Takes an | + | Takes a PID and an [[AM_services|AppletResourceUserId]], no output. |
− | == | + | == ActivateTouchScreen == |
− | + | Takes a PID and an [[AM_services|AppletResourceUserId]], no output. | |
− | == | + | == ActivateMouse == |
− | Takes a PID | + | Takes a PID and an [[AM_services|AppletResourceUserId]], no output. |
− | + | == ActivateKeyboard == | |
+ | Takes a PID and an [[AM_services|AppletResourceUserId]], no output. | ||
− | == | + | == SendKeyboardLockKeyEvent == |
− | Takes an | + | Takes a PID, an u32 BitFlagSet [[#KeyboardLockKeyEvent]], and an [[AM_services|AppletResourceUserId]], no output. |
− | + | This is identical to the hidsys cmd. | |
− | == | + | == AcquireXpadIdEventHandle == |
− | Takes | + | Takes an input u64, returns an output handle. |
− | + | [10.0.0+] Stubbed, just returns 0. | |
− | |||
− | == | + | == ReleaseXpadIdEventHandle == |
− | Takes | + | Takes an input u64, no output. |
− | + | [10.0.0+] Stubbed, just returns 0. | |
− | |||
− | == | + | == ActivateXpad == |
− | Takes a PID | + | Takes a PID, an u32 "nn::hid::BasicXpadId", an [[AM_services|AppletResourceUserId]], no output. |
− | + | [10.0.0+] Stubbed, just returns 0. | |
− | |||
− | == | + | == GetXpadIds == |
− | Takes a | + | Takes a type-0xA output buffer containing an array of u32 "nn::hid::BasicXpadId", returns an output s64 total_out (which is exposed by sdknso as a s32). |
− | + | [10.0.0+] Now returns a hard-coded list of Ids. | |
− | |||
− | == | + | == ActivateJoyXpad == |
− | + | Takes an input u32 "nn::hid::JoyXpadId", no output. | |
− | == | + | [10.0.0+] Stubbed, just returns 0. |
− | Takes an input | + | |
+ | == GetJoyXpadLifoHandle == | ||
+ | Takes an input u32 "nn::hid::JoyXpadId", returns an output handle. | ||
+ | |||
+ | [10.0.0+] Stubbed, just returns 0. | ||
− | + | == GetJoyXpadIds == | |
+ | Takes a type-0xA output buffer containing an array of u32 "nn::hid::BasicXpadId", returns an output s64. | ||
− | + | [10.0.0+] Stubbed, just returns 0. | |
− | |||
− | == | + | == ActivateSixAxisSensor == |
− | Takes an | + | Takes an input u32 "nn::hid::JoyXpadId", no output. |
− | + | [10.0.0+] Stubbed, just returns 0. | |
− | == | + | == DeactivateSixAxisSensor == |
− | Takes | + | Takes an input u32 "nn::hid::JoyXpadId", no output. |
− | + | [10.0.0+] Stubbed, just returns 0. | |
− | |||
− | == | + | == GetSixAxisSensorLifoHandle == |
− | Takes | + | Takes an input u32 "nn::hid::JoyXpadId", returns an output handle. |
− | + | [10.0.0+] Stubbed, just returns 0. | |
− | |||
− | == | + | == ActivateJoySixAxisSensor == |
− | Takes | + | Takes an input u32 "nn::hid::JoyXpadId", no output. |
− | + | [10.0.0+] Stubbed, just returns 0. | |
− | == | + | == DeactivateJoySixAxisSensor == |
− | Takes | + | Takes an input u32 "nn::hid::JoyXpadId", no output. |
− | + | [10.0.0+] Stubbed, just returns 0. | |
− | |||
− | == | + | == GetJoySixAxisSensorLifoHandle == |
− | + | Takes an input u32 "nn::hid::JoyXpadId", returns an output handle. | |
− | + | [10.0.0+] Stubbed, just returns 0. | |
− | |||
− | == | + | == StartSixAxisSensor == |
− | + | Takes a PID, a [[#SixAxisSensorHandle]], and an [[AM_services|AppletResourceUserId]], no output. | |
− | == | + | == StopSixAxisSensor == |
+ | Takes a PID, a [[#SixAxisSensorHandle]], and an [[AM_services|AppletResourceUserId]], no output. | ||
− | + | == IsSixAxisSensorFusionEnabled == | |
− | + | Takes a PID, a [[#SixAxisSensorHandle]], and an [[AM_services|AppletResourceUserId]], returns an output bool. | |
− | |||
− | |||
− | |||
− | | | ||
− | == | + | == EnableSixAxisSensorFusion == |
− | + | Takes a PID, a bool, a [[#SixAxisSensorHandle]], and an [[AM_services|AppletResourceUserId]], no output. | |
− | == | + | == SetSixAxisSensorFusionParameters == |
− | + | Takes a PID-descriptor, an u32 [[#SixAxisSensorHandle]], two floats, and an u64 [[AM_services|AppletResourceUserId]], no output. | |
− | + | Official sw will throw an error before using this cmd, if the first float is outside of the bounds of 0.0f-1.0f. | |
− | | | + | |
− | + | == GetSixAxisSensorFusionParameters == | |
− | | | + | Takes a PID-descriptor, an u32 [[#SixAxisSensorHandle]], and an u64 [[AM_services|AppletResourceUserId]], returns two output floats. |
− | | | + | |
− | | | + | == ResetSixAxisSensorFusionParameters == |
+ | Takes a PID-descriptor, an u32 [[#SixAxisSensorHandle]], and an u64 [[AM_services|AppletResourceUserId]], no output. | ||
+ | |||
+ | == SetAccelerometerParameters == | ||
+ | Takes a PID, a [[#SixAxisSensorHandle]], two floats, and an [[AM_services|AppletResourceUserId]], no output. | ||
+ | |||
+ | sdknso will throw an error before using this cmd, if either of the floats are less than 0.0f, or when the second float is larger than the first float. | ||
+ | |||
+ | sdknso 10.x removed the nn::hid wrapper for this. | ||
+ | |||
+ | == GetAccelerometerParameters == | ||
+ | Takes a PID, a [[#SixAxisSensorHandle]], and an [[AM_services|AppletResourceUserId]], returns two output floats. | ||
+ | |||
+ | sdknso 10.x removed the nn::hid wrapper for this. | ||
+ | |||
+ | == ResetAccelerometerParameters == | ||
+ | Takes a PID, a [[#SixAxisSensorHandle]], and an [[AM_services|AppletResourceUserId]], no output. | ||
+ | |||
+ | sdknso 10.x removed the nn::hid wrapper for this. | ||
+ | |||
+ | == SetAccelerometerPlayMode == | ||
+ | Takes a PID, a [[#SixAxisSensorHandle]], an u32 [[#AccelerometerPlayMode]], and an u64 [[AM_services|AppletResourceUserId]], no output. | ||
+ | |||
+ | sdknso 10.x removed the nn::hid wrapper for this. | ||
+ | |||
+ | == GetAccelerometerPlayMode == | ||
+ | Takes a PID, a [[#SixAxisSensorHandle]], and an [[AM_services|AppletResourceUserId]], returns an output u32 [[#AccelerometerPlayMode]]. | ||
+ | |||
+ | sdknso 10.x removed the nn::hid wrapper for this. | ||
+ | |||
+ | == ResetAccelerometerPlayMode == | ||
+ | Takes a PID, a [[#SixAxisSensorHandle]], and an [[AM_services|AppletResourceUserId]], no output. | ||
+ | |||
+ | sdknso 10.x removed the nn::hid wrapper for this. | ||
− | == | + | == SetGyroscopeZeroDriftMode == |
− | Takes an | + | Takes a PID-descriptor, an u32 [[#SixAxisSensorHandle]], an u32 [[#GyroscopeZeroDriftMode]], and an u64 [[AM_services|AppletResourceUserId]], no output. |
− | == | + | == GetGyroscopeZeroDriftMode == |
− | + | Takes a PID-descriptor, an u32 [[#SixAxisSensorHandle]], and an u64 [[AM_services|AppletResourceUserId]], returns an output u32 [[#GyroscopeZeroDriftMode]]. | |
− | + | Gets the value written by [[#SetGyroscopeZeroDriftMode]]. | |
− | + | ||
− | + | == ResetGyroscopeZeroDriftMode == | |
− | + | Takes a PID-descriptor, an u32 [[#SixAxisSensorHandle]], and an u64 [[AM_services|AppletResourceUserId]], no output. | |
− | + | ||
− | | | + | Same as [[#SetGyroscopeZeroDriftMode]] except the [[#GyroscopeZeroDriftMode]] is hard-coded to value 1 (Standard). |
− | + | ||
− | + | == IsSixAxisSensorAtRest == | |
− | + | Takes a PID, a [[#SixAxisSensorHandle]], and an [[AM_services|AppletResourceUserId]], returns an output bool. | |
− | + | ||
− | + | == IsFirmwareUpdateAvailableForSixAxisSensor == | |
− | + | Takes a PID, a [[#SixAxisSensorHandle]], and an [[AM_services|AppletResourceUserId]], returns an output bool. | |
− | + | ||
− | + | == ActivateGesture == | |
− | | | + | Takes a PID-descriptor, a s32, and an u64 [[AM_services|AppletResourceUserId]], no output. |
− | + | ||
− | + | sdknso passes hard-coded value 1 for the s32. | |
− | |||
− | |||
− | | | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | | | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | == | + | == SetSupportedNpadStyleSet == |
− | + | Takes a PID-descriptor, an u32 [[#NpadStyleTag]], and an u64 [[AM_services|AppletResourceUserId]], no output. | |
− | = | + | == GetSupportedNpadStyleSet == |
− | + | Takes a PID-descriptor and an u64 [[AM_services|AppletResourceUserId]], returns an u32 [[#NpadStyleTag]]. | |
− | + | == SetSupportedNpadIdType == | |
− | + | Takes a PID-descriptor, a type-0x9 input buffer, and an [[AM_services|AppletResourceUserId]]. No output. | |
− | + | ||
− | + | The input buffer contains an array of [[#NpadIdType]]. The total entries in this array must be <=10. | |
− | + | ||
− | + | == 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 and an [[AM_services|AppletResourceUserId]]. No output. |
− | + | ||
− | + | This just returns 0. | |
− | + | ||
− | | | + | [10.0.0+] sdknso now uses the hiddbg [[#DeactivateNpad_2|cmd]] instead. |
− | + | ||
− | + | == AcquireNpadStyleSetUpdateEventHandle == | |
− | + | 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. | |
− | + | ||
− | | | + | == DisconnectNpad == |
− | + | Takes a PID, an u32 [[#NpadIdType]], and an [[AM_services|AppletResourceUserId]]. No output. | |
− | + | ||
− | |- | + | == GetPlayerLedPattern == |
− | + | Takes an input u32 [[#NpadIdType]], returns an output u64 (which is exposed by sdknso as an u8). | |
− | + | ||
− | + | == 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, an input [[#NpadJoyHoldType]], and an [[AM_services|AppletResourceUserId]]. No output. | |
− | + | ||
− | | | + | == GetNpadJoyHoldType == |
− | + | Takes a PID-descriptor and an [[AM_services|AppletResourceUserId]]. Returns an output [[#NpadJoyHoldType]]. | |
− | + | ||
− | + | sdknso will Abort when the output is not 0-1. | |
− | + | ||
− | + | == SetNpadJoyAssignmentModeSingleByDefault == | |
− | | | + | Takes a PID-descriptor, an u32, and an [[AM_services|AppletResourceUserId]]. No output. |
− | + | ||
− | + | This eventually calls the same func as [[#SetNpadJoyAssignmentModeSingle]], except with [[#NpadJoyDeviceType]]=0. | |
− | + | ||
− | + | == SetNpadJoyAssignmentModeSingle == | |
− | + | Takes a PID-descriptor, an u32, [[AM_services|AppletResourceUserId]], and s64 [[#NpadJoyDeviceType]]. No output. | |
− | | | + | |
− | + | This eventually runs the same code as [[#SetNpadJoyAssignmentModeSingleWithDestination]], except the output fields aren't exposed. | |
− | + | ||
− | + | == SetNpadJoyAssignmentModeDual == | |
− | | | + | Takes a PID-descriptor, an u32, and an [[AM_services|AppletResourceUserId]]. No output. |
− | + | ||
− | + | == MergeSingleJoyAsDualJoy == | |
− | | | + | Takes a PID-descriptor, two u32s, and an [[AM_services|AppletResourceUserId]]. No output. |
− | + | ||
− | + | == StartLrAssignmentMode == | |
− | | | + | Takes a PID and an [[AM_services|AppletResourceUserId]], no output. |
− | + | ||
− | + | == StopLrAssignmentMode == | |
− | | | + | Takes a PID and an [[AM_services|AppletResourceUserId]], no output. |
− | + | ||
− | + | == SetNpadHandheldActivationMode == | |
− | | | + | Takes a PID, an [[AM_services|AppletResourceUserId]], a s64 [[#NpadHandheldActivationMode]], no output. |
− | + | ||
− | | | + | == GetNpadHandheldActivationMode == |
− | | | + | Takes a PID and an u64 [[AM_services|AppletResourceUserId]]. Returns an output s64 [[#NpadHandheldActivationMode]]. Official user-processes Abort if the output value is not 0-2. |
− | | | + | |
− | | | + | == SwapNpadAssignment == |
− | | | + | Takes a PID, two u32s [[#NpadIdType]], and an [[AM_services|AppletResourceUserId]]. No output. |
− | + | ||
− | + | == IsUnintendedHomeButtonInputProtectionEnabled == | |
− | + | Takes a PID, an u32 [[#NpadIdType]], and an [[AM_services|AppletResourceUserId]]. Returns an output bool. | |
− | + | ||
− | |- | + | Unused by sdknso, the flag from [[#NpadSystemProperties]] is used instead. |
− | | | + | |
− | + | == EnableUnintendedHomeButtonInputProtection == | |
− | + | Takes a PID, a bool, an u32 [[#NpadIdType]], and an [[AM_services|AppletResourceUserId]]. No output. | |
− | + | ||
− | | | + | == SetNpadJoyAssignmentModeSingleWithDestination == |
− | + | Takes a PID, an u32, an [[AM_services|AppletResourceUserId]], and s64 [[#NpadJoyDeviceType]]. Returns an output bool and u32 [[#NpadIdType]]. | |
− | + | ||
− | | | + | The bool indicates whether the output [[#NpadIdType]] is set. |
− | | | + | |
− | + | == SetNpadAnalogStickUseCenterClamp == | |
− | + | Takes a PID, a bool, an [[AM_services|AppletResourceUserId]], no output. | |
− | | | + | |
− | + | == SetNpadCaptureButtonAssignment == | |
− | + | Takes a PID, a [[#NpadStyleSet]], an [[AM_services|AppletResourceUserId]], a [[#NpadButtonSet]], no output. | |
− | | | + | |
− | + | Exactly 1 bit must be set in the [[#NpadStyleSet]]. Multiple button bits can be set. | |
− | + | ||
− | | | + | This assigns the button(s) which trigger the CaptureButton. |
− | + | ||
− | + | == ClearNpadCaptureButtonAssignment == | |
− | + | Takes a PID, an [[AM_services|AppletResourceUserId]], no output. | |
− | + | ||
− | + | == GetVibrationDeviceInfo == | |
− | | | + | Takes a [[#VibrationDeviceHandle]]. Returns an output [[#VibrationDeviceInfo]]. |
− | + | ||
+ | == SendVibrationValue == | ||
+ | Takes a PID-descriptor, a [[#VibrationDeviceHandle]], a [[#VibrationValue]] immediately after that, and an u64 [[AM_services|AppletResourceUserId]]. No output. | ||
+ | |||
+ | == GetActualVibrationValue == | ||
+ | Takes a PID-descriptor, a [[#VibrationDeviceHandle]], and an u64 [[AM_services|AppletResourceUserId]]. Returns an output [[#VibrationValue]]. | ||
+ | |||
+ | == CreateActiveVibrationDeviceList == | ||
+ | No input. Returns an [[#IActiveVibrationDeviceList]]. | ||
+ | |||
+ | == PermitVibration == | ||
+ | Takes an input u8 bool. No output. | ||
+ | |||
+ | This affects the config displayed by System Settings. | ||
+ | |||
+ | == IsVibrationPermitted == | ||
+ | No input. Returns an output u8 bool. | ||
+ | |||
+ | == SendVibrationValues == | ||
+ | Takes an u64 [[AM_services|AppletResourceUserId]], and two type-0x9 input buffers containing an array of: [[#VibrationDeviceHandle]] for first buffer, and [[#VibrationValue]] for the second buffer. | ||
+ | |||
+ | Official sw uses the same entry-count for each array. | ||
+ | |||
+ | == SendVibrationGcErmCommand == | ||
+ | Takes a PID, a [[#VibrationDeviceHandle]], [[AM_services|AppletResourceUserId]], an u64 [[#VibrationGcErmCommand]], no output. | ||
+ | |||
+ | == GetActualVibrationGcErmCommand == | ||
+ | Takes a PID, a [[#VibrationDeviceHandle]], [[AM_services|AppletResourceUserId]], returns an output u64 [[#VibrationGcErmCommand]]. | ||
+ | |||
+ | == BeginPermitVibrationSession == | ||
+ | Takes an input [[AM_services|AppletResourceUserId]], no output. | ||
+ | |||
+ | Begins a forced-permitted vibration session. | ||
+ | |||
+ | == EndPermitVibrationSession == | ||
+ | No input/output. | ||
+ | |||
+ | Ends the session started by [[#BeginPermitVibrationSession]]. | ||
+ | |||
+ | == IsVibrationDeviceMounted == | ||
+ | Takes a PID, an [[#VibrationDeviceHandle]], and an u64 [[AM_services|AppletResourceUserId]], returns an output u8 bool. | ||
+ | |||
+ | == SendVibrationValueInBool == | ||
+ | Takes a PID, a bool, a [[#VibrationDeviceHandle]], and an [[AM_services|AppletResourceUserId]], no output. | ||
+ | |||
+ | Stubbed, this just returns 0. | ||
+ | |||
+ | This is currently not exposed by sdknso. | ||
+ | |||
+ | == ActivateConsoleSixAxisSensor == | ||
+ | Takes a PID and an u64 [[AM_services|AppletResourceUserId]], no output. | ||
+ | |||
+ | As of [10.0.0+] sdknso no longer uses this with SevenSixAxisSensor. | ||
+ | |||
+ | == StartConsoleSixAxisSensor == | ||
+ | Takes a PID, a [[#ConsoleSixAxisSensorHandle]], and an [[AM_services|AppletResourceUserId]], no output. | ||
+ | |||
+ | == StopConsoleSixAxisSensor == | ||
+ | Takes a PID, a [[#ConsoleSixAxisSensorHandle]], and an [[AM_services|AppletResourceUserId]], no output. | ||
+ | |||
+ | == ActivateSevenSixAxisSensor == | ||
+ | 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 (which is unused by official sw). | ||
+ | |||
+ | == StartSevenSixAxisSensor == | ||
+ | Takes a PID and an u64 [[AM_services|AppletResourceUserId]], no output. | ||
+ | |||
+ | == StopSevenSixAxisSensor == | ||
+ | Takes a PID and an u64 [[AM_services|AppletResourceUserId]], no output. | ||
+ | |||
+ | == InitializeSevenSixAxisSensor == | ||
+ | Takes a PID, an u64 [[AM_services|AppletResourceUserId]], two u64s for the size of each TransferMemory, and two TransferMemory handles. No output. | ||
+ | |||
+ | The size of the first TransferMemory is 0x1000 with MemoryPermission=read-only, while the second one has size 0x7F000 with MemoryPermission=none. sdknso uses an user-specified buffer for this, with the second tmem immediately following the first one. sdknso later uses data at buf+0 for loading SevenSixAxisSensor state. | ||
+ | |||
+ | The data at tmem+0 has the following structure: | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
|- | |- | ||
− | | | + | ! Offset || Size || Description |
|- | |- | ||
− | | | + | | 0x0 || 0x10 || Unused by sdknso. |
|- | |- | ||
− | | | + | | 0x10 || 0x8 || Latest entry. |
|- | |- | ||
− | | | + | | 0x18 || 0x8 || Total entries. |
|- | |- | ||
− | | | + | | 0x20 || 0xA50(0x21*0x50) || Array of the below entries. |
+ | |} | ||
+ | |||
+ | Entry: | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
|- | |- | ||
− | | | + | ! Offset || Size || Description |
|- | |- | ||
− | | | + | | 0x0 || 0x8 || Timestamp |
|- | |- | ||
− | | | + | | 0x8 || 0x10 || Unused by sdknso. |
|- | |- | ||
− | | | + | | 0x10 || 0x40 || SevenSixAxisSensorState |
+ | |} | ||
+ | |||
+ | SevenSixAxisSensorState: | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
|- | |- | ||
− | | | + | ! Offset || Size || Description |
|- | |- | ||
− | | | + | | 0x0 || 0x8 || First timestamp. |
|- | |- | ||
− | | | + | | 0x8 || 0x8 || Second timestamp (in samples). |
|- | |- | ||
− | | | + | | 0x10 || 0x8 || ? |
|- | |- | ||
− | | | + | | 0x18 || 0x28 || float data |
− | + | |} | |
− | | | + | |
− | | | + | == FinalizeSevenSixAxisSensor == |
− | + | Takes a PID and an u64 [[AM_services|AppletResourceUserId]], no output. | |
− | + | ||
− | | | + | == SetSevenSixAxisSensorFusionStrength == |
− | + | Takes a PID, a float, and an u64 [[AM_services|AppletResourceUserId]], no output. | |
− | | | + | |
− | + | == GetSevenSixAxisSensorFusionStrength == | |
− | + | Takes a PID and an u64 [[AM_services|AppletResourceUserId]], returns an output float. | |
− | + | ||
− | + | == ResetSevenSixAxisSensorTimestamp == | |
− | + | Takes a PID and an u64 [[AM_services|AppletResourceUserId]], no output. | |
− | + | ||
− | + | == IsUsbFullKeyControllerEnabled == | |
− | + | No input, returns an output bool. | |
− | + | ||
− | + | == EnableUsbFullKeyController == | |
− | + | Takes an input bool, no output. | |
− | + | ||
− | + | == IsUsbFullKeyControllerConnected == | |
− | + | Takes an input u32 [[#NpadIdType]], returns an output bool. | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | | | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | == | + | == HasBattery == |
− | Takes | + | Takes an input u32, returns an output bool. |
− | + | sdknso exposes this under "nn::hid::system::". [10.0.0+] sdknso now only exposes the hidsys version of this cmd. | |
− | = | + | == HasLeftRightBattery == |
− | + | Takes an input u32, returns two output bools. | |
− | + | sdknso exposes this under "nn::hid::system::". [10.0.0+] sdknso now only exposes the hidsys version of this cmd. | |
− | | | + | |
− | + | == GetNpadInterfaceType == | |
− | + | Takes an input u32 [[#NpadIdType]], returns an output u8 [[#NpadInterfaceType]]. | |
− | + | ||
− | | | + | The NpadInterfaceType must be 1-4, otherwise this will Abort. |
− | + | ||
− | + | sdknso exposes this under "nn::hid::system::". [10.0.0+] sdknso now only exposes the hidsys version of this cmd. | |
− | + | ||
− | + | == GetNpadLeftRightInterfaceType == | |
− | + | Takes an input u32 [[#NpadIdType]], returns two output u8s [[#NpadInterfaceType]]. | |
− | + | ||
− | + | sdknso exposes this under "nn::hid::system::". [10.0.0+] sdknso now only exposes the hidsys version of this cmd. | |
− | + | ||
− | + | == GetNpadOfHighestBatteryLevel == | |
− | + | Takes a PID, a type-0x9 input buffer containing an array of u32 [[#NpadIdType]], an u64 [[AM_services|AppletResourceUserId]], returns an output u32 [[#NpadIdType]]. | |
− | + | ||
− | + | [[#NpadIdType|Handheld]] is ignored. | |
− | + | ||
− | |- | + | == GetPalmaConnectionHandle == |
− | + | Takes a PID, an u32 [[#NpadIdType]], an [[AM_services|AppletResourceUserId]], returns an output [[#PalmaConnectionHandle]]. | |
− | + | ||
− | + | == InitializePalma == | |
− | + | Takes an input [[#PalmaConnectionHandle]], no output. | |
− | + | ||
− | + | == AcquirePalmaOperationCompleteEvent == | |
− | + | Takes an input [[#PalmaConnectionHandle]], returns an output Event handle. | |
− | + | ||
− | + | sdknso uses an user-specified EventClearMode. | |
− | + | ||
− | + | The Event is signaled when data is available with [[#GetPalmaOperationInfo]]. | |
− | + | ||
− | + | == GetPalmaOperationInfo == | |
− | + | 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. | |
− | + | ||
− | + | This must be used at some point following using any of the other Palma cmds which trigger an Operation, once the [[#AcquirePalmaOperationCompleteEvent|Event]] is signaled. Up to 4 Operations can be queued at once, the other cmds will throw an error once there's too many operations. | |
− | + | ||
− | + | == PlayPalmaActivity == | |
− | + | Takes an input [[#PalmaConnectionHandle]], an u64 (exposed by sdknso as an u16), no output. | |
− | + | ||
− | + | See [[#GetPalmaOperationInfo]]. | |
− | + | ||
− | + | == SetPalmaFrModeType == | |
− | + | Takes an input [[#PalmaConnectionHandle]], an u64 [[#PalmaFrModeType]], no output. | |
− | + | ||
− | + | See [[#GetPalmaOperationInfo]]. | |
− | + | ||
− | | | + | == ReadPalmaStep == |
− | | | + | Takes an input [[#PalmaConnectionHandle]], no output. |
− | + | ||
− | | | + | See [[#GetPalmaOperationInfo]]. |
− | | | + | |
− | | | + | [[#EnablePalmaStep]] should be used before this. |
− | | | + | |
− | + | == EnablePalmaStep == | |
− | + | Takes an input bool, a [[#PalmaConnectionHandle]], no output. | |
− | + | ||
− | |- | + | See [[#GetPalmaOperationInfo]]. |
− | | | + | |
− | + | == ResetPalmaStep == | |
− | + | Takes an input [[#PalmaConnectionHandle]], no output. | |
− | + | ||
− | | | + | See [[#GetPalmaOperationInfo]]. |
+ | |||
+ | == ReadPalmaApplicationSection == | ||
+ | Takes an input [[#PalmaConnectionHandle]], an u64, an u64 size, no output. | ||
+ | |||
+ | sdknso exposes the first u64 as a s32. sdknso will Abort if the input value for the second u64 is >0x100. | ||
+ | |||
+ | See [[#GetPalmaOperationInfo]]. | ||
+ | |||
+ | == WritePalmaApplicationSection == | ||
+ | Takes an input [[#PalmaConnectionHandle]], an u64, an u64 size, a type-0x19 input buffer containing a [[#PalmaApplicationSectionAccessBuffer]], no output. | ||
+ | |||
+ | sdknso exposes the first u64 as a s32. Data is copied from the input [[#PalmaApplicationSectionAccessBuffer]] with the specified size. | ||
+ | |||
+ | See [[#GetPalmaOperationInfo]]. | ||
+ | |||
+ | == ReadPalmaUniqueCode == | ||
+ | Takes an input [[#PalmaConnectionHandle]], no output. | ||
+ | |||
+ | See [[#GetPalmaOperationInfo]]. | ||
+ | |||
+ | == SetPalmaUniqueCodeInvalid == | ||
+ | Takes an input [[#PalmaConnectionHandle]], no output. | ||
+ | |||
+ | See [[#GetPalmaOperationInfo]]. | ||
+ | |||
+ | == WritePalmaActivityEntry == | ||
+ | Takes an input [[#PalmaConnectionHandle]], an u64, an u64, an u64, an u64, no output. | ||
+ | |||
+ | sdknso exposes the first u64 as an u16, while the rest are exposed as [[#PalmaActivityEntry]]. | ||
+ | |||
+ | See [[#GetPalmaOperationInfo]]. | ||
+ | |||
+ | == WritePalmaRgbLedPatternEntry == | ||
+ | Takes an input [[#PalmaConnectionHandle]], an u64, a type-0x5 input buffer, no output. | ||
+ | |||
+ | sdknso exposes the u64 as an u16. | ||
+ | |||
+ | See [[#GetPalmaOperationInfo]]. | ||
+ | |||
+ | == WritePalmaWaveEntry == | ||
+ | Takes an input [[#PalmaConnectionHandle]], an u64 [[#PalmaWaveSet]], an u64 (exposed by sdknso as an u16), a TransferMemory handle, an u64 tmem_size, an u64 size, no output. | ||
+ | |||
+ | The TransferMemory is created from an user-specified buffer with permissions=R--. | ||
+ | |||
+ | Note that the sysmodule will not properly close the TransferMemory handle if the [[#PalmaConnectionHandle]] is invalid. | ||
+ | |||
+ | See [[#GetPalmaOperationInfo]]. | ||
+ | |||
+ | == SetPalmaDataBaseIdentificationVersion == | ||
+ | Takes an input s32, a [[#PalmaConnectionHandle]], no output. | ||
+ | |||
+ | See [[#GetPalmaOperationInfo]]. | ||
+ | |||
+ | == GetPalmaDataBaseIdentificationVersion == | ||
+ | Takes an input [[#PalmaConnectionHandle]], no output. | ||
+ | |||
+ | See [[#GetPalmaOperationInfo]]. | ||
+ | |||
+ | == SuspendPalmaFeature == | ||
+ | Takes an input "nn::util::BitFlagSet<32, [[#PalmaFeature]]>", a [[#PalmaConnectionHandle]], no output. | ||
+ | |||
+ | See [[#GetPalmaOperationInfo]]. | ||
+ | |||
+ | == GetPalmaOperationResult == | ||
+ | Takes an input [[#PalmaConnectionHandle]], no output. | ||
+ | |||
+ | sdknso only uses this from the wrapper for [[#GetPalmaOperationInfo]]. | ||
+ | |||
+ | == ReadPalmaPlayLog == | ||
+ | Takes an input u16, a [[#PalmaConnectionHandle]], no output. | ||
+ | |||
+ | See [[#GetPalmaOperationInfo]]. | ||
+ | |||
+ | == ResetPalmaPlayLog == | ||
+ | Takes an input u16, a [[#PalmaConnectionHandle]], no output. | ||
+ | |||
+ | See [[#GetPalmaOperationInfo]]. | ||
+ | |||
+ | == SetIsPalmaAllConnectable == | ||
+ | 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 == | ||
+ | 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 == | ||
+ | Takes an input [[#PalmaConnectionHandle]], no output. | ||
+ | |||
+ | This eventually uses [[BTM_services#BlePairDevice|BlePairDevice]] if needed, and updates state. | ||
+ | |||
+ | == SetPalmaBoostMode == | ||
+ | Takes an input bool, no output. | ||
+ | |||
+ | Stubbed, just returns 0. This was replaced by [[#EnablePalmaBoostMode]]. | ||
+ | |||
+ | == CancelWritePalmaWaveEntry == | ||
+ | Takes an input [[#PalmaConnectionHandle]], no output. | ||
+ | |||
+ | == EnablePalmaBoostMode == | ||
+ | Takes a PID, a bool, an [[AM_services|AppletResourceUserId]], no output. | ||
+ | |||
+ | == GetPalmaBluetoothAddress == | ||
+ | Takes an input [[#PalmaConnectionHandle]], returns an output [[Bluetooth_Driver_services#Address|Address]]. | ||
+ | |||
+ | == SetDisallowedPalmaConnection == | ||
+ | Takes a PID, an [[AM_services|AppletResourceUserId]], a type-0x9 input buffer containing an array of [[Bluetooth_Driver_services#Address|Address]], no output. | ||
+ | |||
+ | == SetNpadCommunicationMode == | ||
+ | Takes a PID, an [[AM_services|AppletResourceUserId]], a s64 [[#NpadCommunicationMode]], no output. | ||
+ | |||
+ | [2.0.0+] Stubbed, just returns 0. | ||
+ | |||
+ | == GetNpadCommunicationMode == | ||
+ | No input, returns an output s64 [[#NpadCommunicationMode]]. | ||
+ | |||
+ | sdknso uses a switch-statement to determine the value to write to the output [[#NpadCommunicationMode]], with the s64 (written value is the same as the s64). sdknso will Abort if the s64 is not 0-3. | ||
+ | |||
+ | [2.0.0+] Stubbed, just returns hard-coded output mode=3. | ||
+ | |||
+ | == SetTouchScreenConfiguration == | ||
+ | Takes a PID, a [[#TouchScreenConfigurationForNx]], an [[AM_services|AppletResourceUserId]], no output. | ||
+ | |||
+ | == IsFirmwareUpdateNeededForNotification == | ||
+ | Takes a PID, a s32, an [[AM_services|AppletResourceUserId]], returns an output bool. | ||
+ | |||
+ | sdknso passes hard-coded value 1 for the s32. | ||
+ | |||
+ | == ActivateDigitizer == | ||
+ | Takes a PID and an [[AM_services|AppletResourceUserId]], no output. | ||
+ | |||
+ | == IAppletResource == | ||
+ | This is "nn::hid::IAppletResource". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
|- | |- | ||
− | | | + | ! Cmd || Name |
|- | |- | ||
− | | | + | | 0 || [[#GetSharedMemoryHandle]] |
+ | |} | ||
+ | |||
+ | === GetSharedMemoryHandle === | ||
+ | No input. Returns a [[#SharedMemoryFormat|sharedmem]] handle. | ||
+ | |||
+ | == IActiveVibrationDeviceList == | ||
+ | This is "nn::hid::IActiveVibrationDeviceList". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
|- | |- | ||
− | | | + | ! Cmd || Name |
|- | |- | ||
− | | | + | | 0 || [[#ActivateVibrationDevice]] |
+ | |} | ||
+ | |||
+ | === ActivateVibrationDevice === | ||
+ | Takes an input [[#VibrationDeviceHandle]]. No output. | ||
+ | |||
+ | = hid:dbg = | ||
+ | This is "nn::hid::IHidDebugServer". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
|- | |- | ||
− | | | + | ! Cmd || Name |
|- | |- | ||
− | | | + | | 0 || [[#DeactivateDebugPad]] |
|- | |- | ||
− | | | + | | 1 || [[#SetDebugPadAutoPilotState]] |
|- | |- | ||
− | | | + | | 2 || [[#UnsetDebugPadAutoPilotState]] |
|- | |- | ||
− | | | + | | 10 || [[#DeactivateTouchScreen]] |
|- | |- | ||
− | | | + | | 11 || [[#SetTouchScreenAutoPilotState]] |
|- | |- | ||
− | | | + | | 12 || [[#UnsetTouchScreenAutoPilotState]] |
|- | |- | ||
− | | | + | | 13 || [9.0.0+] GetTouchScreenConfiguration |
|- | |- | ||
− | | | + | | 14 || [11.0.0+] ProcessTouchScreenAutoTune |
|- | |- | ||
− | | | + | | 15 || [13.0.0+] ForceStopTouchScreenManagement |
|- | |- | ||
− | | | + | | 16 || [13.0.0+] ForceRestartTouchScreenManagement |
|- | |- | ||
− | | | + | | 17 || [13.0.0+] IsTouchScreenManaged |
|- | |- | ||
− | | | + | | 20 || [[#DeactivateMouse]] |
|- | |- | ||
− | | | + | | 21 || [[#SetMouseAutoPilotState]] |
|- | |- | ||
− | | | + | | 22 || [[#UnsetMouseAutoPilotState]] |
|- | |- | ||
− | | | + | | 30 || [[#DeactivateKeyboard]] |
|- | |- | ||
− | | | + | | 31 || [[#SetKeyboardAutoPilotState]] |
|- | |- | ||
− | | | + | | 32 || [[#UnsetKeyboardAutoPilotState]] |
|- | |- | ||
− | | | + | | 50 || [[#DeactivateXpad]] |
|- | |- | ||
− | | | + | | 51 || [1.0.0-9.2.0] SetXpadAutoPilotState |
|- | |- | ||
− | | | + | | 52 || [1.0.0-9.2.0] UnsetXpadAutoPilotState |
|- | |- | ||
− | | | + | | 53 ([1.0.0-8.1.0] 60) || [1.0.0-9.2.0] [[#DeactivateJoyXpad]] |
|- | |- | ||
− | | | + | | 60 || [9.0.0+] ClearNpadSystemCommonPolicy |
|- | |- | ||
− | | | + | | 61 || [10.0.0+] [[#DeactivateNpad_2|DeactivateNpad]] |
|- | |- | ||
− | | | + | | 62 || [10.0.0+] ForceDisconnectNpad |
|- | |- | ||
− | | | + | | 91 || DeactivateGesture |
|- | |- | ||
− | | | + | | 110 || DeactivateHomeButton |
|- | |- | ||
− | | | + | | 111 || SetHomeButtonAutoPilotState |
|- | |- | ||
− | | | + | | 112 || UnsetHomeButtonAutoPilotState |
|- | |- | ||
− | | | + | | 120 || [[#DeactivateSleepButton]] |
|- | |- | ||
− | | | + | | 121 || [[#SetSleepButtonAutoPilotState]] |
|- | |- | ||
− | | | + | | 122 || [[#UnsetSleepButtonAutoPilotState]] |
|- | |- | ||
− | | | + | | 123 || [1.0.0-9.2.0] DeactivateInputDetector |
|- | |- | ||
− | | | + | | 130 || DeactivateCaptureButton |
|- | |- | ||
− | | | + | | 131 || SetCaptureButtonAutoPilotState |
|- | |- | ||
− | | | + | | 132 || UnsetCaptureButtonAutoPilotState |
|- | |- | ||
− | | | + | | 133 || [3.0.0+] SetShiftAccelerometerCalibrationValue |
|- | |- | ||
− | | | + | | 134 || [3.0.0+] GetShiftAccelerometerCalibrationValue |
|- | |- | ||
− | | | + | | 135 || [3.0.0+] SetShiftGyroscopeCalibrationValue |
|- | |- | ||
− | | | + | | 136 || [3.0.0+] GetShiftGyroscopeCalibrationValue |
|- | |- | ||
− | | | + | | 140 || [3.0.0+] DeactivateConsoleSixAxisSensor |
|- | |- | ||
− | | | + | | 141 || [5.0.0+] GetConsoleSixAxisSensorSamplingFrequency |
|- | |- | ||
− | | | + | | 142 || [5.0.0+] DeactivateSevenSixAxisSensor |
|- | |- | ||
− | | | + | | 143 || [5.0.0+] GetConsoleSixAxisSensorCountStates |
|- | |- | ||
− | | | + | | 144 || [8.0.0+] GetAccelerometerFsr |
|- | |- | ||
− | | | + | | 145 || [8.0.0+] SetAccelerometerFsr |
|- | |- | ||
− | | | + | | 146 || [8.0.0+] GetAccelerometerOdr |
|- | |- | ||
− | | | + | | 147 || [8.0.0+] SetAccelerometerOdr |
+ | |- | ||
+ | | 148 || [8.0.0+] GetGyroscopeFsr | ||
+ | |- | ||
+ | | 149 || [8.0.0+] SetGyroscopeFsr | ||
|- | |- | ||
− | | | + | | 150 || [8.0.0+] GetGyroscopeOdr |
|- | |- | ||
− | | | + | | 151 || [8.0.0+] SetGyroscopeOdr |
|- | |- | ||
− | | | + | | 152 || [10.0.0+] GetWhoAmI |
|- | |- | ||
− | | | + | | 201 || ActivateFirmwareUpdate |
|- | |- | ||
− | | | + | | 202 || DeactivateFirmwareUpdate |
|- | |- | ||
− | | | + | | 203 || [[#StartFirmwareUpdate]] |
|- | |- | ||
− | | | + | | 204 || GetFirmwareUpdateStage |
|- | |- | ||
− | | | + | | 205 || [[#GetFirmwareVersion]] |
|- | |- | ||
− | | | + | | 206 || [[#GetDestinationFirmwareVersion]] |
|- | |- | ||
− | | | + | | 207 || [[#DiscardFirmwareInfoCacheForRevert]] |
|- | |- | ||
− | | | + | | 208 || [3.0.0+] StartFirmwareUpdateForRevert |
|- | |- | ||
− | | | + | | 209 || [3.0.0+] GetAvailableFirmwareVersionForRevert |
|- | |- | ||
− | | | + | | 210 || [4.0.0+] IsFirmwareUpdatingDevice |
|- | |- | ||
− | | | + | | 211 || [6.0.0+] StartFirmwareUpdateIndividual |
|- | |- | ||
− | | | + | | 215 || [6.0.0+] SetUsbFirmwareForceUpdateEnabled |
|- | |- | ||
− | | | + | | 216 || [6.0.0+] SetAllKuinaDevicesToFirmwareUpdateMode |
|- | |- | ||
− | | | + | | 221 || [3.0.0+] [[#UpdateControllerColor]] |
|- | |- | ||
− | | | + | | 222 || [4.0.0+] ConnectUsbPadsAsync |
|- | |- | ||
− | | | + | | 223 || [4.0.0+] DisconnectUsbPadsAsync |
|- | |- | ||
− | | | + | | 224 || [5.0.0+] [[#UpdateDesignInfo]] |
|- | |- | ||
− | | | + | | 225 || [5.0.0+] [[#GetUniquePadDriverState]] |
|- | |- | ||
− | | | + | | 226 || [5.0.0+] [[#GetSixAxisSensorDriverStates]] |
|- | |- | ||
− | | | + | | 227 || [5.0.0+] GetRxPacketHistory |
|- | |- | ||
− | | | + | | 228 || [6.0.0+] [[#AcquireOperationEventHandle]] |
|- | |- | ||
− | | | + | | 229 || [6.0.0+] [[#ReadSerialFlash]] |
|- | |- | ||
− | | | + | | 230 || [6.0.0+] [[#WriteSerialFlash]] |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
|- | |- | ||
− | + | | 231 || [6.0.0+] [[#GetOperationResult]] | |
|- | |- | ||
− | | | + | | 232 || [6.0.0+] EnableShipmentMode |
|- | |- | ||
− | | | + | | 233 || [6.0.0+] ClearPairingInfo |
|- | |- | ||
− | | | + | | 234 || [6.0.0+] [[#GetUniquePadDeviceTypeSetInternal]] |
|- | |- | ||
− | | | + | | 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 |
|- | |- | ||
− | | | + | | 245 || [9.0.0+] GetKuinaFirmwareVersion |
|- | |- | ||
− | | | + | | 246 || [9.0.0+] GetVidPid |
|- | |- | ||
− | | | + | | 247 || [11.0.0+] GetAnalogStickCalibrationValue |
|- | |- | ||
− | | | + | | 248 || [11.0.0+] GetUniquePadIdsFull |
|- | |- | ||
− | | | + | | 249 || [11.0.0+] ConnectUniquePad |
|- | |- | ||
− | | | + | | 250 || [12.0.0+] IsVirtual |
|- | |- | ||
− | | | + | | 251 || [12.0.0+] GetAnalogStickModuleParam |
|- | |- | ||
− | | | + | | 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]] |
|- | |- | ||
− | | | + | | 324 || [7.0.0+] [[#AttachHdlsWorkBuffer]] |
|- | |- | ||
− | | | + | | 325 || [7.0.0+] [[#ReleaseHdlsWorkBuffer]] |
|- | |- | ||
− | | | + | | 326 || [7.0.0+] [[#DumpHdlsNpadAssignmentState]] |
|- | |- | ||
− | | | + | | 327 || [7.0.0+] [[#DumpHdlsStates]] |
|- | |- | ||
− | | | + | | 328 || [7.0.0+] [[#ApplyHdlsNpadAssignmentState]] |
|- | |- | ||
− | | | + | | 329 || [7.0.0+] [[#ApplyHdlsStateList]] |
|- | |- | ||
− | | | + | | 330 || [7.0.0+] [[#AttachHdlsVirtualDevice]] |
|- | |- | ||
− | | | + | | 331 || [7.0.0+] [[#DetachHdlsVirtualDevice]] |
|- | |- | ||
− | | | + | | 332 || [7.0.0+] [[#SetHdlsState]] |
|- | |- | ||
− | | | + | | 350 || [5.0.0+] [[#AddRegisteredDevice]] |
|- | |- | ||
− | | | + | | 400 || [6.0.0+] DisableExternalMcuOnNxDevice |
|- | |- | ||
− | | | + | | 401 || [6.0.0+] DisableRailDeviceFiltering |
|- | |- | ||
− | | | + | | 402 || [10.0.0+] EnableWiredPairing |
|- | |- | ||
− | | | + | | 403 || [10.0.0+] EnableShipmentModeAutoClear |
|- | |- | ||
− | | | + | | 404 || [11.0.0+] SetRailEnabled |
|- | |- | ||
− | | | + | | 500 || [8.0.0+] SetFactoryInt |
|- | |- | ||
− | | | + | | 501 || [8.0.0+] IsFactoryBootEnabled |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
|- | |- | ||
− | | | + | | 550 || [9.0.0+] SetAnalogStickModelDataTemporarily |
|- | |- | ||
− | | | + | | 551 || [9.0.0+] GetAnalogStickModelData |
|- | |- | ||
− | | | + | | 552 || [9.0.0+] ResetAnalogStickModelData |
|- | |- | ||
− | | | + | | 600 || [10.0.0+] ConvertPadState |
|- | |- | ||
− | | | + | | 650 || [12.0.0+] AddButtonPlayData |
|- | |- | ||
− | | | + | | 651 || [12.0.0+] StartButtonPlayData |
|- | |- | ||
− | | | + | | 652 || [12.0.0+] StopButtonPlayData |
|- | |- | ||
− | | | + | | 2000 || [10.0.0+] DeactivateDigitizer |
|- | |- | ||
− | | | + | | 2001 || [10.0.0+] SetDigitizerAutoPilotState |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
|- | |- | ||
+ | | 2002 || [10.0.0+] UnsetDigitizerAutoPilotState | ||
|} | |} | ||
− | + | == DeactivateDebugPad == | |
+ | No input/output. | ||
+ | |||
+ | == SetDebugPadAutoPilotState == | ||
+ | Takes an input [[#DebugPadAutoPilotState]], no output. | ||
− | + | == UnsetDebugPadAutoPilotState == | |
+ | No input/output. | ||
− | + | == DeactivateTouchScreen == | |
+ | No input/output. | ||
− | + | == SetTouchScreenAutoPilotState == | |
− | + | Takes a type-0x5 input buffer containing an array of [[#TouchState]], no output. | |
− | + | ||
− | + | The max entries for the array is 16. | |
− | + | ||
− | + | == UnsetTouchScreenAutoPilotState == | |
− | + | No input/output. | |
− | + | ||
− | + | == DeactivateMouse == | |
− | + | No input/output. | |
− | + | ||
− | + | == SetMouseAutoPilotState == | |
− | + | Takes an input [[#MouseAutoPilotState]], no output. | |
− | + | ||
− | + | == UnsetMouseAutoPilotState == | |
− | + | No input/output. | |
− | |||
− | = | + | == DeactivateKeyboard == |
− | + | No input/output. | |
− | + | == SetKeyboardAutoPilotState == | |
+ | Takes an input [[#KeyboardAutoPilotState]], no output. | ||
− | + | == UnsetKeyboardAutoPilotState == | |
− | + | No input/output. | |
− | |||
− | |||
− | |||
− | |||
− | = | + | == DeactivateXpad == |
− | + | Takes an input "nn::hid::BasicXpadId", no output. | |
− | + | == DeactivateNpad == | |
− | + | Takes a PID and an [[AM_services|AppletResourceUserId]], no output. | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | This just returns 0. | |
− | |||
− | == | + | == DeactivateSleepButton == |
− | + | No input/output. | |
− | == | + | == SetSleepButtonAutoPilotState == |
− | Takes | + | Takes an input [[#SleepButtonAutoPilotState]], no output. |
− | + | == UnsetSleepButtonAutoPilotState == | |
+ | No input/output. | ||
− | == | + | == StartFirmwareUpdate == |
− | Takes a | + | Takes a total of 0x20-bytes of input, 2 handles, and returns an output handle. |
− | + | [3.0.0+] Now takes a total of 8-bytes of input, and no longer uses any input/output handles. | |
− | |||
− | == | + | == GetFirmwareVersion == |
− | Takes a | + | Takes a total of 8-bytes of input, and returns a total of 4-bytes of output. |
− | + | [3.0.0+] Now returns an additional 0xC-bytes of output. | |
− | |||
− | + | == GetDestinationFirmwareVersion == | |
+ | Takes a total of 8-bytes of input, and returns a total of 4-bytes of output. | ||
− | + | [3.0.0+] Now returns an additional 0xC-bytes of output. | |
− | |||
− | == | + | == DiscardFirmwareInfoCacheForRevert == |
− | Takes a | + | Takes a total of 8-bytes of input, and returns a total of 5-bytes of output. |
− | + | [3.0.0+] No input/output. | |
− | |||
− | == | + | == UpdateControllerColor == |
− | Takes | + | Takes two input u32s for the colors, an [[#UniquePadId]], and no output. |
− | + | A state flag must be clear, otherwise an error is thrown. Afterwards, this flag is set. | |
− | |||
− | + | Sends the spi-write subcommand to the specified controller, for writing the [[Joy-Con#Colors|color data]]. This writes to offset 0x6050 size 0x6, where the first 3-bytes are from the first u32 and the remaining 3-bytes are from the second u32. | |
− | |||
− | == | + | == UpdateDesignInfo == |
− | + | Takes 4 input u32s for the colors, an input u8, an input [[#UniquePadId]], and no output. | |
− | + | A state flag must be clear (same as [[#UpdateControllerColor]]), otherwise an error is thrown. Afterwards, this flag is set. | |
− | |||
− | + | 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 [[#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 is | ||
− | + | 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. | |
− | This is | ||
− | + | == ReadSerialFlash == | |
− | + | Takes an input TransferMemory handle, an input u32 offset, an input u64 size, and an [[#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-. | |
− | + | ||
− | + | 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 an input TransferMemory handle, an input u32 offset, an input u64 tmem_size, an input u64 size, and an [[#UniquePadId]], no output. | |
− | + | ||
+ | Writes to the specified controller's spi-flash. The TransferMemory permissions is R--. | ||
+ | |||
+ | 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). | |
− | |||
− | + | == GetOperationResult == | |
+ | Takes an input [[#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). | |
− | This is | ||
− | + | == GetUniquePadDeviceTypeSetInternal == | |
− | + | Takes an input [[#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 == | |
− | + | 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 == |
− | + | 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. |
− | |||
− | + | This TransferMemory is used as input/output by the other Hdls commands. | |
− | + | Hdls is for virtual HID controllers. | |
− | + | ||
− | + | == ReleaseHdlsWorkBuffer == | |
− | + | No input/output. | |
− | + | ||
− | + | [13.0.0+] Takes an input [[#HdlsSessionId]], no output. | |
− | + | ||
− | + | == DumpHdlsNpadAssignmentState == | |
− | + | No input/output. | |
− | + | ||
− | + | [13.0.0+] Takes an input [[#HdlsSessionId]], no output. | |
− | + | ||
− | + | After using this cmd, the output [[#HdlsNpadAssignment]] is located at tmem+0. | |
− | + | ||
− | + | == DumpHdlsStates == | |
− | + | 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. | ||
+ | |||
+ | == ApplyHdlsNpadAssignmentState == | ||
+ | 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. | ||
+ | |||
+ | == ApplyHdlsStateList == | ||
+ | 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. | ||
+ | |||
+ | The [[#HdlsState]] will be applied for each [[#HdlsHandle]]. If a [[#HdlsHandle]] is not found, code similar to [[#AttachHdlsVirtualDevice]] will run with the [[#HdlsDeviceInfo]], then it will continue with applying state with the new device. | ||
+ | |||
+ | == AttachHdlsVirtualDevice == | ||
+ | Takes an [[#HdlsDeviceInfo]], returns a [[#HdlsHandle]]. | ||
+ | |||
+ | == DetachHdlsVirtualDevice == | ||
+ | Takes an input [[#HdlsHandle]], no output. | ||
+ | |||
+ | == SetHdlsState == | ||
+ | Takes an input [[#HdlsState]] and an input [[#HdlsHandle]], no output. | ||
+ | |||
+ | [9.0.0+] Input order was swapped: now takes an input [[#HdlsHandle]] and a [[#HdlsState]], no output. | ||
+ | |||
+ | == AddRegisteredDevice == | ||
+ | Takes an input [[#RegisteredDevice]], no output. | ||
+ | |||
+ | [11.0.0+] Takes an input [[#DebugRegisteredDevice]], no output. | ||
− | = | + | = hid:sys = |
− | This is "nn:: | + | This is "nn::hid::IHidSystemServer". |
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 1,331: | Line 1,428: | ||
! Cmd || Name | ! Cmd || Name | ||
|- | |- | ||
− | | | + | | 31 || [[#SendKeyboardLockKeyEvent_2|SendKeyboardLockKeyEvent]] |
|- | |- | ||
− | | | + | | 101 || [[#AcquireHomeButtonEventHandle]] |
|- | |- | ||
− | | | + | | 111 || [[#ActivateHomeButton]] |
|- | |- | ||
− | | | + | | 121 || [[#AcquireSleepButtonEventHandle]] |
|- | |- | ||
− | | | + | | 131 || [[#ActivateSleepButton]] |
|- | |- | ||
− | | | + | | 141 || [[#AcquireCaptureButtonEventHandle]] |
|- | |- | ||
− | | | + | | 151 || [[#ActivateCaptureButton]] |
|- | |- | ||
− | | | + | | 161 || [7.0.0+] GetPlatformConfig |
|- | |- | ||
− | | | + | | 210 || AcquireNfcDeviceUpdateEventHandle |
|- | |- | ||
− | | | + | | 211 || GetNpadsWithNfc |
+ | |- | ||
+ | | 212 || AcquireNfcActivateEventHandle | ||
+ | |- | ||
+ | | 213 || ActivateNfc | ||
+ | |- | ||
+ | | 214 || [4.0.0+] GetXcdHandleForNpadWithNfc | ||
+ | |- | ||
+ | | 215 || [4.0.0+] IsNfcActivated | ||
+ | |- | ||
+ | | 230 || AcquireIrSensorEventHandle | ||
+ | |- | ||
+ | | 231 || ActivateIrSensor | ||
+ | |- | ||
+ | | 232 || [10.0.0+] GetIrSensorState | ||
+ | |- | ||
+ | | 233 || [10.0.0+] GetXcdHandleForNpadWithIrSensor | ||
+ | |- | ||
+ | | 301 || ActivateNpadSystem | ||
+ | |- | ||
+ | | 303 || ApplyNpadSystemCommonPolicy | ||
+ | |- | ||
+ | | 304 || EnableAssigningSingleOnSlSrPress | ||
|- | |- | ||
− | | | + | | 305 || DisableAssigningSingleOnSlSrPress |
|- | |- | ||
− | | | + | | 306 || GetLastActiveNpad |
|- | |- | ||
− | | | + | | 307 || GetNpadSystemExtStyle |
|- | |- | ||
− | | | + | | 308 || [5.0.0+] ApplyNpadSystemCommonPolicyFull |
|- | |- | ||
− | | | + | | 309 || [5.0.0+] GetNpadFullKeyGripColor |
|- | |- | ||
− | | | + | | 310 || [6.0.0+] [[#GetMaskedSupportedNpadStyleSet]] |
|- | |- | ||
− | | 20 || StartMifareWrite | + | | 311 || SetNpadPlayerLedBlinkingDevice |
+ | |- | ||
+ | | 312 || [6.0.0+] SetSupportedNpadStyleSetAll | ||
+ | |- | ||
+ | | 313 || [9.0.0+] GetNpadCaptureButtonAssignment | ||
+ | |- | ||
+ | | 314 || [9.0.0+] GetAppletFooterUiType | ||
+ | |- | ||
+ | | 315 || [9.0.0+] GetAppletDetailedUiType | ||
+ | |- | ||
+ | | 316 || [10.0.0+] [[#GetNpadInterfaceType]] | ||
+ | |- | ||
+ | | 317 || [10.0.0+] [[#GetNpadLeftRightInterfaceType]] | ||
+ | |- | ||
+ | | 318 || [10.0.0+] [[#HasBattery]] | ||
+ | |- | ||
+ | | 319 || [10.0.0+] [[#HasLeftRightBattery]] | ||
+ | |- | ||
+ | | 321 || [3.0.0+] [[#GetUniquePadsFromNpad]] | ||
+ | |- | ||
+ | | 322 || [10.0.0+] SetNpadSystemExtStateEnabled ([1.0.0-9.2.0] GetIrSensorState) | ||
+ | |- | ||
+ | | 323 || [10.0.0+] GetLastActiveUniquePad ([1.0.0-9.2.0] GetXcdHandleForNpadWithIrSensor) | ||
+ | |- | ||
+ | | 324 || [10.0.0+] GetUniquePadButtonSet | ||
+ | |- | ||
+ | | 325 || [10.0.0+] GetUniquePadColor | ||
+ | |- | ||
+ | | 326 || [10.0.0+] GetUniquePadAppletDetailedUiType | ||
+ | |- | ||
+ | | 327 || [14.0.0+] GetAbstractedPadIdDataFromNpad | ||
+ | |- | ||
+ | | 328 || [14.0.0+] AttachAbstractedPadToNpad | ||
+ | |- | ||
+ | | 329 || [14.0.0+] DetachAbstractedPadAll | ||
+ | |- | ||
+ | | 330 || [14.0.0+] CheckAbstractedPadConnection | ||
+ | |- | ||
+ | | 500 || SetAppletResourceUserId | ||
+ | |- | ||
+ | | 501 || RegisterAppletResourceUserId | ||
+ | |- | ||
+ | | 502 || UnregisterAppletResourceUserId | ||
+ | |- | ||
+ | | 503 || EnableAppletToGetInput | ||
+ | |- | ||
+ | | 504 || SetAruidValidForVibration | ||
+ | |- | ||
+ | | 505 || EnableAppletToGetSixAxisSensor | ||
+ | |- | ||
+ | | 506 || [14.0.0+] EnableAppletToGetPadInput | ||
+ | |- | ||
+ | | 507 || [14.0.0+] EnableAppletToGetTouchScreen | ||
+ | |- | ||
+ | | 510 || [[#SetVibrationMasterVolume]] | ||
+ | |- | ||
+ | | 511 || GetVibrationMasterVolume | ||
+ | |- | ||
+ | | 512 || [3.0.0+] BeginPermitVibrationSession | ||
+ | |- | ||
+ | | 513 || [3.0.0+] EndPermitVibrationSession | ||
+ | |- | ||
+ | | 514 || [12.0.0+] SendVibrationNotificationPattern | ||
+ | |- | ||
+ | | 520 || EnableHandheldHids | ||
+ | |- | ||
+ | | 521 || DisableHandheldHids | ||
+ | |- | ||
+ | | 522 || [9.0.0+] SetJoyConRailEnabled | ||
+ | |- | ||
+ | | 523 || [9.0.0+] IsJoyConRailEnabled | ||
+ | |- | ||
+ | | 524 || [10.0.0+] IsHandheldHidsEnabled | ||
+ | |- | ||
+ | | 525 || [11.0.0+] IsJoyConAttachedOnAllRail | ||
+ | |- | ||
+ | | 540 || AcquirePlayReportControllerUsageUpdateEvent | ||
+ | |- | ||
+ | | 541 || GetPlayReportControllerUsages | ||
+ | |- | ||
+ | | 542 || AcquirePlayReportRegisteredDeviceUpdateEvent | ||
+ | |- | ||
+ | | 543 || GetRegisteredDevicesOld ([1.0.0-4.1.0] GetRegisteredDevices) | ||
+ | |- | ||
+ | | 544 || [3.0.0+] AcquireConnectionTriggerTimeoutEvent | ||
+ | |- | ||
+ | | 545 || [3.0.0+] SendConnectionTrigger | ||
+ | |- | ||
+ | | 546 || [3.0.0+] AcquireDeviceRegisteredEventForControllerSupport | ||
+ | |- | ||
+ | | 547 || [3.0.0+] GetAllowedBluetoothLinksCount | ||
+ | |- | ||
+ | | 548 || [5.0.0+] GetRegisteredDevices | ||
+ | |- | ||
+ | | 549 || [6.0.0+] GetConnectableRegisteredDevices | ||
+ | |- | ||
+ | | 700 || ActivateUniquePad | ||
+ | |- | ||
+ | | 702 || AcquireUniquePadConnectionEventHandle | ||
+ | |- | ||
+ | | 703 || [[#GetUniquePadIds]] | ||
+ | |- | ||
+ | | 751 || AcquireJoyDetachOnBluetoothOffEventHandle | ||
+ | |- | ||
+ | | 800 || ListSixAxisSensorHandles | ||
+ | |- | ||
+ | | 801 || IsSixAxisSensorUserCalibrationSupported | ||
+ | |- | ||
+ | | 802 || ResetSixAxisSensorCalibrationValues | ||
+ | |- | ||
+ | | 803 || StartSixAxisSensorUserCalibration | ||
+ | |- | ||
+ | | 804 || CancelSixAxisSensorUserCalibration | ||
+ | |- | ||
+ | | 805 || [3.0.0+] GetUniquePadBluetoothAddress | ||
+ | |- | ||
+ | | 806 || [3.0.0+] DisconnectUniquePad | ||
+ | |- | ||
+ | | 807 || [5.0.0+] [[#GetUniquePadType]] | ||
+ | |- | ||
+ | | 808 || [5.0.0+] GetUniquePadInterface | ||
+ | |- | ||
+ | | 809 || [5.0.0+] [[#GetUniquePadSerialNumber]] | ||
+ | |- | ||
+ | | 810 || [5.0.0+] GetUniquePadControllerNumber | ||
+ | |- | ||
+ | | 811 || [5.0.0+] GetSixAxisSensorUserCalibrationStage | ||
+ | |- | ||
+ | | 812 || [8.0.0+] GetConsoleUniqueSixAxisSensorHandle | ||
+ | |- | ||
+ | | 821 || StartAnalogStickManualCalibration | ||
+ | |- | ||
+ | | 822 || RetryCurrentAnalogStickManualCalibrationStage | ||
+ | |- | ||
+ | | 823 || CancelAnalogStickManualCalibration | ||
+ | |- | ||
+ | | 824 || ResetAnalogStickManualCalibration | ||
+ | |- | ||
+ | | 825 || [5.0.0+] GetAnalogStickState | ||
+ | |- | ||
+ | | 826 || [5.0.0+] GetAnalogStickManualCalibrationStage | ||
+ | |- | ||
+ | | 827 || [5.0.0+] IsAnalogStickButtonPressed | ||
+ | |- | ||
+ | | 828 || [5.0.0+] IsAnalogStickInReleasePosition | ||
+ | |- | ||
+ | | 829 || [5.0.0+] IsAnalogStickInCircumference | ||
+ | |- | ||
+ | | 830 || [7.0.0+] [[#SetNotificationLedPattern]] | ||
+ | |- | ||
+ | | 831 || [9.0.0+] [[#SetNotificationLedPatternWithTimeout]] | ||
+ | |- | ||
+ | | 832 || [9.0.0+] [[#PrepareHidsForNotificationWake]] | ||
+ | |- | ||
+ | | 850 || [3.0.0+] [[#IsUsbFullKeyControllerEnabled]] | ||
+ | |- | ||
+ | | 851 || [3.0.0+] [[#EnableUsbFullKeyController]] | ||
+ | |- | ||
+ | | 852 || [3.0.0+] [[#IsUsbConnected]] | ||
+ | |- | ||
+ | | 870 || [5.1.0+] IsHandheldButtonPressedOnConsoleMode | ||
+ | |- | ||
+ | | 900 || [1.0.0-9.2.0] ActivateInputDetector | ||
+ | |- | ||
+ | | 901 || [1.0.0-9.2.0] [[#NotifyInputDetector]] | ||
+ | |- | ||
+ | | 1000 || [3.0.0+] InitializeFirmwareUpdate | ||
+ | |- | ||
+ | | 1001 || [3.0.0+] GetFirmwareVersion | ||
+ | |- | ||
+ | | 1002 || [3.0.0+] GetAvailableFirmwareVersion | ||
+ | |- | ||
+ | | 1003 || [3.0.0+] IsFirmwareUpdateAvailable | ||
+ | |- | ||
+ | | 1004 || [3.0.0+] CheckFirmwareUpdateRequired | ||
+ | |- | ||
+ | | 1005 || [3.0.0+] StartFirmwareUpdate | ||
+ | |- | ||
+ | | 1006 || [3.0.0+] AbortFirmwareUpdate | ||
+ | |- | ||
+ | | 1007 || [3.0.0+] GetFirmwareUpdateState | ||
+ | |- | ||
+ | | 1008 || [4.0.0+] ActivateAudioControl | ||
+ | |- | ||
+ | | 1009 || [4.0.0+] AcquireAudioControlEventHandle | ||
+ | |- | ||
+ | | 1010 || [4.0.0+] GetAudioControlStates | ||
+ | |- | ||
+ | | 1011 || [4.0.0+] DeactivateAudioControl | ||
+ | |- | ||
+ | | 1050 || [5.0.0+] IsSixAxisSensorAccurateUserCalibrationSupported | ||
+ | |- | ||
+ | | 1051 || [5.0.0+] StartSixAxisSensorAccurateUserCalibration | ||
+ | |- | ||
+ | | 1052 || [5.0.0+] CancelSixAxisSensorAccurateUserCalibration | ||
+ | |- | ||
+ | | 1053 || [5.0.0+] GetSixAxisSensorAccurateUserCalibrationState | ||
+ | |- | ||
+ | | 1100 || [5.0.0+] [[#GetHidbusSystemServiceObject]] | ||
+ | |- | ||
+ | | 1120 || [6.0.0+] SetFirmwareHotfixUpdateSkipEnabled | ||
+ | |- | ||
+ | | 1130 || [6.0.0+] InitializeUsbFirmwareUpdate | ||
+ | |- | ||
+ | | 1131 || [6.0.0+] FinalizeUsbFirmwareUpdate | ||
+ | |- | ||
+ | | 1132 || [6.0.0+] CheckUsbFirmwareUpdateRequired | ||
+ | |- | ||
+ | | 1133 || [6.0.0+] StartUsbFirmwareUpdate | ||
+ | |- | ||
+ | | 1134 || [6.0.0+] GetUsbFirmwareUpdateState | ||
+ | |- | ||
+ | | 1150 || [8.0.0+] SetTouchScreenMagnification | ||
+ | |- | ||
+ | | 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 | ||
+ | |- | ||
+ | | 1157 || [10.0.0+] [[#CancelConnectionTrigger]] | ||
+ | |- | ||
+ | | 1200 || [10.0.0+] [[#IsButtonConfigSupported]] | ||
+ | |- | ||
+ | | 1201 || [11.0.0+] [[#IsButtonConfigEmbeddedSupported]] ([10.0.0-10.2.0] [[#DeleteButtonConfig]]) | ||
+ | |- | ||
+ | | 1202 || [11.0.0+] [[#DeleteButtonConfig]] ([10.0.0-10.2.0] [[#SetButtonConfigEnabled]]) | ||
+ | |- | ||
+ | | 1203 || [11.0.0+] [[#DeleteButtonConfigEmbedded]] ([10.0.0-10.2.0] [[#IsButtonConfigEnabled]]) | ||
+ | |- | ||
+ | | 1204 || [11.0.0+] [[#SetButtonConfigEnabled]] ([10.0.0-10.2.0] [[#SetButtonConfigEmbedded]]) | ||
+ | |- | ||
+ | | 1205 || [11.0.0+] [[#SetButtonConfigEmbeddedEnabled]] ([10.0.0-10.2.0] [[#SetButtonConfigFull]]) | ||
+ | |- | ||
+ | | 1206 || [11.0.0+] [[#IsButtonConfigEnabled]] ([10.0.0-10.2.0] [[#SetButtonConfigLeft]]) | ||
+ | |- | ||
+ | | 1207 || [11.0.0+] [[#IsButtonConfigEmbeddedEnabled]] ([10.0.0-10.2.0] [[#SetButtonConfigRight]]) | ||
+ | |- | ||
+ | | 1208 || [11.0.0+] [[#SetButtonConfigEmbedded]] ([10.0.0-10.2.0] [[#GetButtonConfigEmbedded]]) | ||
+ | |- | ||
+ | | 1209 || [11.0.0+] [[#SetButtonConfigFull]] ([10.0.0-10.2.0] [[#GetButtonConfigFull]]) | ||
+ | |- | ||
+ | | 1210 || [10.0.0-10.2.0] [[#GetButtonConfigLeft]] | ||
+ | |- | ||
+ | | 1211 || [11.0.0+] [[#SetButtonConfigRight]] ([10.0.0-10.2.0] [[#GetButtonConfigRight]]) | ||
+ | |- | ||
+ | | 1212 || [11.0.0+] [[#GetButtonConfigEmbedded]] | ||
+ | |- | ||
+ | | 1213 || [11.0.0+] [[#GetButtonConfigFull]] | ||
+ | |- | ||
+ | | 1214 || [11.0.0+] [[#GetButtonConfigLeft]] | ||
+ | |- | ||
+ | | 1215 || [11.0.0+] [[#GetButtonConfigRight]] | ||
+ | |- | ||
+ | | 1250 || [10.0.0+] [[#IsCustomButtonConfigSupported]] | ||
+ | |- | ||
+ | | 1251 || [10.0.0+] [[#IsDefaultButtonConfigEmbedded]] | ||
+ | |- | ||
+ | | 1252 || [10.0.0+] [[#IsDefaultButtonConfigFull]] | ||
+ | |- | ||
+ | | 1253 || [10.0.0+] [[#IsDefaultButtonConfigLeft]] | ||
+ | |- | ||
+ | | 1254 || [10.0.0+] [[#IsDefaultButtonConfigRight]] | ||
+ | |- | ||
+ | | 1255 || [10.0.0+] [[#IsButtonConfigStorageEmbeddedEmpty]] | ||
+ | |- | ||
+ | | 1256 || [10.0.0+] [[#IsButtonConfigStorageFullEmpty]] | ||
+ | |- | ||
+ | | 1257 || [10.0.0+] [[#IsButtonConfigStorageLeftEmpty]] | ||
+ | |- | ||
+ | | 1258 || [10.0.0+] [[#IsButtonConfigStorageRightEmpty]] | ||
+ | |- | ||
+ | | 1259 || [11.0.0-12.1.0] [[#GetButtonConfigStorageEmbeddedDeprecated]] ([10.0.0-10.2.0] [[#GetButtonConfigStorageEmbeddedDeprecated|GetButtonConfigStorageEmbedded]]) | ||
+ | |- | ||
+ | | 1260 || [11.0.0-12.1.0] [[#GetButtonConfigStorageFullDeprecated]] ([10.0.0-10.2.0] [[#GetButtonConfigStorageFullDeprecated|GetButtonConfigStorageFull]]) | ||
+ | |- | ||
+ | | 1261 || [11.0.0-12.1.0] [[#GetButtonConfigStorageLeftDeprecated]] ([10.0.0-10.2.0] [[#GetButtonConfigStorageLeftDeprecated|GetButtonConfigStorageLeft]]) | ||
+ | |- | ||
+ | | 1262 || [11.0.0-12.1.0] [[#GetButtonConfigStorageRightDeprecated]] ([10.0.0-10.2.0] [[#GetButtonConfigStorageRightDeprecated|GetButtonConfigStorageRight]]) | ||
+ | |- | ||
+ | | 1263 || [11.0.0-12.1.0] [[#SetButtonConfigStorageEmbeddedDeprecated]] ([10.0.0-10.2.0] [[#SetButtonConfigStorageEmbeddedDeprecated|SetButtonConfigStorageEmbedded]]) | ||
+ | |- | ||
+ | | 1264 || [11.0.0-12.1.0] [[#SetButtonConfigStorageFullDeprecated]] ([10.0.0-10.2.0] [[#SetButtonConfigStorageFullDeprecated|SetButtonConfigStorageFull]]) | ||
+ | |- | ||
+ | | 1265 || [11.0.0-12.1.0] [[#SetButtonConfigStorageLeftDeprecated]] ([10.0.0-10.2.0] [[#SetButtonConfigStorageLeftDeprecated|SetButtonConfigStorageLeft]]) | ||
+ | |- | ||
+ | | 1266 || [11.0.0-12.1.0] [[#SetButtonConfigStorageRightDeprecated]] ([10.0.0-10.2.0] [[#SetButtonConfigStorageRightDeprecated|SetButtonConfigStorageRight]]) | ||
+ | |- | ||
+ | | 1267 || [10.0.0+] [[#DeleteButtonConfigStorageEmbedded]] | ||
+ | |- | ||
+ | | 1268 || [10.0.0+] [[#DeleteButtonConfigStorageFull]] | ||
+ | |- | ||
+ | | 1269 || [10.0.0+] [[#DeleteButtonConfigStorageLeft]] | ||
+ | |- | ||
+ | | 1270 || [10.0.0+] [[#DeleteButtonConfigStorageRight]] | ||
+ | |- | ||
+ | | 1271 || [10.0.0+] [[#IsUsingCustomButtonConfig]] | ||
+ | |- | ||
+ | | 1272 || [10.0.0+] [[#IsAnyCustomButtonConfigEnabled]] | ||
+ | |- | ||
+ | | 1273 || [10.0.0+] [[#SetAllCustomButtonConfigEnabled]] | ||
+ | |- | ||
+ | | 1274 || [10.0.0+] [[#SetDefaultButtonConfig]] | ||
+ | |- | ||
+ | | 1275 || [10.0.0+] [[#SetAllDefaultButtonConfig]] | ||
+ | |- | ||
+ | | 1276 || [10.0.0+] [[#SetHidButtonConfigEmbedded]] | ||
+ | |- | ||
+ | | 1277 || [10.0.0+] [[#SetHidButtonConfigFull]] | ||
+ | |- | ||
+ | | 1278 || [10.0.0+] [[#SetHidButtonConfigLeft]] | ||
+ | |- | ||
+ | | 1279 || [10.0.0+] [[#SetHidButtonConfigRight]] | ||
+ | |- | ||
+ | | 1280 || [10.0.0+] [[#GetHidButtonConfigEmbedded]] | ||
+ | |- | ||
+ | | 1281 || [10.0.0+] [[#GetHidButtonConfigFull]] | ||
+ | |- | ||
+ | | 1282 || [10.0.0+] [[#GetHidButtonConfigLeft]] | ||
+ | |- | ||
+ | | 1283 || [10.0.0+] [[#GetHidButtonConfigRight]] | ||
+ | |- | ||
+ | | 1284 || [11.0.0+] [[#GetButtonConfigStorageEmbedded]] | ||
+ | |- | ||
+ | | 1285 || [11.0.0+] [[#GetButtonConfigStorageFull]] | ||
+ | |- | ||
+ | | 1286 || [11.0.0+] [[#GetButtonConfigStorageLeft]] | ||
+ | |- | ||
+ | | 1287 || [11.0.0+] [[#GetButtonConfigStorageRight]] | ||
+ | |- | ||
+ | | 1288 || [11.0.0+] [[#SetButtonConfigStorageEmbedded]] | ||
+ | |- | ||
+ | | 1289 || [11.0.0+] [[#SetButtonConfigStorageFull]] | ||
+ | |- | ||
+ | | 1290 || [11.0.0+] [[#SetButtonConfigStorageLeft]] | ||
+ | |- | ||
+ | | 1291 || [11.0.0+] [[#SetButtonConfigStorageRight]] | ||
+ | |- | ||
+ | | 12010 || [11.0.0+] [[#SetButtonConfigLeft]] | ||
+ | |} | ||
+ | |||
+ | == SendKeyboardLockKeyEvent == | ||
+ | Takes an u32 BitFlagSet [[#KeyboardLockKeyEvent]], no output. | ||
+ | |||
+ | == AcquireHomeButtonEventHandle == | ||
+ | Takes a PID, an [[AM_services|AppletResourceUserId]], returns an output Event handle. | ||
+ | |||
+ | The EventClearMode used by sdknso is user-specified. The Event is signaled when [[#HomeButtonState]] is updated. | ||
+ | |||
+ | This is used by [[AM_services|AM]]. | ||
+ | |||
+ | == ActivateHomeButton == | ||
+ | Takes a PID, an [[AM_services|AppletResourceUserId]], no output. | ||
+ | |||
+ | Activates the [[#HomeButtonSharedMemoryFormat|HomeButton]] sharedmem. | ||
+ | |||
+ | == AcquireSleepButtonEventHandle == | ||
+ | Takes a PID, an [[AM_services|AppletResourceUserId]], returns an output Event handle. | ||
+ | |||
+ | The EventClearMode used by sdknso is user-specified. The Event is signaled when [[#SleepButtonState]] is updated. | ||
+ | |||
+ | This is used by [[AM_services|AM]]. | ||
+ | |||
+ | == ActivateSleepButton == | ||
+ | Takes a PID, an [[AM_services|AppletResourceUserId]], no output. | ||
+ | |||
+ | Activates the [[#SleepButtonSharedMemoryFormat|SleepButton]] sharedmem. | ||
+ | |||
+ | == AcquireCaptureButtonEventHandle == | ||
+ | Takes a PID, an [[AM_services|AppletResourceUserId]], returns an output Event handle. | ||
+ | |||
+ | The EventClearMode used by sdknso is user-specified. The Event is signaled when [[#CaptureButtonState]] is updated. | ||
+ | |||
+ | This is used by [[AM_services|AM]]. | ||
+ | |||
+ | == ActivateCaptureButton == | ||
+ | Takes a PID, an [[AM_services|AppletResourceUserId]], no output. | ||
+ | |||
+ | Activates the [[#CaptureButtonSharedMemoryFormat|CaptureButton]] sharedmem. | ||
+ | |||
+ | == GetMaskedSupportedNpadStyleSet == | ||
+ | Takes an input u64 AppletResourceUserId, returns an output u32 [[#NpadStyleTag]]. | ||
+ | |||
+ | Official sw uses the output from [[Applet_Manager_services|GetAppletResourceUserIdOfCallerApplet]] with this. | ||
+ | |||
+ | == GetUniquePadsFromNpad == | ||
+ | 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 [[#UniquePadId]]. | ||
+ | |||
+ | == SetVibrationMasterVolume == | ||
+ | Takes an input 32bit float. | ||
+ | |||
+ | == GetUniquePadIds == | ||
+ | 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 [[#UniquePadId]]. | ||
+ | |||
+ | == GetUniquePadType == | ||
+ | Takes an input [[#UniquePadId]] and returns an output u64 [[#UniquePadType]]. | ||
+ | |||
+ | == GetUniquePadSerialNumber == | ||
+ | Takes an input [[#UniquePadId]] and returns an output [[#UniquePadSerialNumber]]. | ||
+ | |||
+ | == SetNotificationLedPattern == | ||
+ | Takes an input [[#NotificationLedPattern]] and an [[#UniquePadId]], no output. | ||
+ | |||
+ | The specified controller must have a HOME button. | ||
+ | |||
+ | 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 [[#UniquePadId]], and an s64 TimeSpan, no output. | ||
+ | |||
+ | == PrepareHidsForNotificationWake == | ||
+ | Takes a type-0x9 input buffer containing an array of [[#UniquePadId]], no output. | ||
+ | |||
+ | == IsUsbConnected == | ||
+ | Tales an input [[#UniquePadId]], returns an output bool. | ||
+ | |||
+ | == NotifyInputDetector == | ||
+ | Takes an input u32 bitmask InputSourceId, no output. | ||
+ | |||
+ | This is the only hid:sys command used by USB-sysmodule (with value 0x40). | ||
+ | |||
+ | == GetHidbusSystemServiceObject == | ||
+ | No input, returns an [[#IHidbusSystemServer]]. | ||
+ | |||
+ | == IsFirmwareAvailableForNotification == | ||
+ | Takes a PID, a s32, an [[#UniquePadId]], an [[AM_services|AppletResourceUserId]], returns an output bool. | ||
+ | |||
+ | sdknso uses hard-coded value 1 for the s32. | ||
+ | |||
+ | == CancelConnectionTrigger == | ||
+ | Takes an input "nn::bluetooth::Address", no output. | ||
+ | |||
+ | == IsButtonConfigSupported == | ||
+ | Takes an input [[#UniquePadId]], returns an output bool. | ||
+ | |||
+ | [11.0.0+] Takes an input [[Bluetooth_Driver_services#Address|Address]], returns an output bool. | ||
+ | |||
+ | == IsButtonConfigEmbeddedSupported == | ||
+ | No input, returns an output bool. | ||
+ | |||
+ | == DeleteButtonConfig == | ||
+ | Takes an input [[#UniquePadId]], no output. | ||
+ | |||
+ | [11.0.0+] Takes an input [[Bluetooth_Driver_services#Address|Address]], no output. | ||
+ | |||
+ | == DeleteButtonConfigEmbedded == | ||
+ | No input/output. | ||
+ | |||
+ | == SetButtonConfigEnabled == | ||
+ | Takes an input bool, an [[#UniquePadId]], no output. | ||
+ | |||
+ | [11.0.0+] Takes an input bool, an [[Bluetooth_Driver_services#Address|Address]], no output. | ||
+ | |||
+ | == SetButtonConfigEmbeddedEnabled == | ||
+ | Takes an input bool, no output. | ||
+ | |||
+ | == IsButtonConfigEnabled == | ||
+ | Takes an input [[#UniquePadId]], returns an output bool. | ||
+ | |||
+ | [11.0.0+] Takes an input [[Bluetooth_Driver_services#Address|Address]], returns an output bool. | ||
+ | |||
+ | == IsButtonConfigEmbeddedEnabled == | ||
+ | No input, returns an output bool. | ||
+ | |||
+ | == SetButtonConfigEmbedded == | ||
+ | Takes ([10.0.0-10.2.0] an input [[#UniquePadId]]), a type-0x15 input buffer containing a [[#SystemButtonConfigEmbedded]], no output. | ||
+ | |||
+ | == SetButtonConfigFull == | ||
+ | Takes an input [[#UniquePadId]], a type-0x15 input buffer containing a [[#SystemButtonConfigFull]], no output. | ||
+ | |||
+ | [11.0.0+] Takes an input [[Bluetooth_Driver_services#Address|Address]], a type-0x15 input buffer containing a [[#SystemButtonConfigFull]], no output. | ||
+ | |||
+ | == SetButtonConfigLeft == | ||
+ | Takes an input [[#UniquePadId]], a type-0x15 input buffer containing a [[#SystemButtonConfigLeft]], no output. | ||
+ | |||
+ | [11.0.0+] Takes an input [[Bluetooth_Driver_services#Address|Address]], a type-0x15 input buffer containing a [[#SystemButtonConfigLeft]], no output. | ||
+ | |||
+ | == SetButtonConfigRight == | ||
+ | Takes an input [[#UniquePadId]], a type-0x15 input buffer containing a [[#SystemButtonConfigRight]], no output. | ||
+ | |||
+ | [11.0.0+] Takes an input [[Bluetooth_Driver_services#Address|Address]], a type-0x15 input buffer containing a [[#SystemButtonConfigRight]], no output. | ||
+ | |||
+ | == GetButtonConfigEmbedded == | ||
+ | Takes ([10.0.0-10.2.0] an input [[#UniquePadId]]), and a type-0x16 output buffer containing a [[#SystemButtonConfigEmbedded]]. | ||
+ | |||
+ | == GetButtonConfigFull == | ||
+ | Takes an input [[#UniquePadId]], and a type-0x16 output buffer containing a [[#SystemButtonConfigFull]]. | ||
+ | |||
+ | [11.0.0+] Takes an input [[Bluetooth_Driver_services#Address|Address]], and a type-0x16 output buffer containing a [[#SystemButtonConfigFull]]. | ||
+ | |||
+ | == GetButtonConfigLeft == | ||
+ | Takes an input [[#UniquePadId]], and a type-0x16 output buffer containing a [[#SystemButtonConfigLeft]]. | ||
+ | |||
+ | [11.0.0+] Takes an input [[Bluetooth_Driver_services#Address|Address]], and a type-0x16 output buffer containing a [[#SystemButtonConfigLeft]]. | ||
+ | |||
+ | == GetButtonConfigRight == | ||
+ | Takes an input [[#UniquePadId]], and a type-0x16 output buffer containing a [[#SystemButtonConfigRight]]. | ||
+ | |||
+ | [11.0.0+] Takes an input [[Bluetooth_Driver_services#Address|Address]], and a type-0x16 output buffer containing a [[#SystemButtonConfigRight]]. | ||
+ | |||
+ | == IsCustomButtonConfigSupported == | ||
+ | Takes an input [[#UniquePadId]], returns an output bool. | ||
+ | |||
+ | == IsDefaultButtonConfigEmbedded == | ||
+ | Takes a type-0x15 input buffer containing a [[#ButtonConfigEmbedded]], returns an output bool. | ||
+ | |||
+ | This compares the input config with config in state, sets the output bool to whether these match, then returns 0. | ||
+ | |||
+ | == IsDefaultButtonConfigFull == | ||
+ | Takes a type-0x15 input buffer containing a [[#ButtonConfigFull]], returns an output bool. | ||
+ | |||
+ | This compares the input config with config in state, sets the output bool to whether these match, then returns 0. | ||
+ | |||
+ | == IsDefaultButtonConfigLeft == | ||
+ | Takes a type-0x15 input buffer containing a [[#ButtonConfigLeft]], returns an output bool. | ||
+ | |||
+ | This compares the input config with config in state, sets the output bool to whether these match, then returns 0. | ||
+ | |||
+ | == IsDefaultButtonConfigRight == | ||
+ | Takes a type-0x15 input buffer containing a [[#ButtonConfigRight]], returns an output bool. | ||
+ | |||
+ | This compares the input config with config in state, sets the output bool to whether these match, then returns 0. | ||
+ | |||
+ | == IsButtonConfigStorageEmbeddedEmpty == | ||
+ | Takes an input s32 entry-index, returns an output bool. | ||
+ | |||
+ | [10.1.0-10.2.0] This will now Abort if the s32 is negative or >=5. [11.0.0+] This value must now be unsigned <=4, otherwise 0 is returned. | ||
+ | |||
+ | Uses [[Settings_services#GetButtonConfigSettingsEmbedded|GetButtonConfigSettingsEmbedded]] with count=5 (output s32 ignored). The input entry-index is used with this array. Then the output bool is set to [[Settings_services#ButtonConfigSettings|IsFull]] bit0 == 0. Then 0 is returned. | ||
+ | |||
+ | == IsButtonConfigStorageFullEmpty == | ||
+ | Takes an input s32 entry-index, returns an output bool. | ||
+ | |||
+ | Same as [[#IsButtonConfigStorageEmbeddedEmpty]] except with a different setsys cmd. | ||
+ | |||
+ | == IsButtonConfigStorageLeftEmpty == | ||
+ | Takes an input s32 entry-index, returns an output bool. | ||
+ | |||
+ | Same as [[#IsButtonConfigStorageEmbeddedEmpty]] except with a different setsys cmd. | ||
+ | |||
+ | == IsButtonConfigStorageRightEmpty == | ||
+ | Takes an input s32 entry-index, returns an output bool. | ||
+ | |||
+ | Same as [[#IsButtonConfigStorageEmbeddedEmpty]] except with a different setsys cmd. | ||
+ | |||
+ | == GetButtonConfigStorageEmbeddedDeprecated == | ||
+ | Takes an input s32 entry-index, and a type-0x16 output buffer containing a [[#ButtonConfigEmbedded]]. | ||
+ | |||
+ | [10.1.0-10.2.0] This will now Abort if the s32 is negative or >=5. | ||
+ | |||
+ | [11.0.0+] This now calls the same func internally as [[#GetButtonConfigStorageEmbedded]], except the [[#StorageName]] isn't exposed. | ||
+ | |||
+ | Uses [[Settings_services#GetButtonConfigSettingsEmbedded|GetButtonConfigSettingsEmbedded]] with count=5 (output s32 ignored). The input entry-index is used with this array. Then an error is thrown if [[Settings_services#ButtonConfigSettings|IsFull]] bit0 is clear. Then the data at +0x1C8 is converted to [[#ButtonConfigEmbedded]], copied to output, and returns 0. | ||
+ | |||
+ | == GetButtonConfigStorageFullDeprecated == | ||
+ | Takes an input s32 entry-index, and a type-0x16 output buffer containing a [[#ButtonConfigFull]]. | ||
+ | |||
+ | Same as [[#GetButtonConfigStorageEmbeddedDeprecated]], except this uses a different setsys cmd, and uses a different conversion func / different output struct. | ||
+ | |||
+ | == GetButtonConfigStorageLeftDeprecated == | ||
+ | Takes an input s32 entry-index, and a type-0x16 output buffer containing a [[#ButtonConfigLeft]]. | ||
+ | |||
+ | Same as [[#GetButtonConfigStorageEmbeddedDeprecated]], except this uses a different setsys cmd, and uses a different conversion func / different output struct. | ||
+ | |||
+ | == GetButtonConfigStorageRightDeprecated == | ||
+ | Takes an input s32 entry-index, and a type-0x16 output buffer containing a [[#ButtonConfigRight]]. | ||
+ | |||
+ | Same as [[#GetButtonConfigStorageEmbeddedDeprecated]], except this uses a different setsys cmd, and uses a different conversion func / different output struct. | ||
+ | |||
+ | == SetButtonConfigStorageEmbeddedDeprecated == | ||
+ | Takes an input s32 entry-index, and a type-0x15 input buffer containing a [[#ButtonConfigEmbedded]]. | ||
+ | |||
+ | [10.1.0-10.2.0] This will now Abort if the s32 is negative or >=5. | ||
+ | |||
+ | [11.0.0+] This now calls the same func internally as [[#SetButtonConfigStorageEmbedded]], except the [[#StorageName]] isn't exposed. | ||
+ | |||
+ | If the input config matches the [[#IsDefaultButtonConfigEmbedded|default]], this first does: | ||
+ | * Uses [[Settings_services#GetButtonConfigSettingsEmbedded|GetButtonConfigSettingsEmbedded]] with count=5 (output s32 ignored). The input entry-index is used with this array. When [[Settings_services#ButtonConfigSettings|IsFull]] is set, the config is deleted the same way as [[#DeleteButtonConfigStorageEmbedded]] (following the IsFull check). | ||
+ | |||
+ | Afterwards, this uses [[Settings_services#GetButtonConfigSettingsEmbedded|GetButtonConfigSettingsEmbedded]] with count=5 (output s32 ignored). The input entry-index is used with this array. The input struct is converted, the output from that is copied to +0x1C8 size 0x3E0, IsFull is set, [[Settings_services#SetButtonConfigSettingsEmbedded|SetButtonConfigSettingsEmbedded]] is used with the updated array, and then returns 0. | ||
+ | |||
+ | == SetButtonConfigStorageFullDeprecated == | ||
+ | Takes an input s32 entry-index, and a type-0x15 input buffer containing a [[#ButtonConfigFull]]. | ||
+ | |||
+ | Same as [[#SetButtonConfigStorageEmbeddedDeprecated]], except this uses different setsys cmds, and uses a different structs etc. | ||
+ | |||
+ | == SetButtonConfigStorageLeftDeprecated == | ||
+ | Takes an input s32 entry-index, and a type-0x15 input buffer containing a [[#ButtonConfigLeft]]. | ||
+ | |||
+ | Same as [[#SetButtonConfigStorageEmbeddedDeprecated]], except this uses different setsys cmds, and uses a different structs etc. | ||
+ | |||
+ | == SetButtonConfigStorageRightDeprecated == | ||
+ | Takes an input s32 entry-index, and a type-0x15 input buffer containing a [[#ButtonConfigRight]]. | ||
+ | |||
+ | Same as [[#SetButtonConfigStorageEmbeddedDeprecated]], except this uses different setsys cmds, and uses a different structs etc. | ||
+ | |||
+ | == DeleteButtonConfigStorageEmbedded == | ||
+ | Takes an input s32 entry-index, no output. | ||
+ | |||
+ | [10.1.0-10.2.0] This will now Abort if the s32 is negative or >=5. [11.0.0+] When the input s32 is larger than unsigned value 4, an error is returned. | ||
+ | |||
+ | Uses [[Settings_services#GetButtonConfigSettingsEmbedded|GetButtonConfigSettingsEmbedded]] with count=5 (output s32 ignored). The input entry-index is used with this array. Then an error is thrown if [[Settings_services#ButtonConfigSettings|IsFull]] bit0 is clear. Then the data at +0x1C8 size 0x3E0 is cleared, IsFull bit0 is cleared, [[Settings_services#SetButtonConfigSettingsEmbedded|SetButtonConfigSettingsEmbedded]] is used with the updated array, and then returns 0. | ||
+ | |||
+ | == DeleteButtonConfigStorageFull == | ||
+ | Takes an input s32 entry-index, no output. | ||
+ | |||
+ | Same as [[#DeleteButtonConfigStorageEmbedded]] except with different setsys cmds. | ||
+ | |||
+ | == DeleteButtonConfigStorageLeft == | ||
+ | Takes an input s32 entry-index, no output. | ||
+ | |||
+ | Same as [[#DeleteButtonConfigStorageEmbedded]] except with different setsys cmds. | ||
+ | |||
+ | == DeleteButtonConfigStorageRight == | ||
+ | Takes an input s32 entry-index, no output. | ||
+ | |||
+ | Same as [[#DeleteButtonConfigStorageEmbedded]] except with different setsys cmds. | ||
+ | |||
+ | == IsUsingCustomButtonConfig == | ||
+ | Takes an input [[#UniquePadId]], returns an output bool. | ||
+ | |||
+ | == IsAnyCustomButtonConfigEnabled == | ||
+ | No input, returns an output bool. | ||
+ | |||
+ | == SetAllCustomButtonConfigEnabled == | ||
+ | Takes an input bool and an AppletResourceUserId, no output. | ||
+ | |||
+ | == SetDefaultButtonConfig == | ||
+ | Takes an input [[#UniquePadId]], no output. | ||
+ | |||
+ | == SetAllDefaultButtonConfig == | ||
+ | No input/output. | ||
+ | |||
+ | == SetHidButtonConfigEmbedded == | ||
+ | Takes an input [[#UniquePadId]] and a type-0x15 input buffer containing a [[#ButtonConfigEmbedded]], no output. | ||
+ | |||
+ | == SetHidButtonConfigFull == | ||
+ | Takes an input [[#UniquePadId]] and a type-0x15 input buffer containing a [[#ButtonConfigFull]], no output. | ||
+ | |||
+ | == SetHidButtonConfigLeft == | ||
+ | Takes an input [[#UniquePadId]] and a type-0x15 input buffer containing a [[#ButtonConfigLeft]], no output. | ||
+ | |||
+ | == SetHidButtonConfigRight == | ||
+ | Takes an input [[#UniquePadId]] and a type-0x15 input buffer containing a [[#ButtonConfigRight]], no output. | ||
+ | |||
+ | == GetHidButtonConfigEmbedded == | ||
+ | Takes an input [[#UniquePadId]], and a type-0x16 output buffer containing a [[#ButtonConfigEmbedded]]. | ||
+ | |||
+ | == GetHidButtonConfigFull == | ||
+ | Takes an input [[#UniquePadId]], and a type-0x16 output buffer containing a [[#ButtonConfigFull]]. | ||
+ | |||
+ | == GetHidButtonConfigLeft == | ||
+ | Takes an input [[#UniquePadId]], and a type-0x16 output buffer containing a [[#ButtonConfigLeft]]. | ||
+ | |||
+ | == GetHidButtonConfigRight == | ||
+ | Takes an input [[#UniquePadId]], and a type-0x16 output buffer containing a [[#ButtonConfigRight]]. | ||
+ | |||
+ | == GetButtonConfigStorageEmbedded == | ||
+ | Takes an input s32, a type-0x16 output buffer containing a [[#ButtonConfigEmbedded]], a type-0x1A output buffer containing a [[#StorageName]]. | ||
+ | |||
+ | When the input s32 is larger than unsigned value 4, an error is returned. | ||
+ | |||
+ | == GetButtonConfigStorageFull == | ||
+ | Takes an input s32, a type-0x16 output buffer containing a [[#ButtonConfigFull]], a type-0x1A output buffer containing a [[#StorageName]]. | ||
+ | |||
+ | == GetButtonConfigStorageLeft == | ||
+ | Takes an input s32, a type-0x16 output buffer containing a [[#ButtonConfigLeft]], a type-0x1A output buffer containing a [[#StorageName]]. | ||
+ | |||
+ | == GetButtonConfigStorageRight == | ||
+ | Takes an input s32, a type-0x16 output buffer containing a [[#ButtonConfigRight]], a type-0x1A output buffer containing a [[#StorageName]]. | ||
+ | |||
+ | == SetButtonConfigStorageEmbedded == | ||
+ | Takes an input s32, a type-0x15 input buffer containing a [[#ButtonConfigEmbedded]], a type-0x19 input buffer containing a [[#StorageName]]. | ||
+ | |||
+ | When the input s32 is larger than unsigned value 4, this will immediately return (this cmd always returns 0 regardless). | ||
+ | |||
+ | == SetButtonConfigStorageFull == | ||
+ | Takes an input s32, a type-0x15 input buffer containing a [[#ButtonConfigFull]], a type-0x19 input buffer containing a [[#StorageName]]. | ||
+ | |||
+ | == SetButtonConfigStorageLeft == | ||
+ | Takes an input s32, a type-0x15 input buffer containing a [[#ButtonConfigLeft]], a type-0x19 input buffer containing a [[#StorageName]]. | ||
+ | |||
+ | == SetButtonConfigStorageRight == | ||
+ | Takes an input s32, a type-0x15 input buffer containing a [[#ButtonConfigRight]], a type-0x19 input buffer containing a [[#StorageName]]. | ||
+ | |||
+ | == IHidbusSystemServer == | ||
+ | This is "nn::hidbus::IHidbusSystemServer". | ||
+ | |||
+ | This was added with [5.0.0+]. | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Cmd || Name | ||
+ | |- | ||
+ | | 500 || SetAppletResourceUserId | ||
+ | |- | ||
+ | | 501 || RegisterAppletResourceUserId | ||
+ | |- | ||
+ | | 502 || UnregisterAppletResourceUserId | ||
+ | |} | ||
+ | |||
+ | = hid:tmp = | ||
+ | This is "nn::hid::IHidTemporaryServer". | ||
+ | |||
+ | This service was added with [3.0.0+], then removed with [8.0.0+]. | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Cmd || Name | ||
+ | |- | ||
+ | | 0 || GetConsoleSixAxisSensorCalibrationValues | ||
+ | |} | ||
+ | |||
+ | = irs = | ||
+ | This is "nn::irsensor::IIrSensorServer". | ||
+ | |||
+ | This was added to sdknso with 3.x. | ||
+ | |||
+ | With sdknso versions pre-4.x PointingProcessor used to be DpdProcessor. The [[#PackedPointingProcessorConfig|packed-config]] with DpdProcessor (besides RequiredMcuVersion) used to be initialized from user-specified config, now it's hard-coded. | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Cmd || Name | ||
+ | |- | ||
+ | | 302 || [[#ActivateIrsensor]] | ||
+ | |- | ||
+ | | 303 || [[#DeactivateIrsensor]] | ||
+ | |- | ||
+ | | 304 || [[#GetIrsensorSharedMemoryHandle]] | ||
+ | |- | ||
+ | | 305 || [[#StopImageProcessor]] | ||
+ | |- | ||
+ | | 306 || [[#RunMomentProcessor]] | ||
+ | |- | ||
+ | | 307 || [[#RunClusteringProcessor]] | ||
+ | |- | ||
+ | | 308 || [[#RunImageTransferProcessor]] | ||
+ | |- | ||
+ | | 309 || [[#GetImageTransferProcessorState]] | ||
+ | |- | ||
+ | | 310 || [[#RunTeraPluginProcessor]] | ||
+ | |- | ||
+ | | 311 || [[#GetNpadIrCameraHandle]] | ||
+ | |- | ||
+ | | 312 || [[#RunPointingProcessor]] | ||
+ | |- | ||
+ | | 313 || [[#SuspendImageProcessor]] | ||
+ | |- | ||
+ | | 314 || [3.0.0+] [[#CheckFirmwareVersion]] | ||
+ | |- | ||
+ | | 315 || [4.0.0+] [[#SetFunctionLevel]] | ||
+ | |- | ||
+ | | 316 || [4.0.0+] [[#RunImageTransferExProcessor]] | ||
+ | |- | ||
+ | | 317 || [4.0.0+] [[#RunIrLedProcessor]] | ||
+ | |- | ||
+ | | 318 || [4.0.0+] [[#StopImageProcessorAsync]] | ||
+ | |- | ||
+ | | 319 || [4.0.0+] [[#ActivateIrsensorWithFunctionLevel]] | ||
+ | |} | ||
+ | |||
+ | == ActivateIrsensor == | ||
+ | Takes a PID-descriptor and an [[AM_services|AppletResourceUserId]]. No output. | ||
+ | |||
+ | == DeactivateIrsensor == | ||
+ | Takes a PID-descriptor and an [[AM_services|AppletResourceUserId]]. No output. | ||
+ | |||
+ | == GetIrsensorSharedMemoryHandle == | ||
+ | Takes a PID-descriptor and an [[AM_services|AppletResourceUserId]]. Returns a SharedMemory handle. | ||
+ | |||
+ | The SharedMemory is "nn::irsensor::detail::StatusManager". It's mapped with permission read-only and size 0x8000. | ||
+ | |||
+ | It's structure is as follows: | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset || Size || Description | ||
+ | |- | ||
+ | | 0x0 || 0x7FB0 || Array of [[#DeviceFormat]] | ||
+ | |- | ||
+ | | 0x7FB0 || 0x50 || Array of [[#AruidFormat]] | ||
+ | |} | ||
+ | |||
+ | The array of [[#DeviceFormat]] is indexed by [[#IrCameraHandle|PlayerNumber]] and can hold up to 9 entries. The array of [[#AruidFormat]] can only hold up to 5 entries. | ||
+ | |||
+ | === DeviceFormat === | ||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset || Size || Description | ||
+ | |- | ||
+ | | 0x0 || 0x4 || [[#IrCameraStatus]] | ||
+ | |- | ||
+ | | 0x4 || 0x4 || [[#IrCameraInternalStatus]] | ||
+ | |- | ||
+ | | 0x8 || 0x8 || [[#IrSensorMode]] | ||
+ | |- | ||
+ | | 0x10 || 0xE20 || [[#ProcessorStateRingLifo]] | ||
+ | |} | ||
+ | |||
+ | ==== ProcessorStateRingLifo ==== | ||
+ | This is "nn::irsensor::detail::RingLifo<X,Y>" where "X" is a specialized processor state (e.g.: "nn::irsensor::MomentProcessorState") and "Y" is the maximum element count (e.g.: 5). | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset || Size || Description | ||
+ | |- | ||
+ | | 0x0 || 0x8 || Start | ||
+ | |- | ||
+ | | 0x8 || 0x4 || Count | ||
+ | |- | ||
+ | | 0xC || 0x4 || Padding | ||
+ | |- | ||
+ | | 0x10 || Variable || ProcessorState | ||
+ | |} | ||
+ | |||
+ | The maximum element count is 6 for [[#PointingProcessorMarkerState]] or 5 for any of the other states. | ||
+ | |||
+ | ProcessorState is specialized depending on the value of [[#IrSensorMode]]. | ||
+ | |||
+ | ===== MomentProcessorState ===== | ||
+ | This is "nn::irsensor::MomentProcessorState". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset || Size || Description | ||
+ | |- | ||
+ | | 0x0 || 0x8 || SamplingNumber | ||
+ | |- | ||
+ | | 0x8 || 0x8 || TimeStamp | ||
+ | |- | ||
+ | | 0x10 || 0x4 || AmbientNoiseLevel | ||
+ | |- | ||
+ | | 0x14 || 0x4 || Reserved | ||
+ | |- | ||
+ | | 0x18 || 0x240 || Array of [[#MomentStatistic]] | ||
+ | |} | ||
+ | |||
+ | The array of [[#MomentStatistic]] can hold up to 48 entries. This array can be accessed as [y + x*8] (this is a 6x8 array). region_x = image_x/6, region_y = image_y/8. | ||
+ | |||
+ | ====== MomentStatistic ====== | ||
+ | In sdknso GetMomentProcessorStates, this loops through each MomentProcessorState->MomentStatistic entry: <code>AverageIntensity *= scale;</code> The scale is calculated with: <code>scale = 76800.0f / (float)([[#PackedMomentProcessorConfig|WindowOfInterest]].width * [[#PackedMomentProcessorConfig|WindowOfInterest]].height);</code> Note that <code>76800 == 320*240</code>, hence with the default width/height the calculated scale is 1.0f. | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset || Size || Description | ||
+ | |- | ||
+ | | 0x0 || 0x4 || float AverageIntensity | ||
+ | |- | ||
+ | | 0x4 || 0x4 || float CentroidX | ||
+ | |- | ||
+ | | 0x8 || 0x4 || float CentroidY | ||
+ | |} | ||
+ | |||
+ | ===== ClusteringProcessorState ===== | ||
+ | This is "nn::irsensor::ClusteringProcessorState". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset || Size || Description | ||
+ | |- | ||
+ | | 0x0 || 0x8 || SamplingNumber | ||
+ | |- | ||
+ | | 0x8 || 0x8 || TimeStamp | ||
+ | |- | ||
+ | | 0x10 || 0x1 || ObjectCount | ||
+ | |- | ||
+ | | 0x11 || 0x3 || Reserved | ||
+ | |- | ||
+ | | 0x14 || 0x4 || AmbientNoiseLevel | ||
+ | |- | ||
+ | | 0x18 || 0x180 || Array of [[#ClusteringData]] | ||
+ | |} | ||
+ | |||
+ | The array of [[#ClusteringData]] can hold up to 16 entries. | ||
+ | |||
+ | ====== ClusteringData ====== | ||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset || Size || Description | ||
+ | |- | ||
+ | | 0x0 || 0x4 || float AverageIntensity | ||
+ | |- | ||
+ | | 0x4 || 0x4 || float CentroidX | ||
+ | |- | ||
+ | | 0x8 || 0x4 || float CentroidY | ||
+ | |- | ||
+ | | 0xC || 0x4 || PixelCount | ||
+ | |- | ||
+ | | 0x10 || 0x2 || BoundX | ||
+ | |- | ||
+ | | 0x12 || 0x2 || BoundY | ||
+ | |- | ||
+ | | 0x14 || 0x2 || BoundtWidth | ||
+ | |- | ||
+ | | 0x16 || 0x2 || BoundHeight | ||
+ | |} | ||
+ | |||
+ | ===== PointingProcessorMarkerState ===== | ||
+ | This is "nn::irsensor::PointingProcessorMarkerState". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset || Size || Description | ||
+ | |- | ||
+ | | 0x0 || 0x8 || SamplingNumber | ||
+ | |- | ||
+ | | 0x8 || 0x8 || TimeStamp | ||
+ | |- | ||
+ | | 0x10 || 0x1 || PointingStatus | ||
+ | |- | ||
+ | | 0x11 || 0x3 || Reserved | ||
+ | |- | ||
+ | | 0x14 || 0x4 || Unknown | ||
+ | |- | ||
+ | | 0x18 || 0x4 || float Unknown | ||
+ | |- | ||
+ | | 0x1C || 0x4 || float PositionX | ||
+ | |- | ||
+ | | 0x20 || 0x4 || float PositionY | ||
+ | |- | ||
+ | | 0x24 || 0x4 || float Unknown | ||
+ | |- | ||
+ | | 0x28 || 0x2 || WindowOfInterestX | ||
+ | |- | ||
+ | | 0x2A || 0x2 || WindowOfInterestY | ||
+ | |- | ||
+ | | 0x2C || 0x2 || WindowOfInterestWidth | ||
+ | |- | ||
+ | | 0x2E || 0x2 || WindowOfInterestHeight | ||
+ | |- | ||
+ | | 0x30 || 0x1 || PointingStatus | ||
+ | |- | ||
+ | | 0x31 || 0x3 || Reserved | ||
+ | |- | ||
+ | | 0x34 || 0x4 || Unknown | ||
+ | |- | ||
+ | | 0x38 || 0x4 || float Unknown | ||
+ | |- | ||
+ | | 0x3C || 0x4 || float PositionX | ||
+ | |- | ||
+ | | 0x40 || 0x4 || float PositionY | ||
+ | |- | ||
+ | | 0x44 || 0x4 || float Unknown | ||
+ | |- | ||
+ | | 0x48 || 0x2 || WindowOfInterestX | ||
+ | |- | ||
+ | | 0x4A || 0x2 || WindowOfInterestY | ||
+ | |- | ||
+ | | 0x4C || 0x2 || WindowOfInterestWidth | ||
+ | |- | ||
+ | | 0x4E || 0x2 || WindowOfInterestHeight | ||
+ | |- | ||
+ | | 0x50 || 0x1 || PointingStatus | ||
+ | |- | ||
+ | | 0x51 || 0x3 || Reserved | ||
+ | |- | ||
+ | | 0x54 || 0x4 || Unknown | ||
+ | |- | ||
+ | | 0x58 || 0x4 || float Unknown | ||
+ | |- | ||
+ | | 0x5C || 0x4 || float PositionX | ||
+ | |- | ||
+ | | 0x60 || 0x4 || float PositionY | ||
+ | |- | ||
+ | | 0x64 || 0x4 || float Unknown | ||
+ | |- | ||
+ | | 0x68 || 0x2 || WindowOfInterestX | ||
+ | |- | ||
+ | | 0x6A || 0x2 || WindowOfInterestY | ||
+ | |- | ||
+ | | 0x6C || 0x2 || WindowOfInterestWidth | ||
+ | |- | ||
+ | | 0x6E || 0x2 || WindowOfInterestHeight | ||
+ | |} | ||
+ | |||
+ | ===== PointingProcessorState ===== | ||
+ | This is "nn::irsensor::PointingProcessorState". | ||
+ | |||
+ | This is created from [[#PointingProcessorMarkerState]]. | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset || Size || Description | ||
+ | |- | ||
+ | | 0x0 || 0x8 || SamplingNumber | ||
+ | |- | ||
+ | | 0x8 || 0x8 || TimeStamp | ||
+ | |- | ||
+ | | 0x10 || 0x4 || PointingStatus | ||
+ | |- | ||
+ | | 0x14 || 0x4 || float PositionX | ||
+ | |- | ||
+ | | 0x18 || 0x4 || float PositionY | ||
+ | |- | ||
+ | | 0x1C || 0x4 || Reserved | ||
+ | |} | ||
+ | |||
+ | ===== TeraPluginProcessorState ===== | ||
+ | This is "nn::irsensor::TeraPluginProcessorState". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset || Size || Description | ||
+ | |- | ||
+ | | 0x0 || 0x8 || SamplingNumber | ||
+ | |- | ||
+ | | 0x8 || 0x8 || TimeStamp | ||
+ | |- | ||
+ | | 0x10 || 0x4 || AmbientNoiseLevel | ||
+ | |- | ||
+ | | 0x14 || 0x12C || PluginData | ||
+ | |} | ||
+ | |||
+ | ===== AdaptiveClusteringProcessorState ===== | ||
+ | This is "nn::irsensor::AdaptiveClusteringProcessorState". | ||
+ | |||
+ | This is created from [[#TeraPluginProcessorState]]. | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset || Size || Description | ||
+ | |- | ||
+ | | 0x0 || 0x8 || SamplingNumber | ||
+ | |- | ||
+ | | 0x8 || 0x8 || TimeStamp | ||
+ | |- | ||
+ | | 0x10 || 0x4 || AmbientNoiseLevel | ||
+ | |- | ||
+ | | 0x14 || 0x4 || AccuracyLevel | ||
+ | |- | ||
+ | | 0x18 || 0x1 || ObjectCount | ||
+ | |- | ||
+ | | 0x19 || 0x1 || BackgroundIntensity | ||
+ | |- | ||
+ | | 0x1A || 0x6 || Reserved | ||
+ | |- | ||
+ | | 0x20 || 0x200 || Array of [[#AdaptiveClusteringData]] | ||
+ | |} | ||
+ | |||
+ | The array of [[#AdaptiveClusteringData]] can hold up to 16 entries. | ||
+ | |||
+ | ====== AdaptiveClusteringData ====== | ||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset || Size || Description | ||
+ | |- | ||
+ | | 0x0 || 0x4 || float CentroidX | ||
+ | |- | ||
+ | | 0x4 || 0x4 || float CentroidY | ||
+ | |- | ||
+ | | 0x8 || 0x4 || float Area | ||
+ | |- | ||
+ | | 0xC || 0x4 || IsIncomplete | ||
+ | |} | ||
+ | |||
+ | ===== HandAnalysisImageState ===== | ||
+ | This is "nn::irsensor::HandAnalysisImageState". | ||
+ | |||
+ | This is created from [[#TeraPluginProcessorState]]. | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset || Size || Description | ||
+ | |- | ||
+ | | 0x0 || 0x8 || SamplingNumber | ||
+ | |- | ||
+ | | 0x8 || 0x4 || AmbientNoiseLevel | ||
+ | |- | ||
+ | | 0xC || 0x960 || Image | ||
+ | |- | ||
+ | | 0x96C || 0x4 || Reserved | ||
+ | |} | ||
+ | |||
+ | ===== HandAnalysisSilhouetteState ===== | ||
+ | This is "nn::irsensor::HandAnalysisSilhouetteState". | ||
+ | |||
+ | This is created from [[#TeraPluginProcessorState]]. | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset || Size || Description | ||
+ | |- | ||
+ | | 0x0 || 0x8 || SamplingNumber | ||
+ | |- | ||
+ | | 0x8 || 0x4 || AmbientNoiseLevel | ||
+ | |- | ||
+ | | 0xC || 0x1354 || Unknown | ||
+ | |} | ||
+ | |||
+ | ===== HandAnalysisSilhouetteStateWithFullFrameShape ===== | ||
+ | This is "nn::irsensor::HandAnalysisSilhouetteStateWithFullFrameShape". | ||
+ | |||
+ | This is created from [[#TeraPluginProcessorState]]. | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset || Size || Description | ||
+ | |- | ||
+ | | 0x0 || 0x8 || SamplingNumber | ||
+ | |- | ||
+ | | 0x8 || 0x4 || AmbientNoiseLevel | ||
+ | |- | ||
+ | | 0xC || 0x156C || Unknown | ||
+ | |} | ||
+ | |||
+ | === AruidFormat === | ||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset || Size || Description | ||
+ | |- | ||
+ | | 0x0 || 0x8 || IrSensorAruid | ||
+ | |- | ||
+ | | 0x8 || 0x8 || IrSensorAruidStatus | ||
+ | |} | ||
+ | |||
+ | == StopImageProcessor == | ||
+ | Takes a PID-descriptor, an [[#IrCameraHandle]], and an [[AM_services|AppletResourceUserId]]. No output. | ||
+ | |||
+ | == RunMomentProcessor == | ||
+ | Takes a PID-descriptor, an [[#IrCameraHandle]], an [[AM_services|AppletResourceUserId]], and a [[#PackedMomentProcessorConfig]]. No output. | ||
+ | |||
+ | == RunClusteringProcessor == | ||
+ | Takes a PID-descriptor, an [[#IrCameraHandle]], an [[AM_services|AppletResourceUserId]], and a [[#PackedClusteringProcessorConfig]]. No output. | ||
+ | |||
+ | == RunImageTransferProcessor == | ||
+ | Takes a PID-descriptor, an [[#IrCameraHandle]], an [[AM_services|AppletResourceUserId]], a [[#PackedImageTransferProcessorConfig]], an u64 for the TransferMemory's size, and a TransferMemory handle. No output. | ||
+ | |||
+ | The TransferMemory is created with an user specified buffer and permission none. | ||
+ | |||
+ | == GetImageTransferProcessorState == | ||
+ | Takes a PID-descriptor, a type-0x6 output buffer, an [[#IrCameraHandle]], and an [[AM_services|AppletResourceUserId]]. Returns an [[#ImageTransferProcessorState]]. No output. | ||
+ | |||
+ | == RunTeraPluginProcessor== | ||
+ | Takes a PID-descriptor, an [[#IrCameraHandle]], a [[#PackedTeraPluginProcessorConfig]] (immediately after the previous word), and an [[AM_services|AppletResourceUserId]]. No output. | ||
+ | |||
+ | == GetNpadIrCameraHandle == | ||
+ | Takes an input [[#NpadIdType]]. Returns an output [[#IrCameraHandle]]. | ||
+ | |||
+ | == RunPointingProcessor == | ||
+ | Takes a PID-descriptor, an [[#IrCameraHandle]], a [[#PackedPointingProcessorConfig]] (immediately after the previous word), and an [[AM_services|AppletResourceUserId]]. No output. | ||
+ | |||
+ | == SuspendImageProcessor == | ||
+ | Takes a PID-descriptor, an [[#IrCameraHandle]], and an [[AM_services|AppletResourceUserId]]. No output. | ||
+ | |||
+ | sdknso uses this from the Run*Processor funcs to suspend the current Processor when the current [[#PackedFunctionLevel|FunctionLevel]] is >= 0x1, prior to starting another Processor if needed (depending on what Processor was already active via a state field). Hence, this cmd is only used with [4.0.0+]. | ||
+ | |||
+ | == CheckFirmwareVersion == | ||
+ | Takes a PID-descriptor, an [[#IrCameraHandle]], a [[#PackedMcuVersion]], and an [[AM_services|AppletResourceUserId]]. No output. | ||
+ | |||
+ | sdknso didn't actually use this until 4.x (the RequiredMcuVersion was also updated with that version). | ||
+ | |||
+ | == SetFunctionLevel == | ||
+ | Takes a PID-descriptor, an [[#IrCameraHandle]], a [[#PackedFunctionLevel]], and an [[AM_services|AppletResourceUserId]]. No output. | ||
+ | |||
+ | == RunImageTransferExProcessor == | ||
+ | Takes a PID-descriptor, an [[#IrCameraHandle]], an [[AM_services|AppletResourceUserId]], a [[#PackedImageTransferProcessorExConfig]], an u64 for the TransferMemory's size, and a TransferMemory handle. No output. | ||
+ | |||
+ | The TransferMemory is created with an user specified buffer and permission none. | ||
+ | |||
+ | == RunIrLedProcessor == | ||
+ | Takes a PID-descriptor, an [[#IrCameraHandle]], a [[#PackedIrLedProcessorConfig]] (immediately after the previous word), and an [[AM_services|AppletResourceUserId]]. No output. | ||
+ | |||
+ | == StopImageProcessorAsync == | ||
+ | Takes a PID-descriptor, an [[#IrCameraHandle]], and an [[AM_services|AppletResourceUserId]]. No output. | ||
+ | |||
+ | == ActivateIrsensorWithFunctionLevel == | ||
+ | Takes a PID-descriptor, an [[#PackedFunctionLevel]], and an [[AM_services|AppletResourceUserId]]. No output. | ||
+ | |||
+ | = irs:sys = | ||
+ | This is "nn::irsensor::IIrSensorSystemServer". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Cmd || Name | ||
+ | |- | ||
+ | | 500 || [[#SetAppletResourceUserId]] | ||
+ | |- | ||
+ | | 501 || [[#RegisterAppletResourceUserId]] | ||
+ | |- | ||
+ | | 502 || [[#UnregisterAppletResourceUserId]] | ||
+ | |- | ||
+ | | 503 || [[#EnableAppletToGetInput]] | ||
+ | |} | ||
+ | |||
+ | == SetAppletResourceUserId == | ||
+ | Takes an [[AM_services|AppletResourceUserId]]. No output. | ||
+ | |||
+ | == RegisterAppletResourceUserId == | ||
+ | Takes a bool and an [[AM_services|AppletResourceUserId]]. No output. | ||
+ | |||
+ | == UnregisterAppletResourceUserId == | ||
+ | Takes an [[AM_services|AppletResourceUserId]]. No output. | ||
+ | |||
+ | == EnableAppletToGetInput == | ||
+ | Takes a bool and an [[AM_services|AppletResourceUserId]]. No output. | ||
+ | |||
+ | = ahid:cd = | ||
+ | This is "nn::ahid::IServerSession". | ||
+ | |||
+ | Used for USB HID devices. | ||
+ | |||
+ | This service no longer exists in [9.0.0+]. | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Cmd || Name | ||
+ | |- | ||
+ | | 0 || [[#AcquireDevice]] | ||
+ | |- | ||
+ | | 1 || [[#ReleaseDevice]] | ||
+ | |- | ||
+ | | 2 || [[#GetCtrlSession]] | ||
+ | |- | ||
+ | | 3 || [[#GetReadSession]] | ||
+ | |- | ||
+ | | 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 == | ||
+ | This is "nn::ahid::ICtrlSession". | ||
+ | |||
+ | This no longer exists in [9.0.0+]. | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Cmd || Name | ||
+ | |- | ||
+ | | 0 || GetString | ||
+ | |- | ||
+ | | 1 || GetCodeBook | ||
+ | |- | ||
+ | | 2 || GetReport | ||
+ | |- | ||
+ | | 3 || SetReport | ||
+ | |- | ||
+ | | 4 || GetIdle | ||
+ | |- | ||
+ | | 5 || SetIdle | ||
+ | |- | ||
+ | | 6 || GetProtocol | ||
+ | |- | ||
+ | | 7 || SetProtocol | ||
+ | |- | ||
+ | | 8 || GetDescriptor | ||
+ | |- | ||
+ | | 9 || SetDescriptor | ||
+ | |- | ||
+ | | 10 || GetStateChangeEvent | ||
+ | |- | ||
+ | | 11 || SignalStateChangeEvent | ||
+ | |- | ||
+ | | 12 || [3.0.0+] Write | ||
+ | |} | ||
+ | |||
+ | All of these use USB [[USB_services|CtrlXfer]], except for GetStateChangeEvent and SignalStateChangeEvent, and GetCodeBook which copies 0x4000-bytes from state to output. | ||
+ | |||
+ | == IReadSession == | ||
+ | This is "nn::ahid::IReadSession". | ||
+ | |||
+ | This no longer exists in [9.0.0+]. | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Cmd || Name | ||
+ | |- | ||
+ | | 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+] Now takes a total of 8-bytes of input. | ||
+ | |||
+ | == IWriteSession == | ||
+ | This is "nn::ahid::IWriteSession". | ||
+ | |||
+ | This was removed with [3.0.0+]. | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Cmd || Name | ||
+ | |- | ||
+ | | 0 || [[#Write]] | ||
+ | |} | ||
+ | |||
+ | === Write === | ||
+ | This is the inverse of [[#IReadSession]] cmd0. Uses the OUTPUT endpoint with an input buffer. | ||
+ | |||
+ | = ahid:hdr = | ||
+ | This is "nn::ahid::hdr::ISession". | ||
+ | |||
+ | Used internally for USB HID devices. | ||
+ | |||
+ | This service no longer exists in [9.0.0+]. | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Cmd || Name | ||
+ | |- | ||
+ | | 0 || GetDeviceEntries | ||
+ | |- | ||
+ | | 1 || GetDeviceList | ||
+ | |- | ||
+ | | 2 || GetDeviceParameters | ||
+ | |- | ||
+ | | 3 || AttachDevice | ||
+ | |- | ||
+ | | 4 || DetachDevice | ||
+ | |- | ||
+ | | 5 || [6.0.0+] SetDeviceFilter | ||
+ | |} | ||
+ | |||
+ | = xcd:sys = | ||
+ | This is "nn::xcd::detail::ISystemServer". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Cmd || Name | ||
+ | |- | ||
+ | | 0 || [[#GetDataFormat]] | ||
+ | |- | ||
+ | | 1 || [[#SetDataFormat]] | ||
+ | |- | ||
+ | | 2 || [[#GetMcuState]] | ||
+ | |- | ||
+ | | 3 || [[#SetMcuState]] | ||
+ | |- | ||
+ | | 4 || [[#GetMcuVersionForNfc]] | ||
+ | |- | ||
+ | | 5 || [[#CheckNfcDevicePower]] | ||
+ | |- | ||
+ | | 6 || [5.0.0+] [[#SetMcuStateImmediate]] | ||
+ | |- | ||
+ | | 10 || [[#SetNfcEvent]] | ||
+ | |- | ||
+ | | 11 || [[#GetNfcInfo]] | ||
+ | |- | ||
+ | | 12 || StartNfcDiscovery | ||
+ | |- | ||
+ | | 13 || StopNfcDiscovery | ||
+ | |- | ||
+ | | 14 || StartNtagRead | ||
+ | |- | ||
+ | | 15 || StartNtagWrite | ||
+ | |- | ||
+ | | 16 || SendNfcRawData | ||
+ | |- | ||
+ | | 17 || RegisterMifareKey | ||
+ | |- | ||
+ | | 18 || ClearMifareKey | ||
+ | |- | ||
+ | | 19 || StartMifareRead | ||
+ | |- | ||
+ | | 20 || StartMifareWrite | ||
|- | |- | ||
| 101 || GetAwakeTriggerReasonForLeftRail | | 101 || GetAwakeTriggerReasonForLeftRail | ||
− | |- | + | |- |
− | | 102 || GetAwakeTriggerReasonForRightRail | + | | 102 || GetAwakeTriggerReasonForRightRail |
− | |} | + | |- |
+ | | 103 || [10.0.0+] GetAwakeTriggerBatteryLevelTransitionForLeftRail | ||
+ | |- | ||
+ | | 104 || [10.0.0+] GetAwakeTriggerBatteryLevelTransitionForRightRail | ||
+ | |} | ||
+ | |||
+ | [5.0.0+] SetDataFormat, SetMcuState, and ClearMifareKey: now takes a total of 0xC-bytes of input instead of 0x10. | ||
+ | |||
+ | == 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 = | ||
+ | This is "nn::hidbus::IHidbusServer". | ||
+ | |||
+ | This was added with [5.0.0+]. | ||
+ | |||
+ | Official sw opens a temporary service-session for each func using this, with it being closed once done: no global session is kept open. | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Cmd || Name | ||
+ | |- | ||
+ | | 1 || [[#GetBusHandle]] | ||
+ | |- | ||
+ | | 2 || [[#IsExternalDeviceConnected]] | ||
+ | |- | ||
+ | | 3 || [[#Initialize]] | ||
+ | |- | ||
+ | | 4 || [[#Finalize]] | ||
+ | |- | ||
+ | | 5 || [[#EnableExternalDevice]] | ||
+ | |- | ||
+ | | 6 || [[#GetExternalDeviceId]] | ||
+ | |- | ||
+ | | 7 || [[#SendCommandAsync]] | ||
+ | |- | ||
+ | | 8 || [[#GetSendCommandAsynceResult]] | ||
+ | |- | ||
+ | | 9 || [[#SetEventForSendCommandAsycResult]] | ||
+ | |- | ||
+ | | 10 || [[#GetSharedMemoryHandle]] | ||
+ | |- | ||
+ | | 11 || [[#EnableJoyPollingReceiveMode]] | ||
+ | |- | ||
+ | | 12 || [[#DisableJoyPollingReceiveMode]] | ||
+ | |- | ||
+ | | 13 || [5.0.0-6.2.0] GetPollingData | ||
+ | |- | ||
+ | | 14 || [6.0.0+] [[#SetStatusManagerType]] | ||
+ | |} | ||
+ | |||
+ | sdknso doesn't use the GetPollingData cmd. | ||
+ | |||
+ | == GetBusHandle == | ||
+ | Takes an input u32 [[#NpadIdType]], an u64 [[#BusType]] and an u64 [[AM_services|AppletResourceUserId]]. Returns an output bool '''HasHandle''' and a [[#BusHandle]]. | ||
+ | |||
+ | '''HasHandle''' indicates whether the [[#BusHandle]] is valid. | ||
+ | |||
+ | Official sw will assert when [[#BusHandle]] InternalIndex is >=0x11 (>=0x13 with [6.0.0+]). This same check is also done for all funcs using [[#BusHandle]] as input. | ||
+ | |||
+ | This cmd will throw an error when [[#BusType]] is invalid. | ||
+ | |||
+ | == IsExternalDeviceConnected == | ||
+ | Takes an input [[#BusHandle]]. Returns an output bool '''IsAttached'''. | ||
+ | |||
+ | This is not used by sdknso. | ||
+ | |||
+ | == Initialize == | ||
+ | Takes an input [[#BusHandle]] and an u64 [[AM_services|AppletResourceUserId]]. No output. | ||
+ | |||
+ | Prior to using this cmd, sdknso handles [[#GetSharedMemoryHandle|sharedmem]] mapping if not done previously. | ||
+ | |||
+ | == Finalize == | ||
+ | Takes an input [[#BusHandle]] and an u64 [[AM_services|AppletResourceUserId]]. No output. | ||
+ | |||
+ | == EnableExternalDevice == | ||
+ | Takes an input bool '''IsEnabled''', a [[#BusHandle]], an u64 '''Version''' and an u64 [[AM_services|AppletResourceUserId]]. No output. | ||
+ | |||
+ | sdknso passes value 0x38900050018 (0x3A600050018 with 7.x+) for '''Version'''. | ||
+ | |||
+ | '''IsEnabled''' indicates whether to enable the device (true = enable, false = disable). When false, this will use [[#DisableJoyPollingReceiveMode]] if needed. | ||
+ | |||
+ | == GetExternalDeviceId == | ||
+ | Takes an input [[#BusHandle]]. Returns an output u32 '''DeviceId'''. | ||
+ | |||
+ | == SendCommandAsync == | ||
+ | Takes a type-0x21 input buffer and a [[#BusHandle]]. No output. | ||
+ | |||
+ | == GetSendCommandAsynceResult == | ||
+ | Takes a type-0x22 output buffer and a [[#BusHandle]]. Returns an output u32 '''OutSize'''. | ||
+ | |||
+ | Official sw copies '''OutSize''' to an output u64, for the actual output size. | ||
+ | |||
+ | == SetEventForSendCommandAsycResult == | ||
+ | Takes an input [[#BusHandle]]. Returns an output Event handle '''AttachmentDataReceiveEventHandle''' with EventClearMode=0. | ||
+ | |||
+ | Official sw with SendAndReceive clears this event (6.x+ sdknso), uses [[#SendCommandAsync]], waits on + clears this event, then uses [[#GetSendCommandAsynceResult]]. | ||
+ | |||
+ | == GetSharedMemoryHandle == | ||
+ | No input. Returns an output SharedMemory handle. | ||
+ | |||
+ | The SharedMemory is mapped with size 0x1000 and permissions=R--. | ||
+ | |||
+ | See also [[#SetStatusManagerType]]. | ||
+ | |||
+ | This sharedmem is the StatusManager. This sharedmem contains an array of 0x100-byte (0x80-byte with [[#SetStatusManagerType|[6.0.0+]]]) entries, with entry-count {max [[#GetBusHandle|BusHandles]]}. | ||
+ | |||
+ | sdknso only uses the first 0x10-bytes of these entries, the rest is the ignored. Entry structure: | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset || Size || Description | ||
+ | |- | ||
+ | | 0x0 || 0x1 || IsConnected | ||
+ | |- | ||
+ | | 0x1 || 0x3 || Reserved | ||
+ | |- | ||
+ | | 0x4 || 0x4 || IsConnectedResult | ||
+ | |- | ||
+ | | 0x8 || 0x1 || IsEnabled. Bool flag indicating whether a device is [[#EnableExternalDevice|enabled]]. | ||
+ | |- | ||
+ | | 0x9 || 0x1 || IsInFocus. Bool flag indicating whether this entry is valid. | ||
+ | |- | ||
+ | | 0xA || 0x1 || IsPollingMode. Bool flag indicating whether polling is [[#EnableJoyPollingReceiveMode|enabled]]. | ||
+ | |- | ||
+ | | 0xB || 0x1 || Reserved | ||
+ | |- | ||
+ | | 0xC || 0x4 || [[#JoyPollingMode|PollingMode]] | ||
+ | |} | ||
+ | |||
+ | == EnableJoyPollingReceiveMode == | ||
+ | Takes a type-0x21 input buffer, a TransferMemory handle, an u32 '''TransferMemorySize''', an u32 [[#JoyPollingMode]] and a [[#BusHandle]]. No output. | ||
+ | |||
+ | The TransferMemory is created with an user-specified output buffer, with permissions=R--. | ||
+ | |||
+ | The content of the TransferMemory depends of the [[#JoyPollingMode]]. This is used by GetJoyPollingReceivedData. Structure of the TransferMemory (DisableSixAxisPollingDataAccessor, EnableSixAxisPollingDataAccessor, JoyButtonOnlyPollingDataAccessor): | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset || Size || Description | ||
+ | |- | ||
+ | | 0x0 || 0x4 || Result. | ||
+ | |- | ||
+ | | 0x0 || 0x4 || Padding. | ||
+ | |- | ||
+ | | 0x8 || 0x18 || Initialized sysmodule-side, not used by sdknso. | ||
+ | |- | ||
+ | | 0x20 || 0x8 || Latest entry. | ||
+ | |- | ||
+ | | 0x28 || 0x8 || Total entries. | ||
+ | |} | ||
+ | |||
+ | The entries specific to the [[#JoyPollingMode]] follow, with 0xA entries total. Each entry starts with an u64 timestamp. Structure for each mode, after the timestamp: | ||
+ | |||
+ | DisableSixAxisPollingDataAccessor: | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset || Size || Description | ||
+ | |- | ||
+ | | 0x0 || 0x26 || Data | ||
+ | |- | ||
+ | | 0x26 || 0x1 || Size of data. | ||
+ | |- | ||
+ | | 0x27 || 0x1 || Padding | ||
+ | |- | ||
+ | | 0x28 || 0x8 || Timestamp | ||
+ | |} | ||
+ | |||
+ | JoyEnableSixAxisPollingDataAccessor: | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset || Size || Description | ||
+ | |- | ||
+ | | 0x0 || 0x8 || Data | ||
+ | |- | ||
+ | | 0x8 || 0x1 || Size of data. | ||
+ | |- | ||
+ | | 0x9 || 0x7 || Padding | ||
+ | |- | ||
+ | | 0x10 || 0x8 || Timestamp | ||
+ | |} | ||
+ | |||
+ | JoyButtonOnlyPollingDataAccessor: | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset || Size || Description | ||
+ | |- | ||
+ | | 0x0 || 0x2C || Data | ||
+ | |- | ||
+ | | 0x2C || 0x1 || Size of data. | ||
+ | |- | ||
+ | | 0x2D || 0x3 || Padding | ||
+ | |- | ||
+ | | 0x30 || 0x8 || Timestamp | ||
+ | |} | ||
+ | |||
+ | == DisableJoyPollingReceiveMode == | ||
+ | Takes an input [[#BusHandle]]. No output. | ||
+ | |||
+ | == SetStatusManagerType == | ||
+ | Takes an input u32 [[#StatusManagerType]]. No output. | ||
+ | |||
+ | This is used by sdknso immediately after mapping [[#GetSharedMemoryHandle|sharedmem]] (before [[#Initialize]]) with hard-coded value 0x2. | ||
+ | |||
+ | = SharedMemoryFormat = | ||
+ | This is "nn::hid::detail::SharedMemoryFormat". | ||
+ | |||
+ | The shared memory is a 0x40000 byte read-only segment of memory shared between applications for input. The segment contains structures for most if not all input methods available to applications. | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x400 | ||
+ | | [[#DebugPadSharedMemoryFormat|DebugPad]] | ||
+ | |- | ||
+ | | 0x400 | ||
+ | | 0x3000 | ||
+ | | [[#TouchScreenSharedMemoryFormat|TouchScreen]] | ||
+ | |- | ||
+ | | 0x3400 | ||
+ | | 0x400 | ||
+ | | [[#MouseSharedMemoryFormat|Mouse]] | ||
+ | |- | ||
+ | | 0x3800 | ||
+ | | 0x400 | ||
+ | | [[#KeyboardSharedMemoryFormat|Keyboard]] | ||
+ | |- | ||
+ | | 0x3C00 | ||
+ | | 0x1000 | ||
+ | | [[#DigitizerSharedMemoryFormat|Digitizer]] ([1.0.0-9.2.0] [[#BasicXpadSharedMemoryFormat|BasicXpad]]) | ||
+ | |- | ||
+ | | 0x4C00 | ||
+ | | 0x200 | ||
+ | | [[#HomeButtonSharedMemoryFormat|HomeButton]] | ||
+ | |- | ||
+ | | 0x4E00 | ||
+ | | 0x200 | ||
+ | | [[#SleepButtonSharedMemoryFormat|SleepButton]] | ||
+ | |- | ||
+ | | 0x5000 | ||
+ | | 0x200 | ||
+ | | [[#CaptureButtonSharedMemoryFormat|CaptureButton]] | ||
+ | |- | ||
+ | | 0x5200 | ||
+ | | 0x800 | ||
+ | | [[#InputDetectorSharedMemoryFormat|InputDetector]] | ||
+ | |- | ||
+ | | 0x5A00 | ||
+ | | 0x4000 | ||
+ | | [1.0.0-4.1.0] [[#UniquePadSharedMemoryFormat|UniquePad]] | ||
+ | |- | ||
+ | | 0x9A00 | ||
+ | | 0x32000 | ||
+ | | [[#NpadSharedMemoryFormat|Npad]] | ||
+ | |- | ||
+ | | 0x3BA00 | ||
+ | | 0x800 | ||
+ | | [[#GestureSharedMemoryFormat|Gesture]] | ||
+ | |- | ||
+ | | 0x3C200 | ||
+ | | 0x1C | ||
+ | | [5.0.0+] [[#ConsoleSixAxisSensorSharedMemoryFormat|ConsoleSixAxisSensor]] | ||
+ | |} | ||
+ | |||
+ | == DebugPadSharedMemoryFormat == | ||
+ | This is "nn::hid::detail::DebugPadSharedMemoryFormat". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x2C8 | ||
+ | | [[#DebugPadLifo]] | ||
+ | |} | ||
+ | |||
+ | === DebugPadLifo === | ||
+ | This is "nn::hid::detail::DebugPadLifo". This is a RingLifo object. | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x8 | ||
+ | | RingLifoVptr | ||
+ | |- | ||
+ | | 0x8 | ||
+ | | 0x8 | ||
+ | | BufferCount | ||
+ | |- | ||
+ | | 0x10 | ||
+ | | 0x8 | ||
+ | | Tail | ||
+ | |- | ||
+ | | 0x18 | ||
+ | | 0x8 | ||
+ | | Count | ||
+ | |- | ||
+ | | 0x20 | ||
+ | | 0x28 * 17 | ||
+ | | Array of [[#DebugPadStateAtomicStorage]] | ||
+ | |} | ||
+ | |||
+ | ==== DebugPadStateAtomicStorage ==== | ||
+ | This is "nn::hid::detail::DebugPadStateAtomicStorage". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x8 | ||
+ | | SamplingNumber | ||
+ | |- | ||
+ | | 0x8 | ||
+ | | 0x20 | ||
+ | | [[#DebugPadState]] | ||
+ | |} | ||
+ | |||
+ | ===== DebugPadState ===== | ||
+ | This is "nn::hid::DebugPadState". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x8 | ||
+ | | SamplingNumber | ||
+ | |- | ||
+ | | 0x8 | ||
+ | | 0x4 | ||
+ | | [[#DebugPadAttributeSet|Attributes]] | ||
+ | |- | ||
+ | | 0xC | ||
+ | | 0x4 | ||
+ | | [[#DebugPadButtonSet|Buttons]] | ||
+ | |- | ||
+ | | 0x10 | ||
+ | | 0x8 | ||
+ | | [[#AnalogStickState|AnalogStickR]] | ||
+ | |- | ||
+ | | 0x18 | ||
+ | | 0x8 | ||
+ | | [[#AnalogStickState|AnalogStickL]] | ||
+ | |} | ||
+ | |||
+ | == TouchScreenSharedMemoryFormat == | ||
+ | This is "nn::hid::detail::TouchScreenSharedMemoryFormat". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x2C38 | ||
+ | | [[#TouchScreenLifo]] | ||
+ | |} | ||
+ | |||
+ | === TouchScreenLifo === | ||
+ | This is "nn::hid::detail::TouchScreenLifo". This is a RingLifo object. | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x8 | ||
+ | | RingLifoVptr | ||
+ | |- | ||
+ | | 0x8 | ||
+ | | 0x8 | ||
+ | | BufferCount | ||
+ | |- | ||
+ | | 0x10 | ||
+ | | 0x8 | ||
+ | | Tail | ||
+ | |- | ||
+ | | 0x18 | ||
+ | | 0x8 | ||
+ | | Count | ||
+ | |- | ||
+ | | 0x20 | ||
+ | | 0x298 * 17 | ||
+ | | Array of [[#TouchScreenStateAtomicStorage]] | ||
+ | |} | ||
+ | |||
+ | ==== TouchScreenStateAtomicStorage ==== | ||
+ | This is "nn::hid::detail::TouchScreenStateAtomicStorage". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x8 | ||
+ | | SamplingNumber | ||
+ | |- | ||
+ | | 0x8 | ||
+ | | 0x290 | ||
+ | | [[#TouchScreenState]] | ||
+ | |} | ||
+ | |||
+ | ===== TouchScreenState ===== | ||
+ | This is "nn::hid::detail::TouchScreenState" / "nn::hid::TouchScreenState". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x8 | ||
+ | | SamplingNumber | ||
+ | |- | ||
+ | | 0x8 | ||
+ | | 0x4 | ||
+ | | s32 Count | ||
+ | |- | ||
+ | | 0xC | ||
+ | | 0x4 | ||
+ | | Reserved | ||
+ | |- | ||
+ | | 0x10 | ||
+ | | 0x28 * 16 | ||
+ | | [[#TouchState|Touches]] | ||
+ | |} | ||
+ | |||
+ | == MouseSharedMemoryFormat == | ||
+ | This is "nn::hid::detail::MouseSharedMemoryFormat". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x350 | ||
+ | | [[#MouseLifo]] | ||
+ | |} | ||
+ | |||
+ | === MouseLifo === | ||
+ | This is "nn::hid::detail::MouseLifo". This is a RingLifo object. | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x8 | ||
+ | | RingLifoVptr | ||
+ | |- | ||
+ | | 0x8 | ||
+ | | 0x8 | ||
+ | | BufferCount | ||
+ | |- | ||
+ | | 0x10 | ||
+ | | 0x8 | ||
+ | | Tail | ||
+ | |- | ||
+ | | 0x18 | ||
+ | | 0x8 | ||
+ | | Count | ||
+ | |- | ||
+ | | 0x20 | ||
+ | | 0x30 * 17 | ||
+ | | Array of [[#MouseStateAtomicStorage]] | ||
+ | |} | ||
+ | |||
+ | ==== MouseStateAtomicStorage ==== | ||
+ | This is "nn::hid::detail::MouseStateAtomicStorage". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x8 | ||
+ | | SamplingNumber | ||
+ | |- | ||
+ | | 0x8 | ||
+ | | 0x28 | ||
+ | | [[#MouseState]] | ||
+ | |} | ||
+ | |||
+ | ===== MouseState ===== | ||
+ | This is "nn::hid::detail::MouseState". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x8 | ||
+ | | SamplingNumber | ||
+ | |- | ||
+ | | 0x8 | ||
+ | | 0x4 | ||
+ | | X | ||
+ | |- | ||
+ | | 0xC | ||
+ | | 0x4 | ||
+ | | Y | ||
+ | |- | ||
+ | | 0x10 | ||
+ | | 0x4 | ||
+ | | DeltaX | ||
+ | |- | ||
+ | | 0x14 | ||
+ | | 0x4 | ||
+ | | DeltaY | ||
+ | |- | ||
+ | | 0x18 | ||
+ | | 0x4 | ||
+ | | WheelDeltaX | ||
+ | |- | ||
+ | | 0x1C | ||
+ | | 0x4 | ||
+ | | WheelDeltaY | ||
+ | |- | ||
+ | | 0x20 | ||
+ | | 0x4 | ||
+ | | [[#MouseButtonSet|Buttons]] | ||
+ | |- | ||
+ | | 0x24 | ||
+ | | 0x4 | ||
+ | | [[#MouseAttributeSet|Attributes]] | ||
+ | |} | ||
+ | |||
+ | == KeyboardSharedMemoryFormat == | ||
+ | This is "nn::hid::detail::KeyboardSharedMemoryFormat". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x3D8 | ||
+ | | [[#KeyboardLifo]] | ||
+ | |} | ||
+ | |||
+ | === KeyboardLifo === | ||
+ | This is "nn::hid::detail::KeyboardLifo". This is a RingLifo object. | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x8 | ||
+ | | RingLifoVptr | ||
+ | |- | ||
+ | | 0x8 | ||
+ | | 0x8 | ||
+ | | BufferCount | ||
+ | |- | ||
+ | | 0x10 | ||
+ | | 0x8 | ||
+ | | Tail | ||
+ | |- | ||
+ | | 0x18 | ||
+ | | 0x8 | ||
+ | | Count | ||
+ | |- | ||
+ | | 0x20 | ||
+ | | 0x38 * 17 | ||
+ | | Array of [[#KeyboardStateAtomicStorage]] | ||
+ | |} | ||
+ | |||
+ | ==== KeyboardStateAtomicStorage ==== | ||
+ | This is "nn::hid::detail::KeyboardStateAtomicStorage". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x8 | ||
+ | | SamplingNumber | ||
+ | |- | ||
+ | | 0x8 | ||
+ | | 0x30 | ||
+ | | [[#KeyboardState]] | ||
+ | |} | ||
+ | |||
+ | ===== KeyboardState ===== | ||
+ | This is "nn::hid::detail::KeyboardState". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x8 | ||
+ | | SamplingNumber | ||
+ | |- | ||
+ | | 0x8 | ||
+ | | 0x8 | ||
+ | | [[#KeyboardModifierSet|Modifiers]] | ||
+ | |- | ||
+ | | 0x10 | ||
+ | | 0x20 | ||
+ | | [[#KeyboardKeySet|Keys]] | ||
+ | |} | ||
+ | |||
+ | == BasicXpadSharedMemoryFormat == | ||
+ | This is "nn::hid::detail::BasicXpadSharedMemoryFormat". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x400 * 4 | ||
+ | | Array of [[#BasicXpadSharedMemoryEntry]] | ||
+ | |} | ||
+ | |||
+ | === BasicXpadSharedMemoryEntry === | ||
+ | This is "nn::hid::detail::BasicXpadSharedMemoryEntry". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x2C8 | ||
+ | | [[#BasicXpadLifo]] | ||
+ | |} | ||
+ | |||
+ | ==== BasicXpadLifo ==== | ||
+ | This is "nn::hid::detail::BasicXpadLifo". This is a RingLifo object. | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x8 | ||
+ | | RingLifoVptr | ||
+ | |- | ||
+ | | 0x8 | ||
+ | | 0x8 | ||
+ | | BufferCount | ||
+ | |- | ||
+ | | 0x10 | ||
+ | | 0x8 | ||
+ | | Tail | ||
+ | |- | ||
+ | | 0x18 | ||
+ | | 0x8 | ||
+ | | Count | ||
+ | |- | ||
+ | | 0x20 | ||
+ | | 0x28 * 17 | ||
+ | | Array of [[#BasicXpadStateAtomicStorage]] | ||
+ | |} | ||
+ | |||
+ | ===== BasicXpadStateAtomicStorage ===== | ||
+ | This is "nn::hid::detail::BasicXpadStateAtomicStorage". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x8 | ||
+ | | SamplingNumber | ||
+ | |- | ||
+ | | 0x8 | ||
+ | | 0x20 | ||
+ | | [[#BasicXpadState]] | ||
+ | |} | ||
+ | |||
+ | ====== BasicXpadState ====== | ||
+ | This is "nn::hid::detail::BasicXpadState". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x8 | ||
+ | | SamplingNumber | ||
+ | |- | ||
+ | | 0x8 | ||
+ | | 0x4 | ||
+ | | [[#BasicXpadAttributeSet|Attributes]] | ||
+ | |- | ||
+ | | 0xC | ||
+ | | 0x4 | ||
+ | | [[#BasicXpadButtonSet|Buttons]] | ||
+ | |- | ||
+ | | 0x10 | ||
+ | | 0x8 | ||
+ | | [[#AnalogStickState|AnalogStickL]] | ||
+ | |- | ||
+ | | 0x18 | ||
+ | | 0x8 | ||
+ | | [[#AnalogStickState|AnalogStickR]] | ||
+ | |} | ||
+ | |||
+ | == DigitizerSharedMemoryFormat == | ||
+ | This is "nn::hid::server::DigitizerSharedMemoryFormat". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x680 | ||
+ | | [[#DigitizerLifo]] | ||
+ | |} | ||
+ | |||
+ | === DigitizerLifo === | ||
+ | This is "nn::hid::server::DigitizerLifo". This is a RingLifo object. | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x8 | ||
+ | | RingLifoVptr | ||
+ | |- | ||
+ | | 0x8 | ||
+ | | 0x8 | ||
+ | | BufferCount | ||
+ | |- | ||
+ | | 0x10 | ||
+ | | 0x8 | ||
+ | | Tail | ||
+ | |- | ||
+ | | 0x18 | ||
+ | | 0x8 | ||
+ | | Count | ||
+ | |- | ||
+ | | 0x20 | ||
+ | | 0x60 * 17 | ||
+ | | Array of [[#DigitizerStateAtomicStorage]] | ||
+ | |} | ||
+ | |||
+ | ==== DigitizerStateAtomicStorage ==== | ||
+ | This is "nn::hid::server::DigitizerStateAtomicStorage". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x8 | ||
+ | | SamplingNumber | ||
+ | |- | ||
+ | | 0x8 | ||
+ | | 0x58 | ||
+ | | [[#DigitizerState]] | ||
+ | |} | ||
+ | |||
+ | ===== DigitizerState ===== | ||
+ | This is "nn::hid::DigitizerState". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x8 | ||
+ | | SamplingNumber | ||
+ | |- | ||
+ | | 0x8 | ||
+ | | 0x4 | ||
+ | | | ||
+ | |- | ||
+ | | 0xC | ||
+ | | 0x4 | ||
+ | | | ||
+ | |- | ||
+ | | 0x10 | ||
+ | | 0x4 | ||
+ | | [[#DigitizerAttributeSet|Attributes]] | ||
+ | |- | ||
+ | | 0x14 | ||
+ | | 0x4 | ||
+ | | [[#DigitizerButtonSet|Buttons]] | ||
+ | |- | ||
+ | | 0x18 | ||
+ | | 0x4 | ||
+ | | | ||
+ | |- | ||
+ | | 0x1C | ||
+ | | 0x4 | ||
+ | | | ||
+ | |- | ||
+ | | 0x20 | ||
+ | | 0x4 | ||
+ | | | ||
+ | |- | ||
+ | | 0x24 | ||
+ | | 0x4 | ||
+ | | | ||
+ | |- | ||
+ | | 0x28 | ||
+ | | 0x4 | ||
+ | | | ||
+ | |- | ||
+ | | 0x2C | ||
+ | | 0x4 | ||
+ | | | ||
+ | |- | ||
+ | | 0x30 | ||
+ | | 0x4 | ||
+ | | | ||
+ | |- | ||
+ | | 0x34 | ||
+ | | 0x4 | ||
+ | | | ||
+ | |- | ||
+ | | 0x38 | ||
+ | | 0x4 | ||
+ | | | ||
+ | |- | ||
+ | | 0x3C | ||
+ | | 0x4 | ||
+ | | | ||
+ | |- | ||
+ | | 0x40 | ||
+ | | 0x4 | ||
+ | | | ||
+ | |- | ||
+ | | 0x44 | ||
+ | | 0x4 | ||
+ | | | ||
+ | |- | ||
+ | | 0x48 | ||
+ | | 0x4 | ||
+ | | | ||
+ | |- | ||
+ | | 0x4C | ||
+ | | 0x4 | ||
+ | | | ||
+ | |- | ||
+ | | 0x50 | ||
+ | | 0x4 | ||
+ | | | ||
+ | |- | ||
+ | | 0x54 | ||
+ | | 0x4 | ||
+ | | | ||
+ | |} | ||
+ | |||
+ | == HomeButtonSharedMemoryFormat == | ||
+ | This is "nn::hid::detail::HomeButtonSharedMemoryFormat". | ||
+ | |||
+ | This is used by [[AM_services|AM]]. | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x1B8 | ||
+ | | [[#HomeButtonLifo]] | ||
+ | |} | ||
+ | |||
+ | === HomeButtonLifo === | ||
+ | This is "nn::hid::detail::HomeButtonLifo". This is a RingLifo object. | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x8 | ||
+ | | RingLifoVptr | ||
+ | |- | ||
+ | | 0x8 | ||
+ | | 0x8 | ||
+ | | BufferCount | ||
+ | |- | ||
+ | | 0x10 | ||
+ | | 0x8 | ||
+ | | Tail | ||
+ | |- | ||
+ | | 0x18 | ||
+ | | 0x8 | ||
+ | | Count | ||
+ | |- | ||
+ | | 0x20 | ||
+ | | 0x18 * 17 | ||
+ | | Array of [[#HomeButtonStateAtomicStorage]] | ||
+ | |} | ||
+ | |||
+ | ==== HomeButtonStateAtomicStorage ==== | ||
+ | This is "nn::hid::detail::HomeButtonStateAtomicStorage". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x8 | ||
+ | | SamplingNumber | ||
+ | |- | ||
+ | | 0x8 | ||
+ | | 0x10 | ||
+ | | [[#HomeButtonState]] | ||
+ | |} | ||
+ | |||
+ | ===== HomeButtonState ===== | ||
+ | This is "nn::hid::system::HomeButtonState". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x8 | ||
+ | | SamplingNumber | ||
+ | |- | ||
+ | | 0x8 | ||
+ | | 0x8 | ||
+ | | [[#HomeButtonSet|Buttons]] | ||
+ | |} | ||
+ | |||
+ | == SleepButtonSharedMemoryFormat == | ||
+ | This is "nn::hid::detail::SleepButtonSharedMemoryFormat". | ||
+ | |||
+ | This is used by [[AM_services|AM]]. | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x1B8 | ||
+ | | [[#SleepButtonLifo]] | ||
+ | |} | ||
+ | |||
+ | === SleepButtonLifo === | ||
+ | This is "nn::hid::detail::SleepButtonLifo". This is a RingLifo object. | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x8 | ||
+ | | RingLifoVptr | ||
+ | |- | ||
+ | | 0x8 | ||
+ | | 0x8 | ||
+ | | BufferCount | ||
+ | |- | ||
+ | | 0x10 | ||
+ | | 0x8 | ||
+ | | Tail | ||
+ | |- | ||
+ | | 0x18 | ||
+ | | 0x8 | ||
+ | | Count | ||
+ | |- | ||
+ | | 0x20 | ||
+ | | 0x18 * 17 | ||
+ | | Array of [[#SleepButtonStateAtomicStorage]] | ||
+ | |} | ||
+ | |||
+ | ==== SleepButtonStateAtomicStorage ==== | ||
+ | This is "nn::hid::detail::SleepButtonStateAtomicStorage". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x8 | ||
+ | | SamplingNumber | ||
+ | |- | ||
+ | | 0x8 | ||
+ | | 0x10 | ||
+ | | [[#SleepButtonState]] | ||
+ | |} | ||
+ | |||
+ | ===== SleepButtonState ===== | ||
+ | This is "nn::hid::system::SleepButtonState". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x8 | ||
+ | | SamplingNumber | ||
+ | |- | ||
+ | | 0x8 | ||
+ | | 0x8 | ||
+ | | [[#SleepButtonSet|Buttons]] | ||
+ | |} | ||
+ | |||
+ | == CaptureButtonSharedMemoryFormat == | ||
+ | This is "nn::hid::detail::CaptureButtonSharedMemoryFormat". | ||
+ | |||
+ | This is used by [[AM_services|AM]]. | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x1B8 | ||
+ | | [[#CaptureButtonLifo]] | ||
+ | |} | ||
+ | |||
+ | === CaptureButtonLifo === | ||
+ | This is "nn::hid::detail::CaptureButtonLifo". This is a RingLifo object. | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x8 | ||
+ | | RingLifoVptr | ||
+ | |- | ||
+ | | 0x8 | ||
+ | | 0x8 | ||
+ | | BufferCount | ||
+ | |- | ||
+ | | 0x10 | ||
+ | | 0x8 | ||
+ | | Tail | ||
+ | |- | ||
+ | | 0x18 | ||
+ | | 0x8 | ||
+ | | Count | ||
+ | |- | ||
+ | | 0x20 | ||
+ | | 0x18 * 17 | ||
+ | | Array of [[#CaptureButtonStateAtomicStorage]] | ||
+ | |} | ||
+ | |||
+ | ==== CaptureButtonStateAtomicStorage ==== | ||
+ | This is "nn::hid::detail::CaptureButtonStateAtomicStorage". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x8 | ||
+ | | SamplingNumber | ||
+ | |- | ||
+ | | 0x8 | ||
+ | | 0x10 | ||
+ | | [[#CaptureButtonState]] | ||
+ | |} | ||
+ | |||
+ | ===== CaptureButtonState ===== | ||
+ | This is "nn::hid::system::CaptureButtonState". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x8 | ||
+ | | SamplingNumber | ||
+ | |- | ||
+ | | 0x8 | ||
+ | | 0x8 | ||
+ | | [[#CaptureButtonSet|Buttons]] | ||
+ | |} | ||
+ | |||
+ | == InputDetectorSharedMemoryFormat == | ||
+ | This is "nn::hid::detail::InputDetectorSharedMemoryFormat". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x80 * 16 | ||
+ | | Array of [[#InputDetectorSharedMemoryEntry]] | ||
+ | |} | ||
+ | |||
+ | === InputDetectorSharedMemoryEntry === | ||
+ | This is "nn::hid::detail::InputDetectorSharedMemoryEntry". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x50 | ||
+ | | [[#InputDetectorLifo]] | ||
+ | |} | ||
+ | |||
+ | ==== InputDetectorLifo ==== | ||
+ | This is "nn::hid::detail::InputDetectorLifo". This is a RingLifo object. | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x8 | ||
+ | | RingLifoVptr | ||
+ | |- | ||
+ | | 0x8 | ||
+ | | 0x8 | ||
+ | | BufferCount | ||
+ | |- | ||
+ | | 0x10 | ||
+ | | 0x8 | ||
+ | | Tail | ||
+ | |- | ||
+ | | 0x18 | ||
+ | | 0x8 | ||
+ | | Count | ||
+ | |- | ||
+ | | 0x20 | ||
+ | | 0x18 * 2 | ||
+ | | Array of [[#InputDetectorStateAtomicStorage]] | ||
+ | |} | ||
+ | |||
+ | ===== InputDetectorStateAtomicStorage ===== | ||
+ | This is "nn::hid::detail::InputDetectorStateAtomicStorage". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x8 | ||
+ | | SamplingNumber | ||
+ | |- | ||
+ | | 0x8 | ||
+ | | 0x10 | ||
+ | | [[#InputDetectorState]] | ||
+ | |} | ||
+ | |||
+ | ====== InputDetectorState ====== | ||
+ | This is "nn::hid::detail::InputDetectorState". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x8 | ||
+ | | [[#InputSourceState|InputSourceState]] | ||
+ | |- | ||
+ | | 0x8 | ||
+ | | 0x8 | ||
+ | | SamplingNumber | ||
+ | |} | ||
+ | |||
+ | == UniquePadSharedMemoryFormat == | ||
+ | This is "nn::hid::detail::UniquePadSharedMemoryFormat". | ||
+ | |||
+ | [5.0.0+] This section has been removed from [[#SharedMemoryFormat]]. [[#UniquePadSharedMemoryFormat]] is now a specialization of [[#NpadSharedMemoryFormat]]. | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x400 * 16 | ||
+ | | Array of [[#UniquePadSharedMemoryEntry]] | ||
+ | |} | ||
+ | |||
+ | == UniquePadSharedMemoryEntry == | ||
+ | This is "nn::hid::detail::UniquePadSharedMemoryEntry". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x1E0 | ||
+ | | [[#UniquePadLifo]] | ||
+ | |} | ||
+ | |||
+ | === UniquePadLifo === | ||
+ | This is "nn::hid::detail::UniquePadLifo". This is a RingLifo object. | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x80 | ||
+ | | [[#UniquePadConfigLifo]] | ||
+ | |- | ||
+ | | 0x80 | ||
+ | | 0x70 * 2 | ||
+ | | Array of [[#AnalogStickCalibrationStateImplLifo]] | ||
+ | |- | ||
+ | | 0x160 | ||
+ | | 0x40 | ||
+ | | [[#SixAxisSensorUserCalibrationStateLifo]] | ||
+ | |- | ||
+ | | 0x1A0 | ||
+ | | 0x40 | ||
+ | | UniquePadConfigMutex | ||
+ | |} | ||
+ | |||
+ | ==== UniquePadConfigLifo ==== | ||
+ | This is "nn::hid::detail::UniquePadConfigLifo". This is a RingLifo object. | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x8 | ||
+ | | RingLifoVptr | ||
+ | |- | ||
+ | | 0x8 | ||
+ | | 0x8 | ||
+ | | BufferCount | ||
+ | |- | ||
+ | | 0x10 | ||
+ | | 0x8 | ||
+ | | Tail | ||
+ | |- | ||
+ | | 0x18 | ||
+ | | 0x8 | ||
+ | | Count | ||
+ | |- | ||
+ | | 0x20 | ||
+ | | 0x30 * 2 | ||
+ | | Array of [[#UniquePadConfigAtomicStorage]] | ||
+ | |} | ||
+ | |||
+ | ===== UniquePadConfigAtomicStorage ===== | ||
+ | This is "nn::hid::detail::UniquePadConfigAtomicStorage". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x8 | ||
+ | | SamplingNumber | ||
+ | |- | ||
+ | | 0x8 | ||
+ | | 0x28 | ||
+ | | [[#UniquePadConfig]] | ||
+ | |} | ||
+ | |||
+ | ====== UniquePadConfig ====== | ||
+ | This is "nn::hid::detail::UniquePadConfig". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x4 | ||
+ | | [[#UniquePadType|Type]] | ||
+ | |- | ||
+ | | 0x4 | ||
+ | | 0x4 | ||
+ | | [[#UniquePadInterface|Interface]] | ||
+ | |- | ||
+ | | 0x8 | ||
+ | | 0x10 | ||
+ | | [[#UniquePadSerialNumber|SerialNumber]] | ||
+ | |- | ||
+ | | 0x18 | ||
+ | | 0x4 | ||
+ | | ControllerNumber | ||
+ | |- | ||
+ | | 0x1C | ||
+ | | 0x1 | ||
+ | | IsActive | ||
+ | |- | ||
+ | | 0x1D | ||
+ | | 0x3 | ||
+ | | Reserved | ||
+ | |- | ||
+ | | 0x20 | ||
+ | | 0x8 | ||
+ | | SamplingNumber | ||
+ | |} | ||
+ | |||
+ | ==== AnalogStickCalibrationStateImplLifo ==== | ||
+ | This is "nn::hid::detail::AnalogStickCalibrationStateImplLifo". This is a RingLifo object. | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x8 | ||
+ | | RingLifoVptr | ||
+ | |- | ||
+ | | 0x8 | ||
+ | | 0x8 | ||
+ | | BufferCount | ||
+ | |- | ||
+ | | 0x10 | ||
+ | | 0x8 | ||
+ | | Tail | ||
+ | |- | ||
+ | | 0x18 | ||
+ | | 0x8 | ||
+ | | Count | ||
+ | |- | ||
+ | | 0x20 | ||
+ | | 0x28 * 2 | ||
+ | | Array of [[#AnalogStickCalibrationStateImplAtomicStorage]] | ||
+ | |} | ||
+ | |||
+ | ===== AnalogStickCalibrationStateImplAtomicStorage ===== | ||
+ | This is "nn::hid::detail::AnalogStickCalibrationStateImplAtomicStorage". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x8 | ||
+ | | SamplingNumber | ||
+ | |- | ||
+ | | 0x8 | ||
+ | | 0x20 | ||
+ | | [[#AnalogStickCalibrationStateImpl]] | ||
+ | |} | ||
+ | |||
+ | ====== AnalogStickCalibrationStateImpl ====== | ||
+ | This is "nn::hid::detail::AnalogStickCalibrationStateImpl". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x8 | ||
+ | | [[#AnalogStickState|State]] | ||
+ | |- | ||
+ | | 0x8 | ||
+ | | 0x8 | ||
+ | | [[#AnalogStickCalibrationFlagsSet|Flags]] | ||
+ | |- | ||
+ | | 0x10 | ||
+ | | 0x8 | ||
+ | | [[#AnalogStickManualCalibrationStage|Stage]] | ||
+ | |- | ||
+ | | 0x18 | ||
+ | | 0x8 | ||
+ | | SamplingNumber | ||
+ | |} | ||
+ | |||
+ | ==== SixAxisSensorUserCalibrationStateLifo ==== | ||
+ | This is "nn::hid::detail::SixAxisSensorUserCalibrationStateLifo". This is a RingLifo object. | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x8 | ||
+ | | RingLifoVptr | ||
+ | |- | ||
+ | | 0x8 | ||
+ | | 0x8 | ||
+ | | BufferCount | ||
+ | |- | ||
+ | | 0x10 | ||
+ | | 0x8 | ||
+ | | Tail | ||
+ | |- | ||
+ | | 0x18 | ||
+ | | 0x8 | ||
+ | | Count | ||
+ | |- | ||
+ | | 0x20 | ||
+ | | 0x20 * 2 | ||
+ | | Array of [[#SixAxisSensorUserCalibrationStateAtomicStorage]] | ||
+ | |} | ||
+ | |||
+ | ===== SixAxisSensorUserCalibrationStateAtomicStorage ===== | ||
+ | This is "nn::hid::detail::SixAxisSensorUserCalibrationStateAtomicStorage". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x8 | ||
+ | | SamplingNumber | ||
+ | |- | ||
+ | | 0x8 | ||
+ | | 0x18 | ||
+ | | [[#SixAxisSensorUserCalibrationState]] | ||
+ | |} | ||
+ | |||
+ | ====== SixAxisSensorUserCalibrationState ====== | ||
+ | This is "nn::hid::detail::UniquePadConfig". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x4 | ||
+ | | [[#SixAxisSensorUserCalibrationFlagsSet|Flags]] | ||
+ | |- | ||
+ | | 0x4 | ||
+ | | 0x4 | ||
+ | | Reserved | ||
+ | |- | ||
+ | | 0x8 | ||
+ | | 0x8 | ||
+ | | [[#SixAxisSensorUserCalibrationStage|Stage]] | ||
+ | |- | ||
+ | | 0x10 | ||
+ | | 0x8 | ||
+ | | SamplingNumber | ||
+ | |} | ||
+ | |||
+ | == NpadSharedMemoryFormat == | ||
+ | This is "nn::hid::detail::NpadSharedMemoryFormat". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x5000 * 10 | ||
+ | | Array of [[#NpadSharedMemoryEntry]] | ||
+ | |} | ||
+ | |||
+ | Each entry describes an available controller: | ||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Entry | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0 to 7 | ||
+ | | Players 1 to 8 | ||
+ | |- | ||
+ | | 8 | ||
+ | | Handheld Mode | ||
+ | |- | ||
+ | | 9 | ||
+ | | Other | ||
+ | |} | ||
+ | |||
+ | == NpadSharedMemoryEntry == | ||
+ | This is "nn::hid::detail::NpadSharedMemoryEntry". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x43F8 ([9.0.0-12.1.0] 0x43F0, [1.0.0-8.1.0] 0x4410) | ||
+ | | [[#NpadInternalState]] | ||
+ | |} | ||
+ | |||
+ | === NpadInternalState === | ||
+ | This is "nn::hid::detail::NpadInternalState". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x4 | ||
+ | | [[#NpadStyleSet|StyleSet]] | ||
+ | |- | ||
+ | | 0x4 | ||
+ | | 0x4 | ||
+ | | [[#NpadJoyAssignmentMode|JoyAssignmentMode]] | ||
+ | |- | ||
+ | | 0x8 | ||
+ | | 0xC | ||
+ | | [[#NpadFullKeyColorState|FullKeyColor]] | ||
+ | |- | ||
+ | | 0x14 | ||
+ | | 0x14 | ||
+ | | [[#NpadJoyColorState|JoyColor]] | ||
+ | |- | ||
+ | | 0x28 | ||
+ | | 0x350 | ||
+ | | [[#NpadFullKeyLifo|FullKeyLifo]] | ||
+ | |- | ||
+ | | 0x378 | ||
+ | | 0x350 | ||
+ | | [[#NpadHandheldLifo|HandheldLifo]] | ||
+ | |- | ||
+ | | 0x6C8 | ||
+ | | 0x350 | ||
+ | | [[#NpadJoyDualLifo|JoyDualLifo]] | ||
+ | |- | ||
+ | | 0xA18 | ||
+ | | 0x350 | ||
+ | | [[#NpadJoyLeftLifo|JoyLeftLifo]] | ||
+ | |- | ||
+ | | 0xD68 | ||
+ | | 0x350 | ||
+ | | [[#NpadJoyRightLifo|JoyRightLifo]] | ||
+ | |- | ||
+ | | 0x10B8 | ||
+ | | 0x350 | ||
+ | | [[#NpadPalmaLifo|PalmaLifo]] ([1.0.0-3.0.2] [[#NpadSystemLifo|SystemLifo]]) | ||
+ | |- | ||
+ | | 0x1408 | ||
+ | | 0x350 | ||
+ | | [[#NpadSystemExtLifo|SystemExtLifo]] ([4.0.0+] also used for NpadSystem) | ||
+ | |- | ||
+ | | 0x1758 | ||
+ | | 0x708 | ||
+ | | [[#NpadSixAxisSensorLifo|FullKeySixAxisSensorLifo]] | ||
+ | |- | ||
+ | | 0x1E60 | ||
+ | | 0x708 | ||
+ | | [[#NpadSixAxisSensorLifo|HandheldSixAxisSensorLifo]] | ||
+ | |- | ||
+ | | 0x2568 | ||
+ | | 0x708 | ||
+ | | [[#NpadSixAxisSensorLifo|JoyDualLeftSixAxisSensorLifo]] | ||
+ | |- | ||
+ | | 0x2C70 | ||
+ | | 0x708 | ||
+ | | [[#NpadSixAxisSensorLifo|JoyDualRightSixAxisSensorLifo]] | ||
+ | |- | ||
+ | | 0x3378 | ||
+ | | 0x708 | ||
+ | | [[#NpadSixAxisSensorLifo|JoyLeftSixAxisSensorLifo]] | ||
+ | |- | ||
+ | | 0x3A80 | ||
+ | | 0x708 | ||
+ | | [[#NpadSixAxisSensorLifo|JoyRightSixAxisSensorLifo]] | ||
+ | |- | ||
+ | | 0x4188 | ||
+ | | 0x4 | ||
+ | | [[#DeviceType|DeviceType]] | ||
+ | |- | ||
+ | | 0x418C | ||
+ | | 0x4 | ||
+ | | Reserved | ||
+ | |- | ||
+ | | 0x4190 | ||
+ | | 0x8 | ||
+ | | [[#NpadSystemProperties|SystemProperties]] | ||
+ | |- | ||
+ | | 0x4198 | ||
+ | | 0x4 | ||
+ | | [[#NpadSystemButtonProperties|SystemButtonProperties]] | ||
+ | |- | ||
+ | | 0x419C | ||
+ | | 0x4 | ||
+ | | [[#BatteryLevel|BatteryLevelJoyDual]] | ||
+ | |- | ||
+ | | 0x41A0 | ||
+ | | 0x4 | ||
+ | | [[#BatteryLevel|BatteryLevelJoyLeft]] | ||
+ | |- | ||
+ | | 0x41A4 | ||
+ | | 0x4 | ||
+ | | [[#BatteryLevel|BatteryLevelJoyRight]] | ||
+ | |- | ||
+ | | 0x41A8 | ||
+ | | 0x60 | ||
+ | | [1.0.0-8.1.0] [[#NfcXcdDeviceHandleState|NfcXcdDeviceHandle]] (replaced by [[#GetXcdHandleForNpadWithNfc]]) | ||
+ | |- | ||
+ | | 0x41A8 | ||
+ | | 0x4 | ||
+ | | [9.0.0+] [[#AppletFooterUiAttribute|AppletFooterUiAttributes]] | ||
+ | |- | ||
+ | | 0x41AC | ||
+ | | 0x1 | ||
+ | | [9.0.0+] [[#AppletFooterUiType|AppletFooterUiType]] | ||
+ | |- | ||
+ | | 0x41AD | ||
+ | | 0x7B | ||
+ | | [9.0.0+] Reserved | ||
+ | |- | ||
+ | | 0x4208 | ||
+ | | 0x40 | ||
+ | | [1.0.0-8.1.0] Mutex | ||
+ | |- | ||
+ | | 0x4228 ([1.0.0-8.1.0] 0x4248) | ||
+ | | 0x1B8 | ||
+ | | [[#NpadGcTriggerLifo|GcTriggerLifo]] | ||
+ | |- | ||
+ | | 0x43E0 ([1.0.0-8.1.0] 0x4400) | ||
+ | | 0x4 | ||
+ | | [[#NpadLarkType|LarkTypeLAndMain]] | ||
+ | |- | ||
+ | | 0x43E4 ([1.0.0-8.1.0] 0x4404) | ||
+ | | 0x4 | ||
+ | | [[#NpadLarkType|LarkTypeR]] | ||
+ | |- | ||
+ | | 0x43E8 ([1.0.0-8.1.0] 0x4408) | ||
+ | | 0x4 | ||
+ | | [[#NpadLuciaType|LuciaType]] | ||
+ | |- | ||
+ | | 0x43EC ([1.0.0-8.1.0] 0x440C) | ||
+ | | 0x4 | ||
+ | | [[#NpadLagerType|LagerType]] | ||
+ | |- | ||
+ | | 0x43F0 | ||
+ | | 0x1 * 6 | ||
+ | | [13.0.0+] Array of [[#SixAxisSensorProperties]] | ||
+ | |} | ||
+ | |||
+ | ==== NpadFullKeyLifo ==== | ||
+ | This is "nn::hid::detail::NpadFullKeyLifo". This is a RingLifo object. | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x8 | ||
+ | | RingLifoVptr | ||
+ | |- | ||
+ | | 0x8 | ||
+ | | 0x8 | ||
+ | | BufferCount | ||
+ | |- | ||
+ | | 0x10 | ||
+ | | 0x8 | ||
+ | | Tail | ||
+ | |- | ||
+ | | 0x18 | ||
+ | | 0x8 | ||
+ | | Count | ||
+ | |- | ||
+ | | 0x20 | ||
+ | | 0x30 * 17 | ||
+ | | Array of [[#NpadFullKeyStateAtomicStorage]] | ||
+ | |} | ||
+ | |||
+ | ===== NpadFullKeyStateAtomicStorage ===== | ||
+ | This is "nn::hid::detail::NpadFullKeyStateAtomicStorage". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x8 | ||
+ | | SamplingNumber | ||
+ | |- | ||
+ | | 0x8 | ||
+ | | 0x28 | ||
+ | | [[#NpadFullKeyState]] | ||
+ | |} | ||
+ | |||
+ | ====== NpadFullKeyState ====== | ||
+ | This is "nn::hid::NpadFullKeyState". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x8 | ||
+ | | SamplingNumber | ||
+ | |- | ||
+ | | 0x8 | ||
+ | | 0x8 | ||
+ | | [[#NpadButtonSet|Buttons]] | ||
+ | |- | ||
+ | | 0x10 | ||
+ | | 0x8 | ||
+ | | [[#AnalogStickState|AnalogStickL]] | ||
+ | |- | ||
+ | | 0x18 | ||
+ | | 0x8 | ||
+ | | [[#AnalogStickState|AnalogStickR]] | ||
+ | |- | ||
+ | | 0x20 | ||
+ | | 0x4 | ||
+ | | [[#NpadAttributesSet|Attributes]] | ||
+ | |- | ||
+ | | 0x24 | ||
+ | | 0x4 | ||
+ | | Reserved | ||
+ | |} | ||
+ | |||
+ | ==== NpadHandheldLifo ==== | ||
+ | This is "nn::hid::detail::NpadHandheldLifo". This is a RingLifo object. | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x8 | ||
+ | | RingLifoVptr | ||
+ | |- | ||
+ | | 0x8 | ||
+ | | 0x8 | ||
+ | | BufferCount | ||
+ | |- | ||
+ | | 0x10 | ||
+ | | 0x8 | ||
+ | | Tail | ||
+ | |- | ||
+ | | 0x18 | ||
+ | | 0x8 | ||
+ | | Count | ||
+ | |- | ||
+ | | 0x20 | ||
+ | | 0x30 * 17 | ||
+ | | Array of [[#NpadHandheldStateAtomicStorage]] | ||
+ | |} | ||
+ | |||
+ | ===== NpadHandheldStateAtomicStorage ===== | ||
+ | This is "nn::hid::detail::NpadHandheldStateAtomicStorage". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x8 | ||
+ | | SamplingNumber | ||
+ | |- | ||
+ | | 0x8 | ||
+ | | 0x28 | ||
+ | | [[#NpadHandheldState]] | ||
+ | |} | ||
+ | |||
+ | ====== NpadHandheldState ====== | ||
+ | This is "nn::hid::NpadHandheldState". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x8 | ||
+ | | SamplingNumber | ||
+ | |- | ||
+ | | 0x8 | ||
+ | | 0x8 | ||
+ | | [[#NpadButtonSet|Buttons]] | ||
+ | |- | ||
+ | | 0x10 | ||
+ | | 0x8 | ||
+ | | [[#AnalogStickState|AnalogStickL]] | ||
+ | |- | ||
+ | | 0x18 | ||
+ | | 0x8 | ||
+ | | [[#AnalogStickState|AnalogStickR]] | ||
+ | |- | ||
+ | | 0x20 | ||
+ | | 0x4 | ||
+ | | [[#NpadAttributesSet|Attributes]] | ||
+ | |- | ||
+ | | 0x24 | ||
+ | | 0x4 | ||
+ | | Reserved | ||
+ | |} | ||
+ | |||
+ | ==== NpadJoyDualLifo ==== | ||
+ | This is "nn::hid::detail::NpadJoyDualLifo". This is a RingLifo object. | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x8 | ||
+ | | RingLifoVptr | ||
+ | |- | ||
+ | | 0x8 | ||
+ | | 0x8 | ||
+ | | BufferCount | ||
+ | |- | ||
+ | | 0x10 | ||
+ | | 0x8 | ||
+ | | Tail | ||
+ | |- | ||
+ | | 0x18 | ||
+ | | 0x8 | ||
+ | | Count | ||
+ | |- | ||
+ | | 0x20 | ||
+ | | 0x30 * 17 | ||
+ | | Array of [[#NpadJoyDualStateAtomicStorage]] | ||
+ | |} | ||
+ | |||
+ | ===== NpadJoyDualStateAtomicStorage ===== | ||
+ | This is "nn::hid::detail::NpadJoyDualStateAtomicStorage". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x8 | ||
+ | | SamplingNumber | ||
+ | |- | ||
+ | | 0x8 | ||
+ | | 0x28 | ||
+ | | [[#NpadJoyDualState]] | ||
+ | |} | ||
+ | |||
+ | ====== NpadJoyDualState ====== | ||
+ | This is "nn::hid::NpadJoyDualState". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x8 | ||
+ | | SamplingNumber | ||
+ | |- | ||
+ | | 0x8 | ||
+ | | 0x8 | ||
+ | | [[#NpadButtonSet|Buttons]] | ||
+ | |- | ||
+ | | 0x10 | ||
+ | | 0x8 | ||
+ | | [[#AnalogStickState|AnalogStickL]] | ||
+ | |- | ||
+ | | 0x18 | ||
+ | | 0x8 | ||
+ | | [[#AnalogStickState|AnalogStickR]] | ||
+ | |- | ||
+ | | 0x20 | ||
+ | | 0x4 | ||
+ | | [[#NpadAttributesSet|Attributes]] | ||
+ | |- | ||
+ | | 0x24 | ||
+ | | 0x4 | ||
+ | | Reserved | ||
+ | |} | ||
+ | |||
+ | ==== NpadJoyLeftLifo ==== | ||
+ | This is "nn::hid::detail::NpadJoyLeftLifo". This is a RingLifo object. | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x8 | ||
+ | | RingLifoVptr | ||
+ | |- | ||
+ | | 0x8 | ||
+ | | 0x8 | ||
+ | | BufferCount | ||
+ | |- | ||
+ | | 0x10 | ||
+ | | 0x8 | ||
+ | | Tail | ||
+ | |- | ||
+ | | 0x18 | ||
+ | | 0x8 | ||
+ | | Count | ||
+ | |- | ||
+ | | 0x20 | ||
+ | | 0x30 * 17 | ||
+ | | Array of [[#NpadJoyLeftStateAtomicStorage]] | ||
+ | |} | ||
+ | |||
+ | ===== NpadJoyLeftStateAtomicStorage ===== | ||
+ | This is "nn::hid::detail::NpadJoyLeftStateAtomicStorage". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x8 | ||
+ | | SamplingNumber | ||
+ | |- | ||
+ | | 0x8 | ||
+ | | 0x28 | ||
+ | | [[#NpadJoyLeftState]] | ||
+ | |} | ||
+ | |||
+ | ====== NpadJoyLeftState ====== | ||
+ | This is "nn::hid::NpadJoyLeftState". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x8 | ||
+ | | SamplingNumber | ||
+ | |- | ||
+ | | 0x8 | ||
+ | | 0x8 | ||
+ | | [[#NpadButtonSet|Buttons]] | ||
+ | |- | ||
+ | | 0x10 | ||
+ | | 0x8 | ||
+ | | [[#AnalogStickState|AnalogStickL]] | ||
+ | |- | ||
+ | | 0x18 | ||
+ | | 0x8 | ||
+ | | [[#AnalogStickState|AnalogStickR]] | ||
+ | |- | ||
+ | | 0x20 | ||
+ | | 0x4 | ||
+ | | [[#NpadAttributesSet|Attributes]] | ||
+ | |- | ||
+ | | 0x24 | ||
+ | | 0x4 | ||
+ | | Reserved | ||
+ | |} | ||
+ | |||
+ | ==== NpadJoyRightLifo ==== | ||
+ | This is "nn::hid::detail::NpadJoyRightLifo". This is a RingLifo object. | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x8 | ||
+ | | RingLifoVptr | ||
+ | |- | ||
+ | | 0x8 | ||
+ | | 0x8 | ||
+ | | BufferCount | ||
+ | |- | ||
+ | | 0x10 | ||
+ | | 0x8 | ||
+ | | Tail | ||
+ | |- | ||
+ | | 0x18 | ||
+ | | 0x8 | ||
+ | | Count | ||
+ | |- | ||
+ | | 0x20 | ||
+ | | 0x30 * 17 | ||
+ | | Array of [[#NpadJoyRightStateAtomicStorage]] | ||
+ | |} | ||
+ | |||
+ | ===== NpadJoyRightStateAtomicStorage ===== | ||
+ | This is "nn::hid::detail::NpadJoyRightStateAtomicStorage". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x8 | ||
+ | | SamplingNumber | ||
+ | |- | ||
+ | | 0x8 | ||
+ | | 0x28 | ||
+ | | [[#NpadJoyRightState]] | ||
+ | |} | ||
+ | |||
+ | ====== NpadJoyRightState ====== | ||
+ | This is "nn::hid::NpadJoyRightState". | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x8 | ||
+ | | SamplingNumber | ||
+ | |- | ||
+ | | 0x8 | ||
+ | | 0x8 | ||
+ | | [[#NpadButtonSet|Buttons]] | ||
+ | |- | ||
+ | | 0x10 | ||
+ | | 0x8 | ||
+ | | [[#AnalogStickState|AnalogStickL]] | ||
+ | |- | ||
+ | | 0x18 | ||
+ | | 0x8 | ||
+ | | [[#AnalogStickState|AnalogStickR]] | ||
+ |