编程USB传输电缆/与USB设备驱动程序交谈

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

我熟悉libusb-win32 ,但从我所知道的情况来看,使用更新的设备和Windows Vista似乎很麻烦。

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

如果没有关于如何做到这一点的jar头文件,我愿意做一些挖掘,但我不知道从哪里开始。 如何查看Windows Easy Transfer正在执行哪些操作? 我发现Windows甚至在设备pipe理器“传输电缆设备”中给出了自己的传输电缆类别。 我如何与这些驱动程序之一进行低级别的沟通?

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

Easy Transfer Cable使用WinUSB作为其设备驱动程序,所以我可以通过遵循微软的WinUSB howto文档中的示例代码与它进行通信。

您将需要使用低级别的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

祝你好运!

您需要有支持API或SDK的USB数据传输电缆(也称为USB数据链路电缆),然后使用以下代码:

 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(); } 

请参阅: 参考1 , 参考2