Программирование USB-кабеля для передачи данных / разговор с драйвером USB-устройства

Как получить программный доступ к USB-кабелю для передачи данных (например, Easy Transfer Cable) из Windows?

Я знаком с libusb-win32, но из того, что я могу сказать, использую это с новыми устройствами и с Windows Vista кажется ненадежным.

Я знаю, что Windows Easy Transfer может это сделать. Как написать код, выполняющий те же функции, что и средство переноса данных Windows?

Если нет готовой документации о том, как это сделать, я готов покопаться, но не знаю, с чего начать. Как мне посмотреть, что делает Windows Easy Transfer, чтобы узнать, как это работает? Я вижу, что Windows даже предоставляет кабелям передачи отдельную категорию в диспетчере устройств, «Кабельные устройства передачи». Как мне установить низкоуровневую связь с одним из этих драйверов?


person Josh Kelley    schedule 03.03.2009    source источник


Ответы (3)


Я узнал, что Microsoft теперь предлагает WinUSB для простой связи в пользовательском режиме с USB-устройства. (Для устройства сначала должен быть установлен драйвер устройства WinUSB; он чем-то похож на драйвер устройства libusb-win32.) WinUSB работает в XP (SP2 и выше) и Vista.

Кабель Easy Transfer Cable использует WinUSB в качестве драйвера устройства, поэтому я смог связаться с ним, следуя примеру кода в Microsoft WinUSB howto.

person Josh Kelley    schedule 10.03.2009

Для этого вам нужно будет использовать низкоуровневый Win32 API. У Microsoft есть несколько хороших примеров доступа к устройству с интерфейсом пользователя. Кабель передачи явно не является HID, как мышь или клавиатура, но он соответствует спецификации HID.

Например, чтобы узнать имя USB-устройства, вы должны позвонить

HidD_GetProductString(...)

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

Там намного больше, вам обязательно стоит взглянуть на пример приложения c, которое работает для всех версий Windows от 2000 до Vista.

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

Удачи!

person Byron Whitlock    schedule 04.03.2009
comment
Спасибо, но после тестирования примера приложения HID оказалось, что эти кабели передачи не совместимы с HID (хотя такие устройства, как порт данных моего ИБП, совместимы). - person Josh Kelley; 10.03.2009

Вам понадобится 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

person KaiFa Liu    schedule 11.11.2013