Programar un cable de transferencia USB / hablar con un controlador de dispositivo USB

StackOverflow https://stackoverflow.com/questions/608607

  •  03-07-2019
  •  | 
  •  

Pregunta

¿Cómo accedo mediante programación a un cable de transferencia USB (como el Easy Transfer Cable de Belkin) desde Windows ?

Estoy familiarizado con libusb-win32 , pero por lo que puedo decir, usándolo con Los dispositivos más nuevos y con Windows Vista parecen dudosos.

Sé que Windows Easy Transfer puede hacer esta. ¿Cómo escribo el código que hace lo mismo que Windows Easy Transfer?

Si no hay documentación enlatada sobre cómo hacer esto, estoy dispuesto a investigar un poco, pero no sé por dónde empezar. ¿Cómo veo lo que hace Windows Easy Transfer para saber cómo funciona? Veo que Windows incluso le da a los cables de transferencia su propia categoría en el Administrador de dispositivos, " Dispositivos de cable de transferencia " ¿Cómo hago comunicación de bajo nivel con uno de estos controladores?

¿Fue útil?

Solución

Descubrí que Microsoft ahora ofrece WinUSB para usuarios simples Modo de comunicación con dispositivos USB. (Primero debe instalarse un controlador de dispositivo WinUSB para el dispositivo; esto es algo similar a un controlador de dispositivo libusb-win32). WinUSB funciona en XP (SP2 y superior) y Vista.

El Easy Transfer Cable utiliza WinUSB para su controlador de dispositivo, por lo que pude comunicarme con él siguiendo el código de ejemplo en WinUSB howto document.

Otros consejos

Necesitará usar la API win32 de bajo nivel para hacer esto. Microsoft tiene algunos buenos ejemplos aquí sobre cómo acceder a un dispositivo de interfaz humana. El cable de transferencia no es explícitamente un HID como un mouse o teclado, pero cumple con las especificaciones de HID.

Por ejemplo, para obtener el nombre del dispositivo USB al que llamarías

HidD_GetProductString(...)

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

Hay mucho más allí, definitivamente deberías echar un vistazo a la aplicación c de muestra que funciona para todas las versiones de Windows desde 2000 a Vista.

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

¡Buena suerte!

Debe tener un cable de transferencia de datos USB (también llamado cable de enlace de datos USB) que soporte API o SDK, luego use el siguiente 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();


}

Ver: Referencia1 , Reference2

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top