本章说明:
本章根据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通信必须要加上拉电阻,否则会出现设备采集视频延迟现象。
原文:https://www.cnblogs.com/liuzdvl/p/14809908.html