Panoramica dello sviluppo di applicazioni Windows per dispositivi USB
Riepilogo:
- Linee guida per la scelta del modello di programmazione appropriato
- Esperienza di sviluppo di app desktop e app UWP
API importanti:
Questo articolo fornisce linee guida per decidere se scrivere un'app UWP o un'app desktop di Windows per comunicare con un dispositivo USB.
Windows fornisce set di API che è possibile usare per scrivere app che comunicano con dispositivi USB personalizzati. L'API esegue attività comuni correlate a USB, ad esempio, la ricerca del dispositivo, i trasferimenti di dati.
Il dispositivo personalizzato in questo contesto significa un dispositivo per il quale Microsoft non fornisce un driver di classe in-box. È invece possibile installare WinUSB (Winusb.sys) come driver di dispositivo.
Scelta di un modello di programmazione
Se si installa Winusb.sys, ecco le opzioni del modello di programmazione:
App UWP per un dispositivo USB
Windows 8.1 fornisce lo spazio dei nomi Windows.Devices.Usb, che non può essere usato nelle versioni precedenti di Windows. Per altre risorse di Microsoft Store, vedere la documentazione di piattaforma UWP (Universal Windows Platform).
App desktop di Windows per un dispositivo USB
Prima di Windows 8.1, le app che comunicavano tramite Winusb.sys, erano app desktop scritte usando Funzioni WinUSB. In Windows 8.1 il set di API è stato esteso. Per altre informazioni sullo sviluppo di app di Windows, vedere Sviluppare per Windows.
La strategia per la scelta del modello di programmazione migliore dipende da diversi fattori.
L'app comunicherà con un dispositivo USB interno?
Le API sono progettate principalmente per l'accesso ai dispositivi periferici. L'API può anche accedere ai dispositivi USB interni del PC. Tuttavia, l'accesso ai dispositivi USB interni del PC da un'app UWP è limitato a un'app con privilegi dichiarata in modo esplicito nei metadati del dispositivo dall'OEM per tale PC.
L'app comunicherà con gli endpoint isocroni USB?
Se l'app trasmette dati a o da endpoint isocroni del dispositivo, devi scrivere un'app desktop di Windows. In Windows 8.1 sono state aggiunte nuove funzioni WinUSB al set di API che consente a un'app desktop di inviare e ricevere dati da endpoint isocroni.
L'app è un tipo di app "pannello di controllo"?
Le app UWP sono app per utente e non hanno la possibilità di apportare modifiche all'esterno dell'ambito di ogni app. Per questi tipi di app, è necessario scrivere un'app desktop di Windows.
La classe di dispositivi USB è supportata dalle app UWP?
Scrivere un'app UWP se il dispositivo appartiene a una di queste classi di dispositivo.
name:cdcControl, classId:02 * *
name:physical, classId:05 * *
name:personalHealthcare, classId:0f 00 00
name:activeSync, classId:ef 01 01
name:palmSync, classId:ef 01 02
name:deviceFirmwareUpdate, classId:fe 01 01
name:irda, classId:fe 02 00
name:measurement, classId:fe 03 *
name:vendorSpecific, classId:ff * *
Nota
Se il dispositivo appartiene alla classe DeviceFirmwareUpdate, l'app deve essere un'app con privilegi.
Se il dispositivo non appartiene a una delle classi di dispositivo precedenti, scrivere un'app desktop di Windows.
Requisito del driver
Requisito del driver | App UWP | App desktop di Windows |
---|---|---|
Driver di funzione | Winusb.sys fornita da Microsoft (driver in modalità kernel). | Winusb.sys fornita da Microsoft (driver in modalità kernel). |
Driver di filtro | Se sono presenti driver di filtro, l'accesso è limitato alle app con privilegi. L'app viene dichiarata come app con privilegi nei metadati del dispositivo dall'OEM. | Il driver di filtro può essere presente nello stack di dispositivi in modalità kernel, purché non blocchi l'accesso a Winusb.sys. |
Esempi di codice
Esempio | App UWP | App desktop di Windows |
---|---|---|
Introduzione a questi esempi |
|
Strumenti di sviluppo
Strumenti di sviluppo | App UWP | App desktop di Windows |
---|---|---|
Ambiente per sviluppatori | Microsoft Visual Studio 2013 Microsoft Windows Software Development Kit (SDK) per Windows 8.1 |
Usare il modello di applicazione WinUSB incluso in Visual Studio (Ultimate o Professional) e Windows Driver Kit (WDK) 8 o versione successiva. Per i trasferimenti isocroni, Visual Studio 2013 con Windows Driver Kit (WDK) 8.1 o versione successiva. |
Linguaggi di programmazione | C#, VB.NET, C++, JavaScript | C/C++ |
Implementazione delle funzionalità
Scenario chiave | App UWP | App desktop di Windows |
---|---|---|
Individuazione del dispositivo | Usare lo spazio dei nomi Windows.Devices.Enumeration per ottenere un usbDevice. | Usare SetupAPI e WinUsb_Initialize per ottenere un WINUSB_INTERFACE_HANDLE. |
Trasferimento di controlli USB | UsbSetupPacket UsbControlRequestType UsbDevice.SendControlInTransferAsync UsbDevice.SendControlOutTransferAsync |
WINUSB_SETUP_PACKET WinUsb_ControlTransfer |
Recupero di descrittori USB | UsbDevice.DeviceDescriptor UsbConfiguration.Descriptors UsbInterface.Descriptors UsbEndpointDescriptor |
WinUsb_GetDescriptor |
Invio del trasferimento bulk USB | UsbBulkInPipe UsbBulkOutPipe |
WinUsb_ReadPipe WinUsb_WritePipe |
Invio del trasferimento di interrupt USB | UsbInterruptInPipe UsbInterruptOutPipe |
WinUsb_ReadPipe WinUsb_WritePipe |
Invio di un trasferimento isocrono USB | Non supportato. | WinUsb_ReadIsochPipe WinUsb_ReadIsochPipeAsap WinUsb_WriteIsochPipe WinUsb_WriteIsochPipeAsap |
Chiusura del dispositivo | UsbDevice.Close | WinUsb_Free |
Documentazione
Documentazione | App UWP | App desktop di Windows |
---|---|---|
Guida per programmatori | Parlare con i dispositivi USB, iniziare a terminare | Come accedere a un dispositivo USB usando le funzioni WinUSB |
API (riferimento) | Windows.Devices.Usb | Funzioni WinUSB |