HID services: Difference between revisions

No edit summary
Line 1,179: Line 1,179:
| 314 || [3.0.0+] [[#CheckFirmwareVersion]]
| 314 || [3.0.0+] [[#CheckFirmwareVersion]]
|-
|-
| 315 || [4.0.0+] SetFunctionLevel
| 315 || [4.0.0+] [[#SetFunctionLevel]]
|-
|-
| 316 || [4.0.0+] RunImageTransferExProcessor
| 316 || [4.0.0+] [[#RunImageTransferExProcessor]]
|-
|-
| 317 || [4.0.0+] RunIrLedProcessor
| 317 || [4.0.0+] [[#RunIrLedProcessor]]
|-
|-
| 318 || [4.0.0+] StopImageProcessorAsync
| 318 || [4.0.0+] [[#StopImageProcessorAsync]]
|-
|-
| 319 || [4.0.0+] ActivateIrsensorWithFunctionLevel
| 319 || [4.0.0+] [[#ActivateIrsensorWithFunctionLevel]]
|}
|}


Line 1,222: Line 1,222:


== GetNpadIrCameraHandle ==
== GetNpadIrCameraHandle ==
Takes an input u32 NpadTypeId. Returns an output [[#IrCameraHandle]].
Takes an input [[#NpadIdType]]. Returns an output [[#IrCameraHandle]].


== RunPointingProcessor ==
== RunPointingProcessor ==
Takes a PID-descriptor, an [[#IrCameraHandle]], a [[#PackedDpdProcessorConfig]] (immediately after the previous word), and an [[AM_services|AppletResourceUserId]]. No output.
Takes a PID-descriptor, an [[#IrCameraHandle]], a [[#PackedPointingProcessorConfig]] (immediately after the previous word), and an [[AM_services|AppletResourceUserId]]. No output.


== SuspendImageProcessor ==
== SuspendImageProcessor ==
Line 1,233: Line 1,233:
Takes a PID-descriptor, an [[#IrCameraHandle]], a [[#PackedMcuVersion]], and an [[AM_services|AppletResourceUserId]]. No output.
Takes a PID-descriptor, an [[#IrCameraHandle]], a [[#PackedMcuVersion]], and an [[AM_services|AppletResourceUserId]]. No output.


== PackedClusteringProcessorConfig ==
== SetFunctionLevel ==
This is a 0x28-byte struct.
Takes a PID-descriptor, an [[#IrCameraHandle]], a [[#PackedFunctionLevel]], and an [[AM_services|AppletResourceUserId]]. No output.


== PackedImageTransferProcessorConfig ==
== RunImageTransferExProcessor ==
This is a 0x18-byte struct. This is converted from another structure by the official user-process. The conversion is the same as PackedMomentProcessorConfig, except the code using out +0x1C/+0x1D was removed, and the constant is now located at out+0x10. The code which wrote to out u64 +0x10 from in+0x24 was replaced with code which writes an u8 to out+0x14.
Takes a PID-descriptor, an [[#IrCameraHandle]], an [[AM_services|AppletResourceUserId]], a [[#PackedImageTransferProcessorExConfig]], an u64 for the TransferMemory_size, and a TransferMemory handle. No output.


== ImageTransferProcessorState ==
Official sw creates the TransferMemory with an user-specified buffer and permissions=0.
This is a 0x10-byte struct.


== PackedTeraPluginProcessorConfig ==
== RunIrLedProcessor ==
This is an u64.
Takes a PID-descriptor, an [[#IrCameraHandle]], a [[#PackedIrLedProcessorConfig]] (immediately after the previous word), and an [[AM_services|AppletResourceUserId]]. No output.


== PackedDpdProcessorConfig ==
== StopImageProcessorAsync ==
This is a 0x10-byte struct.
Takes a PID-descriptor, an [[#IrCameraHandle]], and an [[AM_services|AppletResourceUserId]]. No output.


== PackedMcuVersion ==
== ActivateIrsensorWithFunctionLevel ==
This is an u32.
Takes a PID-descriptor, an [[#PackedFunctionLevel]], and an [[AM_services|AppletResourceUserId]]. No output.


= irs:sys =
= irs:sys =
Line 1,258: Line 1,257:
! Cmd || Name
! Cmd || Name
|-
|-
| 500 || SetAppletResourceUserId
| 500 || [[#SetAppletResourceUserId]]
|-
|-
| 501 || RegisterAppletResourceUserId
| 501 || [[#RegisterAppletResourceUserId]]
|-
|-
| 502 || UnregisterAppletResourceUserId
| 502 || [[#UnregisterAppletResourceUserId]]
|-
|-
| 503 || EnableAppletToGetInput
| 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 =
= ahid:cd =
Line 2,341: Line 2,352:


= PackedMomentProcessorConfig =
= PackedMomentProcessorConfig =
This is a 0x20-byte struct. This is converted from another structure by the official user-process.
This is "nn::irsensor::PackedMomentProcessorConfig". This is a 0x20-byte struct.
 
{| class="wikitable" border="1"
|-
! Offset || Size || Description
|-
| 0x0 || 0x8 || ExposureTime (default is 0x493E0)
|-
| 0x8 || 0x1 || LightTarget (default is 0)
|-
| 0x9 || 0x1 || Gain (default is 0x8)
|-
| 0xA || 0x1 || IsNegativeImageUsed (default is 0)
|-
| 0xB || 0x5 || Padding
|-
| 0x10 || 0x2 || WindowOfInterestX (default is 0)
|-
| 0x12 || 0x2 || WindowOfInterestY (default is 0)
|-
| 0x14 || 0x2 || WindowOfInterestWidth (default is 0x140)
|-
| 0x16 || 0x2 || WindowOfInterestHeight (default is 0xF0)
|-
| 0x18 || 0x4 || Unknown (always 0xA0003)
|-
| 0x1C || 0x1 || Preprocess (default is 0x1)
|-
| 0x1D || 0x1 || PreprocessIntensityThreshold (default is 0x50)
|-
| 0x1E || 0x2 || Padding
|}
 
= PackedClusteringProcessorConfig =
This is "nn::irsensor::PackedClusteringProcessorConfig". This is a 0x28-byte struct.
 
{| class="wikitable" border="1"
|-
! Offset || Size || Description
|-
| 0x0 || 0x8 || ExposureTime
|-
| 0x8 || 0x1 || LightTarget
|-
| 0x9 || 0x1 || Gain
|-
| 0xA || 0x1 || IsNegativeImageUsed
|-
| 0xB || 0x5 || Padding
|-
| 0x10 || 0x2 || WindowOfInterestX
|-
| 0x12 || 0x2 || WindowOfInterestY
|-
| 0x14 || 0x2 || WindowOfInterestWidth
|-
| 0x16 || 0x2 || WindowOfInterestHeight
|-
| 0x18 || 0x4 || Unknown (always 0xA0003)
|-
| 0x1C || 0x4 || ObjectPixelCountMin
|-
| 0x20 || 0x4 || ObjectPixelCountMax
|-
| 0x24 || 0x1 || ObjectIntensityMin
|-
| 0x25 || 0x1 || IsExternalLightFilterEnabled
|-
| 0x26 || 0x2 || Padding
|}
 
= PackedImageTransferProcessorConfig =
This is "nn::irsensor::PackedImageTransferProcessorConfig". This is a 0x18-byte struct.
 
{| class="wikitable" border="1"
|-
! Offset || Size || Description
|-
| 0x0 || 0x8 || ExposureTime
|-
| 0x8 || 0x1 || LightTarget
|-
| 0x9 || 0x1 || Gain
|-
| 0xA || 0x1 || IsNegativeImageUsed
|-
| 0xB || 0x5 || Padding
|-
| 0x10 || 0x4 || Unknown (always 0xA0003)
|-
| 0x14 || 0x1 || Format
|-
| 0x15 || 0x3 || Padding
|}
 
= ImageTransferProcessorState =
This is "nn::irsensor::ImageTransferProcessorState". This is a 0x10-byte struct.
 
{| class="wikitable" border="1"
|-
! Offset || Size || Description
|-
| 0x0 || 0x8 || SamplingNumber
|-
| 0x8 || 0x1 || AmbientNoiseLevel
|-
| 0x9 || 0x7 || Padding
|}
 
= PackedTeraPluginProcessorConfig =
This is "nn::irsensor::PackedTeraPluginProcessorConfig". This is an u64.
 
= PackedPointingProcessorConfig =
This is "nn::irsensor::PackedPointingProcessorConfig". This is a 0x10-byte struct.
 
= PackedMcuVersion =
This is "nn::irsensor::PackedMcuVersion". This is an u32.
 
= PackedFunctionLevel =
This is nn::irsensor::PackedFunctionLevel. This is an u32.
 
= PackedImageTransferProcessorExConfig =
This is "nn::irsensor::PackedImageTransferProcessorExConfig". This is a 0x20-byte struct.


{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
! Offset || Size || Description || DefaultConfig
! Offset || Size || Description
|-
|-
| 0x0 || 0x8 || ? || 0x493E0
| 0x0 || 0x8 || ExposureTime
|-
|-
| 0x8 || 0x1 || ? || 0x0
| 0x8 || 0x1 || LightTarget
|-
|-
| 0x9 || 0x1 || ? || 0x8
| 0x9 || 0x1 || Gain
|-
|-
| 0xA || 0x1 || ? || 0x0
| 0xA || 0x1 || IsNegativeImageUsed
|-
|-
| 0xB || 0x5 || Padding ||
| 0xB || 0x5 || Padding
|-
|-
| 0x10 || 0x8 || u16, u32, u16 || {Not written}, 0x1400000, 0xF0
| 0x10 || 0x4 || Unknown (always 0xA0003)
|-
|-
| 0x18 || 0x4 || Hard-coded to 0xA0003. ||  
| 0x14 || 0x1 || OrigFormat
|-
|-
| 0x1C || 0x1 || ? || 0x1
| 0x15 || 0x1 || TrimmingFormat
|-
|-
| 0x1D || 0x1 || ? || 0x50
| 0x16 || 0x2 || TrimmingStartX
|-
|-
| 0x1E || 0x2 || Padding ||  
| 0x18 || 0x2 || TrimmingStartY
|-
| 0x1A || 0x1 || IsExternalLightFilterEnabled
|-
| 0x1B || 0x5 || Padding
|}
|}
= PackedIrLedProcessorConfig =
This is "nn::irsensor::PackedIrLedProcessorConfig". This is a 0x10-byte struct.


= BusHandle =
= BusHandle =