USB转串口的虚拟串口驱动
简介
USB2COM是USB转串口转换器的虚拟串口驱动程序(Windows2000/XP),适用于Cypess的USB-HID->COM转换器(未测试), 以及与之兼容的设备。
USB-HID->COM转换器是兼容USB HID类设备的设备,因此可以不用此驱动,直接以USB_HID类设备访问。
特性:
∙支持设置波特率、奇偶校验、停止位。
∙事件检测。
仅支持
SERIAL_EV_RXCHAR | SERIAL_EV_RXFLAG | S
ERIAL_EV_TXEMPTY。
∙数据流控。
todo
∙超时设置。
todo
安装
方法-:
1.把HID->COM转换器插入USB端口。
2.HID->COM转换器被识别为:USB人体学输入设备。
3.选择设备管理器->人体学输入设备->USB人体学输入设
备,单击右键。
4.选择更新驱动程序。
5.选择从列表或指定位置安装,单击下一步。
6.选择不要搜索,我要自己选择要安装的驱动程序,单击下一
步。
7.选择从磁盘安装,浏览驱动程序所在路径,单击确定。
8.提示没有通过Windows徽标测试,选择仍然继续。
9.安装完成,端口(COM和LPT) 项下面显示USB-HID ->
Comm Port(COM?)。
方法二:
使用安装程序。
还没写-;)
访问设备
∙使用Windows API
o阻塞式读写comtst.c
o检测事件comevent.c
o适当的超时设置,可以实现有数据时ReadFile返回,无数
据时阻塞。
o CommTimeOuts.ReadIntervalTimeout = 3;
o CommTimeOuts.ReadTotalTimeoutMultiplier = 0;
o CommTimeOuts.ReadTotalTimeoutConstant = 0;
o CommTimeOuts.WriteTotalTimeoutMultiplier = 0;
o CommTimeOuts.WriteTotalTimeoutConstant = 0;
o bRc = SetCommTimeouts(hCommPort, &CommTimeOuts);
∙MFC中使用MSComm控件
1.VC6.0 Project菜单--->Add to
Project--->Components and Controls--->Registered
ActiveX Controls,选择Components: Microsoft
Communications Control 插入到当前的Workspace中。
结果添加了类CMSComm(及相应文件:mscomm.h和
mscomm.cpp )。
2.......详见
/scomm/scmfcprogramfuji
e.htm
∙以USB HID类设备访问
0.打开设备:BOOL bOpenHidDevice(HANDLE
*HidDevHandle, USHORT vid, USHORT pid)
1.设置波特率、奇偶校验、停止位:
2.outbuffer[0] = 0; /* 无 report ID */
3.*(unsigned int *)&outbuffer[1] = 19200; /* 波特
率 */
4./*Configuration Byte
5.7 6 5 4
3 2 1 0
6.Reset 0 Parity Type Parity Enable
Stop Bits 0 Data Bits
7.*/
8.outbuffer[5] = 0x03; /* 数据位 8, 奇偶校验无,
停止位 1*/
9.bResult = HidD_SetFeature(HidDevHandle,
outbuffer, Capabilities.FeatureReportByteLength);
10.if(bResult)
11.{
12.}else
13.printf("HidD_SetFeature
failed %d\n",GetLastError());
14.读写数据
15.outbuffer[0] = 0; /* 无 report ID */
16.outbuffer[1] = 7; /* 数据长度 */
17.for(int i=0; i < 7; i++)
18.outbuffer[2+i] = 'a'+i;
19.bResult = WriteFile(HidDevHandle,
20.&outbuffer[0],
21.
Capabilities.OutputReportByteLength,
22.&numBytesReturned,
23.NULL);
24.inbuffer[0] = 0; /* 无 report ID */
25.bResult = ReadFile(HidDevHandle,
26.&inbuffer[0],
27.
Capabilities.InputReportByteLength,
28.&numBytesReturned,
29.NULL);
30.if(bResult)
31.{
32.//dump data
33.printf("len = %d\n",inbuffer[1]);
34.for(int i=0; i < inbuffer[1]; i++)
35.printf("%c ",inbuffer[i+2]);
36.}
驱动是如何工作的
TODO.
在Linux下使用USB-HID->COM转换器
∙使用USB转串口驱动cypress_m8.ko(kernel >=
2.6)
1.插入设备,如果驱动不能自动安装,执行命令modprobe
cypress_m8。
2.可以象访问普通串口设备(/dev/ttyS?)那样访问此设备
(/dev/ttyUSB?)。
∙使用libusb
testlibusb.c
∙使用hiddev
todo.
参考:
∙Different ways of handling IRPs
∙Proper Completion -- Resubmitting IRPs from within a Completion Routine
∙Using the HID class eases the job of writing USB device drivers
∙/hidpage.htm
∙/serialcomm.htm。