Files
2025-12-03 11:12:34 +08:00

208 lines
6.2 KiB
C

/*****************************************************************
>file name : uvc_device.h
>author : lichao
>create time : Sat 02 Sep 2017 03:22:12 PM HKT
*****************************************************************/
#ifndef _UVC_DEVICE_H_
#define _UVC_DEVICE_H_
#include "video.h"
// #include "video/camera.h"
#define UVC_CMD_BASE 0x00010000
#define UVC_SET_CUR_FPS (UVC_CMD_BASE + 0)
#define UVC_GET_CUR_FPS (UVC_CMD_BASE + 1)
#define UVC_GET_CUR_BITS_RATE (UVC_CMD_BASE + 2)
#define UVC_CAMERA_FMT_YUY2 0x1
#define UVC_CAMERA_FMT_MJPG 0x2
#define UVC_CAMERA_FMT_H264 0x3
#define USBIOC_MASS_STORAGE_CONNECT _IOW('U', 0, sizeof(struct usb_mass_storage))
#define USBIOC_UVC_CAMERA_CONNECT _IOW('U', 1, sizeof(struct uvc_format))
#define USBIOC_UAC_MICROPHONE_CONNECT _IOW('U', 2, sizeof(struct uvc_format))
//#define USBIOC_UVC_CAMERA1_CONNECT _IOW('U', 2, sizeof(struct uvc_format))
#define USBIOC_SLAVE_MODE_START _IOW('U', 3, sizeof(unsigned int))
#define USBIOC_SLAVE_DISCONNECT _IOW('U', 4, sizeof(unsigned int))
#define UVCIOC_QUERYCAP _IOR('U', 5, sizeof(struct uvc_capability))
#define UVCIOC_SET_CAP_SIZE _IOW('U', 5, sizeof(unsigned int))
#define UVCIOC_SET_FPS _IOW('U', 6, sizeof(unsigned int))
#define UVCIOC_STREAM_ON _IOW('U', 7, sizeof(unsigned int))
#define UVCIOC_STREAM_OFF _IOW('U', 8, sizeof(unsigned int))
#define UVCIOC_REQBUFS _IOW('U', 9, sizeof(unsigned int))
#define UVCIOC_DQBUF _IOW('U', 10, sizeof(unsigned int))
#define UVCIOC_QBUF _IOW('U', 11, sizeof(unsigned int))
#define UVCIOC_RESET _IOW('U', 12, sizeof(unsigned int))
#define UVCIOC_REQ_PROCESSING_UNIT _IOR('U', 13, sizeof(struct uvc_processing_unit))
#define UVCIOC_SET_PROCESSING_UNIT _IOW('U', 14, sizeof(struct uvc_processing_unit))
#define UVCIOC_GET_DEVICE_ID _IOR('U', 15, sizeof(struct usb_device_id))
#define USBIOC_SLAVE_RESET _IOW('U', 16, sizeof(unsigned int))
/***********2018-06-21************/
#define USBIOC_GET_DEVICE_ID _IOR('U', 17, sizeof(struct usb_device_id))
#define USBIOC_GET_MANUFACTURER _IOR('U', 18, sizeof(struct usb_string))
#define USBIOC_GET_PRODUCT_NAME _IOR('U', 19, sizeof(struct usb_string))
/*********************************/
/***********2018-07-30************/
#define UVCIOC_SET_EVENT_LISTENER _IOW('U', 19, sizeof(struct uvc_event_listener))
/*********************************/
#define USBIOC_HID_CONNECT _IOW('U', 20, sizeof(struct usb_hid_arg))
#define USBIOC_HID_CONTROL _IOW('U', 21, sizeof(struct usb_hid_arg))
#define USBIOC_CDC_CONNECT _IOW('U', 22, sizeof(struct usb_cdc_arg))
#define USBIOC_CDC_CONTROL _IOW('U', 23, sizeof(unsigned int))
/***********2020-05-11,设置uvc摄像头黑白切换************/
#define UVCIOC_SET_CUR_GRAY _IOW('U', 24, sizeof(unsigned int))
#define UVCIOC_GET_IMAMGE _IOR('U', 24, sizeof(unsigned int))
#define UVCIOC_SET_CUR_FPS _IOW('U', 25, sizeof(unsigned int))
/*********************************/
#define UVCIOC_GET_FMT _IOR('U', 26, sizeof(unsigned int))
/* ------------------------------------------------------------------------
* Driver specific constants.
*/
typedef int (*UVC_STREAM_OUT)(void *, int, void *, int);
struct uvc_parm {
s16 brightness_min;
s16 brightness_max;
s16 brightness_def;
s16 brightness_res;
s16 brightness_cur;
s16 contrast_min;
s16 contrast_max;
s16 contrast_def;
s16 contrast_res;
s16 contrast_cur;
s16 hue_min;
s16 hue_max;
s16 hue_def;
s16 hue_res;
s16 hue_cur;
s16 saturation_min;
s16 saturation_max;
s16 saturation_def;
s16 saturation_res;
s16 saturation_cur;
s16 sharpness_min;
s16 sharpness_max;
s16 sharpness_def;
s16 sharpness_res;
s16 sharpness_cur;
s16 gamma_min;
s16 gamma_max;
s16 gamma_def;
s16 gamma_res;
s16 gamma_cur;
s16 white_balance_temp_min;
s16 white_balance_temp_max;
s16 white_balance_temp_def;
s16 white_balance_temp_res;
s16 white_balance_temp_cur;
s16 power_line_freq_min;
s16 power_line_freq_max;
s16 power_line_freq_def;
s16 power_line_freq_res;
s16 power_line_freq_cur;
};
struct uvc_host_param {
char *name;
void *priv;
UVC_STREAM_OUT uvc_stream_out;
int (*uvc_out)(void *priv);
};
struct uvc_stream_list {
void *addr;
u32 length;
};
struct uvc_frame_info {
u16 width;
u16 height;
};
struct uvc_reqbufs {
void *buf;
int size;
};
struct uvc_capability {
int fmt;
int fps;
int reso_num;
struct uvc_frame_info reso[8];
};
struct uvc_processing_unit {
u8 request;
u8 type;
u16 value;
u16 index;
u8 buf[4];
int len;
};
struct usb_device_id {
u16 vendor;
u16 product;
};
struct usb_string {
u8 code_type;
u16 language;
int len;
u8 *string;
};
enum trans_mode {
UVC_PUSH_PHY_MODE,
UVC_PUSH_VIRTUAL_MODE,
};
struct usb_camera_info {
u16 width;
u16 height;
int fps;
int sample_fmt;
enum trans_mode mode;
};
struct uvc_platform_data {
u16 width;
u16 height;
int fps;
int fmt;
int mem_size;
int timeout;
u8 put_msg;
};
#define UVC_PLATFORM_DATA_BEGIN(data) \
static const struct uvc_platform_data data = {\
#define UVC_PLATFORM_DATA_END() \
};
extern const struct device_operations uvc_dev_ops;
int uvc_get_src_pixformat(void *fh);
int uvc_set_output_buf(void *fh, void *buf, int size);
void set_uvc_gray(u32 flag);
// void *uvc_output_open(u8 mijor, struct camera_device_info *info);
// int uvc_output_set_fmt(void *fh, struct video_format *f);
int uvc_get_real_fps(void *fh);
int uvc_output_one_frame(void *fh);
int uvc_output_stop(void *fh);
int uvc_output_close(void *fh);
int uvc_set_output_buffer(void *fh, void *buf, int num);
// int uvc_set_scaler_handler(void *fh, void *priv, int (*handler)(void *, struct YUV_frame_data *));
// int uvc_output_set_reso(void *fh, struct video_format *f, u16 *width, u16 *height);
#endif