Программирование USB-кабеля для передачи данных / обращение к драйверу USB-устройства
-
03-07-2019 - |
Вопрос
Как мне программно получить доступ к USB-кабелю для передачи данных (например, Belkin Простой Кабель для передачи данных) из Windows?
Я знаком с libusb-win32, но из того, что я могу сказать, использование этого с более новыми устройствами и с Windows Vista кажется сомнительным.
Я знаю это Легкий Перенос Windows могу это сделать.Как мне написать код, который выполняет то же самое, что и Windows Easy Transfer?
Если нет готовой документации о том, как это сделать, я готов немного покопаться, но я не знаю, с чего начать.Как мне посмотреть, что делает Windows Easy Transfer, чтобы узнать, как она это делает?Я вижу, что Windows даже выделяет кабелям передачи собственную категорию в диспетчере устройств "Устройства передачи по кабелю". Как мне установить низкоуровневую связь с одним из этих драйверов?
Решение
Я узнал, что Microsoft теперь предлагает WinUSB для простого взаимодействия в пользовательском режиме с USB-устройствами.(Сначала для устройства необходимо установить драйвер устройства WinUSB;это несколько похоже на драйвер устройства libusb-win32.) WinUSB работает на XP (SP2 и выше) и Vista.
Кабель Easy Transfer использует WinUSB в качестве драйвера своего устройства, поэтому я смог связаться с ним, следуя примеру кода в Microsoft WinUSB как это сделать документ.
Другие советы
Для этого вам нужно будет использовать низкоуровневый 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
Удачи вам!
У вас должен быть USB-кабель для передачи данных (также называемый USB data link cable), который поддерживает 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();
}