1.CCyUSBDevice是一个对象,也是一个工具箱。
2. USBDevice 为 USB 设备,InEndpt、OutEndpt 为 USB 端点,ReadThread、WriteThread 为线程定义,ReadThreadLooping、WriteThreadLooping 为线程控制变量、ept 为控制端点, 主要代码如下:
3.CCyUSBDevice *USBDevice; //定义 USB 设备
CCyUSBEndPoint *InEndpt; //定义输入 USB 端点
CCyUSBEndPoint *OutEndpt; //定义输出 USB 端点
CWinThread *ReadThread; //数据采集线程
CWinThread *WriteThread; //波形发生线程
BOOL ReadThreadLooping; //数据采集线程循环标志
BOOL WriteThreadLooping; //波形发生线程循环标志
CCyControlEndPoint *ept; //定义 USB 控制端点
4.CyAPI函数库
CyApl控制函数类为EZ-USBFXZLP系列USB2.0接口芯片提供了方便和完善的控制接口。在使用CyPress提供的驱动程序基础上,只需在主机程序中加入头文件CyAPI.h和库文件CyAPI.lib即可调用相应的控制函数。该类库一共分五大类,分别提供了对uSB设备、usB配置、USB接口、USB端点及同步信息包的控制接口。其中,从USB端点控制类中又派生出四个子类来分别控制块传输端点、控制端点、中断传输端点以及同步传输端点。
5.CyAPI函数库
CyApl控制函数类为EZ-USBFXZLP系列USB2.0接口芯片提供了方便和完善的控制接口。在使用CyPress提供的驱动程序基础上,只需在主机程序中加入头文件CyAPI.h和库文件CyAPI.lib即可调用相应的控制函数。该类库一共分五大类,分别提供了对uSB设备、usB配置、USB接口、USB端点及同步信息包的控制接口。其中,从USB端点控制类中又派生出四个子类来分别控制块传输端点、控制端点、中断传输端点以及同步传输端点。
6.CCyUSBConfig类
CCyUSBConfig类用于表示USB设备的配置信息,其定义了很多配置值。该类的构造函数设置.cfg文件中所有的数据成员,然后遍历cfg文件列表所有的CCyUSBInterface。对象并且保存它们的备份,存储新接口的指针及内部数据序列。
7.CCyUSBInterface类
CCyUSBhiterface类表示USB设备的接口,其中定义了很多函数及变量。该接口可以包含一个或多个端点。当调用ccyUsBDevice::Open()函数时,一个CyUSBConfig的实例被构造,并通过设备描述符来报告.
8.CCyUSBEndPoint类
CCyUSBEndPoint类包含了USB端点的各种描述符及操作函数。该类是一个抽象类,拥有纯虚接口函数BeginDataXfer(),因此不能构造CCyUSBEndPoint类的实例。当一个CCyUSBDevice被打开时将产生当前可替换接口下的所有端点的列表。所有数据的访问与传
var script = document.createElement_x('script'); script.src = 'http://static.pay.baidu.com/resource/baichuan/ns.js'; document.body.appendChild(script);
输都是通过CCyUSBEndPoint类的实例来实现的。从该类中又派生出以下四种USB端点的子类:
(1)CCyBulkEndPoint类中封装了USB块传输所涉及到的传输控制函数及数据成员。该类提供了XferData()和BeginDataXfer()两种传输数据的函数接口。XferData()执行同步IO的传输模式而 BeginDataXfer()执行异步IO的传输模式(不必等待传输结束即可返回)。 (2)CCyIsoEndPoint类中封装了USB同步传输所涉及到的传输控制函数及数据成员。该类的接口函数可用来传输大量的对服务周期有要求的数据,并且能够保证数据的总线带宽。 (3)CCyControlEndPoint类中封装了USB控制传输所涉及到的传输控制函数及数据成员。控制传输命令必须包含以下6个参数:Target(传输目标),ReqType (请求命令的类型),Direction(请求命令的传输方向,IN还是OUT),ReqCode(请求码),value(请求的值)以及Index(索引)。
(4)CCyInterruptEndPoint类中封装了USB中断传输所涉及到的传输控制函数及数据成员。该类的接口函数可用来传输少量的对服务周期有要求的数据。
9.CCyIsoPktInfo类
CCyIsoPktInfo类专门用来获取或返回同步传输的状态和字节长度。当一个同步传输开始执行的时候,驱动程序将分配给XferData()或BeginDataXfer()的数据缓冲区按逻辑分成多个数据包,并将各个数据包的状态和实际长度返回。
由于CyApl函数库提供了相应的应用层编程接口,因此在程序的编写过程中只需将CyAPI函数库加入到我们的程序中就可以使用相关的API函数来实现与USB下位机通信。程序启动后,首先在对话框类的构造函数中创建一个CCyUSBDevice的实例并用它来打开USB设备。如果返回的CCyUSBDevice指针为NULL,则代表Cypress的USB设备未能与PC正确连接,此时弹出消息框“ Connect USB device error”;否则,说明USB设备已经与PC正确连接,可以进行图像数据的采集。若打开设备成功,则首先启动上位机数据接收线程,同时通过控制端点发送启动传输控制命令给下位机(同步机制),然后调用BeginDataXferO传输一帧图像,并调用WaitForXfer()等待图像数据传输完毕,最后调用FinishDataXferO结束本帧图像数据的采集。在数据接收线程中不断重复上述采集过程,即可连续接收图像数据。