Programmazione di un cavo di trasferimento USB / conversazione con un driver di dispositivo USB

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

  •  03-07-2019
  •  | 
  •  

Domanda

Come posso accedere a livello di codice a un cavo di trasferimento USB (come Easy Transfer Cable di Belkin) da Windows ?

Conosco libusb-win32 , ma da quello che posso dire, usandolo con i dispositivi più recenti e con Windows Vista sembrano incerti.

So che Windows Easy Transfer può fare Questo. Come faccio a scrivere codice che fa la stessa cosa di Windows Easy Transfer?

Se non esiste una documentazione predefinita su come eseguire questa operazione, sono disposto a eseguire alcuni scavi, ma non so da dove iniziare. Come posso vedere cosa sta facendo Windows Easy Transfer per scoprire come funziona? Vedo che Windows assegna persino ai cavi di trasferimento la propria categoria in Gestione dispositivi, "Trasferisci dispositivi via cavo". Come posso comunicare a basso livello con uno di questi driver?

È stato utile?

Soluzione

Ho scoperto che Microsoft offre ora WinUSB per utenti semplici- comunicazione in modalità con dispositivi USB. (Un driver di dispositivo WinUSB deve prima essere installato per il dispositivo; questo è in qualche modo simile a un driver di dispositivo libusb-win32.) WinUSB funziona su XP (SP2 e versioni successive) e Vista.

Easy Transfer Cable utilizza WinUSB per il suo driver di dispositivo, quindi sono stato in grado di comunicare con esso seguendo il codice di esempio in WinUSB howto documento.

Altri suggerimenti

Per farlo dovrai usare l'API win32 di basso livello. Microsoft ha alcuni esempi interessanti sull'accesso a un dispositivo di interfaccia umana. Il cavo di trasferimento non è esplicitamente un HID come un mouse o una tastiera, ma è conforme alle specifiche HID.

Ad esempio, per ottenere il nome del dispositivo USB che chiameresti

HidD_GetProductString(...)

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

C'è molto di più lì, dovresti assolutamente dare un'occhiata all'app di esempio c che funziona per tutte le versioni di Windows dal 2000 a Vista.

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

Buona fortuna!

È necessario disporre di un cavo di trasferimento dati USB (chiamato anche cavo di collegamento dati USB) che supportare API o SDK, quindi utilizzare il seguente codice:

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();


}

Vedi: Reference1 , Riferimento2

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top