|
|
@@ -0,0 +1,304 @@
|
|
|
+// SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project
|
|
|
+// SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
+
|
|
|
+#pragma once
|
|
|
+
|
|
|
+#include "common/common_funcs.h"
|
|
|
+#include "common/common_types.h"
|
|
|
+#include "core/hid/hid_types.h"
|
|
|
+
|
|
|
+namespace Core::IrSensor {
|
|
|
+
|
|
|
+// This is nn::irsensor::CameraAmbientNoiseLevel
|
|
|
+enum class CameraAmbientNoiseLevel : u32 {
|
|
|
+ Low,
|
|
|
+ Medium,
|
|
|
+ High,
|
|
|
+ Unkown3, // This level can't be reached
|
|
|
+};
|
|
|
+
|
|
|
+// This is nn::irsensor::CameraLightTarget
|
|
|
+enum class CameraLightTarget : u32 {
|
|
|
+ AllLeds,
|
|
|
+ BrightLeds,
|
|
|
+ DimLeds,
|
|
|
+ None,
|
|
|
+};
|
|
|
+
|
|
|
+// This is nn::irsensor::PackedCameraLightTarget
|
|
|
+enum class PackedCameraLightTarget : u8 {
|
|
|
+ AllLeds,
|
|
|
+ BrightLeds,
|
|
|
+ DimLeds,
|
|
|
+ None,
|
|
|
+};
|
|
|
+
|
|
|
+// This is nn::irsensor::AdaptiveClusteringMode
|
|
|
+enum class AdaptiveClusteringMode : u32 {
|
|
|
+ StaticFov,
|
|
|
+ DynamicFov,
|
|
|
+};
|
|
|
+
|
|
|
+// This is nn::irsensor::AdaptiveClusteringTargetDistance
|
|
|
+enum class AdaptiveClusteringTargetDistance : u32 {
|
|
|
+ Near,
|
|
|
+ Middle,
|
|
|
+ Far,
|
|
|
+};
|
|
|
+
|
|
|
+// This is nn::irsensor::ImageTransferProcessorFormat
|
|
|
+enum class ImageTransferProcessorFormat : u32 {
|
|
|
+ Size320x240,
|
|
|
+ Size160x120,
|
|
|
+ Size80x60,
|
|
|
+ Size40x30,
|
|
|
+ Size20x15,
|
|
|
+};
|
|
|
+
|
|
|
+// This is nn::irsensor::PackedImageTransferProcessorFormat
|
|
|
+enum class PackedImageTransferProcessorFormat : u8 {
|
|
|
+ Size320x240,
|
|
|
+ Size160x120,
|
|
|
+ Size80x60,
|
|
|
+ Size40x30,
|
|
|
+ Size20x15,
|
|
|
+};
|
|
|
+
|
|
|
+// This is nn::irsensor::IrCameraStatus
|
|
|
+enum class IrCameraStatus : u32 {
|
|
|
+ Available,
|
|
|
+ Unsupported,
|
|
|
+ Unconnected,
|
|
|
+};
|
|
|
+
|
|
|
+// This is nn::irsensor::IrCameraInternalStatus
|
|
|
+enum class IrCameraInternalStatus : u32 {
|
|
|
+ Stopped,
|
|
|
+ FirmwareUpdateNeeded,
|
|
|
+ Unkown2,
|
|
|
+ Unkown3,
|
|
|
+ Unkown4,
|
|
|
+ FirmwareVersionRequested,
|
|
|
+ FirmwareVersionIsInvalid,
|
|
|
+ Ready,
|
|
|
+ Setting,
|
|
|
+};
|
|
|
+
|
|
|
+// This is nn::irsensor::detail::StatusManager::IrSensorMode
|
|
|
+enum class IrSensorMode : u64 {
|
|
|
+ None,
|
|
|
+ MomentProcessor,
|
|
|
+ ClusteringProcessor,
|
|
|
+ ImageTransferProcessor,
|
|
|
+ PointingProcessorMarker,
|
|
|
+ TeraPluginProcessor,
|
|
|
+ IrLedProcessor,
|
|
|
+};
|
|
|
+
|
|
|
+// This is nn::irsensor::ImageProcessorStatus
|
|
|
+enum ImageProcessorStatus : u32 {
|
|
|
+ Stopped,
|
|
|
+ Running,
|
|
|
+};
|
|
|
+
|
|
|
+// This is nn::irsensor::HandAnalysisMode
|
|
|
+enum class HandAnalysisMode : u32 {
|
|
|
+ None,
|
|
|
+ Silhouette,
|
|
|
+ Image,
|
|
|
+ SilhoueteAndImage,
|
|
|
+ SilhuetteOnly,
|
|
|
+};
|
|
|
+
|
|
|
+// This is nn::irsensor::IrSensorFunctionLevel
|
|
|
+enum class IrSensorFunctionLevel : u8 {
|
|
|
+ unknown0,
|
|
|
+ unknown1,
|
|
|
+ unknown2,
|
|
|
+ unknown3,
|
|
|
+ unknown4,
|
|
|
+};
|
|
|
+
|
|
|
+// This is nn::irsensor::MomentProcessorPreprocess
|
|
|
+enum class MomentProcessorPreprocess : u32 {
|
|
|
+ Unkown0,
|
|
|
+ Unkown1,
|
|
|
+};
|
|
|
+
|
|
|
+// This is nn::irsensor::PackedMomentProcessorPreprocess
|
|
|
+enum class PackedMomentProcessorPreprocess : u8 {
|
|
|
+ Unkown0,
|
|
|
+ Unkown1,
|
|
|
+};
|
|
|
+
|
|
|
+// This is nn::irsensor::PointingStatus
|
|
|
+enum class PointingStatus : u32 {
|
|
|
+ Unkown0,
|
|
|
+ Unkown1,
|
|
|
+};
|
|
|
+
|
|
|
+struct IrsRect {
|
|
|
+ s16 x;
|
|
|
+ s16 y;
|
|
|
+ s16 width;
|
|
|
+ s16 height;
|
|
|
+};
|
|
|
+
|
|
|
+struct IrsCentroid {
|
|
|
+ f32 x;
|
|
|
+ f32 y;
|
|
|
+};
|
|
|
+
|
|
|
+struct CameraConfig {
|
|
|
+ u64 exposure_time;
|
|
|
+ CameraLightTarget light_target;
|
|
|
+ u32 gain;
|
|
|
+ bool is_negative_used;
|
|
|
+ INSERT_PADDING_BYTES(7);
|
|
|
+};
|
|
|
+static_assert(sizeof(CameraConfig) == 0x18, "CameraConfig is an invalid size");
|
|
|
+
|
|
|
+struct PackedCameraConfig {
|
|
|
+ u64 exposure_time;
|
|
|
+ PackedCameraLightTarget light_target;
|
|
|
+ u8 gain;
|
|
|
+ bool is_negative_used;
|
|
|
+ INSERT_PADDING_BYTES(5);
|
|
|
+};
|
|
|
+static_assert(sizeof(PackedCameraConfig) == 0x10, "PackedCameraConfig is an invalid size");
|
|
|
+
|
|
|
+// This is nn::irsensor::IrCameraHandle
|
|
|
+struct IrCameraHandle {
|
|
|
+ u8 npad_id{};
|
|
|
+ Core::HID::NpadStyleIndex npad_type{Core::HID::NpadStyleIndex::None};
|
|
|
+ INSERT_PADDING_BYTES(2);
|
|
|
+};
|
|
|
+static_assert(sizeof(IrCameraHandle) == 4, "IrCameraHandle is an invalid size");
|
|
|
+
|
|
|
+// This is nn::irsensor::PackedMcuVersion
|
|
|
+struct PackedMcuVersion {
|
|
|
+ u16 major;
|
|
|
+ u16 minor;
|
|
|
+};
|
|
|
+static_assert(sizeof(PackedMcuVersion) == 4, "PackedMcuVersion is an invalid size");
|
|
|
+
|
|
|
+// This is nn::irsensor::PackedMomentProcessorConfig
|
|
|
+struct PackedMomentProcessorConfig {
|
|
|
+ PackedCameraConfig camera_config;
|
|
|
+ IrsRect window_of_interest;
|
|
|
+ PackedMcuVersion required_mcu_version;
|
|
|
+ PackedMomentProcessorPreprocess preprocess;
|
|
|
+ u8 preprocess_intensity_threshold;
|
|
|
+ INSERT_PADDING_BYTES(2);
|
|
|
+};
|
|
|
+static_assert(sizeof(PackedMomentProcessorConfig) == 0x20,
|
|
|
+ "PackedMomentProcessorConfig is an invalid size");
|
|
|
+
|
|
|
+// This is nn::irsensor::PackedClusteringProcessorConfig
|
|
|
+struct PackedClusteringProcessorConfig {
|
|
|
+ PackedCameraConfig camera_config;
|
|
|
+ IrsRect window_of_interest;
|
|
|
+ PackedMcuVersion required_mcu_version;
|
|
|
+ u32 pixel_count_min;
|
|
|
+ u32 pixel_count_max;
|
|
|
+ u32 object_intensity_min;
|
|
|
+ bool is_external_light_filter_enabled;
|
|
|
+ INSERT_PADDING_BYTES(2);
|
|
|
+};
|
|
|
+static_assert(sizeof(PackedClusteringProcessorConfig) == 0x30,
|
|
|
+ "PackedClusteringProcessorConfig is an invalid size");
|
|
|
+
|
|
|
+// This is nn::irsensor::PackedImageTransferProcessorConfig
|
|
|
+struct PackedImageTransferProcessorConfig {
|
|
|
+ PackedCameraConfig camera_config;
|
|
|
+ PackedMcuVersion required_mcu_version;
|
|
|
+ PackedImageTransferProcessorFormat format;
|
|
|
+ INSERT_PADDING_BYTES(3);
|
|
|
+};
|
|
|
+static_assert(sizeof(PackedImageTransferProcessorConfig) == 0x18,
|
|
|
+ "PackedImageTransferProcessorConfig is an invalid size");
|
|
|
+
|
|
|
+// This is nn::irsensor::PackedTeraPluginProcessorConfig
|
|
|
+struct PackedTeraPluginProcessorConfig {
|
|
|
+ PackedMcuVersion required_mcu_version;
|
|
|
+ u8 mode;
|
|
|
+ u8 unknown_1;
|
|
|
+ u8 unknown_2;
|
|
|
+ u8 unknown_3;
|
|
|
+};
|
|
|
+static_assert(sizeof(PackedTeraPluginProcessorConfig) == 0x8,
|
|
|
+ "PackedTeraPluginProcessorConfig is an invalid size");
|
|
|
+
|
|
|
+// This is nn::irsensor::PackedPointingProcessorConfig
|
|
|
+struct PackedPointingProcessorConfig {
|
|
|
+ IrsRect window_of_interest;
|
|
|
+ PackedMcuVersion required_mcu_version;
|
|
|
+};
|
|
|
+static_assert(sizeof(PackedPointingProcessorConfig) == 0xC,
|
|
|
+ "PackedPointingProcessorConfig is an invalid size");
|
|
|
+
|
|
|
+// This is nn::irsensor::PackedFunctionLevel
|
|
|
+struct PackedFunctionLevel {
|
|
|
+ IrSensorFunctionLevel function_level;
|
|
|
+ INSERT_PADDING_BYTES(3);
|
|
|
+};
|
|
|
+static_assert(sizeof(PackedFunctionLevel) == 0x4, "PackedFunctionLevel is an invalid size");
|
|
|
+
|
|
|
+// This is nn::irsensor::PackedImageTransferProcessorExConfig
|
|
|
+struct PackedImageTransferProcessorExConfig {
|
|
|
+ PackedCameraConfig camera_config;
|
|
|
+ PackedMcuVersion required_mcu_version;
|
|
|
+ PackedImageTransferProcessorFormat origin_format;
|
|
|
+ PackedImageTransferProcessorFormat trimming_format;
|
|
|
+ u16 trimming_start_x;
|
|
|
+ u16 trimming_start_y;
|
|
|
+ bool is_external_light_filter_enabled;
|
|
|
+ INSERT_PADDING_BYTES(5);
|
|
|
+};
|
|
|
+static_assert(sizeof(PackedImageTransferProcessorExConfig) == 0x20,
|
|
|
+ "PackedImageTransferProcessorExConfig is an invalid size");
|
|
|
+
|
|
|
+// This is nn::irsensor::PackedIrLedProcessorConfig
|
|
|
+struct PackedIrLedProcessorConfig {
|
|
|
+ PackedMcuVersion required_mcu_version;
|
|
|
+ u8 light_target;
|
|
|
+ INSERT_PADDING_BYTES(3);
|
|
|
+};
|
|
|
+static_assert(sizeof(PackedIrLedProcessorConfig) == 0x8,
|
|
|
+ "PackedIrLedProcessorConfig is an invalid size");
|
|
|
+
|
|
|
+// This is nn::irsensor::HandAnalysisConfig
|
|
|
+struct HandAnalysisConfig {
|
|
|
+ HandAnalysisMode mode;
|
|
|
+};
|
|
|
+static_assert(sizeof(HandAnalysisConfig) == 0x4, "HandAnalysisConfig is an invalid size");
|
|
|
+
|
|
|
+// This is nn::irsensor::detail::ProcessorState
|
|
|
+struct ProcessorState {
|
|
|
+ u64 start{};
|
|
|
+ u32 count{};
|
|
|
+ INSERT_PADDING_BYTES(4);
|
|
|
+ std::array<u8, 0xE10> processor_raw_data{};
|
|
|
+};
|
|
|
+static_assert(sizeof(ProcessorState) == 0xE20, "ProcessorState is an invalid size");
|
|
|
+
|
|
|
+// This is nn::irsensor::detail::DeviceFormat
|
|
|
+struct DeviceFormat {
|
|
|
+ Core::IrSensor::IrCameraStatus camera_status{Core::IrSensor::IrCameraStatus::Unconnected};
|
|
|
+ Core::IrSensor::IrCameraInternalStatus camera_internal_status{
|
|
|
+ Core::IrSensor::IrCameraInternalStatus::Ready};
|
|
|
+ Core::IrSensor::IrSensorMode mode{Core::IrSensor::IrSensorMode::None};
|
|
|
+ ProcessorState state{};
|
|
|
+};
|
|
|
+static_assert(sizeof(DeviceFormat) == 0xE30, "DeviceFormat is an invalid size");
|
|
|
+
|
|
|
+// This is nn::irsensor::ImageTransferProcessorState
|
|
|
+struct ImageTransferProcessorState {
|
|
|
+ u64 sampling_number;
|
|
|
+ Core::IrSensor::CameraAmbientNoiseLevel ambient_noise_level;
|
|
|
+ INSERT_PADDING_BYTES(4);
|
|
|
+};
|
|
|
+static_assert(sizeof(ImageTransferProcessorState) == 0x10,
|
|
|
+ "ImageTransferProcessorState is an invalid size");
|
|
|
+
|
|
|
+} // namespace Core::IrSensor
|