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 funzionalità del dispositivo USB.
  • La classe del dispositivo deve essere una delle classi supportate.

Utilizzo della funzionalità del dispositivo USB

L'app USB deve includere alcune funzionalità del dispositivo nel manifesto del pacchetto app per specificare le informazioni chiave sul dispositivo. Ecco gli elementi necessari in ordine gerarchico:

<DeviceCapability>: l'attributo Name deve essere "usb".

<Dispositivo>: l'attributo Id deve specificare l'ID fornitore/prodotto o può essere "qualsiasi" 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 scegliere 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 dispositivo 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

    I dispositivi appartenenti alla classe DeviceFirmwareUpdate possono essere accessibili solo da app con privilegi dichiarate in modo esplicito dall'OEM per tale PC.

Poiché queste sono interfacce sconosciute, l'app è necessaria per specificare l'ID fornitore/prodotto per questi codici di classe.

  • CDC (0x02)
  • CDC-data (0x0A)
  • Varie (0xEF)
  • Specifica dell'applicazione (0xFE)
  • Specifica del fornitore (0xFF)

Queste classi di dispositivo 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 wireless (ad esempio, host USB wireless/hub) (0xE0)

Esempi di funzionalità del dispositivo USB

L'esempio seguente consente all'app di accedere a qualsiasi interfaccia ActiveSync o StillImage in qualsiasi dispositivo. L'app non è necessaria per specificare i fornitori e gli identificatori di prodotto perché questi sono 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 di classe è "ff" seguito da caratteri jolly (* *) per includere qualsiasi sottoclasse e codice del 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 del dispositivo definito nel descrittore del sistema operativo MS o nel dispositivo INF.

In questo caso, il valore ID dispositivo non deve essere uguale a "nessuno".

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