第三章 UVC源碼開發
本章說明:
本章根據Cypress提供的開發手冊說明,對UVC源碼固件做一定的修改,實現如下功能:
1、使能視頻控制功能;
2、使能debug interface。
一、 使能視頻控制功能
根據PC端識別USB設備的方式——枚舉UVC設備的描述符(descriptor),我們可以修改相應的描述符,實現開發所需的功能及其屬性。以下主要講解處理單元(process unit)請求事件控制修改。(ENDPOINT0 控制傳輸)
1、 使能PU功能。如圖3-1所示,在EZ USB Suite工具中打開UVC_AN757799源碼中的cyfuvcdscr.c文件,找到Processing Unit Descriptor,其中bmControl(3個byte)的每1bit分別對應D0-D23等不同功能,當對應位置1時,相應的功能就會使能。例如:bmControl = 0x00 00 01 ,D0:Brightness功能就會開啟。為了驗證brightness功能是否使能,可以通過抓取UVC設備描述符查看,如圖3-2所示,Brightness所對應的yes即可說明。
圖3-1 PU描述符展示圖
圖3-2 PU描述符展示圖
2、 獲取功能屬性及修改。打開UVC_AN757799源碼中的uvc.c文件,定位到UVCHandleProcessingUnitRqts()函數,按圖3-3所示添加代碼,以Brightness為例可以分別設置GET_LEN(有效范圍,最大15bit)、GET_CUR(當前值)、GET_MIN(最小值)、GET_MAX(最大值)、GET_RES(按固定值變化)、GET_INFO(GET與SET請求權限)、GET_DEF(默認值)、SET_CUR(修改當前值)。
圖3-3 Brightness屬性的GET與SET請求代碼示例
注釋:關於XU,CT等單元或端口的功能控制使能與修改均可參照Brightness的流程,功能屬性配置一般在驅動里面設定。可供開發人員修改一些功能做少量的數據傳輸。
二、 使能DebugInterface功能
使能Debug Interface功能,目的在於上位機可以無限的下發多位數據(32以上),利用I2c傳輸至UVC設備,滿足大數據傳輸的開發需求。(ENDPOINT IN與ENDPOINT OUT BULK傳輸)
1、 打開UVC_AN757799源碼中的uvc.c文件,將#define USB_DEBUG_INTERFACE添加到代碼中(源代碼已注釋掉,也可以講注釋取消)。
2、 打開uvc.c文件,定位UVCAppEp0Thread_Entry()控制線程函數,並按圖3-4所示進行修改。
圖3-4 代碼修改示意圖
3、更新CyUSB3.sys驅動程序,添加“調試”接口,實現center control上位機(顯示端口)數據下發。
操作步驟如下:首先進入PC端設備管理器,右擊FX3(或同等選項),然后選中“update driver software”選項,“瀏覽我的計算機以查找驅動程序軟件”,“讓我從計算機上的可用驅動程序列表中選取”,“從磁盤安裝”,“瀏覽,選取Cypress安裝目錄下的cyusb3.inf文件——路徑:cpress\driver\bin\win10\x64” ,“選中一個操作系統版本,此處選擇FX3 USB stream Example Devices”,“next,出現報警對話框選擇Yes”,如圖3-5,3-6所示。
圖3-5 Cypress.sys驅動更新流程圖
圖3-6 調試接口顯示界面
PS:A.在UVC協議中利用I2C通信必須要加上拉電阻,否則會出現設備采集視頻延遲現象。