3.3 与USB设备交换数据
在Windows中,读写端口与读写文件都是调用同样的API函数,打开或创建端口用CreateFile从端口读数据用ReadFile,向端口数据用WriteFile。
(1)设备的打开和关闭,用API函数CreateFile来打开或创建设备:
HANDLE hCom = CreateFile(
m_strPath,//指定打开设备名
GENERIC_READ | GENERIC_WEITE,//允许读写
0,//独占方式
NULL,//安全模式
OPEN_EXISTING,//打开
FILE_ATTRIBUTE_NORMAL,//文件属性
NULL //临时文件的句柄
);
如果调用成功,该函数返回文件的句柄;如果调用失败,则返回INVALID_HANDLE_VALUE,在打开通信设备时,应该以独占方式打开。
不再使用设备句柄时,应该调用CloseHandle(hCom)函数关闭它。
(2)设备的读写操作,读写通信设备可用同步方式执行
,也可用异步方式执行,这由CreateFile函数中是否指定FILE_FLAG_OVERLAPPED来决定;指定为异步方式,未指定则为同步方式,函数ReadFile和WriteFile的参数和返回值类型,下面是调用ReadFile函数的实例。
HANDLE hCom;
void *pBuffer;
DWORD iLength;
DWORD pReadFact;
BOOL ReadFile( hCom, pBuffer, iLength, &;pReadFact, NULL );
读到的数据放在内存pBuffer里,pBuffer要先申请内存空间,iLength为需要读的数据长度,pReadFact存放实际读的数据长度。需要注意的是在读写设备之前,应先调用ClearCommError函数清除错误标志,此函数负责报告指定的错误的设备的当前状态,调用PrugeComm函数可以更改正在进行的读写操作方式。
4 结论
以上是调用Win32的API通信函数用VC++编写的USB设备通信程序,它实现了查找符合HID类的USB设备并与之进行数据交换的基本功能。这种独立与通信子系统之外实现的应用程序,可以实现可靠的高速数据传输。对自定义设备,应用程序需要设备的特定供应商和产品ID,或设备的特定类型,读者只需要对上述程序作一定修改即可,在MFC环境下,编写32位串口通信程序还可采用ActiveX的MSComm控件,但使用API通信函数,具有更大灵活性,可定制性也更强,在设置通信配置和发送错误敏感,无时间限制的数据时,该接口尤其有用。