Difference between revisions of "HID services"

From Nintendo Switch Brew
Jump to navigation Jump to search
(Created page with "See here for the HID shared-memory. = hid = = hid:dbg = = hid:sys =")
 
 
(397 intermediate revisions by 8 users not shown)
Line 1: Line 1:
See [[HID_Shared_Memory|here]] for the HID shared-memory.
+
= hid =
 +
This is "nn::hid::IHidServer".
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Cmd || Name
 +
|-
 +
| 0 || [[#CreateAppletResource]]
 +
|-
 +
| 1 || [[#ActivateDebugPad]]
 +
|-
 +
| 11 || [[#ActivateTouchScreen]]
 +
|-
 +
| 21 || [[#ActivateMouse]]
 +
|-
 +
| 31 || [[#ActivateKeyboard]]
 +
|-
 +
| 32 || [6.0.0+] [[#SendKeyboardLockKeyEvent]]
 +
|-
 +
| 40 || [[#AcquireXpadIdEventHandle]]
 +
|-
 +
| 41 || [[#ReleaseXpadIdEventHandle]]
 +
|-
 +
| 51 || [[#ActivateXpad]]
 +
|-
 +
| 55 || [[#GetXpadIds]]
 +
|-
 +
| 56 || [[#ActivateJoyXpad]]
 +
|-
 +
| 58 || [[#GetJoyXpadLifoHandle]]
 +
|-
 +
| 59 || [[#GetJoyXpadIds]]
 +
|-
 +
| 60 || [[#ActivateSixAxisSensor]]
 +
|-
 +
| 61 || [[#DeactivateSixAxisSensor]]
 +
|-
 +
| 62 || [[#GetSixAxisSensorLifoHandle]]
 +
|-
 +
| 63 || [[#ActivateJoySixAxisSensor]]
 +
|-
 +
| 64 || [[#DeactivateJoySixAxisSensor]]
 +
|-
 +
| 65 || [[#GetJoySixAxisSensorLifoHandle]]
 +
|-
 +
| 66 || [[#StartSixAxisSensor]]
 +
|-
 +
| 67 || [[#StopSixAxisSensor]]
 +
|-
 +
| 68 || [[#IsSixAxisSensorFusionEnabled]]
 +
|-
 +
| 69 || [[#EnableSixAxisSensorFusion]]
 +
|-
 +
| 70 || [[#SetSixAxisSensorFusionParameters]]
 +
|-
 +
| 71 || [[#GetSixAxisSensorFusionParameters]]
 +
|-
 +
| 72 || [[#ResetSixAxisSensorFusionParameters]]
 +
|-
 +
| 73 || [[#SetAccelerometerParameters]]
 +
|-
 +
| 74 || [[#GetAccelerometerParameters]]
 +
|-
 +
| 75 || [[#ResetAccelerometerParameters]]
 +
|-
 +
| 76 || [[#SetAccelerometerPlayMode]]
 +
|-
 +
| 77 || [[#GetAccelerometerPlayMode]]
 +
|-
 +
| 78 || [[#ResetAccelerometerPlayMode]]
 +
|-
 +
| 79 || [[#SetGyroscopeZeroDriftMode]]
 +
|-
 +
| 80 || [[#GetGyroscopeZeroDriftMode]]
 +
|-
 +
| 81 || [[#ResetGyroscopeZeroDriftMode]]
 +
|-
 +
| 82 || [[#IsSixAxisSensorAtRest]]
 +
|-
 +
| 83 || [6.0.0+] [[#IsFirmwareUpdateAvailableForSixAxisSensor]]
 +
|-
 +
| 91 || [[#ActivateGesture]]
 +
|-
 +
| 100 || [[#SetSupportedNpadStyleSet]]
 +
|-
 +
| 101 || [[#GetSupportedNpadStyleSet]]
 +
|-
 +
| 102 || [[#SetSupportedNpadIdType]]
 +
|-
 +
| 103 || [[#ActivateNpad]]
 +
|-
 +
| 104 || [[#DeactivateNpad]]
 +
|-
 +
| 106 || [[#AcquireNpadStyleSetUpdateEventHandle]]
 +
|-
 +
| 107 || [[#DisconnectNpad]]
 +
|-
 +
| 108 || [[#GetPlayerLedPattern]]
 +
|-
 +
| 109 || [5.0.0+] [[#ActivateNpadWithRevision]]
 +
|-
 +
| 120 || [[#SetNpadJoyHoldType]]
 +
|-
 +
| 121 || [[#GetNpadJoyHoldType]]
 +
|-
 +
| 122 || [[#SetNpadJoyAssignmentModeSingleByDefault]]
 +
|-
 +
| 123 || [[#SetNpadJoyAssignmentModeSingle]]
 +
|-
 +
| 124 || [[#SetNpadJoyAssignmentModeDual]]
 +
|-
 +
| 125 || [[#MergeSingleJoyAsDualJoy]]
 +
|-
 +
| 126 || [[#StartLrAssignmentMode]]
 +
|-
 +
| 127 || [[#StopLrAssignmentMode]]
 +
|-
 +
| 128 || [[#SetNpadHandheldActivationMode]]
 +
|-
 +
| 129 || [[#GetNpadHandheldActivationMode]]
 +
|-
 +
| 130 || [[#SwapNpadAssignment]]
 +
|-
 +
| 131 || [[#IsUnintendedHomeButtonInputProtectionEnabled]]
 +
|-
 +
| 132 || [[#EnableUnintendedHomeButtonInputProtection]]
 +
|-
 +
| 133 || [5.0.0+] [[#SetNpadJoyAssignmentModeSingleWithDestination]]
 +
|-
 +
| 134 || [6.1.0+] [[#SetNpadAnalogStickUseCenterClamp]]
 +
|-
 +
| 135 || [8.0.0+] [[#SetNpadCaptureButtonAssignment]]
 +
|-
 +
| 136 || [8.0.0+] [[#ClearNpadCaptureButtonAssignment]]
 +
|-
 +
| 200 || [[#GetVibrationDeviceInfo]]
 +
|-
 +
| 201 || [[#SendVibrationValue]]
 +
|-
 +
| 202 || [[#GetActualVibrationValue]]
 +
|-
 +
| 203 || [[#CreateActiveVibrationDeviceList]]
 +
|-
 +
| 204 || [[#PermitVibration]]
 +
|-
 +
| 205 || [[#IsVibrationPermitted]]
 +
|-
 +
| 206 || [[#SendVibrationValues]]
 +
|-
 +
| 207 || [4.0.0+] [[#SendVibrationGcErmCommand]]
 +
|-
 +
| 208 || [4.0.0+] [[#GetActualVibrationGcErmCommand]]
 +
|-
 +
| 209 || [4.0.0+] [[#BeginPermitVibrationSession]]
 +
|-
 +
| 210 || [4.0.0+] [[#EndPermitVibrationSession]]
 +
|-
 +
| 211 || [7.0.0+] [[#IsVibrationDeviceMounted]]
 +
|-
 +
| 212 || [11.0.0+] [[#SendVibrationValueInBool]]
 +
|-
 +
| 300 || [3.0.0+] [[#ActivateConsoleSixAxisSensor]]
 +
|-
 +
| 301 || [3.0.0+] [[#StartConsoleSixAxisSensor]]
 +
|-
 +
| 302 || [3.0.0+] [[#StopConsoleSixAxisSensor]]
 +
|-
 +
| 303 || [5.0.0+] [[#ActivateSevenSixAxisSensor]]
 +
|-
 +
| 304 || [5.0.0+] [[#StartSevenSixAxisSensor]]
 +
|-
 +
| 305 || [5.0.0+] [[#StopSevenSixAxisSensor]]
 +
|-
 +
| 306 || [5.0.0+] [[#InitializeSevenSixAxisSensor]]
 +
|-
 +
| 307 || [5.0.0+] [[#FinalizeSevenSixAxisSensor]]
 +
|-
 +
| 308 || [5.0.0+] [[#SetSevenSixAxisSensorFusionStrength]]
 +
|-
 +
| 309 || [5.0.0+] [[#GetSevenSixAxisSensorFusionStrength]]
 +
|-
 +
| 310 || [6.0.0+] [[#ResetSevenSixAxisSensorTimestamp]]
 +
|-
 +
| 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]]
 +
|-
 +
| 501 || [5.0.0+] [[#InitializePalma]]
 +
|-
 +
| 502 || [5.0.0+] [[#AcquirePalmaOperationCompleteEvent]]
 +
|-
 +
| 503 || [5.0.0+] [[#GetPalmaOperationInfo]]
 +
|-
 +
| 504 || [5.0.0+] [[#PlayPalmaActivity]]
 +
|-
 +
| 505 || [5.0.0+] [[#SetPalmaFrModeType]]
 +
|-
 +
| 506 || [5.0.0+] [[#ReadPalmaStep]]
 +
|-
 +
| 507 || [5.0.0+] [[#EnablePalmaStep]]
 +
|-
 +
| 508 || [5.0.0+] [[#ResetPalmaStep]]
 +
|-
 +
| 509 || [5.0.0+] [[#ReadPalmaApplicationSection]]
 +
|-
 +
| 510 || [5.0.0+] [[#WritePalmaApplicationSection]]
 +
|-
 +
| 511 || [5.0.0+] [[#ReadPalmaUniqueCode]]
 +
|-
 +
| 512 || [5.0.0+] [[#SetPalmaUniqueCodeInvalid]]
 +
|-
 +
| 513 || [5.0.0+] [[#WritePalmaActivityEntry]]
 +
|-
 +
| 514 || [5.0.0+] [[#WritePalmaRgbLedPatternEntry]]
 +
|-
 +
| 515 || [5.0.0+] [[#WritePalmaWaveEntry]]
 +
|-
 +
| 516 || [5.0.0+] [[#SetPalmaDataBaseIdentificationVersion]]
 +
|-
 +
| 517 || [5.0.0+] [[#GetPalmaDataBaseIdentificationVersion]]
 +
|-
 +
| 518 || [5.0.0+] [[#SuspendPalmaFeature]]
 +
|-
 +
| 519 || [5.1.0+] [[#GetPalmaOperationResult]]
 +
|-
 +
| 520 || [5.1.0+] [[#ReadPalmaPlayLog]]
 +
|-
 +
| 521 || [5.1.0+] [[#ResetPalmaPlayLog]]
 +
|-
 +
| 522 || [5.1.0+] [[#SetIsPalmaAllConnectable]]
 +
|-
 +
| 523 || [5.1.0+] [[#SetIsPalmaPairedConnectable]]
 +
|-
 +
| 524 || [5.1.0+] [[#PairPalma]]
 +
|-
 +
| 525 || [5.1.0+] [[#SetPalmaBoostMode]]
 +
|-
 +
| 526 || [7.0.0+] [[#CancelWritePalmaWaveEntry]]
 +
|-
 +
| 527 || [8.0.0+] [[#EnablePalmaBoostMode]]
 +
|-
 +
| 528 || [8.0.0+] [[#GetPalmaBluetoothAddress]]
 +
|-
 +
| 529 || [8.0.0+] [[#SetDisallowedPalmaConnection]]
 +
|-
 +
| 1000 || [[#SetNpadCommunicationMode]]
 +
|-
 +
| 1001 || [[#GetNpadCommunicationMode]]
 +
|-
 +
| 1002 || [9.0.0+] [[#SetTouchScreenConfiguration]]
 +
|-
 +
| 1003 || [9.0.0+] [[#IsFirmwareUpdateNeededForNotification]]
 +
|-
 +
| 2000 || [10.0.0+] [[#ActivateDigitizer]]
 +
|}
 +
 
 +
== CreateAppletResource ==
 +
Takes a PID and an u64 [[AM_services|AppletResourceUserId]]. Returns an [[#IAppletResource]].
 +
 
 +
== ActivateDebugPad ==
 +
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 and an [[AM_services|AppletResourceUserId]], no output.
 +
 
 +
== ActivateKeyboard ==
 +
Takes a PID and an [[AM_services|AppletResourceUserId]], no output.
 +
 
 +
== SendKeyboardLockKeyEvent ==
 +
Takes a PID, an u32 BitFlagSet [[#KeyboardLockKeyEvent]], and an [[AM_services|AppletResourceUserId]], no output.
 +
 
 +
This is identical to the hidsys cmd.
 +
 
 +
== AcquireXpadIdEventHandle ==
 +
Takes an input u64, returns an output handle.
 +
 
 +
[10.0.0+] Stubbed, just returns 0.
 +
 
 +
== ReleaseXpadIdEventHandle ==
 +
Takes an input u64, no output.
 +
 
 +
[10.0.0+] Stubbed, just returns 0.
 +
 
 +
== ActivateXpad ==
 +
Takes a PID, an u32 "nn::hid::BasicXpadId", an [[AM_services|AppletResourceUserId]], no output.
 +
 
 +
[10.0.0+] Stubbed, just returns 0.
 +
 
 +
== GetXpadIds ==
 +
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.
 +
 
 +
== 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 input u32 "nn::hid::JoyXpadId", no output.
 +
 
 +
[10.0.0+] Stubbed, just returns 0.
 +
 
 +
== DeactivateSixAxisSensor ==
 +
Takes an input u32 "nn::hid::JoyXpadId", no output.
 +
 
 +
[10.0.0+] Stubbed, just returns 0.
 +
 
 +
== GetSixAxisSensorLifoHandle ==
 +
Takes an input u32 "nn::hid::JoyXpadId", returns an output handle.
 +
 
 +
[10.0.0+] Stubbed, just returns 0.
 +
 
 +
== ActivateJoySixAxisSensor ==
 +
Takes an input u32 "nn::hid::JoyXpadId", no output.
 +
 
 +
[10.0.0+] Stubbed, just returns 0.
 +
 
 +
== DeactivateJoySixAxisSensor ==
 +
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.
  
= hid =
+
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 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 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.
 +
 
 +
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 [[#hidGetPalmaOperationInfo]].
 +
 
 +
== SetPalmaFrModeType ==
 +
Takes an input [[#PalmaConnectionHandle]], an u64 [[#PalmaFrModeType]], no output.
 +
 
 +
See [[#hidGetPalmaOperationInfo]].
 +
 
 +
== ReadPalmaStep ==
 +
Takes an input [[#PalmaConnectionHandle]], no output.
 +
 
 +
See [[#hidGetPalmaOperationInfo]].
 +
 
 +
[[#EnablePalmaStep]] should be used before this.
 +
 
 +
== EnablePalmaStep ==
 +
Takes an input bool, a [[#PalmaConnectionHandle]], no output.
 +
 
 +
See [[#hidGetPalmaOperationInfo]].
 +
 
 +
== ResetPalmaStep ==
 +
Takes an input [[#PalmaConnectionHandle]], no output.
 +
 
 +
See [[#hidGetPalmaOperationInfo]].
 +
 
 +
== 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 [[#hidGetPalmaOperationInfo]].
 +
 
 +
== 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 [[#hidGetPalmaOperationInfo]].
 +
 
 +
== ReadPalmaUniqueCode ==
 +
Takes an input [[#PalmaConnectionHandle]], no output.
 +
 
 +
See [[#hidGetPalmaOperationInfo]].
 +
 
 +
== SetPalmaUniqueCodeInvalid ==
 +
Takes an input [[#PalmaConnectionHandle]], no output.
 +
 
 +
See [[#hidGetPalmaOperationInfo]].
 +
 
 +
== 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 [[#hidGetPalmaOperationInfo]].
 +
 
 +
== WritePalmaRgbLedPatternEntry ==
 +
Takes an input [[#PalmaConnectionHandle]], an u64, a type-0x5 input buffer, no output.
 +
 
 +
sdknso exposes the u64 as an u16.
 +
 
 +
See [[#hidGetPalmaOperationInfo]].
 +
 
 +
== 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 [[#hidGetPalmaOperationInfo]].
 +
 
 +
== SetPalmaDataBaseIdentificationVersion ==
 +
Takes an input s32, a [[#PalmaConnectionHandle]], no output.
 +
 
 +
See [[#hidGetPalmaOperationInfo]].
 +
 
 +
== GetPalmaDataBaseIdentificationVersion ==
 +
Takes an input [[#PalmaConnectionHandle]], no output.
 +
 
 +
See [[#hidGetPalmaOperationInfo]].
 +
 
 +
== SuspendPalmaFeature ==
 +
Takes an input "nn::util::BitFlagSet<32, [[#PalmaFeature]]>", a [[#PalmaConnectionHandle]], no output.
 +
 
 +
See [[#hidGetPalmaOperationInfo]].
 +
 
 +
== 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 [[#hidGetPalmaOperationInfo]].
 +
 
 +
== ResetPalmaPlayLog ==
 +
Takes an input u16, a [[#PalmaConnectionHandle]], no output.
 +
 
 +
See [[#hidGetPalmaOperationInfo]].
 +
 
 +
== SetIsPalmaAllConnectable ==
 +
Takes a PID, a bool, an [[AM_services|AppletResourceUserId]], no output.
 +
 
 +
== SetIsPalmaPairedConnectable ==
 +
Takes a PID, a bool, an [[AM_services|AppletResourceUserId]], no output.
 +
 
 +
== PairPalma ==
 +
Takes an input [[#PalmaConnectionHandle]], no output.
 +
 
 +
== 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 ==
 +
{| 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 =
 
= 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
 +
|-
 +
| 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 an input [[#SleepButtonAutoPilotState]], no output.
 +
 +
== UnsetSleepButtonAutoPilotState ==
 +
No input/output.
 +
 +
== StartFirmwareUpdate ==
 +
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 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 total of 8-bytes of input, and returns a total of 5-bytes of output.
 +
 +
[3.0.0+] No input/output.
 +
 +
== UpdateControllerColor ==
 +
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 must be used before [[#ReadSerialFlash]]/[[#WriteSerialFlash]]. Afterwards, this Event is used to wait for the async operation started by [[#ReadSerialFlash]]/[[#WriteSerialFlash]] to finish. After waiting on the Event, [[#GetOperationResult]] should be used.
 +
 +
== ReadSerialFlash ==
 +
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).
 +
 +
== 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.
 +
 +
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.
 +
 +
== DumpHdlsNpadAssignmentState ==
 +
No input/output.
 +
 +
After using this cmd, the output [[#HdlsNpadAssignment]] is located at tmem+0.
 +
 +
== DumpHdlsStates ==
 +
No input/output.
 +
 +
After using this cmd, the output [[#HdlsStateList]] struct is located at tmem+0.
 +
 +
== ApplyHdlsNpadAssignmentState ==
 +
Takes an input u8 bool, no output.
 +
 +
Prior to using this cmd, the input [[#HdlsNpadAssignment]] is written to tmem+0 by the user-process.
 +
 +
== ApplyHdlsStateList ==
 +
No input/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 =
 
= hid:sys =
 +
This is "nn::hid::IHidSystemServer".
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! 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]]
 +
|-
 +
| 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
 +
|-
 +
| 500 || SetAppletResourceUserId
 +
|-
 +
| 501 || RegisterAppletResourceUserId
 +
|-
 +
| 502 || UnregisterAppletResourceUserId
 +
|-
 +
| 503 || EnableAppletToGetInput
 +
|-
 +
| 504 || SetAruidValidForVibration
 +
|-
 +
| 505 || EnableAppletToGetSixAxisSensor
 +
|-
 +
| 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+] [[#GetButtonConfigStorageEmbeddedDeprecated]] ([10.0.0-10.2.0] [[#GetButtonConfigStorageEmbeddedDeprecated|GetButtonConfigStorageEmbedded]])
 +
|-
 +
| 1260 || [11.0.0+] [[#GetButtonConfigStorageFullDeprecated]] ([10.0.0-10.2.0] [[#GetButtonConfigStorageFullDeprecated|GetButtonConfigStorageFull]])
 +
|-
 +
| 1261 || [11.0.0+] [[#GetButtonConfigStorageLeftDeprecated]] ([10.0.0-10.2.0] [[#GetButtonConfigStorageLeftDeprecated|GetButtonConfigStorageLeft]])
 +
|-
 +
| 1262 || [11.0.0+] [[#GetButtonConfigStorageRightDeprecated]] ([10.0.0-10.2.0] [[#GetButtonConfigStorageRightDeprecated|GetButtonConfigStorageRight]])
 +
|-
 +
| 1263 || [11.0.0+] [[#SetButtonConfigStorageEmbeddedDeprecated]] ([10.0.0-10.2.0] [[#SetButtonConfigStorageEmbeddedDeprecated|SetButtonConfigStorageEmbedded]])
 +
|-
 +
| 1264 || [11.0.0+] [[#SetButtonConfigStorageFullDeprecated]] ([10.0.0-10.2.0] [[#SetButtonConfigStorageFullDeprecated|SetButtonConfigStorageFull]])
 +
|-
 +
| 1265 || [11.0.0+] [[#SetButtonConfigStorageLeftDeprecated]] ([10.0.0-10.2.0] [[#SetButtonConfigStorageLeftDeprecated|SetButtonConfigStorageLeft]])
 +
|-
 +
| 1266 || [11.0.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
 +
|-
 +
| 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.
 +
 +
[6.0.0+]: The buffer type used by GetNfcInfo is now 0x32 instead of 0x1A.
 +
 +
= 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]], an u64 [[AM_services|AppletResourceUserId]], returns an output u8 bool and a [[#BusHandle]].
 +
 +
The bool 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 u8 bool.
 +
 +
This is not used by sdknso.
 +
 +
== Initialize ==
 +
Takes an input [[#BusHandle]], 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]], an u64 [[AM_services|AppletResourceUserId]], no output.
 +
 +
== EnableExternalDevice ==
 +
Takes an input u8 bool, a [[#BusHandle]], an u64, an u64 [[AM_services|AppletResourceUserId]], no output.
 +
 +
sdknso passes value 0x38900050018 (0x3A600050018 with 7.x+) for the u64.
 +
 +
The bool flag 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 ExternalDeviceId.
 +
 +
== 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.
 +
 +
Official sw copies the u32 to an output u64, for the actual output size.
 +
 +
== SetEventForSendCommandAsycResult ==
 +
Takes an input [[#BusHandle]], returns an output Event handle 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 tmem_size, an u32 [[#JoyPollingMode]], 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, 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
 +
| 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
 +
|
 +
|}
 +
 +
==== 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]]
 +
|-
 +
| 0x20
 +
| 0x4
 +
| [[#NpadAttributesSet|Attributes]]
 +
|-
 +
| 0x24
 +
| 0x4
 +
| Reserved
 +
|}
 +
 +
==== NpadPalmaLifo ====
 +
This is "nn::hid::detail::NpadPalmaLifo". 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 [[#NpadPalmaStateAtomicStorage]]
 +
|}
 +
 +
===== NpadPalmaStateAtomicStorage =====
 +
This is "nn::hid::detail::NpadPalmaStateAtomicStorage".
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0
 +
| 0x8
 +
| SamplingNumber
 +
|-
 +
| 0x8
 +
| 0x28
 +
| [[#NpadPalmaState]]
 +
|}
 +
 +
====== NpadPalmaState ======
 +
This is "nn::hid::NpadPalmaState".
 +
 +
{| 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
 +
|}
 +
 +
==== NpadSystemLifo ====
 +
This is "nn::hid::detail::NpadSystemLifo". 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 [[#NpadSystemStateAtomicStorage]]
 +
|}
 +
 +
===== NpadSystemStateAtomicStorage =====
 +
This is "nn::hid::detail::NpadSystemStateAtomicStorage".
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0
 +
| 0x8
 +
| SamplingNumber
 +
|-
 +
| 0x8
 +
| 0x28
 +
| [[#NpadSystemState]]
 +
|}
 +
 +
====== NpadSystemState ======
 +
This is "nn::hid::system::NpadSystemState".
 +
 +
{| 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
 +
|}
 +
 +
==== NpadSystemExtLifo ====
 +
This is "nn::hid::detail::NpadSystemExtLifo". 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 [[#NpadSystemExtStateAtomicStorage]]
 +
|}
 +
 +
===== NpadSystemExtStateAtomicStorage =====
 +
This is "nn::hid::detail::NpadSystemExtStateAtomicStorage".
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0
 +
| 0x8
 +
| SamplingNumber
 +
|-
 +
| 0x8
 +
| 0x28
 +
| [[#NpadSystemExtState]]
 +
|}
 +
 +
====== NpadSystemExtState ======
 +
This is "nn::hid::system::NpadSystemExtState".
 +
 +
{| 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
 +
|}
 +
 +
==== NpadSixAxisSensorLifo ====
 +
This is "nn::hid::detail::NpadSixAxisSensorLifo". 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
 +
| 0x68 * 17
 +
| Array of [[#SixAxisSensorStateAtomicStorage]]
 +
|}
 +
 +
===== SixAxisSensorStateAtomicStorage =====
 +
This is "nn::hid::detail::SixAxisSensorStateAtomicStorage".
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0
 +
| 0x8
 +
| SamplingNumber
 +
|-
 +
| 0x8
 +
| 0x60
 +
| [[#SixAxisSensorState]]
 +
|}
 +
 +
====== SixAxisSensorState ======
 +
This is "nn::hid::SixAxisSensorState".
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0
 +
| 0x8
 +
| DeltaTime
 +
|-
 +
| 0x8
 +
| 0x8
 +
| SamplingNumber
 +
|-
 +
| 0x10
 +
| 0x4
 +
| AccelerationX
 +
|-
 +
| 0x14
 +
| 0x4
 +
| AccelerationY
 +
|-
 +
| 0x18
 +
| 0x4
 +
| AccelerationZ
 +
|-
 +
| 0x1C
 +
| 0x4
 +
| AngularVelocityX
 +
|-
 +
| 0x20
 +
| 0x4
 +
| AngularVelocityY
 +
|-
 +
| 0x24
 +
| 0x4
 +
| AngularVelocityZ
 +
|-
 +
| 0x28
 +
| 0x4
 +
| AngleX
 +
|-
 +
| 0x2C
 +
| 0x4
 +
| AngleY
 +
|-
 +
| 0x30
 +
| 0x4
 +
| AngleZ
 +
|-
 +
| 0x34
 +
| 0x24
 +
| [[#DirectionState|Direction]]
 +
|-
 +
| 0x58
 +
| 0x4
 +
| [[#SixAxisSensorAttributeSet|Attributes]]
 +
|-
 +
| 0x5C
 +
| 0x4
 +
| Reserved
 +
|}
 +
 +
==== NfcXcdDeviceHandleState ====
 +
This is "nn::hid::detail::NfcXcdDeviceHandleState". 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 [[#NfcXcdDeviceHandleStateImplAtomicStorage]]
 +
|}
 +
 +
===== NfcXcdDeviceHandleStateImplAtomicStorage =====
 +
This is "nn::hid::detail::NfcXcdDeviceHandleStateImplAtomicStorage".
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0
 +
| 0x8
 +
| SamplingNumber
 +
|-
 +
| 0x8
 +
| 0x18
 +
| [[#NfcXcdDeviceHandleStateImpl]]
 +
|}
 +
 +
====== NfcXcdDeviceHandleStateImpl ======
 +
This is "nn::hid::detail::NfcXcdDeviceHandleStateImpl".
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0
 +
| 0x8
 +
| [[#DeviceHandle|Handle]]
 +
|-
 +
| 0x8
 +
| 0x1
 +
| IsAvailable
 +
|-
 +
| 0x9
 +
| 0x1
 +
| IsActivated
 +
|-
 +
| 0xA
 +
| 0x6
 +
| Reserved
 +
|-
 +
| 0x10
 +
| 0x8
 +
| SamplingNumber
 +
|}
 +
 +
==== NpadGcTriggerLifo ====
 +
This is "nn::hid::detail::NpadGcTriggerLifo". 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 [[#NpadGcTriggerStateAtomicStorage]]
 +
|}
 +
 +
===== NpadGcTriggerStateAtomicStorage =====
 +
This is "nn::hid::detail::NpadGcTriggerStateAtomicStorage".
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0
 +
| 0x8
 +
| SamplingNumber
 +
|-
 +
| 0x8
 +
| 0x10
 +
| [[#NpadGcTriggerState]]
 +
|}
 +
 +
====== NpadGcTriggerState ======
 +
This is "nn::hid::server::NpadGcTriggerState".
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0
 +
| 0x8
 +
| SamplingNumber
 +
|-
 +
| 0x8
 +
| 0x4
 +
| TriggerL
 +
|-
 +
| 0xC
 +
| 0x4
 +
| TriggerR
 +
|}
 +
 +
== GestureSharedMemoryFormat ==
 +
This is "nn::hid::detail::GestureSharedMemoryFormat".
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0
 +
| 0x708
 +
| [[#GestureLifo]]
 +
|}
 +
 +
=== GestureLifo ===
 +
This is "nn::hid::detail::GestureLifo". 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
 +
| 0x68 * 17
 +
| Array of [[#GestureDummyStateAtomicStorage]]
 +
|}
 +
 +
===== GestureDummyStateAtomicStorage =====
 +
This is "nn::hid::detail::GestureDummyStateAtomicStorage".
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0
 +
| 0x8
 +
| SamplingNumber
 +
|-
 +
| 0x8
 +
| 0x60
 +
| [[#GestureDummyState]]
 +
|}
 +
 +
====== GestureDummyState ======
 +
This is "nn::hid::detail::GestureDummyState" / "nn::hid::GestureState".
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0
 +
| 0x8
 +
| SamplingNumber
 +
|-
 +
| 0x8
 +
| 0x8
 +
| ContextNumber
 +
|-
 +
| 0x10
 +
| 0x4
 +
| [[#GestureType|Type]]
 +
|-
 +
| 0x14
 +
| 0x4
 +
| [[#GestureDirection|Direction]]
 +
|-
 +
| 0x18
 +
| 0x4
 +
| X
 +
|-
 +
| 0x1C
 +
| 0x4
 +
| Y
 +
|-
 +
| 0x20
 +
| 0x4
 +
| s32 DeltaX
 +
|-
 +
| 0x24
 +
| 0x4
 +
| s32 DeltaY
 +
|-
 +
| 0x28
 +
| 0x4
 +
| float VelocityX
 +
|-
 +
| 0x2C
 +
| 0x4
 +
| float VelocityY
 +
|-
 +
| 0x30
 +
| 0x4
 +
| [[#GestureAttributeSet|Attributes]]
 +
|-
 +
| 0x34
 +
| 0x4
 +
| Scale
 +
|-
 +
| 0x38
 +
| 0x4
 +
| RotationAngle
 +
|-
 +
| 0x3C
 +
| 0x4
 +
| s32 PointCount
 +
|-
 +
| 0x40
 +
| 0x8 * 4
 +
| [[#GesturePoint|Points]]
 +
|}
 +
 +
== ConsoleSixAxisSensorSharedMemoryFormat ==
 +
This is "nn::hid::detail::ConsoleSixAxisSensorSharedMemoryFormat".
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0
 +
| 0x8
 +
| SamplingNumber
 +
|-
 +
| 0x8
 +
| 0x1
 +
| IsSevenSixAxisSensorAtRest
 +
|-
 +
| 0x9
 +
| 0x3
 +
| Padding
 +
|-
 +
| 0xC
 +
| 0x4
 +
| VerticalizationError
 +
|-
 +
| 0x10
 +
| 0xC
 +
| GyroBias
 +
|}
 +
 +
= AnalogStickState =
 +
This is "nn::hid::AnalogStickState".
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0
 +
| 0x4
 +
| X
 +
|-
 +
| 0x4
 +
| 0x4
 +
| Y
 +
|}
 +
 +
= TouchState =
 +
This is "nn::hid::TouchState".
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0
 +
| 0x8
 +
| DeltaTime
 +
|-
 +
| 0x8
 +
| 0x4
 +
| [[#TouchAttributeSet|Attributes]]
 +
|-
 +
| 0xC
 +
| 0x4
 +
| FingerId
 +
|-
 +
| 0x10
 +
| 0x4
 +
| X
 +
|-
 +
| 0x14
 +
| 0x4
 +
| Y
 +
|-
 +
| 0x18
 +
| 0x4
 +
| DiameterX
 +
|-
 +
| 0x1C
 +
| 0x4
 +
| DiameterY
 +
|-
 +
| 0x20
 +
| 0x4
 +
| RotationAngle
 +
|-
 +
| 0x24
 +
| 0x4
 +
| Reserved
 +
|}
 +
 +
= TouchScreenConfigurationForNx =
 +
This is "nn::hid::TouchScreenConfigurationForNx".
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0
 +
| 0x1
 +
| [[#TouchScreenModeForNx|Mode]]
 +
|-
 +
| 0x8
 +
| 0xF
 +
| Reserved
 +
|}
 +
 +
= TouchScreenModeForNx =
 +
This is "nn::hid::TouchScreenModeForNx".
 +
 +
{| class="wikitable" border="1"
 +
!  Value
 +
!  Description
 +
|-
 +
| 0 || UseSystemSetting
 +
|-
 +
| 1 || Finger
 +
|-
 +
| 2 || Heat2
 +
|}
 +
 +
= InputSourceState =
 +
This is "nn::hid::system::InputSourceState".
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0
 +
| 0x8
 +
| Timestamp
 +
|}
 +
 +
= NpadControllerColor =
 +
This is "nn::hid::NpadControllerColor".
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0
 +
| 0x4
 +
| Main
 +
|-
 +
| 0x4
 +
| 0x4
 +
| Sub
 +
|}
 +
 +
= NpadFullKeyColorState =
 +
This is "nn::hid::detail::NpadFullKeyColorState".
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0
 +
| 0x4
 +
| [[#ColorAttribute|Attribute]]
 +
|-
 +
| 0x4
 +
| 0x8
 +
| [[#NpadControllerColor|FullKey]]
 +
|}
 +
 +
= NpadJoyColorState =
 +
This is "nn::hid::detail::NpadJoyColorState".
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0
 +
| 0x4
 +
| [[#ColorAttribute|Attribute]]
 +
|-
 +
| 0x4
 +
| 0x8
 +
| [[#NpadControllerColor|Left]]
 +
|-
 +
| 0xC
 +
| 0x8
 +
| [[#NpadControllerColor|Right]]
 +
|}
 +
 +
= DirectionState =
 +
This is "nn::hid::DirectionState".
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0
 +
| 0x4
 +
| XX
 +
|-
 +
| 0x4
 +
| 0x4
 +
| XY
 +
|-
 +
| 0x8
 +
| 0x4
 +
| XZ
 +
|-
 +
| 0xC
 +
| 0x4
 +
| YX
 +
|-
 +
| 0x10
 +
| 0x4
 +
| YY
 +
|-
 +
| 0x14
 +
| 0x4
 +
| YZ
 +
|-
 +
| 0x18
 +
| 0x4
 +
| ZX
 +
|-
 +
| 0x1C
 +
| 0x4
 +
| ZY
 +
|-
 +
| 0x20
 +
| 0x4
 +
| ZZ
 +
|}
 +
 +
= GesturePoint =
 +
This is "nn::hid::GesturePoint".
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0
 +
| 0x4
 +
| X
 +
|-
 +
| 0x4
 +
| 0x4
 +
| Y
 +
|}
 +
 +
= ColorAttribute =
 +
This is "nn::hid::detail::ColorAttribute".
 +
 +
{| class="wikitable" border="1"
 +
!  Value
 +
!  Description
 +
|-
 +
| 0 || Ok
 +
|-
 +
| 1 || ReadError
 +
|-
 +
| 2 || NoController
 +
|}
 +
 +
= DebugPadAttributeSet =
 +
This is "nn::hid::DebugPadAttributeSet". This is a BitFlagSet object for [[#DebugPadAttribute]].
 +
 +
= DebugPadAttribute =
 +
This is "nn::hid::DebugPadAttribute". This is a 32-bit flag.
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Bit
 +
! Description
 +
|-
 +
| 0
 +
| IsConnected
 +
|}
 +
 +
= TouchAttributeSet =
 +
This is "nn::hid::TouchAttributeSet". This is a BitFlagSet object for [[#TouchAttribute]].
 +
 +
= TouchAttribute =
 +
This is "nn::hid::TouchAttribute". This is a 32-bit flag.
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Bit
 +
! Description
 +
|-
 +
| 0
 +
| Start
 +
|-
 +
| 1
 +
| End
 +
|}
 +
 +
= MouseAttributeSet =
 +
This is "nn::hid::MouseAttributeSet". This is a BitFlagSet object for [[#MouseAttribute]].
 +
 +
= MouseAttribute =
 +
This is "nn::hid::MouseAttribute". This is a 32-bit flag.
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Bit
 +
! Description
 +
|-
 +
| 0
 +
| Transferable
 +
|-
 +
| 1
 +
| IsConnected
 +
|}
 +
 +
= BasicXpadAttributeSet =
 +
This is "nn::hid::BasicXpadAttributeSet". This is a BitFlagSet object for [[#BasicXpadAttribute]].
 +
 +
= NpadAttributesSet =
 +
This is "nn::hid::NpadAttributesSet". This is a BitFlagSet object for [[#NpadAttribute]].
 +
 +
= NpadAttribute =
 +
This is "nn::hid::NpadAttribute". This is a 32-bit flag.
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Bit
 +
! Description
 +
|-
 +
| 0
 +
| IsConnected
 +
|-
 +
| 1
 +
| IsWired
 +
|-
 +
| 2
 +
| IsLeftConnected
 +
|-
 +
| 3
 +
| IsLeftWired
 +
|-
 +
| 4
 +
| IsRightConnected
 +
|-
 +
| 5
 +
| IsRightWired
 +
|}
 +
 +
= SixAxisSensorAttributeSet =
 +
This is "nn::hid::SixAxisSensorAttributeSet". This is a BitFlagSet object for [[#SixAxisSensorAttribute]].
 +
 +
= SixAxisSensorAttribute =
 +
This is "nn::hid::SixAxisSensorAttribute". This is a 32-bit flag.
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Bit
 +
! Description
 +
|-
 +
| 0
 +
| IsConnected
 +
|-
 +
| 1
 +
| IsInterpolated
 +
|}
 +
 +
= GestureAttributeSet =
 +
This is "nn::hid::GestureAttributeSet". This is a BitFlagSet object for [[#GestureAttribute]].
 +
 +
= GestureAttribute =
 +
This is "nn::hid::GestureAttribute". This is a 32-bit flag.
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Bit
 +
! Description
 +
|-
 +
| 4
 +
| IsNewTouch
 +
|-
 +
| 8
 +
| IsDoubleTap
 +
|}
 +
 +
= DebugPadButtonSet =
 +
This is "nn::hid::DebugPadButtonSet". This is a BitFlagSet object for [[#DebugPadButton]].
 +
 +
= DebugPadButton =
 +
This is "nn::hid::DebugPadButton". This is a 32-bit flag.
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Bit
 +
! Description
 +
|-
 +
| 0
 +
| A
 +
|-
 +
| 1
 +
| B
 +
|-
 +
| 2
 +
| X
 +
|-
 +
| 3
 +
| Y
 +
|-
 +
| 4
 +
| L
 +
|-
 +
| 5
 +
| R
 +
|-
 +
| 6
 +
| ZL
 +
|-
 +
| 7
 +
| ZR
 +
|-
 +
| 8
 +
| Start
 +
|-
 +
| 9
 +
| Select
 +
|-
 +
| 10
 +
| Left
 +
|-
 +
| 11
 +
| Up
 +
|-
 +
| 12
 +
| Right
 +
|-
 +
| 13
 +
| Down
 +
|}
 +
 +
= MouseButtonSet =
 +
This is "nn::hid::MouseButtonSet". This is a BitFlagSet object for [[#MouseButton]].
 +
 +
= MouseButton =
 +
This is "nn::hid::MouseButton". This is a 32-bit flag.
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Bit
 +
! Description
 +
|-
 +
| 0
 +
| Left
 +
|-
 +
| 1
 +
| Right
 +
|-
 +
| 2
 +
| Middle
 +
|-
 +
| 3
 +
| Forward
 +
|-
 +
| 4
 +
| Back
 +
|}
 +
 +
= KeyboardModifierSet =
 +
This is "nn::hid::KeyboardModifierSet". This is a BitFlagSet object for [[#KeyboardModifier]].
 +
 +
= KeyboardModifier =
 +
This is "nn::hid::KeyboardModifier". This is a 32-bit flag.
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Bit
 +
! Description
 +
|-
 +
| 0
 +
| Control
 +
|-
 +
| 1
 +
| Shift
 +
|-
 +
| 2
 +
| LeftAlt
 +
|-
 +
| 3
 +
| RightAlt
 +
|-
 +
| 4
 +
| Gui
 +
|-
 +
| 8
 +
| CapsLock
 +
|-
 +
| 9
 +
| ScrollLock
 +
|-
 +
| 10
 +
| NumLock
 +
|-
 +
| 11
 +
| Katakana
 +
|-
 +
| 12
 +
| Hiragana
 +
|}
 +
 +
= KeyboardKeySet =
 +
This is "nn::hid::KeyboardKeySet". This is a BitFlagSet object for [[#KeyboardKey]].
 +
 +
= KeyboardKey =
 +
This is "nn::hid::KeyboardKey". This is a 256-bit flag.
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Bit
 +
! Description
 +
|-
 +
| 4
 +
| A
 +
|-
 +
| 5
 +
| B
 +
|-
 +
| 6
 +
| C
 +
|-
 +
| 7
 +
| D
 +
|-
 +
| 8
 +
| E
 +
|-
 +
| 9
 +
| F
 +
|-
 +
| 10
 +
| G
 +
|-
 +
| 11
 +
| H
 +
|-
 +
| 12
 +
| I
 +
|-
 +
| 13
 +
| J
 +
|-
 +
| 14
 +
| K
 +
|-
 +
| 15
 +
| L
 +
|-
 +
| 16
 +
| M
 +
|-
 +
| 17
 +
| N
 +
|-
 +
| 18
 +
| O
 +
|-
 +
| 19
 +
| P
 +
|-
 +
| 20
 +
| Q
 +
|-
 +
| 21
 +
| R
 +
|-
 +
| 22
 +
| S
 +
|-
 +
| 23
 +
| T
 +
|-
 +
| 24
 +
| U
 +
|-
 +
| 25
 +
| V
 +
|-
 +
| 26
 +
| W
 +
|-
 +
| 27
 +
| X
 +
|-
 +
| 28
 +
| Y
 +
|-
 +
| 29
 +
| Z
 +
|-
 +
| 30
 +
| D1
 +
|-
 +
| 31
 +
| D2
 +
|-
 +
| 32
 +
| D3
 +
|-
 +
| 33
 +
| D4
 +
|-
 +
| 34
 +
| D5
 +
|-
 +
| 35
 +
| D6
 +
|-
 +
| 36
 +
| D7
 +
|-
 +
| 37
 +
| D8
 +
|-
 +
| 38
 +
| D9
 +
|-
 +
| 39
 +
| D0
 +
|-
 +
| 40
 +
| Return
 +
|-
 +
| 41
 +
| Escape
 +
|-
 +
| 42
 +
| Backspace
 +
|-
 +
| 43
 +
| Tab
 +
|-
 +
| 44
 +
| Space
 +
|-
 +
| 45
 +
| Minus
 +
|-
 +
| 46
 +
| Plus
 +
|-
 +
| 47
 +
| OpenBracket
 +
|-
 +
| 48
 +
| CloseBracket
 +
|-
 +
| 49
 +
| Pipe
 +
|-
 +
| 50
 +
| Tilde
 +
|-
 +
| 51
 +
| Semicolon
 +
|-
 +
| 52
 +
| Quote
 +
|-
 +
| 53
 +
| Backquote
 +
|-
 +
| 54
 +
| Comma
 +
|-
 +
| 55
 +
| Period
 +
|-
 +
| 56
 +
| Slash
 +
|-
 +
| 57
 +
| CapsLock
 +
|-
 +
| 58
 +
| F1
 +
|-
 +
| 59
 +
| F2
 +
|-
 +
| 60
 +
| F3
 +
|-
 +
| 61
 +
| F4
 +
|-
 +
| 62
 +
| F5
 +
|-
 +
| 63
 +
| F6
 +
|-
 +
| 64
 +
| F7
 +
|-
 +
| 65
 +
| F8
 +
|-
 +
| 66
 +
| F9
 +
|-
 +
| 67
 +
| F10
 +
|-
 +
| 68
 +
| F11
 +
|-
 +
| 69
 +
| F12
 +
|-
 +
| 70
 +
| PrintScreen
 +
|-
 +
| 71
 +
| ScrollLock
 +
|-
 +
| 72
 +
| Pause
 +
|-
 +
| 73
 +
| Insert
 +
|-
 +
| 74
 +
| Home
 +
|-
 +
| 75
 +
| PageUp
 +
|-
 +
| 76
 +
| Delete
 +
|-
 +
| 77
 +
| End
 +
|-
 +
| 78
 +
| PageDown
 +
|-
 +
| 79
 +
| RightArrow
 +
|-
 +
| 80
 +
| LeftArrow
 +
|-
 +
| 81
 +
| DownArrow
 +
|-
 +
| 82
 +
| UpArrow
 +
|-
 +
| 83
 +
| NumLock
 +
|-
 +
| 84
 +
| NumPadDivide
 +
|-
 +
| 85
 +
| NumPadMultiply
 +
|-
 +
| 86
 +
| NumPadSubtract
 +
|-
 +
| 87
 +
| NumPadAdd
 +
|-
 +
| 88
 +
| NumPadEnter
 +
|-
 +
| 89
 +
| NumPad1
 +
|-
 +
| 90
 +
| NumPad2
 +
|-
 +
| 91
 +
| NumPad3
 +
|-
 +
| 92
 +
| NumPad4
 +
|-
 +
| 93
 +
| NumPad5
 +
|-
 +
| 94
 +
| NumPad6
 +
|-
 +
| 95
 +
| NumPad7
 +
|-
 +
| 96
 +
| NumPad8
 +
|-
 +
| 97
 +
| NumPad9
 +
|-
 +
| 98
 +
| NumPad0
 +
|-
 +
| 99
 +
| NumPadDot
 +
|-
 +
| 100
 +
| Backslash
 +
|-
 +
| 101
 +
| Application
 +
|-
 +
| 102
 +
| Power
 +
|-
 +
| 103
 +
| NumPadEquals
 +
|-
 +
| 104
 +
| F13
 +
|-
 +
| 105
 +
| F14
 +
|-
 +
| 106
 +
| F15
 +
|-
 +
| 107
 +
| F16
 +
|-
 +
| 108
 +
| F17
 +
|-
 +
| 109
 +
| F18
 +
|-
 +
| 110
 +
| F19
 +
|-
 +
| 111
 +
| F20
 +
|-
 +
| 112
 +
| F21
 +
|-
 +
| 113
 +
| F22
 +
|-
 +
| 114
 +
| F23
 +
|-
 +
| 115
 +
| F24
 +
|-
 +
| 133
 +
| NumPadComma
 +
|-
 +
| 135
 +
| Ro
 +
|-
 +
| 136
 +
| KatakanaHiragana
 +
|-
 +
| 137
 +
| Yen
 +
|-
 +
| 138
 +
| Henkan
 +
|-
 +
| 139
 +
| Muhenkan
 +
|-
 +
| 140
 +
| NumPadCommaPc98
 +
|-
 +
| 144
 +
| HangulEnglish
 +
|-
 +
| 145
 +
| Hanja
 +
|-
 +
| 146
 +
| Katakana
 +
|-
 +
| 147
 +
| Hiragana
 +
|-
 +
| 148
 +
| ZenkakuHankaku
 +
|-
 +
| 224
 +
| LeftControl
 +
|-
 +
| 225
 +
| LeftShift
 +
|-
 +
| 226
 +
| LeftAlt
 +
|-
 +
| 227
 +
| LeftGui
 +
|-
 +
| 228
 +
| RightControl
 +
|-
 +
| 229
 +
| RightShift
 +
|-
 +
| 230
 +
| RightAlt
 +
|-
 +
| 231
 +
| RightGui
 +
|}
 +
 +
= KeyboardLockKeyEventSet =
 +
This is "nn::hid::system::KeyboardLockKeyEventSet". This is a BitFlagSet object for [[#KeyboardLockKeyEvent]].
 +
 +
= KeyboardLockKeyEvent =
 +
This is "nn::hid::system::KeyboardLockKeyEvent". This is a 32-bit flag.
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Bit
 +
! Description
 +
|-
 +
| 0
 +
| NumLockOn
 +
|-
 +
| 1
 +
| NumLockOff
 +
|-
 +
| 2
 +
| NumLockToggle
 +
|-
 +
| 3
 +
| CapsLockOn
 +
|-
 +
| 4
 +
| CapsLockOff
 +
|-
 +
| 5
 +
| CapsLockToggle
 +
|-
 +
| 6
 +
| ScrollLockOn
 +
|-
 +
| 7
 +
| ScrollLockOff
 +
|-
 +
| 8
 +
| ScrollLockToggle
 +
|}
 +
 +
= BasicXpadButtonSet =
 +
This is "nn::hid::BasicXpadButtonSet". This is a BitFlagSet object for [[#BasicXpadButton]].
 +
 +
= HomeButtonSet =
 +
This is "nn::hid::system::HomeButtonSet". This is a BitFlagSet object for [[#HomeButton]].
 +
 +
= SleepButtonSet =
 +
This is "nn::hid::system::SleepButtonSet". This is a BitFlagSet object for [[#SleepButton]].
 +
 +
= CaptureButtonSet =
 +
This is "nn::hid::system::CaptureButtonSet". This is a BitFlagSet object for [[#CaptureButton]].
 +
 +
= NpadButtonSet =
 +
This is "nn::hid::NpadButtonSet". This is a BitFlagSet object for [[#NpadButton]].
 +
 +
= NpadButton =
 +
This is "nn::hid::NpadButton". This is a 64-bit flag.
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Bit
 +
! Description
 +
|-
 +
| 0
 +
| A
 +
|-
 +
| 1
 +
| B
 +
|-
 +
| 2
 +
| X
 +
|-
 +
| 3
 +
| Y
 +
|-
 +
| 4
 +
| StickL
 +
|-
 +
| 5
 +
| StickR
 +
|-
 +
| 6
 +
| L
 +
|-
 +
| 7
 +
| R
 +
|-
 +
| 8
 +
| ZL
 +
|-
 +
| 9
 +
| ZR
 +
|-
 +
| 10
 +
| Plus
 +
|-
 +
| 11
 +
| Minus
 +
|-
 +
| 12
 +
| Left
 +
|-
 +
| 13
 +
| Up
 +
|-
 +
| 14
 +
| Right
 +
|-
 +
| 15
 +