questa è una molto domanda persistente nei forum e nella programmazione di siti Q + A. Mai con un lieto fine. La B in USB significa bus. Questo è un termine nella progettazione dell'hardware del computer per descrivere un'interfaccia elettrica per i dispositivi elettronici per lo scambio di dati. Ha lo stesso identico ruolo, ad esempio, del bus PCI (express) all'interno della macchina. Essendo innanzitutto una specifica elettrica, USB supporta un numero molto elevato di tipi di dispositivi. Qualsiasi cosa da un adattatore di rete wireless, modem, scheda di memoria flash a un teiera più calda. Quasi gli unici tipi di dispositivi che non gestisce bene sono quelli che richiedono una larghezza di banda molto grande, come una scheda video.
Le specifiche USB hanno una specifica di protocollo molto elegante che descrive come i dispositivi possono condividere il bus e come possono scambiare dati. Quella specifica del protocollo tuttavia non descrive affatto il formato dei dati, ma si limita a definire la nozione di essere in grado di consegnare blocchi di byte. Spetta al dispositivo stesso dare un significato a quei byte.
Alla fine della macchina, è necessario il software per interpretare quei byte e fare in modo che la macchina faccia qualcosa di interessante con loro. Ciò richiede un driver di dispositivo. Proprio come la tua scheda video e la tua scheda di interfaccia di rete richiedono un driver di dispositivo. Ovviamente un driver video è molto diverso da un driver NIC. Lo stesso vale per i driver USB, c'è poca comunanza.
Se si desidera scrivere software che tratta dispositivi USB simili, è necessario scriverlo al livello in cui hanno ancora qualcosa in comune. A livello di controller USB, è possibile scrivere un driver di filtro che si inietta nello stack di driver USB e dà un'occhiata ai pacchetti di richiesta I/O tra il controller e il driver di periferica. Simile al, ad esempio, il driver del filtro winpcap che spia il traffico TCP/IP.Non c'è molto di interessante, però, staresti fissando i grumi di byte che passano avanti e indietro. È un problema molto più grande di winpcap, almeno vede i byte volare con il cui significato è documentato da qualche parte in un RFC. Questo non è il caso per l'USB, la società che produce il dispositivo USB è anche in genere il fornitore di driver di periferica. Mantengono il formato interno non documentato.
La scrittura dei driver di filtro richiede competenze piuttosto avanzate, ci sono molti punti deboli. Come mandare in crash il sistema operativo quando commetti un semplice errore. Ultimamente, anche il modello di driver di Windows ha subito un notevole cambiamento, i driver USB sono stati spostati in ring 3 (modalità utente) per mantenere il sistema operativo stabile.
Per iniziare, scaricare Windows WDK (noto come "DDK") e leggere i libri di Walter Oney. Preferibilmente tutti loro.
fonte
2010-06-05 20:17:46
Non ci sono funzioni standard di C++ per fare ciò. –
Non sono sicuro ... Puoi dirmi come può essere fatto allora. – Midas
perché non vuoi usare le librerie? – OlimilOops