Programar um cabo de transferência USB / conversando com um driver de dispositivo USB
-
03-07-2019 - |
Pergunta
Como faço para programaticamente acessar um cabo de transferência USB (como Cabo Easy Transfer da Belkin) a partir do Windows ?
Eu estou familiarizado com libusb-win32 , mas pelo que eu posso dizer, usando isso com dispositivos mais recentes e com o Windows Vista parece duvidoso.
Eu sei que Windows Easy Transfer pode fazer isto. Como faço para escrever código que faz a mesma coisa que o Windows Easy Transfer?
Se não houver nenhuma documentação enlatados sobre como fazer isso, eu estou disposto a fazer algumas escavações, mas eu não sei por onde começar. Como faço para ver o que o Windows Easy Transfer está fazendo para descobrir como ele faz isso? Eu vejo que o Windows ainda dá cabos de transferência de sua própria categoria no Gerenciador de Dispositivos, "Transferência Devices cabo." Como eu faço a comunicação de baixo nível com uma dessas esses drivers?
Solução
Eu descobri que a Microsoft oferece agora WinUSB para simples pelo usuário comunicação de modo com dispositivos USB. (Driver de dispositivo Um WinUSB primeiro deve ser instalado para o dispositivo;. Isto é algo semelhante a um driver de dispositivo libusb-win32). WinUSB funciona no XP (SP2 ou superior) e Vista ??p>
O Cabo Easy Transfer usa WinUSB para seu driver de dispositivo, então eu era capaz de se comunicar com ele, seguindo o exemplo de código no Microsoft de WinUSB documento howto .
Outras dicas
Você vai precisar usar o baixo nível API win32 para fazer isso. Microsoft tem alguns exemplos agradáveis ??aqui sobre como acessar um dispositivo de interface humana. O cabo de transferência não é explicitamente um HID como um rato ou o teclado, mas está em conformidade com a especificação HID.
Por exemplo, para obter o nome do dispositivo USB que você chamaria
HidD_GetProductString(...)
http://msdn.microsoft.com/en-us/library /ms790920.aspx
Há muito mais lá, você deve definitivamente dar uma olhada no aplicativo c amostra que funciona para todas as versões do Windows a partir de 2000 a Vista.
http://msdn.microsoft.com/en-us/library /dd163258.aspx
Boa sorte!
Você precisa ter um cabo de transferência de dados USB (também chamado de cabo de ligação de dados USB) que suporte API ou SDK, em seguida, use o seguinte código:
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();
}
Veja: Referência1 , Reference2