编程USB传输电缆/与USB设备驱动程序通信

时间:2009-03-03 22:59:22

标签: windows usb device-driver

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

我熟悉libusb-win32,但从我所知道的情况来看,使用较新的设备并使用Windows Vista似乎是不确定的。

我知道Windows Easy Transfer可以做到这一点。如何编写与Windows Easy Transfer完全相同的代码?

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

3 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:2)

您需要使用低级别的win32 API来执行此操作。 Microsoft在访问人机接口设备方面有一些很好的例子。传输电缆不是像鼠标或键盘那样明确的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

祝你好运!

答案 2 :(得分:0)

您需要使用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();


}

请参阅: Reference1Reference2