6

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

我对libusb-win32很熟悉,但据我所知,将它与较新的设备和 Windows Vista 一起使用似乎不太确定。

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

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

4

3 回答 3

5

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

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

于 2009-03-10T20:51:14.923 回答
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

祝你好运!

于 2009-03-04T00:35:17.330 回答
0

您需要有支持 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();


}

See: Reference1, Reference2

于 2013-11-11T07:23:51.737 回答