【问题标题】:Programming a USB transfer cable / talking to a USB device driver对 USB 传输电缆进行编程/与 USB 设备驱动程序通话
【发布时间】:2016-05-07 21:23:25
【问题描述】:

如何从 Windows 以编程方式访问 USB 传输电缆(例如 Belkin 的 Easy Transfer Cable)?

我对@9​​87654322@ 很熟悉,但据我所知,在较新的设备和 Windows Vista 上使用它似乎不太容易。

我知道Windows Easy Transfer 可以做到这一点。如何编写与 Windows 轻松传送功能相同的代码?

如果没有关于如何做到这一点的罐头文档,我愿意做一些挖掘,但我不知道从哪里开始。如何查看 Windows Easy Transfer 的操作以了解它是如何操作的?我看到 Windows 甚至在设备管理器“传输电缆设备”中为传输电缆提供了自己的类别。如何与这些驱动程序之一进行低级别通信?

【问题讨论】:

    标签: windows usb device-driver


    【解决方案1】:

    我发现微软现在提供WinUSB 用于与 USB 设备进行简单的用户模式通信。 (必须先为该设备安装 WinUSB 设备驱动程序;这有点类似于 libusb-win32 设备驱动程序。)WinUSB 适用于 XP(SP2 及更高版本)和 Vista。

    Easy Transfer Cable 使用 WinUSB 作为其设备驱动程序,因此我可以按照 Microsoft 的 WinUSB howto 文档中的示例代码与之通信。

    【讨论】:

      【解决方案2】:

      您需要使用低级别的 win32 API 来执行此操作。 微软在这里有一些关于访问人机接口设备的好例子。传输电缆不像鼠标或键盘那样明确是 HID,但它符合 HID 规范。

      例如,要获取您要调用的 USB 设备的名称

      HidD_GetProductString(...)
      

      http://msdn.microsoft.com/en-us/library/ms790920.aspx

      还有更多内容,您一定要看看适用于从 2000 到 Vista 的所有 Windows 版本的示例 c 应用程序。

      http://msdn.microsoft.com/en-us/library/dd163258.aspx

      祝你好运!

      【讨论】:

      • 谢谢,但在试用 HID 示例应用程序后,这些传输电缆似乎不符合 HID 标准(尽管我的 UPS 数据端口等设备是)。
      【解决方案3】:

      您需要有一根 USB 数据传输电缆(也称为 USB 数据链路电缆),该电缆 支持API或SDK,则使用如下代码:

      void CU2uDlg::OnOK() 
      {
      BYTE        buf[65530];
      LPU2URET    pU2uRet;
      BOOL        bRet;
      int         ret;
      CString     msgstr;
      
      ret = u2u_open();
      if (ret == -1){
          AfxMessageBox("Open U2U device Success.");
      }else{
          msgstr.Format("Open U2U device fail,return:%d", ret);
          AfxMessageBox(msgstr);
          return;
      }
      
      //send data
      bRet = u2u_SendData(buf, 65530, ret);
      if(!bRet)
      {
          msgstr.Format("Send data error,return:%d", ret);
          AfxMessageBox(msgstr);
          return;
      }
      
      //receive data
      while (1){
          bRet = u2u_RecvData(recvData, dataLen, ret);
          if( !bRet )
          {
              msgstr.Format("Receive data error,return:%d", ret);
              AfxMessageBox(msgstr);
              u2u_close();
              return;
          }else{
              break;
          }
      }
      u2u_close();
      
      
      }
      

      见: Reference1, Reference2

      【讨论】:

        猜你喜欢
        • 2020-12-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-18
        • 1970-01-01
        • 1970-01-01
        • 2022-12-22
        • 1970-01-01
        相关资源
        最近更新 更多