104 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			104 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
/* SPDX-License-Identifier: LGPL-2.1-or-later */
 | 
						|
/*
 | 
						|
 * uvc-gadget control API
 | 
						|
 *
 | 
						|
 * Copyright (C) 2020 Rockchip Electronics Co., Ltd.
 | 
						|
 *
 | 
						|
 * Author: Bin Yang <yangbin@rock-chips.com>
 | 
						|
 */
 | 
						|
 | 
						|
#ifndef __UVC_CTRL_H__
 | 
						|
#define __UVC_CTRL_H__
 | 
						|
 | 
						|
#include <stdint.h>
 | 
						|
#include <linux/usb/video.h>
 | 
						|
 | 
						|
#ifdef __cplusplus
 | 
						|
extern "C" {
 | 
						|
#endif
 | 
						|
 | 
						|
#define UVC_UNIT_ID_ERR 0
 | 
						|
#define UVC_UNIT_ID_CT  1
 | 
						|
#define UVC_UNIT_ID_PU  2
 | 
						|
#define UVC_UNIT_ID_XU  6
 | 
						|
 | 
						|
#define U_CUR   0
 | 
						|
#define U_MIN   1
 | 
						|
#define U_MAX   2
 | 
						|
#define U_DEF   3
 | 
						|
#define U_RES   4
 | 
						|
#define U_SIZE  5
 | 
						|
 | 
						|
struct uvc_request_ct {
 | 
						|
	__u8 scan_mode[U_SIZE];
 | 
						|
	__u8 ae_mode[U_SIZE];
 | 
						|
	__u8 ae_priority[U_SIZE];
 | 
						|
	__u32 exposure_abs[U_SIZE];
 | 
						|
	__u8 exposure_rel[U_SIZE];
 | 
						|
	__u16 focus_abs[U_SIZE];
 | 
						|
	__u16 focus_rel[U_SIZE];
 | 
						|
	__u8 focus_auto[U_SIZE];
 | 
						|
	__u16 iris_abs[U_SIZE];
 | 
						|
	__u16 iris_rel[U_SIZE];
 | 
						|
	__u16 zoom_abs[U_SIZE];
 | 
						|
	__u8 zoom_rel[U_SIZE][3];
 | 
						|
	__u8 pantilt_abs[U_SIZE][8];
 | 
						|
	__u8 pantilt_rel[U_SIZE][4];
 | 
						|
	__u16 roll_abs[U_SIZE];
 | 
						|
	__u16 roll_rel[U_SIZE];
 | 
						|
	__u8 privacy[U_SIZE];
 | 
						|
};
 | 
						|
 | 
						|
struct uvc_request_pu {
 | 
						|
	__u16 backlight[U_SIZE];
 | 
						|
	__u16 brightness[U_SIZE];
 | 
						|
	__u16 contrast[U_SIZE];
 | 
						|
	__u16 gain[U_SIZE];
 | 
						|
	__u8 pl_freq[U_SIZE];
 | 
						|
	__u16 hue[U_SIZE];
 | 
						|
	__u16 saturation[U_SIZE];
 | 
						|
	__u16 sharpness[U_SIZE];
 | 
						|
	__u16 gamma[U_SIZE];
 | 
						|
	__u16 wb_temp[U_SIZE];
 | 
						|
	__u8 wb_temp_auto[U_SIZE];
 | 
						|
	__u32 wb_component[U_SIZE];
 | 
						|
	__u8 wb_component_auto[U_SIZE];
 | 
						|
	__u16 digital_mult[U_SIZE];
 | 
						|
	__u16 digital_mult_limit[U_SIZE];
 | 
						|
	__u8 hue_auto[U_SIZE];
 | 
						|
	__u8 analog_video[U_SIZE];
 | 
						|
	__u8 analog_lock[U_SIZE];
 | 
						|
};
 | 
						|
 | 
						|
struct uvc_request_xu {
 | 
						|
	__u8 data[60];
 | 
						|
};
 | 
						|
 | 
						|
enum uvc_req_dir {
 | 
						|
	USB_TRAN_IN = 0,
 | 
						|
	USB_TRAN_OUT,
 | 
						|
	USB_TRAN_INFO
 | 
						|
};
 | 
						|
 | 
						|
struct uvc_request_param {
 | 
						|
	__u8 entity;
 | 
						|
	__u8 req;
 | 
						|
	__u8 cs;
 | 
						|
	__u8 len;
 | 
						|
	__u8 get_len;
 | 
						|
	enum uvc_req_dir dir;
 | 
						|
};
 | 
						|
 | 
						|
typedef int(*uvc_ctrl_func_t)(struct uvc_source *,
 | 
						|
	struct uvc_request_param *, void *);
 | 
						|
int uvc_control_func_register(struct uvc_source *src, uint8_t entity_id,
 | 
						|
			      uvc_ctrl_func_t func);
 | 
						|
void uvc_control_func_unregister(struct uvc_source *src);
 | 
						|
 | 
						|
 | 
						|
#ifdef __cplusplus
 | 
						|
}
 | 
						|
#endif
 | 
						|
 | 
						|
#endif /* __UVC_CTRL_H__ */
 |