Share via


Adición de funcionalidades de dispositivo USB al manifiesto de la aplicación

En este tema se describen las funcionalidades del dispositivo necesarias para una aplicación de Windows que usa el espacio de nombres Windows.Devices.Usb .

  • Debes actualizar Package.appxmanifest con funcionalidades de dispositivo USB.
  • La clase de dispositivo debe ser una de las clases admitidas.

Uso de la funcionalidad del dispositivo USB

La aplicación USB debe incluir determinadas funcionalidades del dispositivo en su manifiesto del paquete de aplicación para especificar información clave sobre el dispositivo. Estos son los elementos necesarios en orden jerárquico:

<DeviceCapability>: el atributo Name debe ser "usb".

<Dispositivo>: el atributo Id debe especificar el identificador de proveedor o producto o puede ser "cualquiera" para permitir el acceso a cualquier dispositivo que coincida con el tipo de función.

<Función>: el atributo Type puede especificar el código de clase de dispositivo, el nombre o el GUID de la interfaz de dispositivo.

Nota:

No se puede modificar la funcionalidad del dispositivo USB en Microsoft Visual Studio 2013. Debe hacer clic con el botón derecho en el archivo Package.appxmanifest en Explorador de soluciones y seleccionar Abrir con... y, a continuación, editor XML (texto). El archivo se abre en XML sin formato.

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

Clases de dispositivo USB admitidas

Los nombres y los valores de código de las clases de dispositivo admitidas son los siguientes:

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

    Solo se puede acceder a los dispositivos que pertenecen a la clase DeviceFirmwareUpdate mediante aplicaciones con privilegios declaradas explícitamente por el OEM para ese equipo.

Dado que se trata de interfaces desconocidas, la aplicación es necesaria para especificar el identificador de proveedor o producto para estos códigos de clase.

  • CDC (0x02)
  • Datos CDC (0x0A)
  • Varios (0xEF)
  • Específico de la aplicación (0xFE)
  • Específico del proveedor (0xFF)

No se admiten estas clases de dispositivo USB:

  • Clase no válida (0x00)
  • Clase audio (0x01)
  • CLASE HID(0x03)
  • Clase image (0x06)
  • Clase Printer (0x07)
  • Clase de almacenamiento masivo (0x08)
  • Clase de tarjeta inteligente (0x0B)
  • Clase audio/vídeo (0x10)
  • Controlador inalámbrico (por ejemplo, host o concentrador USB inalámbrico) (0xE0)

Ejemplos de funcionalidad del dispositivo USB

En el ejemplo siguiente se permite que la aplicación tenga acceso a cualquier interfaz ActiveSync o StillImage en cualquier dispositivo. La aplicación no es necesaria para especificar los identificadores de proveedor y producto porque son tipos de clase conocidos.

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

En el ejemplo siguiente se permite que la aplicación acceda a una interfaz específica del proveedor en el dispositivo OSR USB Fx2.

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

En el ejemplo siguiente se permite que la aplicación acceda a una interfaz específica del proveedor en una versión diferente del dispositivo USB Fx2 del OSR. Anote el formato classId: "ff * *". El código de clase es "ff" seguido de caracteres comodín (* *) para incluir cualquier subclase y código de protocolo.

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

En el ejemplo siguiente se permite que la aplicación acceda al dispositivo con un GUID de interfaz de dispositivo definido en el descriptor del sistema operativo MS o en el INF del dispositivo.

En este caso, el valor de Id. de dispositivo no debe ser igual a "any".

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

Paquete de manifiesto de la aplicación para el ejemplo 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>