我正在编写一个程序,该程序是一个数据采样程序.被采集的设备的数据通USB传输到电脑上.
请问我应该如何在VC中实现访问USB并接收数据呢?
我看了USB大全上的程序,该书讲述的HID类设备的数据接收和发送方法.而我的数据采集设备不应该是属于HID类吧.我也看过USBPort程序代码,它讲述的内容和USB大全是一样的.
DDK中的USBView确实是提供了很好的参考,我现在可以枚举USB设备.
但是对于怎么对USB进行读写还是没有概念.
有些问题想请大家澄清一下.
我的第一个问题:
在鱼欢的代码中,他是枚举了主控制器并打开,那我的问题是,打开主控制器是不能进行读写的吧,是不是要确定到主控制器上的根集线器的哪一个端口才有可能用CreateFile打开并进行设备的读写.
第二个问题:
CreateFlie是应该打开端口还是应该打开与端口连接的设备进行读写?
第三个问题:
鱼欢的代码中的读写是不是利用虚拟串口进行的,如果是这样,可以介绍一下USB虚拟串口的做法吗?
第四个问题:
HID和USB之间最主要的区别是什么?为什么利用HID类却发现不了优盘之类的设备.
呵呵
问题多多,请大家指点迷津,谢谢先

解决方案 »

  1.   

    可以看 ddk 里的 bulkusb代码,用了bulk模式通信。createfile 需要打开pipe口
      

  2.   

    http://www.vckbase.com/document/viewdoc/?id=1282
    看看这个吧
      

  3.   

    嗯,可以从注册表中发现usb接口是否存在,如果存在,就知道usb接口连结上了。 LPCSTR c_lpszSubKey0 = "SYSTEM\\CurrentControlSet\\Control\\Class\\{36FC9E60-C465-11CF-8056-444553540000}";
    LPCSTR c_lpszSubKey1 = "SYSTEM\\CurrentControlSet\\Control\\DeviceClasses\\{5dd901c0-bcf4-11d1-9738-008029e6a5b3}";
    LPCSTR c_lpszSubKey2 = "SYSTEM\\CurrentControlSet\\Control\\DeviceClasses\\{a5dcbf10-6530-11d2-901f-00c04fb951ed}";
    LPCSTR c_lpszSubKey3 = "SYSTEM\\CurrentControlSet\\Enum\\USB\\Vid_04b8&Pid_0202";
    OSVERSIONINFO Sos;

    Sos.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
    GetVersionEx(&Sos);
    if (Sos.dwMajorVersion == 5)  //Identifies the OS version.(2000 / XP)
    {
    SHDeleteKey(HKEY_LOCAL_MACHINE,c_lpszSubKey0);
    SHDeleteKey(HKEY_LOCAL_MACHINE,c_lpszSubKey1);
    SHDeleteKey(HKEY_LOCAL_MACHINE,c_lpszSubKey2);
    SHDeleteKey(HKEY_LOCAL_MACHINE,c_lpszSubKey3);
    }正好我做的工程里有这样的判断!
      

  4.   

    对于枚举设备或是发现哪个USB端口已经连接了设备,已经是可以枚举了.
    问题是对于枚举了的设备,假设我已经知道数据采集设备已经连接在哪个端口,那么我要如何才能从这个端口读取数据呢?
    "这只老鼠不会游泳",呵呵,名字好长,那个我已经看过拉,他也是做到枚举设备,但是没有涉及读写设备的问题.
    "碧螺春"能不能把你所说的CreateFile问题详细一点.另外,bulkusb是不是已经涉及到驱动程序的问题,能不能直接用Api读写呢?不过,我还是仔细看看.
    请大家继续给个提示或是思路吧,呵呵!
    有劳啦!
      

  5.   

    bulkusb历程下有 ap ,看吧。
      

  6.   

    碧螺春,你有没有联系方式(QQ,MSN等),有些问题我想直接请教你,
      

  7.   

    抱歉,都没有。mail吧。 有空给你回。[email protected]