73 lines
2.0 KiB
C
73 lines
2.0 KiB
C
#ifndef RTT_UVC_HOST_H
|
|
#define RTT_UVC_HOST_H
|
|
|
|
#include "basic_include.h"
|
|
#include "hal/usb_device.h"
|
|
|
|
#include "usbh_video.h"
|
|
#include "dev/usb/uvc_host.h"
|
|
|
|
#define UVC_DEFAULT_FRAME_NUM 2
|
|
|
|
#define UVC_DEFAULT_BLANK_NUM 8
|
|
#define UVC_DEFAULT_BLANK_LEN 16 * 1024
|
|
|
|
#define MAX_DEVICES 4 // 最大支持设备数
|
|
|
|
enum uvc_device_frame_state {
|
|
UVC_DEVICE_FRAME_STATE_IDLE = 0,
|
|
UVC_DEVICE_FRAME_STATE_BUSY,
|
|
UVC_DEVICE_FRAME_STATE_AVAILABLE,
|
|
UVC_DEVICE_FRAME_STATE_USING,
|
|
};
|
|
|
|
enum uvc_device_frame_end {
|
|
UVC_DEIVCE_FRAME_NOT_END = 0,
|
|
UVC_DEIVCE_FRAME_END,
|
|
UVC_DEVICE_FRAME_ERROR,
|
|
};
|
|
|
|
enum uvc_device_register_state {
|
|
UVC_DEVICE_REGISTER_IDLE = 0,
|
|
UVC_DEVICE_REGISTER_AVAILABLE,
|
|
UVC_DEVICE_REGISTER_BUSY,
|
|
};
|
|
|
|
enum uvc_device_blank_state {
|
|
UVC_DEVICE_BLANK_STATE_IDLE = 0,
|
|
UVC_DEVICE_BLANK_STATE_BUSY,
|
|
UVC_DEVICE_BLANK_STATE_AVAILABLE,
|
|
};
|
|
|
|
// UVC设备实例结构体
|
|
typedef struct {
|
|
uint8_t dev_num; // 关联的设备号
|
|
uint8_t is_register;
|
|
uint8_t blank_num;
|
|
uint32_t blank_len;
|
|
struct list_head free_uvc_tab; //空闲节点链表
|
|
uint32_t frame_counter;
|
|
uint32_t filter_count;
|
|
uint8_t last_fid;
|
|
uint32_t expected_fid;
|
|
uint8_t initial_fid_detected;
|
|
UVC_BLANK *blank_buffer;
|
|
UVC_MANAGE uvc_msg_frame[UVC_DEFAULT_FRAME_NUM];
|
|
UVC_MANAGE *current_frame;
|
|
UVC_BLANK *current_blank;
|
|
uint32_t dwPresentationTime;
|
|
struct usb_device *p_dev;
|
|
} UVC_Device;
|
|
|
|
bool uvc_device_pool_init();
|
|
void uvc_device_pool_deinit();
|
|
void* register_uvc_device(uint8_t dev_num, uint8_t blank_num, uint32_t blank_len, void* p_dev);
|
|
bool unregister_uvc_device(void* device);
|
|
|
|
struct list_head *uvc_device_user_get_frame(void* device);
|
|
void uvc_device_user_free_blank_node(void* device, struct list_head *del);
|
|
void uvc_device_user_del_frame(void* device, void *get_f);
|
|
|
|
void process_uvc_payload(uint8_t dev_num, uint8_t ep_type, uint8_t video_format, uint8_t *payload, uint32_t payload_len, bool drop);
|
|
|
|
#endif |