2025-12-17 15:55:25 +08:00

692 lines
14 KiB
C

/********************************************************************
* Copyright (c) 2020 Kneron, Inc. All Rights Reserved.
*
* The information contained herein is property of Kneron, Inc.
* Terms and conditions of usage are described in detail in Kneron
* STANDARD SOFTWARE LICENSE AGREEMENT.
*
* Licensees are granted free, non-transferable use of the information.
* NO WARRANTY of ANY KIND is provided. This heading must NOT be removed
* from the file.
********************************************************************/
#ifndef __UVC_CAMERA_H__
#define __UVC_CAMERA_H__
#include <stdbool.h>
#include <stdint.h>
#include "kmdw_status.h"
#define SCANNING_MODE 0x1
#define AUTO_EXPOSURE_MODE 0x2
#define AUTO_EXPOSURE_PRIORITY 0x4
#define EXPOSURE_TIME_ABSOLUTE 0x8
#define EXPOSURE_TIME_RELATIVE 0x10
#define FOCUS_ABSOLUTE 0x20
#define FOCUS_RELATIVE 0x40
#define IRIS_ABSOLUTE 0x80
#define IRIS_RELATIVE 0x100
#define ZOOM_ABSOLUTE 0x200
#define ZOOM_RELATIVE 0x400
#define PANTILT_ABSOLUTE 0x800
#define PANTILT_RELATIVE 0x1000
#define ROLL_ABSOLUTE 0x2000
#define ROLL_RELATIVE 0x4000
#define FOCUS_AUTO 0x20000
#define PRIVACY 0x40000
#define FOCUS_SIMPLE 0x80000
#define WINDOW 0x100000
#define REGION_OF_INTEREST 0x200000
#define BRIGHTNESS 0x1
#define CONTRAST 0x2
#define HUE 0x4
#define SATURATION 0x8
#define SHARPNESS 0x10
#define GAMMA 0x20
#define WHITE_BALANCE_TEMPERATURE 0x40
#define WHITE_BALANCE_COMPONENT 0x80
#define BACKLIGHT_COMPENSATION 0x100
#define GAIN 0x200
#define POWER_LINE_FREQUENCY 0x400
#define HUE_AUTO 0x800
#define WHITE_BALANCE_TEMPERATURE_AUTO 0x1000
#define WHITE_BALANCE_COMPONENT_AUTO 0x2000
#define DIGITAL_MULTIPLIER 0x4000
#define DIGITAL_MULTIPLIER_LIMIT 0x8000
#define ANALOG_VIDEO_STANDARD 0x10000
#define ANALOG_VIDEO_LOCK_STATUS 0x20000
#define CONTRAST_AUTO 0x40000
#define UVC_SET_CUR 0x01
#define UVC_GET_CUR 0x81
#define UVC_GET_MIN 0x82
#define UVC_GET_MAX 0x83
#define UVC_GET_RES 0x84
#define UVC_GET_LEN 0x85
#define UVC_GET_INFO 0x86
#define UVC_GET_DEF 0x87
#define SCANNING_MODE_CTL_INTERLACED 0x0
#define SCANNING_MODE_CTL_PROGRESSIVE 0x1
enum scm_req {
SCM_SET_CUR = 0x01,
SCM_GET_CUR = 0x81,
SCM_GET_CAP = 0x86
};
struct ct_scm {
enum scm_req req;
uint8_t caps;
bool bScanningMode;
};
#define EXPOSURE_MANUAL_MODE 0x1
#define EXPOSURE_AUTO_MODE 0x2
#define EXPOSURE_SHUTTER_PRIORITY_MODE 0x4
#define EXPOSURE_APERTURE_PRIORITY_MODE 0x8
enum aem_req {
AEM_SET_CUR = 0x01,
AEM_GET_CUR = 0x81,
AEM_GET_RES = 0x84,
AEM_GET_CAP = 0x86,
AEM_GET_DEF = 0x87
};
struct ct_aem {
enum aem_req req;
uint8_t caps;
uint8_t bAutoExposureMode;
};
#define EXPOSURE_FRAME_RATE_CONSTANT 0x0
#define EXPOSURE_FRAME_RATE_VARIED 0x1
enum aep_req {
AEP_SET_CUR = 0x01,
AEP_GET_CUR = 0x81,
AEP_GET_CAP = 0x86
};
struct ct_aep {
enum aep_req req;
uint8_t caps;
uint8_t bAutoExposurePriority;
};
enum eta_req {
ETA_SET_CUR = 0x01,
ETA_GET_CUR = 0x81,
ETA_GET_MIN = 0x82,
ETA_GET_MAX = 0x83,
ETA_GET_RES = 0x84,
ETA_GET_CAP = 0x86,
ETA_GET_DEF = 0x87,
};
struct ct_eta {
enum eta_req req;
uint8_t caps;
uint32_t bExposureTimeAbsolute;
};
enum etr_req {
ETR_SET_CUR = 0x01,
ETR_GET_CUR = 0x81,
ETR_GET_CAP = 0x86
};
struct ct_etr {
enum etr_req req;
uint8_t caps;
int8_t bExposureTimeRelative;
};
enum focus_a_req {
FA_SET_CUR = 0x01,
FA_GET_CUR = 0x81,
FA_GET_MIN = 0x82,
FA_GET_MAX = 0x83,
FA_GET_RES = 0x84,
FA_GET_CAP = 0x86,
FA_GET_DEF = 0x87,
};
struct ct_focus_a {
enum focus_a_req req;
uint8_t caps;
uint16_t wFocusAbsolute;
};
enum fr_req {
FR_SET_CUR = 0x01,
FR_GET_CUR = 0x81,
FR_GET_MIN = 0x82,
FR_GET_MAX = 0x83,
FR_GET_RES = 0x84,
FR_GET_CAP = 0x86,
FR_GET_DEF = 0x87
};
struct ct_focus_r_data {
int8_t bFocusRelative;
uint8_t bSpeed;
};
struct ct_focus_r{
enum fr_req req;
uint8_t caps;
struct ct_focus_r_data data;
};
#define FSR_FULL_RANGE 0x1
#define FSR_MACRO 0x2
#define FSR_PEOPLE 0x3
#define FSR_SCENE 0x4
enum fsr_req {
FSR_SET_CUR = 0x01,
FSR_GET_CUR = 0x81,
FSR_GET_CAP = 0x86,
FSR_GET_DEF = 0x87
};
struct ct_focus_sr{
enum fsr_req req;
uint8_t caps;
uint8_t bFocus;
};
enum fauto_req {
FAUTO_SET_CUR = 0x01,
FAUTO_GET_CUR = 0x81,
FAUTO_GET_CAP = 0x86,
FAUTO_GET_DEF = 0x87
};
struct ct_fauto{
enum fauto_req req;
uint8_t caps;
uint8_t bFocusAuto;
};
enum irisa_req {
IRISA_SET_CUR = 0x01,
IRISA_GET_CUR = 0x81,
IRISA_GET_MIN = 0x82,
IRISA_GET_MAX = 0x83,
IRISA_GET_RES = 0x84,
IRISA_GET_CAP = 0x86,
IRISA_GET_DEF = 0x87
};
struct ct_iris_a {
enum irisa_req req;
uint8_t caps;
uint16_t wIrisAbsolute;
};
enum irisr_req {
IRISR_SET_CUR = 0x01,
IRISR_GET_CUR = 0x81,
IRISR_GET_CAP = 0x86
};
struct ct_iris_r{
enum irisr_req req;
uint8_t caps;
uint8_t bIrisRelative;
};
enum zooma_req {
ZOOMA_SET_CUR = 0x01,
ZOOMA_GET_CUR = 0x81,
ZOOMA_GET_MIN = 0x82,
ZOOMA_GET_MAX = 0x83,
ZOOMA_GET_RES = 0x84,
ZOOMA_GET_CAP = 0x86,
ZOOMA_GET_DEF = 0x87
};
struct ct_zoom_a{
enum zooma_req req;
uint8_t caps;
uint16_t wObjectiveFocalLength;
};
enum zoomr_req {
ZOOMR_SET_CUR = 0x01,
ZOOMR_GET_CUR = 0x81,
ZOOMR_GET_MIN = 0x82,
ZOOMR_GET_MAX = 0x83,
ZOOMR_GET_RES = 0x84,
ZOOMR_GET_CAP = 0x86,
ZOOMR_GET_DEF = 0x87
};
#define ZOOM_STOP 0x0
#define ZOOM_TELE_DIR 0x1
#define ZOOM_WIDE_AGLE_DIR 0xFF
#define DIGITAL_ZOOM_OFF 0x0
#define DIGITAL_ZOOM_ON 0x1
struct ct_zoomr_data{
int8_t bZoom;
bool bDigitalZoom;
uint16_t bSpeed;
};
struct ct_zoom_r{
enum zoomr_req req;
uint8_t caps;
struct ct_zoomr_data data;
};
enum pantilta_req {
TILTA_SET_CUR = 0x01,
TILTA_GET_CUR = 0x81,
TILTA_GET_MIN = 0x82,
TILTA_GET_MAX = 0x83,
TILTA_GET_RES = 0x84,
TILTA_GET_CAP = 0x86,
TILTA_GET_DEF = 0x87,
};
struct ct_pan_tilta_data {
int32_t dwPanAbsolute;
int32_t dwTiltAbsolute;
};
struct ct_pan_tilt_a{
enum pantilta_req req;
uint8_t caps;
struct ct_pan_tilta_data data;
};
enum pantiltr_req {
TILTR_SET_CUR = 0x01,
TILTR_GET_CUR = 0x81,
TILTR_GET_MIN = 0x82,
TILTR_GET_MAX = 0x83,
TILTR_GET_RES = 0x84,
TILTR_GET_CAP = 0x86,
TILTR_GET_DEF = 0x87,
};
#define PAN_STOP 0x0
#define PAN_CLOSEWISE_DIR 0x1
#define PAN_COUNTER_CLOSEWISE_DIR 0xFF
#define TILT_STOP 0x0
#define TILT_POINT_IMG_UP 0x1
#define TILT_POINT_IMG_DOWN 0xFF
struct ct_pan_tiltr_data {
int8_t bPanRelative;
uint8_t bPanSpeed;
int8_t bTiltRelative;
uint8_t bTiltSpeed;
};
struct ct_pan_tilt_r {
enum pantiltr_req req;
uint8_t caps;
struct ct_pan_tiltr_data data;
};
enum rolla_req {
ROLLA_SET_CUR = 0x01,
ROLLA_GET_CUR = 0x81,
ROLLA_GET_MIN = 0x82,
ROLLA_GET_MAX = 0x83,
ROLLA_GET_RES = 0x84,
ROLLA_GET_CAP = 0x86,
ROLLA_GET_DEF = 0x87,
};
struct ct_roll_a {
enum rolla_req req;
uint8_t caps;
int16_t wAbsolute;
};
enum rollr_req {
ROLLR_SET_CUR = 0x01,
ROLLR_GET_CUR = 0x81,
ROLLR_GET_MIN = 0x82,
ROLLR_GET_MAX = 0x83,
ROLLR_GET_RES = 0x84,
ROLLR_GET_CAP = 0x86,
ROLLR_GET_DEF = 0x87,
};
struct ct_rollr_data {
int8_t bRollRelative;
uint8_t bSpeed;
};
struct ct_roll_r {
enum rollr_req req;
uint8_t caps;
struct ct_rollr_data data;
};
enum ps_req {
PS_SET_CUR = 0x01,
PS_GET_CUR = 0x81,
PS_GET_CAP = 0x86,
};
#define SHUTTER_OPEN 0x0
#define SHUTTER_CLOSE 0x1
struct ct_privacy_shutter {
enum ps_req req;
uint8_t caps;
bool bPrivacy;
};
enum dwindow_req {
DWINDOW_SET_CUR = 0x01,
DWINDOW_GET_CUR = 0x81,
DWINDOW_GET_MIN = 0x82,
DWINDOW_GET_MAX = 0x83,
DWINDOW_GET_DEF = 0x87,
};
struct ct_dwindow_data {
uint16_t wWindow_Top;
uint16_t wWindow_Left;
uint16_t wWindow_Bottom;
uint16_t wWindow_Right;
uint16_t wNumSteps;
uint16_t bmNumStepsUnits;
};
struct ct_dwindow{
enum dwindow_req req;
struct ct_dwindow_data data;
};
enum roi_req {
ROI_SET_CUR = 0x01,
ROI_GET_CUR = 0x81,
ROI_GET_MIN = 0x82,
ROI_GET_MAX = 0x83,
ROI_GET_DEF = 0x87,
};
struct ct_roi_data {
uint16_t wROI_Top;
uint16_t wROI_Left;
uint16_t wROI_Bottom;
uint16_t wROI_Right;
uint16_t bmAutoControls;
};
struct ct_roi{
enum roi_req req;
struct ct_roi_data data;
};
enum backlight_req {
BKC_SET_CUR = 0x01,
BKC_GET_CUR = 0x81,
BKC_GET_MIN = 0x82,
BKC_GET_MAX = 0x83,
BKC_GET_RES = 0x84,
BKC_GET_CAP = 0x86,
BKC_GET_DEF = 0x87
};
struct pu_backlight {
enum backlight_req req;
uint8_t caps;
uint16_t wBacklightCompensation;
};
enum brightness_req {
BRIGHTNESS_SET_CUR = 0x01,
BRIGHTNESS_GET_CUR = 0x81,
BRIGHTNESS_GET_MIN = 0x82,
BRIGHTNESS_GET_MAX = 0x83,
BRIGHTNESS_GET_RES = 0x84,
BRIGHTNESS_GET_CAP = 0x86,
BRIGHTNESS_GET_DEF = 0x87,
};
struct pu_brightness {
enum brightness_req req;
uint8_t caps;
int16_t wBrightness;
};
enum contrast_req {
CONTRAST_SET_CUR = 0x01,
CONTRAST_GET_CUR = 0x81,
CONTRAST_GET_MIN = 0x82,
CONTRAST_GET_MAX = 0x83,
CONTRAST_GET_RES = 0x84,
CONTRAST_GET_CAP = 0x86,
CONTRAST_GET_DEF = 0x87,
};
struct pu_contrast {
enum contrast_req req;
uint8_t caps;
uint16_t wContrast;
};
enum contrast_auto_req {
CONTRASTA_SET_CUR = 0x01,
CONTRASTA_GET_CUR = 0x81,
CONTRASTA_GET_CAP = 0x86,
CONTRASTA_GET_DEF = 0x87,
};
struct pu_contrast_auto {
enum contrast_auto_req req;
uint8_t caps;
uint8_t bContrastAuto;
};
enum gain_req {
GAIN_SET_CUR = 0x01,
GAIN_GET_CUR = 0x81,
GAIN_GET_MIN = 0x82,
GAIN_GET_MAX = 0x83,
GAIN_GET_RES = 0x84,
GAIN_GET_CAP = 0x86,
GAIN_GET_DEF = 0x87,
};
struct pu_gain {
enum gain_req req;
uint8_t caps;
uint16_t wGain;
};
enum power_line_freq_req {
POWER_LINE_FREQUENCY_SET_CUR = 0x01,
POWER_LINE_FREQUENCY_GET_CUR = 0x81,
POWER_LINE_FREQUENCY_GET_CAP = 0x86,
POWER_LINE_FREQUENCY_GET_DEF = 0x87,
};
#define PLF_DSIABLE 0x0
#define PLF_50HZ 0x1
#define PLF_60HZ 0x2
#define PLF_AUTO 0x3
struct pu_power_line_frequency {
enum power_line_freq_req req;
uint8_t caps;
uint8_t bPowerLineFrequency;
};
enum hue_req {
HUE_SET_CUR = 0x01,
HUE_GET_CUR = 0x81,
HUE_GET_MIN = 0x82,
HUE_GET_MAX = 0x83,
HUE_GET_RES = 0x84,
HUE_GET_CAP = 0x86,
HUE_GET_DEF = 0x87,
};
struct pu_hue {
enum hue_req req;
uint8_t caps;
uint16_t wHue;
};
enum hue_auto_req {
HUEA_SET_CUR = 0x01,
HUEA_GET_CUR = 0x81,
HUEA_GET_CAP = 0x86,
HUEA_GET_DEF = 0x87,
};
struct pu_hue_auto {
enum hue_auto_req req;
uint8_t caps;
uint8_t bHueAuto;
};
enum saturation_req {
SATURATION_SET_CUR = 0x01,
SATURATION_GET_CUR = 0x81,
SATURATION_GET_MIN = 0x82,
SATURATION_GET_MAX = 0x83,
SATURATION_GET_RES = 0x84,
SATURATION_GET_CAP = 0x86,
SATURATION_GET_DEF = 0x87,
};
struct pu_saturation {
enum saturation_req req;
uint8_t caps;
uint16_t wSaturation;
};
enum sharpness_req {
SHARPNESS_SET_CUR = 0x01,
SHARPNESS_GET_CUR = 0x81,
SHARPNESS_GET_MIN = 0x82,
SHARPNESS_GET_MAX = 0x83,
SHARPNESS_GET_RES = 0x84,
SHARPNESS_GET_CAP = 0x86,
SHARPNESS_GET_DEF = 0x87,
};
struct pu_sharpness {
enum sharpness_req req;
uint8_t caps;
uint16_t wSharpness;
};
enum gamma_req {
GAMMA_SET_CUR = 0x01,
GAMMA_GET_CUR = 0x81,
GAMMA_GET_MIN = 0x82,
GAMMA_GET_MAX = 0x83,
GAMMA_GET_RES = 0x84,
GAMMA_GET_CAP = 0x86,
GAMMA_GET_DEF = 0x87,
};
struct pu_gamma {
enum gamma_req req;
uint8_t caps;
uint16_t wGamma;
};
enum wbt_req {
WBT_SET_CUR = 0x01,
WBT_GET_CUR = 0x81,
WBT_GET_MIN = 0x82,
WBT_GET_MAX = 0x83,
WBT_GET_RES = 0x84,
WBT_GET_CAP = 0x86,
WBT_GET_DEF = 0x87,
};
struct pu_white_balance_temp {
enum wbt_req req;
uint8_t caps;
uint16_t wWhiteBalanceTemperature;
};
enum wbt_auto_req {
WBTA_SET_CUR = 0x01,
WBTA_GET_CUR = 0x81,
WBTA_GET_CAP = 0x86,
WBTA_GET_DEF = 0x87,
};
struct pu_white_balance_temp_auto {
enum wbt_auto_req req;
uint8_t caps;
uint8_t bWhiteBalanceTemperatureAuto;
};
enum whitebalance_comp_req {
WBC_SET_CUR = 0x01,
WBC_GET_CUR = 0x81,
WBC_GET_MIN = 0x82,
WBC_GET_MAX = 0x83,
WBC_GET_RES = 0x84,
WBC_GET_CAP = 0x86,
WBC_GET_DEF = 0x87,
};
struct pu_whitebalance_comp_data {
int16_t wWhiteBalanceBlue;
int16_t wWhiteBalanceRed;
};
struct pu_whitebalance_comp {
enum whitebalance_comp_req req;
uint8_t caps;
struct pu_whitebalance_comp_data data;
};
enum wbc_auto_req {
WBCA_SET_CUR = 0x01,
WBCA_GET_CUR = 0x81,
WBCA_GET_CAP = 0x86,
WBCA_GET_DEF = 0x87,
};
struct pu_wbc_auto {
enum wbc_auto_req req;
uint8_t caps;
uint8_t bWhiteBalanceComponentAuto;
};
enum dmpl_req {
MPL_SET_CUR = 0x01,
MPL_GET_CUR = 0x81,
MPL_GET_MIN = 0x82,
MPL_GET_MAX = 0x83,
MPL_GET_RES = 0x84,
MPL_GET_CAP = 0x86,
MPL_GET_DEF = 0x87,
};
struct pu_dmultiplier {
enum dmpl_req req;
uint8_t caps;
uint16_t wMultiplierStep;
};
enum dmpl_limit_req {
DMPL_SET_CUR = 0x01,
DMPL_GET_CUR = 0x81,
DMPL_GET_MIN = 0x82,
DMPL_GET_MAX = 0x83,
DMPL_GET_RES = 0x84,
DMPL_GET_CAP = 0x86,
DMPL_GET_DEF = 0x87,
};
struct pu_dmultiplierlimit {
enum dmpl_limit_req req;
uint8_t caps;
uint16_t wMultiplierLimit;
};
#endif // __UVC_CAMERA_H__