Hinzufügen von USB-Gerätefunktionen zum App-Manifest
In diesem Thema werden die Gerätefunktionen beschrieben, die für eine Windows-App erforderlich sind, die den Windows.Devices.Usb-Namespace verwendet.
- Sie müssen Package.appxmanifest mit USB-Gerätefunktionen aktualisieren.
- Die Geräteklasse muss eine der unterstützten Klassen sein.
USB-Gerätefunktion
Ihre USB-App muss bestimmte Gerätefunktionen im App-Paketmanifest enthalten, um Schlüsselinformationen zum Gerät anzugeben. Hier sind die erforderlichen Elemente in hierarchischer Reihenfolge:
<DeviceCapability>: Das Name-Attribut muss "usb" sein.
<Gerät>: Das Id-Attribut muss die Anbieter-/Produkt-ID angeben oder kann "any" sein, um den Zugriff auf jedes Gerät zu ermöglichen, das dem Funktionstyp entspricht.
<Funktion>: Das Type-Attribut kann den Geräteklassencode, den Namen oder die Geräteschnittstellen-GUID angeben.
Hinweis
Sie können die USB-Gerätefunktion in Microsoft Visual Studio 2013 nicht ändern. Klicken Sie in Projektmappen-Explorer mit der rechten Maustaste auf die Datei Package.appxmanifest, und wählen Sie Öffnen mit... und dann XML (Text)-Editor aus. Die Datei wird im einfachen XML-Format geöffnet.
<DeviceCapability Name="usb">
<Device Id="vidpid:xxxx xxxx">
<Function Type="classId:xx xx xx"/>
<Function Type="name:xxxxx"/>
<Function Type="winUsbId:xxxxx"/>
</Device>
</DeviceCapability>
Unterstützte USB-Geräteklassen
Die Namen und Codewerte der unterstützten Geräteklassen sind wie folgt:
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 * *
Hinweis
Auf Geräte, die zur DeviceFirmwareUpdate-Klasse gehören, kann nur von privilegierten Apps zugegriffen werden, die vom OEM für diesen PC explizit deklariert werden.
Da es sich um unbekannte Schnittstellen handelt, muss die App die Anbieter-/Produkt-ID für diese Klassencodes angeben.
- CDC (0x02)
- CDC-daten (0x0A)
- Sonstiges (0xEF)
- Anwendungsspezifisch (0xFE)
- Herstellerspezifisch (0xFF)
Diese USB-Geräteklassen werden nicht unterstützt:
- Ungültige Klasse (0x00)
- Audioklasse (0x01)
- HID-Klasse(0x03)
- Imageklasse (0x06)
- Druckerklasse (0x07)
- Massenspeicherklasse (0x08)
- Smart Karte-Klasse (0x0B)
- Audio-/Videoklasse (0x10)
- Drahtloser Controller (z. B. drahtloser USB-Host/Hub) (0xE0)
Beispiele für USB-Gerätefunktionen
Im folgenden Beispiel kann die App auf jede ActiveSync- oder StillImage-Schnittstelle auf einem beliebigen Gerät zugreifen. Die App ist nicht erforderlich, um den Anbieter und die Produktbezeichner anzugeben, da es sich um bekannte Klassentypen handelt.
<DeviceCapability Name="usb">
<Device Id="any">
<Function Type="classId:ef 01 01"/>
<Function Type="name:stillImage"/>
</Device>
</DeviceCapability>
Im folgenden Beispiel kann die App auf eine herstellerspezifische Schnittstelle auf dem OSR USB Fx2-Gerät zugreifen.
<DeviceCapability Name="usb">
<Device Id="vidpid:045e 930a">
<Function Type="name:vendorSpecific"/>
</Device>
</DeviceCapability>
Im folgenden Beispiel kann die App auf eine herstellerspezifische Schnittstelle auf einer anderen Version des OSR USB Fx2-Geräts zugreifen. Beachten Sie das classId-Format: "ff * *". Der Klassencode ist "ff" gefolgt von Platzhaltern (* *), um alle Unterklassen und Protokollcodes einzuschließen.
<DeviceCapability Name="usb">
<Device Id="vidpid:045e 930a">
<Function Type="classId:ff * *"/>
</Device>
</DeviceCapability>
Das folgende Beispiel ermöglicht der App den Zugriff auf das Gerät mit einer Geräteschnittstellen-GUID, die entweder im MS OS-Deskriptor oder im Geräte-INF definiert ist.
In diesem Fall darf der Wert der Geräte-ID nicht gleich "any" sein.
<DeviceCapability Name="usb">
<Device Id=" vidpid:1234 5678">
<Function Type="winUsbId:"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"/>
</Device>
</DeviceCapability>
App-Manifestpaket für das CustomUsbDeviceAccess-Beispiel
<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">
<!--OSRFX2 Device-->
<m2:Device Id="vidpid:0547 1002">
<m2:Function Type="classId:ff * *"/>
<!--<m2:Function Type="name:vendorSpecific"/>-->
</m2:Device>
<!--SuperMutt Device-->
<m2:Device Id="vidpid:045E 0611">
<!--<m2:Function Type="classId:ff * *"/>-->
<m2:Function Type="name:vendorSpecific"/>
</m2b:Device>
</m2:DeviceCapability>
</Capabilities>