Changes

Jump to navigation Jump to search
5,820 bytes added ,  17:56, 2 April 2020
no edit summary
Line 1,229: Line 1,229:  
| 0x8 || 0x8 || [[#IrSensorMode]]
 
| 0x8 || 0x8 || [[#IrSensorMode]]
 
|-
 
|-
| 0x10 || 0xE20 || Array of ProcessorState
+
| 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]].
 
ProcessorState is specialized depending on the value of [[#IrSensorMode]].
   −
The array of ProcessorState can hold up to 6 entries of [[#PointingProcessorState]] or 5 entries of any of the other states.  
+
===== MomentProcessorState =====
 +
This is "nn::irsensor::MomentProcessorState".
   −
==== MomentProcessorState ====
   
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
Line 1,252: Line 1,270:  
|}
 
|}
   −
The array of [[#MomentStatistic]] can hold up to 48 entries.
+
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.
   −
===== MomentStatistic =====
   
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
 
! Offset || Size || Description
 
! Offset || Size || Description
 
|-
 
|-
| 0x0 || 0x4 || AverageIntensity
+
| 0x0 || 0x4 || float AverageIntensity
 
|-
 
|-
| 0x4 || 0x4 || CentroidX
+
| 0x4 || 0x4 || float CentroidX
 
|-
 
|-
| 0x8 || 0x4 || CentroidY
+
| 0x8 || 0x4 || float CentroidY
 
|}
 
|}
   −
==== ClusteringProcessorState ====
+
===== ClusteringProcessorState =====
 +
This is "nn::irsensor::ClusteringProcessorState".
 +
 
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
Line 1,286: Line 1,308:  
The array of [[#ClusteringData]] can hold up to 16 entries.
 
The array of [[#ClusteringData]] can hold up to 16 entries.
   −
===== ClusteringData =====
+
====== ClusteringData ======
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
 
! Offset || Size || Description
 
! Offset || Size || Description
 
|-
 
|-
| 0x0 || 0x4 || AverageIntensity
+
| 0x0 || 0x4 || float AverageIntensity
 
|-
 
|-
| 0x4 || 0x4 || CentroidX
+
| 0x4 || 0x4 || float CentroidX
 
|-
 
|-
| 0x8 || 0x4 || CentroidY
+
| 0x8 || 0x4 || float CentroidY
 
|-
 
|-
 
| 0xC || 0x4 || PixelCount
 
| 0xC || 0x4 || PixelCount
Line 1,308: Line 1,330:  
|}
 
|}
   −
==== PointingProcessorState ====
+
===== PointingProcessorMarkerState =====
 +
This is "nn::irsensor::PointingProcessorMarkerState".
 +
 
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
Line 1,317: Line 1,341:  
| 0x8 || 0x8 || TimeStamp
 
| 0x8 || 0x8 || TimeStamp
 
|-
 
|-
| 0x10 || 0x60 || Unknown
+
| 0x10 || 0x1 || PointingStatus
|}
+
|-
 
+
| 0x11 || 0xB || Reserved
==== TeraPluginProcessorState ====
+
|-
{| class="wikitable" border="1"
+
| 0x1C || 0x4 || float PositionX
 
|-
 
|-
! Offset || Size || Description
+
| 0x20 || 0x4 || float PositionY
 
|-
 
|-
| 0x0 || 0x8 || SamplingNumber
+
| 0x24 || 0xC || Reserved
 
|-
 
|-
| 0x8 || 0x8 || TimeStamp
+
| 0x30 || 0x1 || PointingStatus
 
|-
 
|-
| 0x10 || 0x130 || Unknown
+
| 0x31 || 0xB || Reserved
|}
  −
 
  −
=== AruidFormat ===
  −
{| class="wikitable" border="1"
   
|-
 
|-
! Offset || Size || Description
+
| 0x3C || 0x4 || float PositionX
 
|-
 
|-
| 0x0 || 0x8 || IrSensorAruid
+
| 0x40 || 0x4 || float PositionY
 
|-
 
|-
| 0x8 || 0x8 || IrSensorAruidStatus
+
| 0x44 || 0xC || Reserved
 +
|-
 +
| 0x50 || 0x1 || PointingStatus
 +
|-
 +
| 0x51 || 0xB || Reserved
 +
|-
 +
| 0x5C || 0x4 || float PositionX
 +
|-
 +
| 0x60 || 0x4 || float PositionY
 +
|-
 +
| 0x64 || 0xC || Reserved
 
|}
 
|}
   −
== StopImageProcessor ==
+
===== PointingProcessorState =====
Takes a PID-descriptor, an [[#IrCameraHandle]], and an [[AM_services|AppletResourceUserId]]. No output.
+
This is "nn::irsensor::PointingProcessorState".
   −
== RunMomentProcessor ==
+
This is created from [[#PointingProcessorMarkerState]].
Takes a PID-descriptor, an [[#IrCameraHandle]], an [[AM_services|AppletResourceUserId]], and a [[#PackedMomentProcessorConfig]]. No output.
     −
== RunClusteringProcessor ==
+
{| class="wikitable" border="1"
Takes a PID-descriptor, an [[#IrCameraHandle]], an [[AM_services|AppletResourceUserId]], and a [[#PackedClusteringProcessorConfig]]. No output.
+
|-
 +
! Offset || Size || Description
 +
|-
 +
| 0x0 || 0x8 || SamplingNumber
 +
|-
 +
| 0x8 || 0x8 || TimeStamp
 +
|-
 +
| 0x10 || 0x4 || PointingStatus
 +
|-
 +
| 0x14 || 0x4 || float PositionX
 +
|-
 +
| 0x18 || 0x4 || float PositionY
 +
|-
 +
| 0x1C || 0x4 || Reserved
 +
|}
   −
== RunImageTransferProcessor ==
+
===== TeraPluginProcessorState =====
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.
+
This is "nn::irsensor::TeraPluginProcessorState".
   −
The TransferMemory is created with an user specified buffer and permission none.
+
{| class="wikitable" border="1"
 
+
|-
== GetImageTransferProcessorState ==
+
! Offset || Size || Description
Takes a PID-descriptor, a type-0x6 output buffer, an [[#IrCameraHandle]], and an [[AM_services|AppletResourceUserId]]. Returns an [[#ImageTransferProcessorState]]. No output.
+
|-
 +
| 0x0 || 0x8 || SamplingNumber
 +
|-
 +
| 0x8 || 0x8 || TimeStamp
 +
|-
 +
| 0x10 || 0x4 || AmbientNoiseLevel
 +
|-
 +
| 0x14 || 0x12C || PluginData
 +
|}
   −
== RunTeraPluginProcessor==
+
===== AdaptiveClusteringProcessorState =====
Takes a PID-descriptor, an [[#IrCameraHandle]], a [[#PackedTeraPluginProcessorConfig]] (immediately after the previous word), and an [[AM_services|AppletResourceUserId]]. No output.
+
This is "nn::irsensor::AdaptiveClusteringProcessorState".
   −
== GetNpadIrCameraHandle ==
+
This is created from [[#TeraPluginProcessorState]].
Takes an input [[#NpadIdType]]. Returns an output [[#IrCameraHandle]].
     −
== RunPointingProcessor ==
+
{| class="wikitable" border="1"
Takes a PID-descriptor, an [[#IrCameraHandle]], a [[#PackedPointingProcessorConfig]] (immediately after the previous word), and an [[AM_services|AppletResourceUserId]]. No output.
+
|-
 
+
! Offset || Size || Description
== SuspendImageProcessor ==
+
|-
Takes a PID-descriptor, an [[#IrCameraHandle]], and an [[AM_services|AppletResourceUserId]]. No output.
+
| 0x0 || 0x8 || SamplingNumber
 
+
|-
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+].
+
| 0x8 || 0x8 || TimeStamp
 +
|-
 +
| 0x10 || 0x4 || AmbientNoiseLevel
 +
|-
 +
| 0x14 || 0x4 || AccuracyLevel
 +
|-
 +
| 0x18 || 0x1 || ObjectCount
 +
|-
 +
| 0x19 || 0x1 || BackgroundIntensity
 +
|-
 +
| 0x1A || 0x6 || Reserved
 +
|-
 +
| 0x20 || 0x200 || Array of [[#AdaptiveClusteringData]]
 +
|}
   −
== CheckFirmwareVersion ==
+
The array of [[#AdaptiveClusteringData]] can hold up to 16 entries.
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).
+
====== AdaptiveClusteringData ======
 
+
{| class="wikitable" border="1"
== SetFunctionLevel ==
+
|-
Takes a PID-descriptor, an [[#IrCameraHandle]], a [[#PackedFunctionLevel]], and an [[AM_services|AppletResourceUserId]]. No output.
+
! Offset || Size || Description
 +
|-
 +
| 0x0 || 0x4 || float CentroidX
 +
|-
 +
| 0x4 || 0x4 || float CentroidY
 +
|-
 +
| 0x8 || 0x4 || float Area
 +
|-
 +
| 0xC || 0x4 || IsIncomplete
 +
|}
   −
== RunImageTransferExProcessor ==
+
===== HandAnalysisImageState =====
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.
+
This is "nn::irsensor::HandAnalysisImageState".
   −
The TransferMemory is created with an user specified buffer and permission none.
+
This is created from [[#TeraPluginProcessorState]].
   −
== RunIrLedProcessor ==
+
{| class="wikitable" border="1"
Takes a PID-descriptor, an [[#IrCameraHandle]], a [[#PackedIrLedProcessorConfig]] (immediately after the previous word), and an [[AM_services|AppletResourceUserId]]. No output.
+
|-
 +
! Offset || Size || Description
 +
|-
 +
| 0x0 || 0x8 || SamplingNumber
 +
|-
 +
| 0x8 || 0x4 || AmbientNoiseLevel
 +
|-
 +
| 0xC || 0x960 || Image
 +
|-
 +
| 0x96C || 0x4 || Reserved
 +
|}
   −
== StopImageProcessorAsync ==
+
===== HandAnalysisSilhouetteState =====
Takes a PID-descriptor, an [[#IrCameraHandle]], and an [[AM_services|AppletResourceUserId]]. No output.
+
This is "nn::irsensor::HandAnalysisSilhouetteState".
   −
== ActivateIrsensorWithFunctionLevel ==
+
This is created from [[#TeraPluginProcessorState]].
Takes a PID-descriptor, an [[#PackedFunctionLevel]], and an [[AM_services|AppletResourceUserId]]. No output.
  −
 
  −
= irs:sys =
  −
This is "nn::irsensor::IIrSensorSystemServer".
      
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
! Cmd || Name
+
! Offset || Size || Description
 
|-
 
|-
| 500 || [[#SetAppletResourceUserId]]
+
| 0x0 || 0x8 || SamplingNumber
 
|-
 
|-
| 501 || [[#RegisterAppletResourceUserId]]
+
| 0x8 || 0x4 || AmbientNoiseLevel
 
|-
 
|-
| 502 || [[#UnregisterAppletResourceUserId]]
+
| 0xC || 0x1354 || Unknown
|-
  −
| 503 || [[#EnableAppletToGetInput]]
   
|}
 
|}
   −
== SetAppletResourceUserId ==
+
===== HandAnalysisSilhouetteStateWithFullFrameShape =====
Takes an [[AM_services|AppletResourceUserId]]. No output.
+
This is "nn::irsensor::HandAnalysisSilhouetteStateWithFullFrameShape".
   −
== RegisterAppletResourceUserId ==
+
This is created from [[#TeraPluginProcessorState]].
Takes a bool and an [[AM_services|AppletResourceUserId]]. No output.
     −
== UnregisterAppletResourceUserId ==
+
{| class="wikitable" border="1"
Takes an [[AM_services|AppletResourceUserId]]. No output.
+
|-
 
+
! Offset || Size || Description
== 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
+
| 0x0 || 0x8 || SamplingNumber
 
|-
 
|-
| 0 || [[#AcquireDevice]]
+
| 0x8 || 0x4 || AmbientNoiseLevel
 
|-
 
|-
| 1 || [[#ReleaseDevice]]
+
| 0xC || 0x156C || Unknown
 +
|}
 +
 
 +
=== AruidFormat ===
 +
{| class="wikitable" border="1"
 
|-
 
|-
| 2 || [[#GetCtrlSession]]
+
! Offset || Size || Description
 
|-
 
|-
| 3 || [[#GetReadSession]]
+
| 0x0 || 0x8 || IrSensorAruid
 
|-
 
|-
| 4 || [1.0.0-2.3.0] [[#GetWriteSession]]
+
| 0x8 || 0x8 || IrSensorAruidStatus
 
|}
 
|}
   −
== AcquireDevice ==
+
== StopImageProcessor ==
Takes an input s32, no output.
+
Takes a PID-descriptor, an [[#IrCameraHandle]], and an [[AM_services|AppletResourceUserId]]. No output.
   −
== ReleaseDevice ==
+
== RunMomentProcessor ==
Takes an input s32, no output.
+
Takes a PID-descriptor, an [[#IrCameraHandle]], an [[AM_services|AppletResourceUserId]], and a [[#PackedMomentProcessorConfig]]. No output.
   −
== GetCtrlSession ==
+
== RunClusteringProcessor ==
Takes an input u32, returns an [[#ICtrlSession]].
+
Takes a PID-descriptor, an [[#IrCameraHandle]], an [[AM_services|AppletResourceUserId]], and a [[#PackedClusteringProcessorConfig]]. No output.
   −
== GetReadSession ==
+
== RunImageTransferProcessor ==
Takes an input u32, returns an [[#IReadSession]].
+
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.
   −
== GetWriteSession ==
+
The TransferMemory is created with an user specified buffer and permission none.
Takes an input u32, returns an [[#IWriteSession]].
     −
== ICtrlSession ==
+
== GetImageTransferProcessorState ==
This is "nn::ahid::ICtrlSession".
+
Takes a PID-descriptor, a type-0x6 output buffer, an [[#IrCameraHandle]], and an [[AM_services|AppletResourceUserId]]. Returns an [[#ImageTransferProcessorState]]. No output.
   −
This no longer exists in [9.0.0+].
+
== RunTeraPluginProcessor==
 +
Takes a PID-descriptor, an [[#IrCameraHandle]], a [[#PackedTeraPluginProcessorConfig]] (immediately after the previous word), and an [[AM_services|AppletResourceUserId]]. No output.
   −
{| class="wikitable" border="1"
+
== GetNpadIrCameraHandle ==
|-
+
Takes an input [[#NpadIdType]]. Returns an output [[#IrCameraHandle]].
! 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.
+
== RunPointingProcessor ==
 +
Takes a PID-descriptor, an [[#IrCameraHandle]], a [[#PackedPointingProcessorConfig]] (immediately after the previous word), and an [[AM_services|AppletResourceUserId]]. No output.
   −
== IReadSession ==
+
== SuspendImageProcessor ==
This is "nn::ahid::IReadSession".
+
Takes a PID-descriptor, an [[#IrCameraHandle]], and an [[AM_services|AppletResourceUserId]]. No output.
   −
This no longer exists in [9.0.0+].
+
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+].
   −
{| class="wikitable" border="1"
+
== CheckFirmwareVersion ==
|-
+
Takes a PID-descriptor, an [[#IrCameraHandle]], a [[#PackedMcuVersion]], and an [[AM_services|AppletResourceUserId]]. No output.
! Cmd || Name
  −
|-
  −
| 0 || [[#Read]]
  −
|}
     −
=== Read ===
+
sdknso didn't actually use this until 4.x (the RequiredMcuVersion was also updated with that version).
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.
+
== SetFunctionLevel ==
 +
Takes a PID-descriptor, an [[#IrCameraHandle]], a [[#PackedFunctionLevel]], and an [[AM_services|AppletResourceUserId]]. No output.
   −
== IWriteSession ==
+
== RunImageTransferExProcessor ==
This is "nn::ahid::IWriteSession".
+
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.
   −
This was removed with [3.0.0+].
+
The TransferMemory is created with an user specified buffer and permission none.
   −
{| class="wikitable" border="1"
+
== RunIrLedProcessor ==
|-
+
Takes a PID-descriptor, an [[#IrCameraHandle]], a [[#PackedIrLedProcessorConfig]] (immediately after the previous word), and an [[AM_services|AppletResourceUserId]]. No output.
! Cmd || Name
  −
|-
  −
| 0 || [[#Write]]
  −
|}
     −
=== Write ===
+
== StopImageProcessorAsync ==
This is the inverse of [[#IReadSession]] cmd0. Uses the OUTPUT endpoint with an input buffer.
+
Takes a PID-descriptor, an [[#IrCameraHandle]], and an [[AM_services|AppletResourceUserId]]. No output.
   −
= ahid:hdr =
+
== ActivateIrsensorWithFunctionLevel ==
This is "nn::ahid::hdr::ISession".
+
Takes a PID-descriptor, an [[#PackedFunctionLevel]], and an [[AM_services|AppletResourceUserId]]. No output.
   −
Used internally for USB HID devices.
+
= irs:sys =
 
+
This is "nn::irsensor::IIrSensorSystemServer".
This service no longer exists in [9.0.0+].
      
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 1,541: Line 1,572:  
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 0 || GetDeviceEntries
+
| 500 || [[#SetAppletResourceUserId]]
 
|-
 
|-
| 1 || GetDeviceList
+
| 501 || [[#RegisterAppletResourceUserId]]
 
|-
 
|-
| 2 || GetDeviceParameters
+
| 502 || [[#UnregisterAppletResourceUserId]]
 
|-
 
|-
| 3 || AttachDevice
+
| 503 || [[#EnableAppletToGetInput]]
|-
+
|}
| 4 || DetachDevice
+
 
|-
+
== SetAppletResourceUserId ==
| 5 || [6.0.0+] SetDeviceFilter
+
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.
   −
= xcd:sys =
+
This service no longer exists in [9.0.0+].
This is "nn::xcd::detail::ISystemServer".
      
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 1,561: Line 1,604:  
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 0 || GetDataFormat
+
| 0 || [[#AcquireDevice]]
 
|-
 
|-
| 1 || SetDataFormat
+
| 1 || [[#ReleaseDevice]]
 
|-
 
|-
| 2 || GetMcuState
+
| 2 || [[#GetCtrlSession]]
 
|-
 
|-
| 3 || SetMcuState
+
| 3 || [[#GetReadSession]]
 
|-
 
|-
| 4 || GetMcuVersionForNfc
+
| 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"
 
|-
 
|-
| 5 || CheckNfcDevicePower
+
! Cmd || Name
 
|-
 
|-
| 6 || [5.0.0+] SetMcuStateImmediate
+
| 0 || GetString
 
|-
 
|-
| 10 || SetNfcEvent
+
| 1 || GetCodeBook
 
|-
 
|-
| 11 || GetNfcInfo
+
| 2 || GetReport
 
|-
 
|-
| 12 || StartNfcDiscovery
+
| 3 || SetReport
 
|-
 
|-
| 13 || StopNfcDiscovery
+
| 4 || GetIdle
 
|-
 
|-
| 14 || StartNtagRead
+
| 5 || SetIdle
 
|-
 
|-
| 15 || StartNtagWrite
+
| 6 || GetProtocol
 
|-
 
|-
| 16 || SendNfcRawData
+
| 7 || SetProtocol
 
|-
 
|-
| 17 || RegisterMifareKey
+
| 8 || GetDescriptor
 
|-
 
|-
| 18 || ClearMifareKey
+
| 9 || SetDescriptor
 
|-
 
|-
| 19 || StartMifareRead
+
| 10 || GetStateChangeEvent
 
|-
 
|-
| 20 || StartMifareWrite
+
| 11 || SignalStateChangeEvent
 
|-
 
|-
| 101 || GetAwakeTriggerReasonForLeftRail
+
| 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
 
|-
 
|-
| 102 || GetAwakeTriggerReasonForRightRail
+
| 0 || [[#Read]]
 
|}
 
|}
   −
[5.0.0+] SetDataFormat, SetMcuState, and ClearMifareKey: now takes a total of 0xC-bytes of input instead of 0x10.
+
=== 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.
   −
[6.0.0+]: The buffer type used by GetNfcInfo is now 0x32 instead of 0x1A.
+
[3.0.0+] Now takes a total of 8-bytes of input.
   −
= hidbus =
+
== IWriteSession ==
This is "nn::hidbus::IHidbusServer".
+
This is "nn::ahid::IWriteSession".
   −
This was added with [5.0.0+].
+
This was removed with [3.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"
 
{| class="wikitable" border="1"
Line 1,617: Line 1,694:  
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 1 || [[#GetBusHandle]]
+
| 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"
 
|-
 
|-
| 2 || [[#IsExternalDeviceConnected]]
+
! Cmd || Name
 
|-
 
|-
| 3 || [[#Initialize]]
+
| 0 || GetDeviceEntries
 
|-
 
|-
| 4 || [[#Finalize]]
+
| 1 || GetDeviceList
 
|-
 
|-
| 5 || [[#EnableExternalDevice]]
+
| 2 || GetDeviceParameters
 
|-
 
|-
| 6 || [[#GetExternalDeviceId]]
+
| 3 || AttachDevice
 
|-
 
|-
| 7 || [[#SendCommandAsync]]
+
| 4 || DetachDevice
 
|-
 
|-
| 8 || [[#GetSendCommandAsynceResult]]
+
| 5 || [6.0.0+] SetDeviceFilter
|-
+
|}
| 9 || [[#SetEventForSendCommandAsycResult]]
+
 
 +
= xcd:sys =
 +
This is "nn::xcd::detail::ISystemServer".
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Cmd || Name
 +
|-
 +
| 0 || GetDataFormat
 +
|-
 +
| 1 || SetDataFormat
 +
|-
 +
| 2 || GetMcuState
 
|-
 
|-
| 10 || [[#GetSharedMemoryHandle]]
+
| 3 || SetMcuState
 
|-
 
|-
| 11 || [[#EnableJoyPollingReceiveMode]]
+
| 4 || GetMcuVersionForNfc
 
|-
 
|-
| 12 || [[#DisableJoyPollingReceiveMode]]
+
| 5 || CheckNfcDevicePower
 
|-
 
|-
| 13 || [5.0.0-6.2.0] GetPollingData
+
| 6 || [5.0.0+] SetMcuStateImmediate
 
|-
 
|-
| 14 || [6.0.0+] [[#SetStatusManagerType]]
+
| 10 || SetNfcEvent
|}
+
|-
 
+
| 11 || GetNfcInfo
sdknso doesn't use the GetPollingData cmd.
+
|-
 
+
| 12 || StartNfcDiscovery
== GetBusHandle ==
+
|-
Takes an input u32 [[#NpadIdType]], an u64 [[#BusType]], an u64 [[AM_services|AppletResourceUserId]], returns an output u8 bool and a [[#BusHandle]].
+
| 13 || StopNfcDiscovery
 
+
|-
The bool indicates whether the [[#BusHandle]] is valid.
+
| 14 || StartNtagRead
 +
|-
 +
| 15 || StartNtagWrite
 +
|-
 +
| 16 || SendNfcRawData
 +
|-
 +
| 17 || RegisterMifareKey
 +
|-
 +
| 18 || ClearMifareKey
 +
|-
 +
| 19 || StartMifareRead
 +
|-
 +
| 20 || StartMifareWrite
 +
|-
 +
| 101 || GetAwakeTriggerReasonForLeftRail
 +
|-
 +
| 102 || GetAwakeTriggerReasonForRightRail
 +
|}
   −
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.
+
[5.0.0+] SetDataFormat, SetMcuState, and ClearMifareKey: now takes a total of 0xC-bytes of input instead of 0x10.
   −
This cmd will throw an error when [[#BusType]] is invalid.
+
[6.0.0+]: The buffer type used by GetNfcInfo is now 0x32 instead of 0x1A.
   −
== IsExternalDeviceConnected ==
+
= hidbus =
Takes an input [[#BusHandle]], returns an output u8 bool.
+
This is "nn::hidbus::IHidbusServer".
   −
This is not used by sdknso.
+
This was added with [5.0.0+].
   −
== Initialize ==
+
Official sw opens a temporary service-session for each func using this, with it being closed once done: no global session is kept open.
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.
+
{| class="wikitable" border="1"
 
+
|-
== Finalize ==
+
! Cmd || Name
Takes an input [[#BusHandle]], an u64 [[AM_services|AppletResourceUserId]], no output.
+
|-
 
+
| 1 || [[#GetBusHandle]]
== EnableExternalDevice ==
+
|-
Takes an input u8 bool, a [[#BusHandle]], an u64, an u64 [[AM_services|AppletResourceUserId]], no output.
+
| 2 || [[#IsExternalDeviceConnected]]
 
+
|-
sdknso passes value 0x38900050018 (0x3A600050018 with 7.x+) for the u64.
+
| 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]]
 +
|}
   −
The bool flag indicates whether to enable the device (true = enable, false = disable).  When false, this will use [[#DisableJoyPollingReceiveMode]] if needed.
+
sdknso doesn't use the GetPollingData cmd.
   −
== GetExternalDeviceId ==
+
== GetBusHandle ==
Takes an input [[#BusHandle]], returns an output u32 ExternalDeviceId.
+
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 ==
 
== SendCommandAsync ==
Line 2,494: Line 2,664:     
= IrCameraHandle =
 
= IrCameraHandle =
This is "nn::irsensor::IrCameraHandle". This is an u32.
+
This is "nn::irsensor::IrCameraHandle".
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 2,508: Line 2,678:     
= IrCameraStatus =
 
= IrCameraStatus =
This is "nn::irsensor::IrCameraStatus". This is an u32.
+
This is "nn::irsensor::IrCameraStatus".
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 2,522: Line 2,692:     
= IrCameraInternalStatus =
 
= IrCameraInternalStatus =
This is "nn::irsensor::IrCameraInternalStatus". This is an u32.
+
This is "nn::irsensor::IrCameraInternalStatus".
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 2,548: Line 2,718:     
= IrSensorMode =
 
= IrSensorMode =
This is "nn::irsensor::detail::StatusManager::IrSensorMode". This is an u32.
+
This is "nn::irsensor::detail::StatusManager::IrSensorMode".
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 2,562: Line 2,732:  
| 3 || [[#ImageTransferProcessorState|ImageTransferProcessor]]
 
| 3 || [[#ImageTransferProcessorState|ImageTransferProcessor]]
 
|-
 
|-
| 4 || [[#PointingProcessorState|PointingProcessor]]
+
| 4 || [[#PointingProcessorMarkerState|PointingProcessorMarker]]
 
|-
 
|-
 
| 5 || [[#TeraPluginProcessorState|TeraPluginProcessor]]
 
| 5 || [[#TeraPluginProcessorState|TeraPluginProcessor]]
Line 2,570: Line 2,740:     
= ImageProcessorStatus =
 
= ImageProcessorStatus =
This is "nn::irsensor::ImageProcessorStatus". This is an u32.
+
This is "nn::irsensor::ImageProcessorStatus".
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 2,582: Line 2,752:     
= ImageTransferProcessorFormat =
 
= ImageTransferProcessorFormat =
This is "nn::irsensor::ImageTransferProcessorFormat". This is an u32.
+
This is "nn::irsensor::ImageTransferProcessorFormat".
    
This controls the IR Sensor image resolution.
 
This controls the IR Sensor image resolution.
Line 2,632: Line 2,802:     
= PackedMomentProcessorConfig =
 
= PackedMomentProcessorConfig =
This is "nn::irsensor::PackedMomentProcessorConfig". This is a 0x20-byte struct.  
+
This is "nn::irsensor::PackedMomentProcessorConfig".
    
This is converted from [[#MomentProcessorConfig]].
 
This is converted from [[#MomentProcessorConfig]].
Line 2,702: Line 2,872:     
= PackedClusteringProcessorConfig =
 
= PackedClusteringProcessorConfig =
This is "nn::irsensor::PackedClusteringProcessorConfig". This is a 0x28-byte struct.
+
This is "nn::irsensor::PackedClusteringProcessorConfig".
    
This is converted from [[#ClusteringProcessorConfig]].
 
This is converted from [[#ClusteringProcessorConfig]].
Line 2,762: Line 2,932:     
= PackedImageTransferProcessorConfig =
 
= PackedImageTransferProcessorConfig =
This is "nn::irsensor::PackedImageTransferProcessorConfig". This is a 0x18-byte struct.
+
This is "nn::irsensor::PackedImageTransferProcessorConfig".
    
This is converted from [[#ImageTransferProcessorConfig]].
 
This is converted from [[#ImageTransferProcessorConfig]].
Line 2,788: Line 2,958:     
= ImageTransferProcessorState =
 
= ImageTransferProcessorState =
This is "nn::irsensor::ImageTransferProcessorState". This is a 0x10-byte struct.
+
This is "nn::irsensor::ImageTransferProcessorState".
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 2,796: Line 2,966:  
| 0x0 || 0x8 || SamplingNumber
 
| 0x0 || 0x8 || SamplingNumber
 
|-
 
|-
| 0x8 || 0x1 || AmbientNoiseLevel
+
| 0x8 || 0x4 || AmbientNoiseLevel
 
|-
 
|-
| 0x9 || 0x7 || Reserved
+
| 0xC || 0x4 || Reserved
 
|}
 
|}
   Line 2,818: Line 2,988:     
= PackedTeraPluginProcessorConfig =
 
= PackedTeraPluginProcessorConfig =
This is "nn::irsensor::PackedTeraPluginProcessorConfig". This is a 0x8-byte struct.
+
This is "nn::irsensor::PackedTeraPluginProcessorConfig".
    
This is converted from [[#TeraPluginProcessorConfig]]. The data starting at offset 0x5 is only initialized by the user-process with [6.0.0+].
 
This is converted from [[#TeraPluginProcessorConfig]]. The data starting at offset 0x5 is only initialized by the user-process with [6.0.0+].
Line 2,837: Line 3,007:  
|-
 
|-
 
| 0x7 || 0x1 ||  
 
| 0x7 || 0x1 ||  
 +
|}
 +
 +
= PointingProcessorConfig =
 +
This is "nn::irsensor::PointingProcessorConfig".
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset || Size || Description
 +
|-
 +
| 0x0 || 0x2 || WindowOfInterestX (default is 0)
 +
|-
 +
| 0x2 || 0x2 || WindowOfInterestY (default is 0)
 +
|-
 +
| 0x4 || 0x2 || WindowOfInterestWidth (default is 320)
 +
|-
 +
| 0x6 || 0x2 || WindowOfInterestHeight (default is 240)
 
|}
 
|}
    
= PackedPointingProcessorConfig =
 
= PackedPointingProcessorConfig =
This is "nn::irsensor::PackedPointingProcessorConfig". This is a 0xC-byte struct.
+
This is "nn::irsensor::PackedPointingProcessorConfig".
 +
 
 +
This is converted from [[#PointingProcessorConfig]].
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 2,846: Line 3,034:  
! Offset || Size || Description
 
! Offset || Size || Description
 
|-
 
|-
| 0x0 || 0x2 || WindowOfInterestX? (default is 0)
+
| 0x0 || 0x2 || WindowOfInterestX (default is 0)
 
|-
 
|-
| 0x2 || 0x2 || WindowOfInterestY? (default is 0)
+
| 0x2 || 0x2 || WindowOfInterestY (default is 0)
 
|-
 
|-
| 0x4 || 0x2 || WindowOfInterestWidth? (default is 320)
+
| 0x4 || 0x2 || WindowOfInterestWidth (default is 320)
 
|-
 
|-
| 0x6 || 0x2 || WindowOfInterestHeight? (default is 240)
+
| 0x6 || 0x2 || WindowOfInterestHeight (default is 240)
 
|-
 
|-
 
| 0x8 || 0x4 || [[#PackedMcuVersion|RequiredMcuVersion]]
 
| 0x8 || 0x4 || [[#PackedMcuVersion|RequiredMcuVersion]]
Line 2,858: Line 3,046:     
= PackedMcuVersion =
 
= PackedMcuVersion =
This is "nn::irsensor::PackedMcuVersion". This is an u32.
+
This is "nn::irsensor::PackedMcuVersion".
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 2,886: Line 3,074:     
= PackedFunctionLevel =
 
= PackedFunctionLevel =
This is nn::irsensor::PackedFunctionLevel. This is an u32.
+
This is nn::irsensor::PackedFunctionLevel.
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 2,944: Line 3,132:     
= PackedImageTransferProcessorExConfig =
 
= PackedImageTransferProcessorExConfig =
This is "nn::irsensor::PackedImageTransferProcessorExConfig". This is a 0x20-byte struct.
+
This is "nn::irsensor::PackedImageTransferProcessorExConfig".
    
This is converted from [[#ImageTransferProcessorExConfig]].
 
This is converted from [[#ImageTransferProcessorExConfig]].
Line 2,977: Line 3,165:  
|}
 
|}
   −
= PackedIrLedProcessorConfig =
+
= IrLedProcessorConfig =
This is "nn::irsensor::PackedIrLedProcessorConfig". This is a 0x8-byte struct.
+
This is "nn::irsensor::IrLedProcessorConfig".
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 2,984: Line 3,172:  
! Offset || Size || Description
 
! Offset || Size || Description
 
|-
 
|-
| 0x0 || 0x4 || [[#PackedMcuVersion|RequiredMcuVersion]]
+
| 0x0 || 0x4 || LightTarget
|-
  −
| 0x4 || 0x4 ||
   
|}
 
|}
   −
= BusHandle =
+
= PackedIrLedProcessorConfig =
This is "nn::hidbus::BusHandle". This is 0x8-bytes.
+
This is "nn::irsensor::PackedIrLedProcessorConfig".
 +
 
 +
This is converted from [[#IrLedProcessorConfig]].
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 2,996: Line 3,184:  
! Offset || Size || Description
 
! Offset || Size || Description
 
|-
 
|-
| 0x0 || 0x4 || AbstractedPadId
+
| 0x0 || 0x4 || [[#PackedMcuVersion|RequiredMcuVersion]]
 
|-
 
|-
| 0x4 || 0x1 || InternalIndex
+
| 0x4 || 0x1 || LightTarget
 
|-
 
|-
| 0x5 || 0x1 || PlayerNumber
+
| 0x5 || 0x3 || Padding
|-
  −
| 0x6 || 0x1 || BusTypeId
  −
|-
  −
| 0x7 || 0x1 || IsValid
   
|}
 
|}
   −
= JoyPollingReceivedData =
+
= AdaptiveClusteringProcessorConfig =
This is "nn::hidbus::JoyPollingReceivedData". This is 0x40-bytes.
+
This is "nn::irsensor::AdaptiveClusteringProcessorConfig".
 +
 
 +
AdaptiveClusteringProcessor was added with [5.0.0+].
   −
This is copied from the entries in [[#EnableJoyPollingReceiveMode|TransferMemory]] by GetJoyPollingReceivedData.
+
This is converted to [[#TeraPluginProcessorConfig]] by the user-process. [[#TeraPluginProcessorConfig]]+0x3 is zero.
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset || Size || Description
 +
|-
 +
| 0x0 || 0x4 || [[#AdaptiveClusteringMode]]
 +
|-
 +
| 0x4 || 0x4 || [6.0.0+] [[#AdaptiveClusteringTargetDistance]]
 +
|}
 +
 
 +
== AdaptiveClusteringMode ==
 +
{| class="wikitable" border="1"
 +
!  Value
 +
!  Description
 +
|-
 +
| 0 || StaticFov
 +
|-
 +
| 1 || DynamicFov
 +
|}
 +
 
 +
Controls the mode for [[#TeraPluginProcessorConfig]] (DynamicFov -> 0x10; StaticFov -> 0x0F).
 +
 
 +
== AdaptiveClusteringTargetDistance ==
 +
{| class="wikitable" border="1"
 +
!  Value
 +
!  Description
 +
|-
 +
| 0 || Near
 +
|-
 +
| 1 || Middle
 +
|-
 +
| 2 || Far
 +
|}
 +
 
 +
Controls the second and third bytes for [[#TeraPluginProcessorConfig]] (Near-> 0x00, 0x00; Middle -> 0x01, 0x03; Far -> 0x01, 0x08).
 +
 
 +
= HandAnalysisConfig =
 +
This is "nn::irsensor::HandAnalysisConfig".
 +
 
 +
This is converted to [[#TeraPluginProcessorConfig]] by the user-process, which is all-zero except the mode.
 +
* pre-4.0.0: [[#TeraPluginProcessorConfig]] mode = [[#HandAnalysisMode]] - 1.
 +
* [4.0.0+]: Silhouette = 0x5, Image = 0x6, SilhouetteAndImage = 0x7, SilhouetteOnly = 0xA.
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset || Size || Description
 +
|-
 +
| 0x0 || 0x4 || [[#HandAnalysisMode]]
 +
|}
 +
 
 +
== HandAnalysisMode ==
 +
{| class="wikitable" border="1"
 +
!  Value
 +
!  Description
 +
|-
 +
| 0 || None (invalid)
 +
|-
 +
| 1 || Silhouette
 +
|-
 +
| 2 || Image
 +
|-
 +
| 3 || SilhouetteAndImage
 +
|-
 +
| 4 || [4.0.0+] SilhouetteOnly
 +
|}
 +
 
 +
= BusHandle =
 +
This is "nn::hidbus::BusHandle".
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset || Size || Description
 +
|-
 +
| 0x0 || 0x4 || AbstractedPadId
 +
|-
 +
| 0x4 || 0x1 || InternalIndex
 +
|-
 +
| 0x5 || 0x1 || PlayerNumber
 +
|-
 +
| 0x6 || 0x1 || BusTypeId
 +
|-
 +
| 0x7 || 0x1 || IsValid
 +
|}
 +
 
 +
= JoyPollingReceivedData =
 +
This is "nn::hidbus::JoyPollingReceivedData".
 +
 
 +
This is copied from the entries in [[#EnableJoyPollingReceiveMode|TransferMemory]] by GetJoyPollingReceivedData.
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 3,017: Line 3,291:  
|-
 
|-
 
| 0x0 || 0x30 || Data
 
| 0x0 || 0x30 || Data
|-
+
|-
| 0x30 || 0x8 || Size of data.
+
| 0x30 || 0x8 || Size of data.
|-
+
|-
| 0x38 || 0x8 || Timestamp
+
| 0x38 || 0x8 || Timestamp
 +
|}
 +
 
 +
= BusType =
 +
This is "nn::hidbus::BusType".
 +
 
 +
{| class="wikitable" border="1"
 +
!  Value
 +
!  Description
 +
|-
 +
| 0 || JoyLeftRail
 +
|-
 +
| 1 || JoyRightRail
 +
|-
 +
| 2 || [6.0.0+] LarkRightRail (for microphone)
 +
|}
 +
 
 +
= JoyPollingMode =
 +
This is "nn::hidbus::JoyPollingMode".
 +
 
 +
{| class="wikitable" border="1"
 +
!  Value
 +
!  Description
 +
|-
 +
| 0 || sdknso uses <code>GetJoyDisableSixAxisPollingDataAccessor</code> with this.
 +
|-
 +
| 1 || sdknso uses <code>GetJoyEnableSixAxisPollingDataAccessor</code> with this.
 +
|-
 +
| 2 || [6.0.0+] sdknso uses <code>GetJoyButtonOnlyPollingDataAccessor</code> with this.
 
|}
 
|}
   −
= BusType =
+
Other values causes [[#EnableJoyPollingReceiveMode]] to assert.
This is "nn::hidbus::BusType". This is an u32.
  −
 
  −
{| class="wikitable" border="1"
  −
!  Value
  −
!  Description
  −
|-
  −
| 0 || JoyLeftRail
  −
|-
  −
| 1 || JoyRightRail
  −
|-
  −
| 2 || [6.0.0+] LarkRightRail (for microphone)
  −
|}
  −
 
  −
= JoyPollingMode =
  −
This is "nn::hidbus::JoyPollingMode". This is an u32. This must be one of the below values otherwise [[#EnableJoyPollingReceiveMode]] will assert.
  −
 
  −
{| class="wikitable" border="1"
  −
!  Value
  −
!  Description
  −
|-
  −
| 0 || sdknso uses <code>GetJoyDisableSixAxisPollingDataAccessor</code> with this.
  −
|-
  −
| 1 || sdknso uses <code>GetJoyEnableSixAxisPollingDataAccessor</code> with this.
  −
|-
  −
| 2 || [6.0.0+] sdknso uses <code>GetJoyButtonOnlyPollingDataAccessor</code> with this.
  −
|}
      
= ExternalDevices =
 
= ExternalDevices =

Navigation menu