CYAPI函数简介
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
主机初始化模块用到了Cypress 的开发包中的类,因此需要在头文件部分添加库文件CyAPI.h、CyAPI.lib 和cyioctl.h 与功能代码一起进行编译,将这三个文件加载到项目中,主要代码如下:
#include "CyAPI.h"
#include "cyioctl.h"
头文件中还需要定义以下全局变量:USBDevice 为USB 设备,InEndpt、OutEndpt 为USB 端点,ReadThread、WriteThread 为线程定义,ReadThreadLooping、WriteThreadLooping 为线程控制变量、ept 为控制端点,
主要代码如下:
CCyUSBDevice *USBDevice; //定义USB 设备
CCyUSBEndPoint *InEndpt; //定义输入USB 端点
CCyUSBEndPoint *OutEndpt; //定义输出USB 端点
CWinThread *ReadThread; //数据采集线程
CWinThread *WriteThread; //波形发生线程
BOOL ReadThreadLooping; //数据采集线程循环标志
BOOL WriteThreadLooping; //波形发生线程循环标志
CCyControlEndPoint *ept; //定义USB 控制端点
CyAPI函数库
CyApl控制函数类为EZ-USBFXZLP系列USB2.0接口芯片提供了方便和完善的控制接口。在使用CyPress提供的驱动程序基础上,只需在主机程序中加入头文件CyAPI.h和库文件CyAPI.lib即可调用相应的控制函数。该类库一共分五大类,分别提供了对uSB设备、usB 配置、USB接口、USB端点及同步信息包的控制接口。其中,从USB端点控制类中又派生出四个子类来分别控制块传输端点、控制端点、中断传输端点以及同步传输端点。
CCyUSBDevice类
CCyUSBDevice类是一个主要的类,是一个原始的库入口类指针,其中定义了USB设备的各种操作,使用前必须首先获得USB设备的句柄。每个CCyUSBDevice类的实例就对应一个USB设备。
CCyUSBConfig类
CCyUSBConfig类用于表示USB设备的配置信息,其定义了很多配置值。该类的构造函数设置.cfg文件中所有的数据成员,然后遍历cfg文件列表所有的CCyUSBInterface。对象并且保存它们的备份,存储新接口的指针及内部数据序列。
CCyUSBInterface类
CCyUSBhiterface类表示USB设备的接口,其中定义了很多函数及变量。该接口可以包含一个或多个端点。当调用ccyUsBDevice::Open()函数时,一个CyUSBConfig的实例被构造,并通过设备描述符来报告.
CCyUSBEndPoint类
CCyUSBEndPoint类包含了USB端点的各种描述符及操作函数。该类是一个抽象类,拥有纯虚接口函数BeginDataXfer(),因此不能构造CCyUSBEndPoint类的实例。当一个CCyUSBDevice被打开时将产生当前可替换接口下的所有端点的列表。所有数据的访问与传
输都是通过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中断传输所涉及到的传输控制函数及数据成员。该类的接口函数可用来传输少量的对服务周期有要求的数据。
CCyIsoPktInfo类
CCyIsoPktInfo类专门用来获取或返回同步传输的状态和字节长度。当一个同步传输开始执行的时候,驱动程序将分配给XferData()或BeginDataXfer()的数据缓冲区按逻辑分成多个数据包,并将各个数据包的状态和实际长度返回。
由于CyApl函数库提供了相应的应用层编程接口,因此在程序的编写过程中只需将CyAPI函数库加入到我们的程序中就可以使用相关的API函数来实现与USB下位机通信。程序启动后,首先在对话框类的构造函数中创建一个CCyUSBDevice的实例并用它来打开USB设备。如果返回的CCyUSBDevice指针为NULL,则代表Cypress的USB设备未能与PC正确连接,此时弹出消息框“Connect USB device error”;否则,说明USB设备已经与PC正确连接,可以进行图像数据的采集。若打开设备成功,则首先启动上位机数据接收线程,同时通过控制端点发送启动传输控制命令给下位机(同步机制),然后调用BeginDataXferO传输一帧图像,并调用WaitForXfer()等待图像数据传输完毕,最后调用FinishDataXferO结束本帧图像数据的采集。在数据接收线程中不断重复上述采集过程,即可连续接收图像数据。