Come aggiungere funzionalità del dispositivo USB al manifesto dell'app
Questo argomento descrive le funzionalità del dispositivo necessarie per un'app di Windows che usa lo spazio dei nomi Windows.Devices.Usb.
- È necessario aggiornare Package.appxmanifest con le funzionalità del dispositivo USB.
- La classe device deve essere una delle classi supportate.
Utilizzo delle funzionalità dei dispositivi USB
L'app USB deve includere alcune funzionalità del dispositivo nel manifesto del pacchetto dell'app per specificare informazioni essenziali sul dispositivo. Ecco gli elementi obbligatori in ordine gerarchico:
<DeviceCapability>: l'attributo Name deve essere "usb".
<Device>: l'attributo id deve specificare l'ID fornitore/prodotto oppure può essere "any" per consentire l'accesso a qualsiasi dispositivo che corrisponda al tipo di funzione.
<Funzione>: l'attributo Type può specificare il codice della classe del dispositivo, il nome o il GUID dell'interfaccia del dispositivo.
Nota
Non è possibile modificare la funzionalità del dispositivo USB in Microsoft Visual Studio 2013. È necessario fare clic con il pulsante destro del mouse sul file Package.appxmanifest in Esplora soluzioni e selezionare Apri con..., quindi Editor XML (Testo). Il file viene aperto in formato XML normale.
<DeviceCapability Name="usb">
<Device Id="vidpid:xxxx xxxx">
<Function Type="classId:xx xx xx"/>
<Function Type="name:xxxxx"/>
<Function Type="winUsbId:xxxxx"/>
</Device>
</DeviceCapability>
Classi di dispositivi USB supportate
I nomi e i valori di codice delle classi di dispositivi supportate sono i seguenti:
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
È possibile accedere ai dispositivi appartenenti alla classe DeviceFirmwareUpdate solo tramite app con privilegi dichiarate in modo esplicito dall'OEM per tale PC.
Poiché si tratta di interfacce sconosciute, l'app deve specificare l'ID fornitore/prodotto per questi codici di classe.
- CDC (0x02)
- CDC-data (0x0A)
- Varie (0xEF)
- Specifico dell'applicazione (0xFE)
- Specifica del fornitore (0xFF)
Queste classi di dispositivi USB non sono supportate:
- Classe non valida (0x00)
- Classe audio (0x01)
- Classe HID (0x03)
- Classe Image (0x06)
- Classe stampante (0x07)
- Classe di archiviazione di massa (0x08)
- Classe smart card (0x0B)
- Classe audio/video (0x10)
- "Controller senza fili (ad esempio, host/hub USB senza fili) (0xE0)"
Esempi di funzionalità dei dispositivi USB
L'esempio seguente consente all'app di accedere a qualsiasi interfaccia ActiveSync o Still Image in qualsiasi dispositivo. L'app non è necessaria per specificare i fornitori e gli identificatori di prodotto perché si tratta di tipi di classe noti.
<DeviceCapability Name="usb">
<Device Id="any">
<Function Type="classId:ef 01 01"/>
<Function Type="name:stillImage"/>
</Device>
</DeviceCapability>
L'esempio seguente consente all'app di accedere a un'interfaccia specifica del fornitore nel dispositivo OSR USB Fx2.
<DeviceCapability Name="usb">
<Device Id="vidpid:045e 930a">
<Function Type="name:vendorSpecific"/>
</Device>
</DeviceCapability>
L'esempio seguente consente all'app di accedere a un'interfaccia specifica del fornitore in una versione diversa del dispositivo OSR USB Fx2. Si noti il formato classId: "ff * *". Il codice della classe è "ff", seguito dai caratteri jolly "*" per includere qualsiasi sottoclasse e codice di protocollo.
<DeviceCapability Name="usb">
<Device Id="vidpid:045e 930a">
<Function Type="classId:ff * *"/>
</Device>
</DeviceCapability>
L'esempio seguente consente all'app di accedere al dispositivo con un GUID dell'interfaccia dispositivo definito nel descrittore del sistema operativo MS o nel dispositivo INF.
In questo caso, il valore id dispositivo non deve essere uguale a "any".
<DeviceCapability Name="usb">
<Device Id=" vidpid:1234 5678">
<Function Type="winUsbId:"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"/>
</Device>
</DeviceCapability>
Pacchetto manifesto dell'app per l'esempio CustomUsbDeviceAccess
<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>