资源描述:
《C++ USB上位机开发》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第10章上位机程序开发在USB设备开发中,上位机程序是用于与用户进行接口的。上位机程序通过USB设备驱动程序和外部的USB硬件进行通信,USB固件程序执行所用的硬件操作。一般来说,根据选择开发平台的不同,可以使用VisualC++、VisualC#和LabVIEW等开发上位机程序。本章首先介绍了VisualC++中控制USB设备的相关函数,接着介绍了VisualC#中读写USB设备的主意函数,最后介绍了在LabVIEW中如何读写USB设备。本章内容包括:VisualC++读写USB设备;Visu
2、alC#读写USB设备;LabVIEW读写USB设备。10.1VisualC++读写USB设备在USB设备开发过程中,上位机程序可以采用广泛应用的VisualC++来实现。对于Cypress公司的EZ-USB系列芯片,其提供了全面的CY3684开发包。在该开发包中,可以使用CYIOCTL控制函数类和CyAPI控制函数类来实现VisualC++环境下对USB设备的读写。10.1.1CYIOCTL控制函数类CYIOCTL控制函数类为Cypress公司的EZ-USBFX2LP系列USB接口芯片,提供了
3、简单的控制接口。在使用Cypress公司提供的驱动程序基础上,只需在主机VisualC++程序中加入头文件cyioctl.h,然后便可以调用相应的控制函数。为了能够使用这些函数,主机程序必须首先获得USB设备的控制句柄。可以通过以下的代码在程序中获得连接到主机的USB设备句柄。CCyUSBDevice*USBDevice=newCCyUSBDevice();//USB设备HANDLEhDevice=USBDevice->DeviceHandle();//打开设备句柄其中,hDevice即为获得的
4、USB设备句柄。在退出程序的时候,需要释放该USB设备句柄,使用如下的语句即可:deleteUSBDevice;在主程序获得USB设备的控制句柄后,便可以调用CYIOCTL控制函数类提供的接口控制函数,下面分别进行介绍。1.中止I/O端点的请求接口IOCTL_ADAPT_ABORT_PIPE中止I/O端点的请求接口IOCTL_ADAPT_ABORT_PIPE用于中止I/O端点的请求,其使用示例代码如下:DWORDdwBytes=0;UCHARAddress=0x82;//地址DeviceIoCo
5、ntrol(hDevice,IOCTL_ADAPT_ABORT_PIPE,//DeviceIoControl函数&Address,sizeof(UCHAR),151NULL,0,&dwBytes,NULL);这里在DeviceIoControl函数中,参数hDevice表示当前USB设备的句柄,参数IOCTL_ADAPT_ABORT_PIPE表示使用该接口进行通信,参数Address为通信的端点号及传输方向。2.断开USB设备接口IOCTL_ADAPT_CYCLE_PORT断开USB设备接口IO
6、CTL_ADAPT_CYCLE_PORT用于将EZ-USB设备从USB总线上断开,并进行重连接。其使用代码示例如下:DWORDdwBytes=0;DeviceIoControl(hDevice,IOCTL_ADAPT_CYCLE_PORT,//DeviceIoControl函数NULL,0,NULL,0,&dwBytes,NULL);其中,参数hDevice表示当前USB设备的句柄,参数IOCTL_ADAPT_CYCLE_PORT表示使用该接口进行通信。3.获得设备地址接口IOCTL_ADAPT
7、_GET_ADDRESS获得设备地址接口IOCTL_ADAPT_GET_ADDRESS用于重新获得EZ-USB设备的地址,其使用示例代码如下:DWORDdwBytes=0;UCHARDevAddr;DeviceIoControl(hDevice,IOCTL_ADAPT_GET_ADDRESS,//DeviceIoControl函数&DevAddr,sizeof(UCHAR),&DevAddr,sizeof(UCHAR),&dwBytes,NULL);其中,参数hDevice表示当前USB设备的句
8、柄,参数IOCTL_ADAPT_GET_ADDRESS表示使用该接口进行通信,DevAddr为返回的USB设备地址。4.获取替换接口IOCTL_ADAPT_GET_ALT_INTERFACE_SETTING获取替换接口IOCTL_ADAPT_GET_ALT_INTERFACE_SETTING用于获得当前EZ-USB设备的可替换接口设置,其使用示例代码如下:DWORDdwBytes=0;UCHARintfc=0;UCHARalt;DeviceIoControl(hDevice,IOCTL_ADAP