mirror of
https://github.com/switchbrew/libnx.git
synced 2025-06-21 12:32:40 +02:00
90 lines
3.0 KiB
C
90 lines
3.0 KiB
C
/**
|
|
* @file irs.h
|
|
* @brief HID IR sensor (irs) service IPC wrapper.
|
|
* @author yellows8
|
|
* @copyright libnx Authors
|
|
*/
|
|
#pragma once
|
|
|
|
#include "../types.h"
|
|
#include "../services/sm.h"
|
|
#include "../services/hid.h"
|
|
|
|
typedef struct {
|
|
u64 unk_x0;
|
|
u8 unk_x8;
|
|
u8 unk_x9;
|
|
u8 unk_xa;
|
|
u8 pad[5];
|
|
u16 unk_x10;
|
|
u32 unk_x12;
|
|
u16 unk_x16;
|
|
u32 unk_constant;//offset 0x18
|
|
u8 unk_x1c;
|
|
u8 unk_x1d;
|
|
u8 pad2[2];
|
|
} PACKED IrsPackedMomentProcessorConfig;
|
|
|
|
typedef struct {
|
|
u64 exposure; ///< IR Sensor exposure time in nanoseconds.
|
|
u32 ir_leds; ///< Controls the IR leds. 0: All leds, 1: Bright group, 2: Dim group, 3: None.
|
|
u32 digital_gain; ///< IR sensor signal's digital gain.
|
|
u8 color_invert; ///< Inverts the colors of the captured image. 0: Normal image, 1: Negative image.
|
|
u8 pad[7];
|
|
u32 sensor_res; ///< IR Sensor resolution. 0: 240x320, 1: 120x160, 2: 60x80.
|
|
} IrsImageTransferProcessorConfig;
|
|
|
|
typedef struct {
|
|
u64 exposure; ///< IR Sensor exposure time in nanoseconds.
|
|
u8 ir_leds; ///< Controls the IR leds. 0: All leds, 1: Bright group, 2: Dim group, 3: None.
|
|
u8 digital_gain; ///< IR sensor signal's digital gain.
|
|
u8 color_invert; ///< Inverts the colors of the captured image. 0: Normal image, 1: Negative image.
|
|
u8 pad[5];
|
|
u32 unk_constant;//offset 0x10
|
|
u8 sensor_res; ///< IR Sensor resolution. 0: 240x320, 1: 120x160, 2: 60x80.
|
|
u8 pad2[3];
|
|
} IrsPackedImageTransferProcessorConfig;
|
|
|
|
typedef struct {
|
|
u8 unk_x0[0x10];
|
|
} PACKED IrsImageTransferProcessorState;
|
|
|
|
/// Initialize irs.
|
|
Result irsInitialize(void);
|
|
|
|
/// Exit irs.
|
|
void irsExit(void);
|
|
|
|
Service* irsGetSessionService(void);
|
|
void* irsGetSharedmemAddr(void);
|
|
|
|
/// (De)activate the IR sensor, this is automatically used by \ref irsExit. Must be called after irsInitialize() to activate the IR sensor.
|
|
Result irsActivateIrsensor(bool activate);
|
|
|
|
Result irsGetIrCameraHandle(u32 *IrCameraHandle, HidControllerID id);
|
|
|
|
/**
|
|
* @brief Start ImageTransferProcessor.
|
|
* @param[in] IrCameraHandle Camera handle.
|
|
* @param[in] config Input config.
|
|
* @param[in] size Work-buffer size, must be 0x1000-byte aligned.
|
|
* @note Do not use if already started.
|
|
*/
|
|
Result irsRunImageTransferProcessor(u32 IrCameraHandle, IrsImageTransferProcessorConfig *config, size_t size);
|
|
|
|
Result irsGetImageTransferProcessorState(u32 IrCameraHandle, void* buffer, size_t size, IrsImageTransferProcessorState *state);
|
|
|
|
/// Stop ImageTransferProcessor. Do not use if already stopped.
|
|
/// \ref irsExit calls this with all IrCameraHandles which were not already used with \ref irsStopImageProcessor.
|
|
Result irsStopImageProcessor(u32 IrCameraHandle);
|
|
|
|
/// "Suspend" ImageTransferProcessor.
|
|
/// TODO: What does this really do?
|
|
Result irsSuspendImageProcessor(u32 IrCameraHandle);
|
|
|
|
/**
|
|
* Gets the default configuration for Image Transfer mode.
|
|
* Defaults are exposure 300us, IR LEDs all ON, 8x digital gain, normal image and resolution 240 x 320.
|
|
*/
|
|
void irsGetDefaultImageTransferProcessorConfig(IrsImageTransferProcessorConfig *config);
|