Freigeben über


Sprechen mit USB-Geräten– von A bis Z (UWP-App)

Dieser Artikel enthält eine durchgängige exemplarische Vorgehensweise zum Erstellen einer UWP-App, die mit einem USB-Gerät spricht.

Verwenden Sie die Windows-Runtime-APIs zum Schreiben von UWP-Apps, die Benutzern Zugriff auf ihr Peripherie-USB-Gerät gewähren. Solche Apps können eine Verbindung mit einem Gerät herstellen, basierend auf benutzerdefinierten Kriterien, Informationen zum Gerät abrufen, Daten an das Gerät senden und umgekehrt Datenströme vom Gerät abrufen und das Gerät zur Unterbrechung von Daten abfragen.

Hier wird beschrieben, wie Ihre UWP-App diese Aufgaben implementieren kann, und links zu Beispielen, die die Verwendung von Klassen veranschaulichen, die in Windows.Devices.Usb enthalten sind. Im App-Manifest werden die im App-Manifest erforderlichen Gerätefunktionen erläutert und die App gestartet, wenn das Gerät eine Verbindung herstellt. Außerdem wird gezeigt, wie eine Datenübertragungsaufgabe im Hintergrund ausgeführt wird, auch wenn die App angehalten wird, um die Akkulaufzeit zu sparen.

Exemplarische Vorgehensweise – Schreiben einer UWP-App für USB-Geräte

Führen Sie die Schritte in diesem Artikel aus, oder fahren Sie direkt mit dem Beispiel für den Zugriff auf benutzerdefinierte USB-Geräte fort. Im Begleitbeispiel werden alle hier beschriebenen Schritte implementiert, aber um die Dinge zu verschieben, werden wir nicht durch den Code geführt. Bestimmte Schritte verfügen über einen "Suchen" im Beispielabschnitt , um den Code schnell zu finden. Die Struktur der Quelldateien des Beispiels ist einfach und flach, sodass Sie Code problemlos finden können, ohne einen Drilldown über mehrere Ebenen von Quelldateien durchführen zu müssen. Aber Sie können es vorziehen, Ihr eigenes Projekt anders aufzubrechen und zu organisieren.

Installieren des Microsoft WinUSB-Treibers

Installieren Sie den von Microsoft bereitgestellten WinUSB-Treiber als Funktionstreiber für Ihr Gerät.

Schnellstart: WinUSB-Installation (Winusb.sys)

Sie können Winusb.sys auf folgende Weise installieren:

  • Wenn Sie Ihr Gerät verbinden, stellen Sie möglicherweise fest, dass Windows Winusb.sys automatisch lädt, da es sich bei dem Gerät um ein WinUSB-Gerät handelt.
  • Installieren Sie den Treiber, indem Sie die vom System bereitgestellte Geräteklasse in Geräte-Manager angeben.
  • Installieren Sie den Treiber mithilfe einer benutzerdefinierten INF. Sie können das INF auf eine der folgenden beiden Arten abrufen:
    • Rufen Sie den INF vom Hardwareanbieter ab.
    • Schreiben Sie ein benutzerdefiniertes INF, das auf die von Microsoft bereitgestellte Datei "Winusb.inf" verweist. Weitere Informationen finden Sie in der WinUSB-Installation (Winusb.sys).

Abrufen von Informationen zu Ihrem Gerät

Rufen Sie die Geräteschnittstellen-GUID, Hardware-ID und Geräteklasseninformationen zu Ihrem Gerät ab.

Sie können diese Informationen vom Gerätehersteller abrufen.

  • Hersteller- und Produkt-IDs

    Zeigen Sie in Geräte-Manager die Geräteeigenschaften an. Zeigen Sie auf der Registerkarte "Details " den Wert der Hardware-ID-Eigenschaft an. Dieser Wert ist eine Kombination dieser beiden Bezeichner. Beispielsweise lautet die Hardware-ID für das SuperMUTT-Gerät "USB\VID_045E&PID_F001"; Die Hersteller-ID lautet "0x045E", und die Produkt-ID lautet "0xF001".

  • Geräteklasse, Unterklasse und Protokollcodes

  • GUID der Geräteschnittstelle

Alternativ können Sie Informationen in der Registrierung anzeigen. Weitere Informationen finden Sie in den Registrierungseinträgen für USB-Geräte.

Ermitteln, ob der USB-API-Satz die Geräteklasse, Unterklasse und das Protokoll zulässt

Sie können eine UWP-App schreiben, wenn Geräteklasse, Unterklasse und Protokollcode des Geräts in der folgenden Liste enthalten sind:

  • 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 * *

Erstellen eines einfachen Visual Studio-Projekts

Erstellen Sie ein einfaches Visual Studio-Projekt, das Sie in diesem Lernprogramm erweitern können.

Weitere Informationen finden Sie unter "Erste Schritte mit UWP-Apps".

Hinzufügen von USB-Gerätefunktionen zum App-Manifest

Erfahren Sie, wie Sie dem App-Manifest USB-Gerätefunktionen hinzufügen.

Schnellstart: Hinzufügen von USB-Gerätefunktionen zum App-Manifest

Öffnen Sie Die Datei "Package.appxmanifest" in einem Text-Editor, und fügen Sie das DeviceCapability-Element mit dem Attribut "Name " auf "usb" hinzu, wie in diesem Beispiel gezeigt.

Hinweis

Sie können die USB-Gerätefunktion in Visual Studio nicht ändern. Klicken Sie in Projektmappen-Explorer mit der rechten Maustaste auf die Datei "Package.appxmanifest", und wählen Sie "Öffnen mit..." und dann den XML-Editor (Text) aus. Die Datei wird in nur XML geöffnet.

<Capabilities>
  <!--When the device's classId is FF * *, there is a predefined name for the class.
      You can use the name instead of the class id.
      There are also other predefined names that correspond to a classId.-->
  <m2:DeviceCapability Name="usb">
    <!--SuperMutt Device-->
    <m2:Device Id="vidpid:045E 0611">
      <!--<wb:Function Type="classId:ff * *"/>-->
      <m2:Function Type="name:vendorSpecific"/>
    </m2:Device>
  </m2:DeviceCapability>
</Capabilities>

Suchen Sie es im Beispiel: Die USB-Gerätefunktionen befinden sich in der Datei "Package.appxmanifest".

Öffnen des Geräts für die Kommunikation

Erweitern Sie die App, um das Gerät für die Kommunikation zu öffnen.

Schnellstart: Herstellen einer Verbindung mit einem USB-Gerät (UWP-App)

  1. Suchen Sie das Gerät, indem Sie eine AQS-Zeichenfolge (Advanced Query Syntax) erstellen, die Suchkriterien zum Suchen des Geräts in der aufgezählten Gerätesammlung enthält.
  2. Öffnen Sie das Gerät auf eine von zwei Arten:
  3. Rufen Sie die Geräteinstanz aus der eigenschaft DeviceInformation.Id ab.
  4. Rufen Sie FromIdAsync auf, indem Sie die Geräteinstanzzeichenfolge übergeben und das UsbDevice-Objekt abrufen.

Suchen Sie es im Beispiel: Siehe Dateien mit dem Namen Scenario1_DeviceConnect.

Untersuchen des USB-Gerätelayouts

Untersuchen Des USB-Gerätelayouts.

Lesen Sie grundlegende USB-Konzepte zum Konfigurieren des Geräts und zum Durchführen von Datenübertragungen: Konzepte für alle USB-Entwickler.

Zeigen Sie den Gerätekonfigurationsdeskriptor, Schnittstellendeskriptoren für jede unterstützte alternative Einstellung und deren Endpunktdeskriptoren an. Mit USBView können Sie alle USB-Controller und die angeschlossenen USB-Geräte durchsuchen und auch die Gerätekonfiguration prüfen.

Abrufen und Anzeigen von USB-Deskriptoren in der Benutzeroberfläche

Erweitern Sie die App, um USB-Deskriptoren in der Benutzeroberfläche abzurufen und anzuzeigen.

Schnellstart: Abrufen von USB-Deskriptoren (UWP-App)

Suchen Sie es im Beispiel: Siehe Dateien mit dem Namen Scenario5_UsbDescriptors.

Senden von vom Anbieter definierten USB-Steuerübertragungen

Erweitern Sie die App, um anbieterdefinierte USB-Steuerungsübertragungen zu senden.

Schnellstart: Senden einer USB-Steuerungsübertragungsanforderung (UWP-App)

  1. Rufen Sie den Anbieterbefehl aus der Hardwarespezifikation des Geräts ab.
  2. Erstellen Sie ein UsbSetupPacket-Objekt , und füllen Sie das Setuppaket, indem Sie verschiedene Eigenschaften festlegen.
  3. Starten Sie einen asynchronen Vorgang, um die Steuerungsübertragung von diesen Methoden abhängig von der Richtung der Übertragung zu senden:

Suchen Sie es im Beispiel: Siehe Dateien mit dem Namen Scenario2_ControlTransfer.

Lesen oder Schreiben von Massendaten

Erweitern Sie die App, um Massendaten zu lesen oder zu schreiben.

Schnellstart: Senden einer USB-Massenübertragungsanforderung (UWP-App)

  1. Abrufen des Massenpipelineobjekts (UsbBulkOutPipe oder UsbBulkInPipe).
  2. Konfigurieren Sie die Massenpipeline zum Festlegen von Richtlinienparametern.
  3. Richten Sie den Datenstrom mithilfe des DataReader- oder DataWriter-Objekts ein.
  4. Starten Sie einen asynchronen Übertragungsvorgang, indem Sie DataReader.LoadAsync oder DataWriter.StoreAsync aufrufen.
  5. Ruft Ergebnisse des Übertragungsvorgangs ab.

Suchen Sie es im Beispiel: Siehe Dateien mit dem Namen Scenario4_BulkPipes.

Abrufen von Hardwareunterbruchdaten

Erweitern Sie die App, um Hardwareunterbrechungsdaten zu erhalten.

Schnellstart: Senden einer USB-Interruptübertragungsanforderung (UWP-App)

  1. Abrufen des Interrupt pipe-Objekts (UsbInterruptInPipe oder UsbInterruptOutPipe).
  2. Implementieren Sie den Interrupthandler für das DataReceived-Ereignis.
  3. Registrieren Sie den Ereignishandler, um mit dem Empfangen von Daten zu beginnen.
  4. Heben Sie die Registrierung des Ereignishandlers auf, um den Empfang von Daten zu beenden.

Suchen Sie es im Beispiel: Siehe Dateien mit dem Namen Scenario3_InterruptPipes.

Auswählen einer Schnittstelleneinstellung, die derzeit nicht aktiv ist

Erweitern Sie die App, um eine Schnittstelleneinstellung auszuwählen, die derzeit nicht aktiv ist.

Schnellstart: Auswählen einer USB-Schnittstelleneinstellung (UWP-App)

Wenn das Gerät für die Kommunikation geöffnet wird, werden die Standardschnittstelle und die erste Einstellung ausgewählt. Wenn Sie diese Einstellung ändern möchten, führen Sie die folgenden Schritte aus:

  1. Rufen Sie die aktive Einstellung einer USB-Schnittstelle mithilfe des UsbInterfaceSetting.Selected-Werts ab.
  2. Legen Sie eine USB-Schnittstelleneinstellung fest, indem Sie einen asynchronen Vorgang starten, indem Sie UsbInterfaceSetting.SelectSettingAsync aufrufen.

Schließen des Geräts

Erweitern Sie die App, um das Gerät zu schließen.

Schnellstart: Herstellen einer Verbindung mit einem USB-Gerät (UWP-App)

Schließen Sie das Gerät, nachdem Sie das UsbDevice-Objekt verwendet haben.

C++-Apps müssen den Verweis mithilfe des Löschschlüsselworts freigeben. C#/VB-Apps müssen die UsbDevice.Dispose-Methode aufrufen. JavaScript-Apps müssen UsbDevice.Close aufrufen.

Suchen Sie es im Beispiel: Siehe Dateien mit dem Namen Scenario1_DeviceConnect.

Erstellen eines Gerätemetadatenpakets

Erstellen Sie ein Gerätemetadatenpaket für die App.

Tool: Assistent für die Erstellung von Gerätemetadaten

  • Wenn Das Windows Driver Kit (WDK) installiert ist, öffnen Sie die Erstellung von Treibergerätemetadaten>>.
  • Wenn Sie das eigenständige SDK installiert haben, befindet sich das Tool unter <install_path>\bin\x86\DeviceMetadataWizardexe.

Ordnen Sie Ihre App dem Gerät zu, indem Sie die Schritte im Assistenten ausführen. Geben Sie diese Informationen zu Ihrem Gerät ein:

  • Geben Sie auf der Seite "Geräteinformationen" den Modellnamen, den Hersteller und die Beschreibung ein.
  • Geben Sie auf der Seite "Hardwareinformationen " die Hardware-ID Ihres Geräts ein.

Führen Sie die folgenden Anweisungen aus, um die App als privilegierte App für Ihr Gerät zu deklarieren:

  1. Geben Sie auf der Seite "App Info" in der Gruppe "Privilegierte Anwendung" den Paketnamen, den Herausgebernamen und die UWP-App-ID ein.

    Screenshot von Visual Studio mit Gerätemetadaten für privilegierte Apps.

    Hinweis

    Überprüfen Sie nicht die Option für den benutzerdefinierten Access-Treiber .

  2. Öffnen Sie die Registerkarte "Fertig stellen ". Aktivieren Sie das Kontrollkästchen "Pakete in den lokalen Metadatenspeicher Ihres Systems kopieren".

  3. Schließen Sie das Gerät in Systemsteuerung, öffnen Sie Ansichtsgeräte und Drucker, und stellen Sie sicher, dass das Symbol des Geräts korrekt ist.

Suchen Sie es im Beispiel: Siehe den Ordner "DeviceMetadata".

Implementieren der Aktivierung der automatischen Wiedergabe

Erweitern Sie die App, indem Sie die Aktivierung der automatischen Wiedergabe implementieren, um die App zu starten, wenn das Gerät eine Verbindung mit dem System herstellt.

Schnellstart: Registrieren einer App für ein Gerät für die automatische Wiedergabe

Sie können Funktionen für die automatische Wiedergabe hinzufügen, damit die App gestartet wird, wenn das Gerät eine Verbindung mit dem System herstellt. Sie können die automatische Wiedergabe für alle UWP-Apps (privilegierte oder anderweitig) aktivieren.

  1. In Ihrem Gerätemetadatenpaket müssen Sie angeben, wie das Gerät auf eine Benachrichtigung zur automatischen Wiedergabe reagieren soll. Wählen Sie auf der Registerkarte "Windows Info " die Option "UWP-Geräte-App " aus, und geben Sie App-Informationen ein, wie hier gezeigt:

  2. Fügen Sie im App-Manifest die Deklaration "Gerät automatisch wiedergeben" hinzu, und starten Sie Informationen wie hier gezeigt:

    Screenshot des App-Manifests, in dem

  3. Überprüfen Sie in der OnActivated-Methode der App-Klasse, ob das Gerät die App aktiviert hat. Wenn dies der Grund ist, empfängt die Methode einen DeviceEventArgs-Parameterwert, der den DeviceInformation.Id Eigenschaftswert enthält. Dies ist der gleiche Wert, der in Open the device for communication beschrieben wird.

Suchen Sie es im Beispiel: Anzeigen von Dateien mit dem Namen "Automatische Wiedergabe". JavaScript finden Sie unter default.js.

Implementieren einer Hintergrundaufgabe

Erweitern Sie die App, um eine Hintergrundaufgabe zu implementieren, die Längenübertragungen an das Gerät durchführen kann, z. B. firmwareupdates, ohne dass die App angehalten wird.

Zum Implementieren einer Hintergrundaufgabe benötigen Sie zwei Klassen.

Die Hintergrundaufgabenklasse implementiert die IBackgroundTask-Schnittstelle und enthält den tatsächlichen Code, den Sie zum Synchronisieren oder Aktualisieren Ihres Peripheriegeräts erstellen. Die Hintergrundaufgabenklasse wird ausgeführt, wenn die Hintergrundaufgabe ausgelöst wird und vom Einstiegspunkt im App-Manifest bereitgestellt wird.

Hinweis

Die Von Windows 8.1 bereitgestellte Infrastruktur für Hintergrundaufgaben des Geräts. Weitere Informationen zu Windows-Hintergrundaufgaben finden Sie unter Unterstützen ihrer App mit Hintergrundaufgaben.

Hintergrundaufgabenklasse

  1. Implementiert die IBackgroundTask-Schnittstelle , die von der Windows-Hintergrundaufgabeninfrastruktur benötigt wird.
  2. Ruft die an die Klasse in der Run-Methode übergebene DeviceUseDetails-Instanz ab und verwendet diese Instanz, um den Fortschritt zurück an die Microsoft Store-App zu melden und um Abbruchereignisse zu registrieren.
  3. Die Run-Methode ruft auch die privaten OpenDevice- und WriteToDeviceAsync-Methoden auf, die den Hintergrundgerätesynchronisierungscode implementieren.

Die UWP-App registriert und löst eine DeviceUseTrigger-Hintergrundaufgabe aus. Die App registriert, löst und behandelt den Fortschritt einer Hintergrundaufgabe.

Hinweis

Der folgende Beispielcode kann mithilfe der entsprechenden Objekte auf die DeviceServicingTrigger-Hintergrundaufgabe angewendet werden. Der einzige Unterschied zwischen den beiden Triggerobjekten und den entsprechenden APIs sind die Richtlinienüberprüfungen von Windows.

  1. Erstellt DeviceUseTrigger- und BackgroundTaskRegistration-Objekte.
  2. Überprüft, ob Hintergrundaufgaben zuvor von dieser Beispielanwendung registriert wurden, und bricht sie ab, indem die Unregister-Methode für die Aufgabe aufgerufen wird.
  3. Registriert die Hintergrundaufgabe, die mit dem Gerät synchronisiert wird. Die SetupBackgroundTask-Methode wird aus der SyncWithDeviceAsync-Methode im nächsten Schritt aufgerufen.
    1. Initialisiert deviceUseTrigger und speichert ihn zur späteren Verwendung.
    2. Erstellt ein BackgroundTaskBuilder -Objekt und verwendet die Eigenschaften Name, TaskEntryPoint und SetTrigger, um das DeviceUseTrigger -Objekt und den Namen der Hintergrundaufgabe der App zu registrieren. Die TaskEntryPoint-Eigenschaft des BackgroundTaskBuilder-Objekts wird auf den vollständigen Namen der Hintergrundaufgabenklasse festgelegt, die ausgeführt wird, wenn die Hintergrundaufgabe ausgelöst wird.
    3. Registriert für Abschluss- und Statusereignisse aus der Hintergrundaufgabe, damit die Microsoft Store-App abschluss- und Fortschrittsaktualisierungen für den Benutzer bereitstellen kann.
  4. Die private SyncWithDeviceAsync-Methode registriert die Hintergrundaufgabe, die mit dem Gerät synchronisiert wird, und startet die Hintergrundsynchronisierung.
    1. Ruft die SetupBackgroundTask-Methode aus dem vorherigen Schritt auf und registriert die Hintergrundaufgabe, die mit dem Gerät synchronisiert wird.

    2. Ruft die private StartSyncBackgroundTaskAsync-Methode auf, die die Hintergrundaufgabe startet.

    3. Schließt das Handle der App auf dem Gerät, um sicherzustellen, dass die Hintergrundaufgabe das Gerät beim Start öffnen kann.

      Hinweis

      Die Hintergrundaufgabe muss das Gerät öffnen, um das Update auszuführen, damit die Microsoft Store-App ihre Verbindungen mit dem Gerät schließen muss, bevor RequestAsync aufgerufen wird.

    4. Ruft die RequestAsync-Methode des DeviceUseTrigger-Objekts auf, die die Hintergrundaufgabe startet, und gibt das DeviceTriggerResults-Objekt aus RequestAsync zurück, mit dem ermittelt wird, ob die Hintergrundaufgabe erfolgreich gestartet wurde.

      Hinweis

      Windows überprüft, ob alle erforderlichen Richtlinienprüfungen für die Aufgabeninitiierung abgeschlossen wurden. Wenn alle Richtlinienüberprüfungen abgeschlossen sind, wird der Aktualisierungsvorgang jetzt als Hintergrundaufgabe außerhalb der Microsoft Store-App ausgeführt, sodass die App sicher angehalten werden kann, während der Vorgang ausgeführt wird. Windows erzwingt auch alle Laufzeitanforderungen und bricht die Hintergrundaufgabe ab, wenn diese Anforderungen nicht mehr erfüllt sind.

    5. Verwendet das von StartSyncBackgroundTaskAsync zurückgegebene DeviceTriggerResults -Objekt, um zu ermitteln, ob die Hintergrundaufgabe erfolgreich gestartet wurde. Eine Switch-Anweisung wird verwendet, um das Ergebnis von DeviceTriggerResults zu untersuchen.

  5. Implementiert einen privaten OnSyncWithDeviceProgress-Ereignishandler, der die App-UI mit Dem Fortschritt aus der Hintergrundaufgabe aktualisiert.
  6. Implementiert einen privaten OnSyncWithDeviceCompleted-Ereignishandler, um den Übergang von Hintergrundaufgaben zur Vordergrund-App zu behandeln, wenn die Hintergrundaufgabe abgeschlossen wurde.
    1. Bestimmt mithilfe der CheckResults-Methode des BackgroundTaskCompletedEventArgs-Objekts, ob Ausnahmen von der Hintergrundaufgabe ausgelöst wurden.
    2. Die App öffnet das Gerät für die Verwendung durch die Vordergrund-App neu, nachdem die Hintergrundaufgabe abgeschlossen ist, und aktualisiert die Benutzeroberfläche, um den Benutzer zu benachrichtigen.
  7. Implementiert Private Button Click-Ereignishandler aus der Benutzeroberfläche, um die Hintergrundaufgabe zu starten und abzubrechen.
    1. Der private Sync_Click-Ereignishandler ruft die in den vorherigen Schritten beschriebene SyncWithDeviceAsync-Methode auf.
    2. Der private CancelSync_Click-Ereignishandler ruft die private CancelSyncWithDevice-Methode auf, um die Hintergrundaufgabe abzubrechen.
  8. Die private CancelSyncWithDevice-Methode hebt die Registrierung auf und bricht alle aktiven Gerätesynchronisierungen ab, sodass das Gerät mithilfe der Unregister-Methode im BackgroundTaskRegistration -Objekt erneut geöffnet werden kann.

Suchen Sie es im Beispiel: Dateien mit dem Namen Scenario7_Sync Dateien anzeigen. Die Hintergrundklasse wird in IoSyncBackgroundTask implementiert.

Ausführen des Zertifizierungskits für Windows-Apps

Führen Sie das Zertifizierungskit für Windows-Apps aus.

Verwenden des Zertifizierungskits für Windows-Apps

Empfohlen. Wenn Sie das Zertifizierungskit für Windows-Apps ausführen, können Sie sicherstellen, dass Ihre App die Microsoft Store-Anforderungen erfüllt. Sie sollten sie immer dann ausführen, wenn Sie Ihrer App wichtige Funktionen hinzufügen.

UWP-App-UI, von A bis Z (XAML)

Erfahren Sie mehr über das Entwerfen der UWP-App-UI.

Roadmap für UWP-Apps mit C# und Visual Basic und Roadmap für UWP-Apps mit C++

Erfahren Sie mehr über das Erstellen von UWP-Apps mit C++, C# oder Visual Basic im Allgemeinen.

Asynchrone Programmierung (UWP-Apps)

Erfahren Sie, wie Sie Ihre Apps reaktionsfähig machen, wenn sie arbeiten, die möglicherweise eine längere Zeit in Anspruch nehmen.

Wichtige APIs