⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usbvideo_drv.h

📁 mtk 6225平台的usb程序! 对想了解mtk平台usb的朋友会有帮助!
💻 H
📖 第 1 页 / 共 2 页
字号:
/* MJPEG video frame descriptor */
/* Note that the kal_uint8[2] array can not modify to kal_uint16 
    It is bacause align issue */
typedef struct 
{
	kal_uint8    bLength;
	kal_uint8    bDescriptorType;
	kal_uint8    bDescriptorSubType;
	kal_uint8    bFrameIndex;
	kal_uint8    bmCapabilities;
	kal_uint8    wWidth[2];
	kal_uint8    wHeight[2];
	kal_uint8    dwMinBitRate[4];
	kal_uint8    dwMaxBitRate[4];
	kal_uint8    dwMaxVideoFrameBufferSize[4];
	kal_uint8    dwDefaultFrameInterval[4];	
	kal_uint8    bFrameIntervalType;
	kal_uint8    dwMinFrameInterval[4];	
	kal_uint8    dwMaxFrameInterval[4];	
	kal_uint8    dwFrameIntervalStep[4];	
} USBVideo_MJPEG_Frame_Dscr;

/* still size structure */
/* Note that the kal_uint8[2] array can not modify to kal_uint16 
    It is bacause align issue */
typedef struct
{
	kal_uint8  wWidth[2];
	kal_uint8  wHeight[2];
}USBVideo_Still_Size;

/* Still image frame descriptor */
typedef struct 
{
	kal_uint8    bLength;
	kal_uint8    bDescriptorType;
	kal_uint8    bDescriptorSubType;
	kal_uint8    bEndpointAddress;
	kal_uint8    bNumImageSizePatterns;
	USBVideo_Still_Size *p_image_patterns;
	kal_uint8    bNumCompressionPattern;
	kal_uint8    *p_compression_patterns;
} USBVideo_Still_Frame_Dscr;

/* Color matching descriptor */
typedef struct 
{
	kal_uint8    bLength;
	kal_uint8    bDescriptorType;
	kal_uint8    bDescriptorSubType;
	kal_uint8    bColorPrimaries;
	kal_uint8    bTransferCharacteristics;
	kal_uint8    bMatrixCoefficients;
} USBVideo_Color_Dscr;

/* video probe and commit setting */
/* Note that the kal_uint8[2] array can not modify to kal_uint16 
    It is bacause align issue */
typedef struct
{
	kal_uint8		bmHint[2];
	kal_uint8		bFormatIndex;
	kal_uint8		bFrameIndex;
	kal_uint8		dwFrameInterval[4];
	kal_uint8		wKeyFrameRate[2];
	kal_uint8		wPFrameRate[2];
	kal_uint8		wCompQuality[2];
	kal_uint8		wCompWindowSize[2];
	kal_uint8		wDelay[2];
	kal_uint8 	dwMaxVideoFrameSize[4];
	kal_uint8		dwMaxPayloadTransferSize[4];
	//kal_uint8		dwClockFrequency[4];
	//kal_uint8		bmFramingInfo;
	//kal_uint8		bPreferedVersion;
	//kal_uint8		bMinVersion;
	//kal_uint8		bMaxVersion;
}USBVideo_Probe_Commit_Struct;

/* still probe and commit setting */
/* Note that the kal_uint8[2] array can not modify to kal_uint16 
    It is bacause align issue */
typedef struct
{
	kal_uint8		bFormatIndex;
	kal_uint8		bFrameIndex;
	kal_uint8		bCompressionIndex;	
	kal_uint8 	dwMaxVideoFrameSize[4];
	kal_uint8		dwMaxPayloadTransferSize[4];
}USBVideo_Still_Probe_Commit_Struct;

typedef struct
{
	kal_uint8		bHeaderLength;
	kal_uint8		bmHeaderInfo;
	kal_uint8		dwPTS[4];
	kal_uint8		dwSCR[6];
}USBVideo_Payload_Header;

typedef struct
{
	kal_uint8		bStuausType;
	kal_uint8		bOriginator;
	kal_uint8		bEvent;
	kal_uint8		bValue;
}USBVideo_VS_Status_Pkt_Struct;

typedef struct
{
	kal_uint8		bStuausType;
	kal_uint8		bOriginator;
	kal_uint8		bEvent;
	kal_uint8		bSelector;
	kal_uint8		bAttribute;
	kal_uint8		bValue;
}USBVideo_VC_Status_Pkt_Struct;

/***********************************************
	implement enum and structure 
************************************************/

typedef enum
{
	/* msg between media and USB */
	USBVIDEO_MSG_MED_START_SUCCESS_CNF,
	USBVIDEO_MSG_MED_START_FAIL_CNF,
	USBVIDEO_MSG_MED_CHANGE_VIDEO_IND,
	USBVIDEO_MSG_MED_STILL_CAPTURE_IND,
	USBVIDEO_MSG_MED_START_IND,
	USBVIDEO_MSG_MED_DEVICE_STILL_CNF,
	USBVIDEO_MSG_MED_PAUSE_CNF,
	USBVIDEO_MSG_MED_RESUME_SUCCESS_CNF,
	USBVIDEO_MSG_MED_RESUME_FAIL_CNF,
	USBVIDEO_MSG_MED_STOP_IND,
	USBVIDEO_MSG_MED_STOP_CNF,
	USBVIDEO_MSG_MED_ABORT_IND,

	/* msg used in internal USB driver */
	USBVIDEO_MSG_USB_ENUM_DONE,
	USBVIDEO_MSG_USB_COMPLETE_VIDEO,
	USBVIDEO_MSG_USB_DMA_DONE,
	USBVIDEO_MSG_USB_CHANGE_SIZE,
	USBVIDEO_MSG_USB_STILL_CAPTURE,
	USBVIDEO_MSG_USB_COMPLETE_STILL,
	USBVIDEO_MSG_USB_STILL_DMA_DONE,
	USBVIDEO_MSG_USB_STILL_DMA_PARTIAL,
	USBVIDEO_MSG_USB_INCALL_DMA_DONE,
	USBVIDEO_MSG_USB_INCALL_TIMEOUT,
	USBVIDEO_MSG_USB_INCALL_CHANGE_SIZE, 
	USBVIDEO_MSG_USB_ABORT
}USBVIDEO_MSG_TYPE;

typedef enum
{
	USBVIDEO_STATE_STOP,
	USBVIDEO_STATE_SEND,
	USBVIDEO_STATE_DROP,
	USBVIDEO_STATE_STILL,
	USBVIDEO_STATE_PRE_PAUSE,	
	USBVIDEO_STATE_PAUSE
}USBVIDEO_STATE;

typedef enum
{
	USBVIDEO_PROBE_NONE,
	USBVIDEO_PROBE_IN,
	USBVIDEO_PROBE_DONE,
	USBVIDEO_COMMIT_IN,
	USBVIDEO_COMMIT_DONE
}USBVIDEO_PROBE_STATE;

typedef enum
{
	USBVIDEO_START_NONE,
	USBVIDEO_START_RECV_MED_REQ,
	USBVIDEO_START_RECV_COMMIT,
	USBVIDEO_START_DONE
}USBVIDEO_START_STATE;

typedef enum
{
	USBVIDEO_DMA_VIDEO,
	USBVIDEO_DMA_STILL,
	USBVIDEO_DMA_INCALL_JPEG
}USBVIDEO_DMA_TYPE;

typedef enum
{
	USBVIDEO_DMA_DONE_COMPLETE,
	USBVIDEO_DMA_DONE_STOP  /* DMA stop because of timeout, clear halt feature ,or commit but does not change size */
}USBVIDEO_DMA_DONE_TYPE;

typedef struct
{
	kal_uint8			subtype;
	kal_uint8			length;
}USBVideo_Attr_Sub_Map;

typedef struct
{
	USBVIDEO_ATTRIBUTE_TYPE	attr_type;
	kal_uint32 					shift;
	kal_uint8						length;
	const USBVideo_Attr_Sub_Map		*subtype_table;
}USBVideo_Attr_Map;

typedef struct
{
	kal_uint32		video_size[USBVIDEO_VIDEO_BUFFER_NUMBER];  /* complete video size returned by camera */
	kal_uint8			*video_buffer_addr[USBVIDEO_VIDEO_BUFFER_NUMBER];  /* buffer start address */
	kal_uint32		video_buffer_size;  /* each buffer size */
	kal_uint8			video_buffer_read_index;  /* read pointer */
	kal_uint8			video_buffer_write_index;  /* write pointer */
	kal_bool			video_buffer_full;  /* full flag */
	kal_bool			send_video_msg;  /* indicate whether complete function should send complete msg to USB task */
	kal_uint32		sent_video_size;  /* already sent size for the current transmitting buffer */
	kal_uint8			video_frame_id;  /* even/odd id filled in payload header */

	kal_uint32		still_size;
	kal_uint8			still_count;

	kal_uint8			*incall_jpeg_addr;
	kal_uint32 		incall_jpeg_size;
	kal_uint8			*incall_jpeg_buff;
		
	USBVIDEO_DMA_TYPE	dma_type;
	USBVIDEO_DMA_DONE_TYPE	dma_done_type;
	kal_bool				b_processing_dma;  /* be set at DMA callback*/

	kal_uint8			timer_handle;
	kal_bool			b_stop_timer;   /* TRUE when clear halt cmd */

	const USBVideo_Video_Size_Info	*p_video_size_info;     /*  be set at USBVideo_VS_If_Create() */
	const USBVideo_Still_Size_Info	*p_still_size_info;
	kal_uint8	video_size_num;
	kal_uint8	still_size_num;

	kal_uint32 default_jpeg_max_size[USBVIDEO_VIDEO_SIZE_MAX];          /* be set by MMI */
	kal_bool b_set_default_jpeg_max_size[USBVIDEO_VIDEO_SIZE_MAX];
}USBVideo_Control_Struct;


typedef struct
{
	Usb_EpBIn_Status	*intrpipe;		/* interrupt EP, VC Interface */
	Usb_EpBIn_Status	*txpipe;			/* Bulk IN EP, VS Interface */

	Usb_Ep_Info		*vc_ep_intr_info;
	Usb_Ep_Info		*vs_ep_in_info;
	Usb_Interface_Info	*vc_if_info;
	Usb_Interface_Info	*vs_if_info;
	Usb_IAD_Dscr		*iad_desc;

	kal_uint8			vs_interface_id;

	kal_uint32		vc_ct_support;
	kal_uint32		vc_ct_set;
	kal_uint32		vc_pu_support;
	kal_uint32		vc_pu_set;
	kal_uint8			vc_ct_subtype_cnf[USBVIDEO_ATTRIBUTE_CT_MAX];
	kal_uint8			vc_pu_subtype_cnf[USBVIDEO_ATTRIBUTE_PU_MAX-0x80];

	kal_bool			vs_intr_done;  /*decide if issue interrupt  */

	USBVIDEO_STATE state;

	USBVideo_Probe_Commit_Struct	vs_probe_control;
	USBVideo_Probe_Commit_Struct  vs_recv_probe_control;
	kal_uint8	commit_video_index;
	kal_uint8 video_compression_index;
	USBVIDEO_PROBE_STATE 		probe_state;

	USBVideo_Still_Probe_Commit_Struct vs_still_probe_control;
	USBVideo_Still_Probe_Commit_Struct vs_recv_still_probe_control;
	kal_uint8	commit_still_index;
	kal_uint8 commit_still_compression_index;
	USBVIDEO_PROBE_STATE 		still_probe_state;

	USBVideo_VS_Status_Pkt_Struct	vs_status_pkt;
	USBVideo_VC_Status_Pkt_Struct	vc_status_pkt;
	
	USBVIDEO_START_STATE	video_start_state;

	USBVideo_Control_Struct	video_control;

	USBVideo_Attr_Value 		set_attr_value;  /* be used at set attr value*/

	/* default jpeg provided by MMI */
	usbvideo_default_JPEG_Info  *default_jpeg_info;   /* incall JPEG, get from media task when pause request  */
	kal_uint8				default_jpeg_num;

	/* customizable variables*/
   	const USB_VIDEO_PARAM		*custom_param;
	const USBVideo_Camera_Param 	*camera_param;
	//const USBVideo_MMI_Param		*mmi_param;


#ifdef WEBCAM_TEST_DMA_DELAY
	kal_uint8			test_timer_handle;
	kal_bool			test_enable;
#endif	
} USBVideo_Struct;

typedef struct 
{
	LOCAL_PARA_HDR
	kal_uint8 	index;
}usbvideo_still_dma_struct; 


/***********************************************
	function and global variable
************************************************/
extern USBVideo_Struct g_USBVideo;

extern void USBVideo_Send_Msg(USBVIDEO_MSG_TYPE msg_type, kal_uint32 param1, kal_uint32 param2);

extern void USBVideo_VC_If_Create(void *ifname);
extern void USBVideo_VC_If_Reset(void);
extern void USBVideo_VS_If_Create(void *ifname);
extern void USBVideo_VS_If_Reset(void);

extern void USB_Init_Video_Status(void);
extern void USB_Release_Video_Status(void);

extern kal_bool USBVideo_Send_Intr(void *addr,kal_uint32 len);

extern void USBVideo_Send_Incall_JPEG(void);
extern void USBVideo_Send_Video(void);


/*********************************
		Debug utility
************************************/

#define USBVIDEO_DBG_DATA_SIZE 1024

typedef enum 
{
      UV_DBG_INCALL_DMA_CALLBACK,
      UV_DBG_TX_DMA_CALLBACK,
      UV_DBG_CLR_FEATURE_CALLBACK,
      UV_DBG_START_VIDEO_REQ_HDLR,
      UV_DBG_VIDEO_DMA_DONE_HDLR,
      UV_DBG_STILL_DMA_DONE_HDLR,
      UV_DBG_PRE_PAUSE_TIMEOUT_HDLR,
      UV_DBG_PAUSE_REQ_HDLR,
      UV_DBG_INCALL_DMA_DONE_HDLR,
      UV_DBG_RESUME_REQ_HDLR,
      UV_DBG_IS_BUFFER_EMPTY,
      UV_DBG_COMPLETE_VIDEO_BUFFER,
      UV_DBG_SEND_COMPLETE_VIDEO_MSG,
      UV_DBG_COMPLETE_VIDEO_HDLR,
      UV_DBG_SEND_ATTR_CNF_MSG,
      UV_DBG_MSG_TYPE,
      UV_DBG_USB_TASK_MSG_TYPE,
      UV_DBG_SEND_COMPLETE_VIDEO_MSG_INTERNAL,
      UV_DBG_SEND_SET_ATTR_REQ_MSG,
      UV_DBG_CUSTOM_TASK_MSG_TYPE,
      UV_DBG_MAX
} USBVIDEO_DBG_INFO;

typedef struct
{
	USBVIDEO_DBG_INFO	tag;
	kal_uint32	parameter;
}USBVideo_Dbg_Data;

typedef struct
{
	USBVideo_Dbg_Data	dbg_data[USBVIDEO_DBG_DATA_SIZE];
	kal_uint16 	dbg_data_idx;
}USBVideo_Dbg_Struct;

extern void USBVideo_Util_Init(void);
extern void USBVideo_Util_Release(void);
extern void USBVideo_Dbg_Trace(USBVIDEO_DBG_INFO tag, kal_uint32 parameter);

#endif /* USBVIDEO_DRV_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -