Vue d’ensemble du développement d’applications Windows pour les périphériques USB
Résumé :
- Instructions pour le choix du modèle de programmation approprié
- Expérience du développeur d’applications de bureau et d’applications UWP
API importantes :
Cet article fournit des instructions pour décider si vous devez écrire une application UWP ou une application de bureau Windows pour communiquer avec un périphérique USB.
Windows fournit des ensembles d’API que vous pouvez utiliser pour écrire des applications qui communiquent avec des périphériques USB personnalisés. L’API effectue des tâches courantes liées à l’USB, telles que la recherche de l’appareil, les transferts de données.
Dans ce contexte, un appareil personnalisé signifie qu’il s’agit d’un appareil pour lequel Microsoft ne fournit pas de pilote de classe intégré. Au lieu de cela, vous pouvez installer WinUSB (Winusb.sys) en tant que pilote de périphérique.
Choix d’un modèle de programmation
Si vous installez Winusb.sys, voici les options du modèle de programmation :
Application UWP pour un périphérique USB
Windows 8.1 fournit l’espace de noms Windows.Devices.Usb, qui ne peut pas être utilisé dans les versions antérieures de Windows. Pour d’autres ressources du Microsoft Store, consultez la documentation plateforme Windows universelle.
Application de bureau Windows pour un périphérique USB
Avant Windows 8.1, les applications qui communiquent via Winusb.sys, étaient des applications de bureau écrites à l’aide de WinUSB Functions. Dans Windows 8.1, le jeu d’API a été étendu. Pour plus d’informations sur le développement d’applications Windows, consultez Développer pour Windows.
La stratégie de choix du meilleur modèle de programmation dépend de différents facteurs.
Votre application communiquera-t-elle avec un périphérique USB interne ?
Les API sont principalement conçues pour accéder aux périphériques. L’API peut également accéder aux périphériques USB internes du PC. Toutefois, l’accès aux périphériques USB internes d’un PC à partir d’une application UWP est limité à une application privilégiée qui est explicitement déclarée dans les métadonnées de l’appareil par l’OEM pour ce PC.
Votre application communiquera-t-elle avec des points de terminaison isochroneuses USB ?
Si votre application transmet des données vers ou depuis des points de terminaison isochroques de l’appareil, vous devez écrire une application de bureau Windows. Dans Windows 8.1, de nouvelles fonctions WinUSB ont été ajoutées au jeu d’API qui permet à une application de bureau d’envoyer des données à des points de terminaison isochroques et de les recevoir.
Votre application est-elle de type « panneau de configuration » ?
Les applications UWP sont des applications par utilisateur et n’ont pas la possibilité d’apporter des modifications en dehors de l’étendue de chaque application. Pour ces types d’applications, vous devez écrire une application de bureau Windows.
La classe de périphérique USB est-elle prise en charge par les applications UWP ?
Écrivez une application UWP si votre appareil appartient à l’une de ces classes d’appareils.
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 * *
Notes
Si votre appareil appartient à la classe DeviceFirmwareUpdate, votre application doit être une application privilégiée.
Si votre appareil n’appartient pas à l’une des classes d’appareils précédentes, écrivez une application de bureau Windows.
Conditions requises pour le pilote
Conditions requises pour le pilote | Application UWP | Application de bureau Windows |
---|---|---|
Pilote de fonction | Winusb.sys fourni par Microsoft (pilote en mode noyau). | Winusb.sys fourni par Microsoft (pilote en mode noyau). |
Pilote de filtre | Si des pilotes de filtre sont présents, l’accès est limité aux applications privilégiées. L’application est déclarée en tant qu’applications privilégiées dans les métadonnées d’appareil par l’OEM. | Le pilote de filtre peut être présent dans la pile de périphériques en mode noyau tant qu’il ne bloque pas l’accès à Winusb.sys. |
Exemples de code
Exemple | Application UWP | Application de bureau Windows |
---|---|---|
Prise en main de ces exemples |
|
Outils de développement
Outils de développement | Application UWP | Application de bureau Windows |
---|---|---|
Environnement de développeur | Microsoft Visual Studio 2013 Kit de développement logiciel (SDK) Microsoft Windows pour Windows 8.1 |
Utilisez le modèle d’application WinUSB inclus avec Visual Studio (Ultimate ou Professionnel) et le Kit de pilotes Windows (WDK) 8 ou version ultérieure. Pour les transferts isochrone, Visual Studio 2013 avec le Kit de pilotes Windows (WDK) 8.1 ou version ultérieure. |
Langages de programmation | C#, VB.NET, C++, JavaScript | C/C++ |
Implémentation de fonctionnalités
Scénario clé | Application UWP | Application de bureau Windows |
---|---|---|
Découverte de l’appareil | Utilisez l’espace de noms Windows.Devices.Enumeration pour obtenir un UsbDevice. | Utilisez SetupAPI et WinUsb_Initialize pour obtenir un WINUSB_INTERFACE_HANDLE. |
Transfert de contrôle USB | UsbSetupPacket UsbControlRequestType UsbDevice.SendControlInTransferAsync UsbDevice.SendControlOutTransferAsync |
WINUSB_SETUP_PACKET WinUsb_ControlTransfer |
Obtention de descripteurs USB | UsbDevice.DeviceDescriptor UsbConfiguration.Descriptors UsbInterface.Descriptors UsbEndpointDescriptor |
WinUsb_GetDescriptor |
Envoi d’un transfert USB en bloc | UsbBulkInPipe UsbBulkOutPipe |
WinUsb_ReadPipe WinUsb_WritePipe |
Envoi d’un transfert d’interruption USB | UsbInterruptInPipe UsbInterruptOutPipe |
WinUsb_ReadPipe WinUsb_WritePipe |
Envoi d’un transfert isochronieux USB | Non pris en charge. | WinUsb_ReadIsochPipe WinUsb_ReadIsochPipeAsap WinUsb_WriteIsochPipe WinUsb_WriteIsochPipeAsap |
Fermeture de l’appareil | UsbDevice.Close | WinUsb_Free |
Documentation
Documentation | Application UWP | Application de bureau Windows |
---|---|---|
Guide de programmation | Parler aux périphériques USB, de début à fin | Comment accéder à un périphérique USB à l’aide de fonctions WinUSB |
Informations de référence sur les API | Windows.Devices.Usb | Fonctions WinUSB |