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 :

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