nt9856x/code/lib/include/UVAC.h
2023-03-28 15:07:53 +08:00

738 lines
28 KiB
C
Executable File

/**
Copyright Novatek Microelectronics Corp. 2004. All rights reserved.
@file UVAC.h
@ingroup mISYSUVAC
@brief USB PCC device class API header.
USB PCC device class API header.
*/
#ifndef _UVAC_H
#define _UVAC_H
/*-----------------------------------
Includes
-----------------------------------*/
#include "kwrap/type.h"
#define UVAC_VID_RESO_MAX_CNT 16
#define UVAC_VID_RESO_FPS_MAX_CNT 3
#define UVAC_AUD_SAMPLE_RATE_MAX_CNT 3
#define SET_CUR 0x01
#define GET_CUR 0x81
#define GET_MIN 0x82
#define GET_MAX 0x83
#define GET_RES 0x84
#define GET_LEN 0x85
#define GET_INFO 0x86
#define GET_DEF 0x87
#define ERROR_CODE_WRONG_STATE 0x2
#define ERROR_CODE_OUT_OF_RANGE 0x4
#define ERROR_CODE_INVALID_CONTROL 0x6
#define ERROR_CODE_INVALID_REQUEST 0x7
/**
@addtogroup mISYSUVAC
*/
//@{
/**
Video format for UVC, UV packed only.
*/
typedef enum _UVAC_VIDEO_FORMAT {
UVAC_VIDEO_FORMAT_H264, ///< H264 format with YCbCr 420, UV packed.
UVAC_VIDEO_FORMAT_MJPG, ///< MJPEG format with YCbCr 422, UV packed.
UVAC_VIDEO_FORMAT_YUV, ///< YUV format.
ENUM_DUMMY4WORD(UVAC_VIDEO_FORMAT)
} UVAC_VIDEO_FORMAT;
typedef enum _UVAC_VIDEO_FRM_TYPE {
UVAC_VIDEO_FRM_NORMAL,
UVAC_VIDEO_FRM_FIRST,
UVAC_VIDEO_FRM_PARTIAL,
UVAC_VIDEO_FRM_FINAL,
ENUM_DUMMY4WORD(UVAC_VIDEO_FRM_TYPE)
} UVAC_VIDEO_FRM_TYPE;
/**
Video Resolution.
@note For video resolution of UVAC_VID_RESO_ARY
*/
typedef struct _UVAC_VID_RESO_ {
UINT32 width; ///< Width.
UINT32 height; ///< Height.
UINT32 fpsCnt; ///< The number of fps .
UINT32 fps[UVAC_VID_RESO_FPS_MAX_CNT]; ///< FPS array.
} UVAC_VID_RESO, *PUVAC_VID_RESO;
/**
Video Resolution array.
This structure is used in UVAC_ConfigVidReso(..) to set supported video resolution, and
it must be set before UVAC_Open() is called.
*/
typedef struct _UVAC_VID_RESO_ARY_ {
UINT32 aryCnt; ///< The number of video resolution array.
UVAC_VID_RESO *pVidResAry; ///< Video resolution.
UINT8 bDefaultFrameIndex; ///< bDefaultFrameIndex, referring to the SPEC of Video Format Descriptor.
} UVAC_VID_RESO_ARY, *PUVAC_VID_RESO_ARY;
/**
Audio sample array.
This structure is used for the configuration of UVAC_CONFIG_AUD_SAMPLERATE to set supported audio resolution, and
it must be set before UVAC_Open() is called.
*/
typedef struct _UVAC_AUD_SAMPLERATE_ARY_ {
UINT32 aryCnt; ///< The number of audio resolution array.
UINT32 *pAudSampleRateAry; ///< Audio resolution.
} UVAC_AUD_SAMPLERATE_ARY, *PUVAC_AUD_SAMPLERATE_ARY;
/**
Structure used for UVAC Device Vendor Request Callback API.
This structure is used in the callback prototype UVAC_VENDOR_REQ_CB.
*/
typedef struct _UVAC_VENDOR_PARAM {
BOOL bHostToDevice; ///< Data direction.
///< - @b TRUE: USB Host sent data to USB Device.
///< - @b FALSE: USB Host will get data from USB Device.
UINT8 uiReguest; ///< The bRequest field in USB Device Requests.
UINT16 uiValue; ///< The wValue field in USB Device Requests.
UINT16 uiIndex; ///< The wIndex field in USB Device Requests.
UINT32 uiDataAddr; ///< Data address.
UINT32 uiDataSize; ///< Data size, in byte, maximun is 64. If there is no data to transfer, this should be zero.
} UVAC_VENDOR_PARAM, *PUVAC_VENDOR_PARAM;
/**
COM ID for CDC.
It supports dual COM port.
*/
typedef enum _CDC_COM_ID {
CDC_COM_1ST = 0, ///< The first COM ID.
CDC_COM_2ND, ///< The second COM ID.
CDC_COM_MAX_NUM,
ENUM_DUMMY4WORD(CDC_COM_ID)
} CDC_COM_ID;
/**
Callback function prototype for PSTN subclass request.
*/
typedef BOOL (*UVAC_CDC_PSTN_REQUEST_CB)(CDC_COM_ID ComID, UINT8 PstnRequestCode, UINT8 *pData, UINT32 *pDataLen);
/**
Callback function prototype for UVAC Device Vendor Request.
@return
- @UINT32 0: Ok.
- @UINT32 1,2,...: TBD.
*/
typedef UINT32(*UVAC_VENDOR_REQ_CB)(PUVAC_VENDOR_PARAM pParam);
/**
Callback function prototype for power-downed suspend.
*/
typedef void(*UVAC_POWERDOWN_SUSPEND_CB)(void);
/**
Callback function prototype for WINUSB.
*/
typedef UINT8(*UVAC_WINUSBCLSREQCB)(UINT32 ControlCode, UINT8 CS, UINT8 *pData, UINT32 *pDataLen);
/**
Callback function prototype for Unit
@param[in] CS Control Selector.
@param[in] request The field of bRequest in UVC SPEC.
@param[in] pData The address of data received from USB Host or data will be sent to USB Host.
@param[in,out] pDataLen
[in] The size of data from USB Host
[out] The size of data needed for USB Host. If there is no data for USB Host, set zero before returning.
The bRequest field indicates which attribute the request is manipulating.
@return
- @TRUE: command OK.
- @FALSE: Driver will send STALL to USB Host
*/
typedef BOOL (*UVAC_UNIT_CB)(UINT32 CS, UINT8 request, UINT8 *pData, UINT32 *pDataLen);
/**
Callback function prototype for HW memory copy.
*/
typedef VOID(*UVAC_HWCOPYCB)(UINT32 uiDst, UINT32 uiSrc, UINT32 uiSize);
/**
String Descriptor
*/
typedef struct _UVAC_STRING_DESC {
UINT8 bLength; ///< size of String Descriptor
UINT8 bDescriptorType; ///< String Descriptor type
UINT8 bString[254]; ///< UNICODE stirng
} UVAC_STRING_DESC;
/**
UVC Extension Unit Descriptor
*/
typedef struct _UVAC_EU_DESC {
UINT8 bLength; ///< Size of String Descriptor.
UINT8 bDescriptorType; ///< CS_INTERFACE descriptor type.
UINT8 bDescriptorSubtype; ///< VC_EXTENSION_UNIT descriptor subtype.
UINT8 bUnitID; ///< Unit ID, set 0 for default value.
UINT8 guidExtensionCode[16]; ///< GUID.
UINT8 bNumControls; ///< Number of controls in this extension unit.
UINT8 bNrInPins; ///< Number of Input Pins of this Unit.
UINT8 *baSourceID; ///< Pointer to a static Source ID array, set 0 for default value.
UINT8 bControlSize; ///< Size of the bmControls field.
UINT8 *bmControls; ///< Pointer to static bmControl array.
UINT8 iExtension; ///< Index of a string descriptor that describes this extension unit.
UVAC_UNIT_CB eu_cb; ///< Extension unit callback
} UVAC_EU_DESC;
typedef enum _UVAC_DFU_EVENT {
UVAC_DFU_REQUEST, ///< Callback when the host issue a DFU class requess.
UVAC_DFU_USB_RESET, ///< Callback when the host issue a USB reset.
ENUM_DUMMY4WORD(UVAC_DFU_EVENT)
} UVAC_DFU_EVENT;
/**
Callback function prototype for DFU.
@param[in] event Callback type, referring to UVAC_DFU_EVENT.
@param[in] request The field of bRequest in DFU Class-Specific Requests, only valid while event is UVAC_DFU_REQUEST.
@param[in] value The field of wValue in DFU Class-Specific Requests, only valid while event is UVAC_DFU_REQUEST.
@param[in] p_data The address of data received from USB Host or data will be sent to USB Host, only valid while event is UVAC_DFU_REQUEST.
@param[in,out] p_dataLen Only valid while event is UVAC_DFU_REQUEST.
[in] The size of data from USB Host
[out] The size of data needed for USB Host. If there is no data for USB Host, set zero before returning.
@return
- @TRUE: command OK.
- @FALSE: Driver will send STALL to USB Host
*/
typedef BOOL (*UVAC_DFU_CB)(UVAC_DFU_EVENT event, UINT8 request, UINT16 value, UINT8 *p_data, UINT32 *p_dataLen);
typedef struct _UVAC_DFU_INFO {
BOOL en; ///< Enable DFU function or not
UVAC_DFU_CB cb; ///< DFU callback function, referring to UVAC_DFU_CB.
UVAC_STRING_DESC *p_vendor_string; ///< DFU vendor string descriptor ptr
UINT16 detach_time_out; ///< wDetachTimeOut, in milliseconds, that the device will wait after receipt of the DFU_DETACH request.
UINT16 transfer_size; ///< wTransferSize, maximum number of bytes that the device can accept per control-write transaction.
MEM_RANGE download_buf; ///< buffer for DFU_DNLOAD.
UINT8 attributes; ///< bmAttributes, refer to "DFU Functional Descriptor" in DFU SPEC.
} UVAC_DFU_INFO;
/**
Callback function prototype for HID.
@param[in] request The field of bRequest in HID Class-Specific Requests.
@param[in] value The field of wValue in HID Class-Specific Requests.
@param[in] p_data The address of data received from USB Host or data will be sent to USB Host.
@param[in,out] p_dataLen
[in] The size of data from USB Host
[out] The size of data needed for USB Host.
@return
- @TRUE: command OK.
- @FALSE: Driver will send STALL to USB Host
*/
typedef BOOL (*UVAC_HID_CB)(UINT8 request, UINT16 value, UINT8 *p_data, UINT32 *p_dataLen);
/**
UVC Extension Unit Descriptor
*/
typedef _PACKED_BEGIN struct _UVAC_HID_DESC {
UINT8 bLength; ///< The total size of the HID descriptor.
UINT8 bHidDescType; ///< Constant name specifying type of HID descriptor.
UINT16 bcdHID; ///< The HID Class Specification release.
UINT8 bCountryCode; ///< Country code of the localized hardware.
UINT8 bNumDescriptors; ///< The number of class descriptors.
UINT8 bDescriptorType; ///< Constant name identifying type of class descriptor.
UINT16 wDescriptorLength; ///< The total size of the Report descriptor.
UINT8 *p_desc; ///< Reserved for optional descriptors.
} _PACKED_END UVAC_HID_DESC;
/**
HID information
*/
typedef struct _UVAC_HID_INFO {
BOOL en; ///< Enable HID function or not
UVAC_HID_CB cb; ///< HID callback function for class request, referring to UVAC_HID_CB.
UVAC_HID_DESC hid_desc; ///< HID descriptor.
UINT8 *p_report_desc; ///< Pointer to a report descriptor which should be a static array.
BOOL intr_out; ///< Enable Interrupt out endpoint.
MEM_RANGE data_stage_buf; ///< Buffer for receiving data from control transfer, only used when the data length greater than 64.
UVAC_STRING_DESC *p_vendor_string; ///< Vendor string descriptor ptr
UINT8 intr_interval; ///< The bInterval in Endpoint Descritptor
} UVAC_HID_INFO;
/**
MSDC information
*/
typedef struct _UVAC_MSDC_INFO {
BOOL en; ///< Enable MSDC function or not
} UVAC_MSDC_INFO;
/**
MSOS20 information
*/
typedef struct _UVAC_MSOS20_INFO {
BOOL en; ///< Enable Microsoft OS 2.0 descriptor or not
UINT8 *p_msos20_desc; ///< Pointer to a descriptor which should be a static array.
UINT32 msos20_desc_size; ///< Size of Microsoft OS 2.0 descriptor.
} UVAC_MSOS20_INFO;
/**
Device Descriptor
*/
typedef struct _UVAC_VEND_DEV_DESC {
UINT16 VID; ///< Customized USB Vendor ID
UINT16 PID; ///< Customized USB Product ID
UVAC_STRING_DESC *pManuStringDesc; ///< USB Manufacturer String Descriptor ptr
UVAC_STRING_DESC *pProdStringDesc; ///< USB Product String Descriptor ptr
UVAC_STRING_DESC *pSerialStringDesc; ///< USB Serial Number String Descriptor ptr
UINT16 bcdDevice; ///< Device release number in binary-coded decimal
UVAC_VENDOR_REQ_CB fpVendReqCB; ///< Obsolete.
UVAC_VENDOR_REQ_CB fpIQVendReqCB; ///< Obsolete.
} UVAC_VEND_DEV_DESC, *PUVAC_VEND_DEV_DESC;
/**
UAC volume information
*/
typedef struct _UAC_VOL_INFO {
INT32 vol_def; ///< Default volume.
INT32 vol_max; ///< Max volume.
INT32 vol_min; ///< Min volume.
INT32 vol_res; ///< Volume resolution.
} UAC_VOL_INFO;
/**
UVAC channel.
@note For UVAC_INFO
*/
typedef enum {
UVAC_CHANNEL_1V1A = 1, ///< One video and one audio channel.
UVAC_CHANNEL_2V2A, ///< Two video and two audio channel.
UVAC_CHANNEL_2V1A, ///< Two video and one audio channel.
UVAC_CHANNEL_MAX,
} UVAC_CHANNEL;
/**
Audio format
@note For UVAC_CONFIG_AUD_FMT_TYPE.
*/
typedef enum _UVAC_AUD_FMT_TYPE {
UVAC_AUD_FMT_TYPE_PCM, ///< Audio type is PCM.
UVAC_AUD_FMT_TYPE_AAC, ///< Audio type is AAC.
UVAC_AUD_FMT_TYPE_MAX,
} UVAC_AUD_FMT_TYPE;
/**
Stream path.
*/
typedef enum _UVAC_STRM_PATH {
UVAC_STRM_VID, ///< 1st video bitstream
UVAC_STRM_AUD, ///< 1st audio bitstream
UVAC_STRM_VID2, ///< 2nd video bitstream
UVAC_STRM_AUD2, ///< 2nd audio bitstream
UVAC_STRM_AUDRX,///< audio bitstream
ENUM_DUMMY4WORD(UVAC_STRM_PATH)
} UVAC_STRM_PATH, *PUVAC_STRM_PATH;
/**
Stream format.
@note For UVAC_SetEachStrmInfo.
*/
typedef struct _UVAC_STRM_FRM {
UINT32 addr; ///< Address of stream.
UINT32 size; ///< Size of stream.
UVAC_STRM_PATH path; ///< Stream path.
UINT8 *pStrmHdr; ///< VS header address.
UINT32 strmHdrSize;///< VS header size.
UINT32 va; ///< Virtual address of stream, for YUV frame only.
UINT64 timestamp; ///< Timestamp.
UVAC_VIDEO_FRM_TYPE frame_type; ///< Video frame type.
} UVAC_STRM_FRM, *PUVAC_STRM_FRM;
/**
Stream information.
Request from USB Host.
*/
typedef struct _UVAC_STRM_INFO {
UINT8 *pStrmHdr; ///< H264 header address.
UINT32 strmHdrSize; ///< H264 header size.
UVAC_STRM_PATH strmPath; ///< Stream path.
UINT32 strmWidth; ///< Stream width.
UINT32 strmHeight; ///< Stream height.
UINT32 strmFps; ///< Frame rate.
UINT32 strmTBR; ///< Target bitrate (Byte/Sec).
UVAC_VIDEO_FORMAT strmCodec; ///< Stream format.
UINT32 strmResoIdx; ///< Index of video resolution.
BOOL isStrmOn; ///< Indicate if the stream is active.
BOOL isAudStrmOn; ///< Indicate if the audio stream is active.
} UVAC_STRM_INFO, *PUVAC_STRM_INFO;
/**
Supported video format.
@note For UVAC_CONFIG_VIDEO_FORMAT.
*/
typedef enum _UVAC_VIDEO_FORMAT_TYPE {
UVAC_VIDEO_FORMAT_H264_MJPEG, ///< Support H264 and MJPEG.
UVAC_VIDEO_FORMAT_H264_ONLY, ///< Support H264 only.
UVAC_VIDEO_FORMAT_MJPEG_ONLY, ///< Support MJPEG only.
ENUM_DUMMY4WORD(UVAC_VIDEO_FORMAT_TYPE)
} UVAC_VIDEO_FORMAT_TYPE;
/**
Video Stream buffer information.
Set video stream buffer for internal converting VA.
*/
typedef struct _UVAC_VID_BUF_INFO {
UINT32 vid_buf_pa; ///< Address of video stream buffer
UINT32 vid_buf_size; ///< Size of video stream buffer.
UINT32 vid2_buf_pa; ///< Address of senond video stream buffer
UINT32 vid2_buf_size; ///< Size of senond video stream buffer
} UVAC_VID_BUF_INFO, *PUVAC_VID_BUF_INFO;
/**
UVAC configuration identifier.
This definition is used in UVAC_SetConfig() to assgin new configuration to specified ID function.
*/
typedef enum _UVAC_CONFIG_ID {
UVAC_CONFIG_VEND_DEV_DESC, ///< Pointer to the vendor device descriptor, refering to #_UVAC_VEND_DEV_DESC.
UVAC_CONFIG_AUD_SAMPLERATE, ///< Pointer to audio sample array, refering to #_UVAC_AUD_SAMPLERATE_ARY_.
UVAC_CONFIG_AUD_FMT_TYPE, ///< Audio format, refering to #_UVAC_AUD_FMT_TYPE
UVAC_CONFIG_H264_TARGET_SIZE, ///< H.264 stream target size(Byte/Sec). Default value is 0x100000.
UVAC_CONFIG_MJPG_TARGET_SIZE, ///< Motion JPEG stream target size(Byte/Sec). Default value is 0x300000.
UVAC_CONFIG_VENDOR_CALLBACK, ///< The callback function for USB Vendor Request
UVAC_CONFIG_VENDOR_IQ_CALLBACK, ///< The callback function for USB Vendor IQ Request
UVAC_CONFIG_MFK_REC2LIVEVIEW, ///< Suspend sending stream to USB host.
UVAC_CONFIG_MFK_LIVEVIEW2REC, ///< Resume sending stream to USB host.
UVAC_CONFIG_UVAC_CAP_M3, ///< Enable UVC capture method 3.
UVAC_CONFIG_EU_VENDCMDCB_START, ///< The callback function for USB Vendor Command of Extention Unit, idx0 no use
UVAC_CONFIG_EU_VENDCMDCB_ID01, ///< Extension unit callback with CS=1.
UVAC_CONFIG_EU_VENDCMDCB_ID02, ///< Extension unit callback with CS=2.
UVAC_CONFIG_EU_VENDCMDCB_ID03, ///< Extension unit callback with CS=3.
UVAC_CONFIG_EU_VENDCMDCB_ID04, ///< Extension unit callback with CS=4.
UVAC_CONFIG_EU_VENDCMDCB_ID05, ///< Extension unit callback with CS=5.
UVAC_CONFIG_EU_VENDCMDCB_ID06, ///< Extension unit callback with CS=6.
UVAC_CONFIG_EU_VENDCMDCB_ID07, ///< Extension unit callback with CS=7.
UVAC_CONFIG_EU_VENDCMDCB_ID08, ///< Extension unit callback with CS=8.
UVAC_CONFIG_EU_VENDCMDCB_END,
UVAC_CONFIG_WINUSB_ENABLE, ///< Enable WINUSB.
UVAC_CONFIG_WINUSB_CB, ///< The callback function for WINUSB
UVAC_CONFIG_VIDEO_FORMAT_TYPE, ///< Supported video format by UVC device.
UVAC_CONFIG_CDC_ENABLE, ///< Enable CDC ADM. It'll emulate a COM port at USB host.
UVAC_CONFIG_CDC_PSTN_REQUEST_CB, ///< The callback function for CDC PSTN subclass specific request, REFERING TO #UVAC_CDC_PSTN_REQUEST_CB.
UVAC_CONFIG_VID_BUF_INFO, ///< Set video stream buffer information, referring to UVAC_VID_BUF_INFO
UVAC_CONFIG_XU_CTRL, ///< The callback function for UVC Extension Unit.
UVAC_CONFIG_MAX_FRAME_SIZE, ///< Max video frame size, the default is 800KB.
UVAC_CONFIG_AUD_CHANNEL_NUM, ///< Audio channel number.
UVAC_CONFIG_HW_COPY_CB, ///< The callback function for HW memory copy, referring to UVAC_HWCOPYCB.
UVAC_CONFIG_CT_CB, ///< UVC Camera Terminal capability.
UVAC_CONFIG_PU_CB, ///< UVC Processing Unit capability.
UVAC_CONFIG_YUV_FRM_INFO, ///< Set YUV frame type info, referring to UVAC_VID_RESO_ARY.
UVAC_CONFIG_DFU_INFO, ///< Set DFU function, referring to UVAC_DFU_INFO.
UVAC_CONFIG_MAX_UVC_DEV_NUM, ///< Max UVC device num.
UVAC_CONFIG_DISABLE_UAC, ///< Set TRUE to disable UAC.
UVAC_CONFIG_EU_DESC, ///< Customized UVC EU descriptor, referring to UVAC_EU_DESC.
UVAC_CONFIG_UVC_STRING, ///< Set string for UVC, referring to UVAC_STRING_DESC.
UVAC_CONFIG_UAC_STRING, ///< Set string for UAC, referring to UVAC_STRING_DESC.
UVAC_CONFIG_HID_INFO, ///< Set HID function, referring to UVAC_HID_INFO.
UVAC_CONFIG_UAC_RX_ENABLE, ///< UAC RX enable.
UVAC_CONFIG_UAC_RX_BLK_SIZE, ///< UAC RX block size.
UVAC_CONFIG_UAC_RX_BUF_SIZE, ///< UAC RX buffer size.
UVAC_CONFIG_AUD_START_CB, ///< UAC start callback.
UVAC_CONFIG_VID_USER_DATA_SIZE, ///< The size of user data prior to video stream which should contain SPS/PPS.
UVAC_CONFIG_MJPG_DEF_FRM_IDX, ///< Set bDefaultFrameIndex for MJPEG, referring to the SPEC of Video Format Descriptor.
UVAC_CONFIG_H264_DEF_FRM_IDX, ///< Set bDefaultFrameIndex for H264, referring to the SPEC of Video Format Descriptor.
UVAC_CONFIG_MSDC_INFO, ///< Set MSDC function, referring to UVAC_MSDC_INFO.
UVAC_CONFIG_EU_DESC_2ND, ///< Customized 2nd UVC EU descriptor, referring to UVAC_EU_DESC.
UVAC_CONFIG_UAC_PACKETSIZE, ///< Set wMaxPacketSize field for UAC endpoint descriptor.
UVAC_CONFIG_UAC_INTERVAL, ///< Set bInterval field for UAC endpoint descriptor.
UVAC_CONFIG_UAC_VOL_INFO, ///< Set UAC volume info, referring to UAC_VOL_INFO.
UVAC_CONFIG_CT_CONTROLS, ///< Set bmControls field for UVC Camera Terminal.
UVAC_CONFIG_PU_CONTROLS, ///< Set bmControls field for UVC Processing Unit.
UVAC_CONFIG_UVC_VER, ///< UVC version, refering to UVAC_UVC_VER.
UVAC_CONFIG_MSOS20_INFO, ///< Set Microsoft OS 2.0 descriptor info, referring to UVAC_MSOS20_INFO.
UVAC_CONFIG_POWERDOWN_SUSPEND_CB, ///< The callback function for USB power-downed suspend, referring to UVAC_POWERDOWN_SUSPEND_CB.
UVAC_CONFIG_UVC2_MJPG_FRM_INFO, ///< Set MJPG frame info for UVC2, referring to UVAC_VID_RESO_ARY.
UVAC_CONFIG_UVC2_H264_FRM_INFO, ///< Set H264 frame info for UVC2, referring to UVAC_VID_RESO_ARY.
UVAC_CONFIG_CDC2_ENABLE, ///< Enable CDC ADM. It'll emulate the second COM port at USB host.
ENUM_DUMMY4WORD(UVAC_CONFIG_ID)
} UVAC_CONFIG_ID;
/**
Video device count.
@note For UVAC_STARTVIDEOCB and UVAC_STOPVIDEOCB.
*/
typedef enum {
UVAC_VID_DEV_CNT_1 = 0,
UVAC_VID_DEV_CNT_2,
UVAC_VID_DEV_CNT_MAX
} UVAC_VID_DEV_CNT;
typedef enum _UVAC_TYPE {
UVAC_TYPE_U3 = 0,
UVAC_TYPE_U2,
ENUM_DUMMY4WORD(UVAC_TYPE)
} UVAC_TYPE;
typedef enum {
UVAC_AUD_DEV_CNT_1 = 0,
UVAC_AUD_DEV_CNT_2,
UVAC_AUD_DEV_CNT_3,
UVAC_AUD_DEV_CNT_MAX
} UVAC_AUD_DEV_CNT;
/**
UVC version.
*/
typedef enum {
UVAC_UVC_VER_100 = 0, // UVC 1.0
UVAC_UVC_VER_110, // UVC 1.1
UVAC_UVC_VER_150, // UVC 1.5
} UVAC_UVC_VER;
/**
Callback function prototype for the fpStartVideoCB of UVAC_INFO.
*/
typedef UINT32(*UVAC_STARTVIDEOCB)(UVAC_VID_DEV_CNT vidDevIdx, UVAC_STRM_INFO *pStrmInfo);
/**
Callback function prototype for the fpStopVideoCB of UVAC_INFO.
*/
typedef void (*UVAC_STOPVIDEOCB)(UVAC_VID_DEV_CNT vidDevIdx);
/**
Callback function prototype for the fpSetVolCB of UVAC_INFO.
*/
typedef UINT32(*UVAC_SETVOLCB)(UINT32 volume); ///< Callback for starting video.
/**
Callback function prototype for the UAC callback.
*/
typedef UINT32(*UVAC_STARTAUDIOCB)(UVAC_AUD_DEV_CNT aud_dev_idx, UVAC_STRM_INFO *strm_info);
/**
Information needed for UVAC module.
This structure is used in UVAC_Open() to specify the UVAC task needed information for normal working
and user customization callback.
*/
typedef struct _UVAC_INFO_ {
UINT32 UvacMemAdr; ///< Buffer address for USB operation
UINT32 UvacMemSize; ///< Buffer size for USB operation
UVAC_CHANNEL channel; ///< The number of UVAC channel, refering to UVAC_CHANNEL.
UVAC_STARTVIDEOCB fpStartVideoCB; ///< Callback function to start video
UVAC_STOPVIDEOCB fpStopVideoCB; ///< Callback function to stop video buffer
UVAC_SETVOLCB fpSetVolCB; ///< Callback function to audio record volume
UINT32 hwPayload[UVAC_VID_DEV_CNT_MAX]; ///< Obsolete
UVAC_STRM_INFO strmInfo; ///< Obsolete
UINT16 uiStrgCardLock; ///< Obsolete
} UVAC_INFO;
/**
Callback functions prototype that UVAC task used.
These definitions are used in the structure UVAC_INFO and would be used during UVAC_Open() to specify the
UVAC_Task needed information.
*/
//@{
typedef UINT8(*UVAC_EUVENDCMDCB)(UINT32 ControlCode, UINT8 CS, UINT8 *pData, UINT32 *pDataLen);
//@}
/**
Unit type.
*/
typedef enum {
UVC_UNIT_TYPE_CT, //camera terminal
UVC_UNIT_TYPE_OT, //output terminal
UVC_UNIT_TYPE_SU, //selector unit
UVC_UNIT_TYPE_PU, //processing unit
UVC_UNIT_TYPE_XU, //extension unit
} UVC_UNIT_TYPE;
/**
Get the ID of Terminal or Unit.
@param[in] unit The type of Terminal or Unit.
@return The ID of Terminal or Unit.
*/
extern UINT8 UVAC_GetUnitID(UVC_UNIT_TYPE unit);
/**
Write data to USB host via UVC interrupt EP.
This function is a blocking API and will return after data is sent to USB host.
@param[in] pBuf Buffer pointer
@param[in,out] pBufSize Input length to write, output actual transfered length. Valid length is 0x1 to 0x7fffff.
@return
- @b E_OK: Start to transfer.
- @b E_SYS: Failed.
*/
extern ER UVAC_WriteIntData(UINT8 *pBuf, UINT32 *pBufSize);
/**
Close UVAC module.
*/
extern void UVAC_Close(void);
/**
Get needed buffer size for UVAC module.
Double the size for UVAC_CHANNEL_2V2A or UVAC_CHANNEL_2V1A.
*/
extern UINT32 UVAC_GetNeedMemSize(void);
/**
Set UVAC configuration
Assign new configuration of the specified ConfigID.
@param[in] ConfigID Configuration identifier
@param[in] Value Configuration context for ConfigID
*/
extern void UVAC_SetConfig(UVAC_CONFIG_ID ConfigID, UINT32 Value);
/**
Set the stream of a frame information to UVAC lib.
*/
extern void UVAC_SetEachStrmInfo(PUVAC_STRM_FRM pStrmFrm);
/**
Set video resolution.
*/
extern ER UVAC_ConfigVidReso(PUVAC_VID_RESO pVidReso, UINT32 cnt);
/**
Open UVAC(USB VIDEO/AUDIO-Device-Class) module.
@param[in] pClassInfo Information needed for opening UVAC Task. The user must prepare all the information needed.
@return
- @b E_OK: The UVAC Task open done and success.
- @b E_SYS: Buffer allocation failed.
- @b E_PAR: Parameter error.
*/
extern UINT32 UVAC_Open(UVAC_INFO *pClassInfo);
/**
Read data from USB host via CDC class.
This API doesn't return until there is any data coming from USB host or CDC_AbortRead() is invoked.
@param[in] ComID COM ID.
@param[in] pBuf Buffer pointer.
@param[in,out] pBufSize Input length to read, output actual transfered length.
@return
- @b E_OK: Success.
- @b E_SYS: Failed
- @b E_RSATR: UVAC_AbortCdcRead() is invoked by another task.
*/
extern INT32 UVAC_ReadCdcData(CDC_COM_ID ComID, void *p_buf, UINT32 buffer_size, INT32 timeout);
/**
Abort the function of UVAC_ReadCdcData().
@param[in] ComID COM ID.
*/
extern void UVAC_AbortCdcRead(CDC_COM_ID ComID);
/**
Write data to USB host via CDC class.
This function is a blocking API and will return after data is sent to USB host.
@param[in] ComID COM ID.
@param[in] pBuf Buffer pointer
@param[in,out] pBufSize Input length to read, output actual transfered length. Valid length is 0x1 to 0x7fffff.
@return
- @b E_OK: Start to transfer.
- @b E_SYS: Failed.
*/
extern INT32 UVAC_WriteCdcData(CDC_COM_ID ComID, void *p_buf, UINT32 buffer_size, INT32 timeout);
/**
Write data to USB host via HID class.
@param[in] p_buf Buffer pointer
@param[in] buffer_size Input length to write. Valid length is 0x1 to 0x7fffff.
@param[in] timeout wait ms, -1 for blocking, 0 for non-blocking
@return
- @b INT32: positive value means acturally written size, negative value means USB engine busy or error code.
*/
extern INT32 UVAC_WriteHidData(void *p_buf, UINT32 buffer_size, INT32 timeout);
/**
Read data from USB host via HID class.
@param[in] p_buf Buffer pointer
@param[in] buffer_size Input length to write. Valid length is 0x1 to 0x7fffff.
@param[in] timeout wait ms, -1 for blocking, 0 for non-blocking
@return
- @b INT32: positive value means acturally read size, negative value means USB engine busy or error code.
*/
extern INT32 UVAC_ReadHidData(void *p_buf, UINT32 buffer_size, INT32 timeout);
/**
Pull stream from UVAC.
@return
- @b E_OK: Success.
- @b E_SYS: Failed.
*/
extern ER UVAC_PullOutStrm(PUVAC_STRM_FRM pStrmFrm, INT32 wait_ms);
/**
Release pulled stream.
@return
- @b E_OK: Success.
- @b E_SYS: Failed.
*/
extern ER UVAC_ReleaseOutStrm(PUVAC_STRM_FRM pStrmFrm);
/**
Wait for the stream frame is ready for releasing.
@return
- @b E_OK: Success.
- @b E_SYS: Failed.
*/
extern ER UVAC_WaitStrmDone(UVAC_STRM_PATH path);
//@}
#endif // _UVAC_H