Como adicionar recursos de dispositivo USB ao manifesto do aplicativo

Este tópico descreve os recursos do dispositivo necessários para um aplicativo do Windows que usa o namespace Windows.Devices.Usb .

  • Você deve atualizar Package.appxmanifest com recursos de dispositivo USB.
  • A classe de dispositivo deve ser uma das classes com suporte.

Uso da funcionalidade do dispositivo USB

Seu aplicativo USB deve incluir determinadas funcionalidades de dispositivo em seu manifesto do pacote de aplicativos para especificar informações importantes sobre o dispositivo. Aqui estão os elementos necessários em ordem hierárquica:

<DeviceCapability>: o atributo Name deve ser "usb".

<Dispositivo>: o atributo Id deve especificar a ID do fornecedor/produto ou pode ser "qualquer" para permitir o acesso a qualquer dispositivo que corresponda ao tipo de função.

<Função>: o atributo Type pode especificar o código de classe do dispositivo, o nome ou o GUID da interface do dispositivo.

Observação

Não é possível modificar a funcionalidade do dispositivo USB no Microsoft Visual Studio 2013. Você deve clicar com o botão direito do mouse no arquivo Package.appxmanifest em Gerenciador de Soluções e selecionar Abrir com...e, em seguida, Editor XML (Texto). O arquivo é aberto em XML sem formatação.

<DeviceCapability Name="usb">
    <Device Id="vidpid:xxxx xxxx">
      <Function Type="classId:xx xx xx"/>
      <Function Type="name:xxxxx"/>
      <Function Type="winUsbId:xxxxx"/>
    </Device>
</DeviceCapability>

Classes de dispositivo USB com suporte

Os nomes e valores de código das classes de dispositivo com suporte são os seguintes:

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

    Observação

    Os dispositivos que pertencem à classe DeviceFirmwareUpdate só podem ser acessados por aplicativos privilegiados declarados explicitamente pelo OEM para esse computador.

Como são interfaces desconhecidas, o aplicativo é necessário para especificar a ID do fornecedor/produto para esses códigos de classe.

  • CDC (0x02)
  • Dados CDC (0x0A)
  • Diversos (0xEF)
  • Específico do aplicativo (0xFE)
  • Específico do fornecedor (0xFF)

Não há suporte para essas classes de dispositivo USB:

  • Classe inválida (0x00)
  • Classe de áudio (0x01)
  • Classe HID(0x03)
  • Classe image (0x06)
  • Classe Printer (0x07)
  • Classe de armazenamento em massa (0x08)
  • Classe smart cartão (0x0B)
  • Classe de áudio/vídeo (0x10)
  • Controlador sem fio (como host/hub USB sem fio) (0xE0)

Exemplos de funcionalidade do dispositivo USB

O exemplo a seguir permite que o aplicativo acesse qualquer interface ActiveSync ou StillImage em qualquer dispositivo. O aplicativo não é necessário para especificar o fornecedor e os identificadores de produto porque esses são tipos de classe conhecidos.

<DeviceCapability Name="usb">
  <Device Id="any">
    <Function Type="classId:ef 01 01"/>
    <Function Type="name:stillImage"/>
  </Device>
</DeviceCapability>

O exemplo a seguir permite que o aplicativo acesse uma interface específica do fornecedor no dispositivo OSR USB Fx2.

<DeviceCapability Name="usb">
  <Device Id="vidpid:045e 930a">
    <Function Type="name:vendorSpecific"/>
  </Device>
</DeviceCapability>

O exemplo a seguir permite que o aplicativo acesse uma interface específica do fornecedor em uma versão diferente do dispositivo OSR USB Fx2. Observe o formato classId: "ff * *". O código de classe é "ff" seguido por curingas (* *) para incluir qualquer subclasse e código de protocolo.

<DeviceCapability Name="usb">
  <Device Id="vidpid:045e 930a">
    <Function Type="classId:ff * *"/>
  </Device>
</DeviceCapability>

O exemplo a seguir permite que o aplicativo acesse o dispositivo com um GUID de interface do dispositivo definido no Descritor do SISTEMA OPERACIONAL MS ou no INF do dispositivo.

Nesse caso, o valor da ID do dispositivo não deve ser igual a "qualquer".

<DeviceCapability Name="usb">
  <Device Id=" vidpid:1234 5678">
    <Function Type="winUsbId:"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"/>
  </Device>
</DeviceCapability>

Pacote de manifesto do aplicativo para o exemplo 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>