Добавление возможностей USB-устройства в манифест приложения
В этом разделе описываются возможности устройства, необходимые для приложения Windows, использующего пространство имен Windows.Devices.Usb .
- Необходимо обновить Package.appxmanifest с помощью возможностей USB-устройства.
- Класс устройства должен быть одним из поддерживаемых классов.
Использование возможностей USB-устройства
Приложение USB должно включать определенные возможности устройства в манифест пакета приложения, чтобы указать ключевые сведения об устройстве. Ниже приведены обязательные элементы в иерархическом порядке:
<DeviceCapability>. Атрибут Name должен иметь значение "usb".
<Устройство>. Атрибут Id должен указывать идентификатор поставщика или продукта или может иметь значение "любой", чтобы разрешить доступ к любому устройству, соответствующему типу функции.
<Функция>. Атрибут Type может указывать код класса устройства, имя или GUID интерфейса устройства.
Примечание
Вы не можете изменить возможность USB-устройства в Microsoft Visual Studio 2013. Необходимо щелкнуть правой кнопкой мыши файл Package.appxmanifest в Обозреватель решений и выбрать пункт Открыть с помощью..., а затем редактор XML (текст). Файл откроется в формате обычного XML.
<DeviceCapability Name="usb">
<Device Id="vidpid:xxxx xxxx">
<Function Type="classId:xx xx xx"/>
<Function Type="name:xxxxx"/>
<Function Type="winUsbId:xxxxx"/>
</Device>
</DeviceCapability>
Поддерживаемые классы USB-устройств
Ниже перечислены имена и значения кода поддерживаемых классов устройств.
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 * *
Примечание
Устройства, принадлежащие классу DeviceFirmwareUpdate, могут быть доступны только привилегированным приложениям, явно объявленным изготовителем оборудования для этого компьютера.
Так как это неизвестные интерфейсы, приложение должно указать идентификатор поставщика или продукта для этих кодов классов.
- CDC (0x02)
- CDC-data (0x0A)
- Прочее (0xEF)
- Конкретное приложение (0xFE)
- Конкретный поставщик (0xFF)
Следующие классы USB-устройств не поддерживаются:
- Недопустимый класс (0x00)
- Класс Audio (0x01)
- Класс HID(0x03)
- Класс Image (0x06)
- Класс Printer (0x07)
- Класс запоминающих устройств (0x08)
- Класс Smart карта (0x0B)
- Класс audio/video (0x10)
- Беспроводной контроллер (например, беспроводной USB-узел или концентратор) (0xE0)
Примеры возможностей USB-устройства
В следующем примере приложение может получить доступ к любому интерфейсу ActiveSync или StillImage на любом устройстве. Приложению не требуется указывать идентификаторы поставщика и продукта, так как это известные типы классов.
<DeviceCapability Name="usb">
<Device Id="any">
<Function Type="classId:ef 01 01"/>
<Function Type="name:stillImage"/>
</Device>
</DeviceCapability>
В следующем примере приложение может получить доступ к интерфейсу конкретного поставщика на устройстве OSR USB Fx2.
<DeviceCapability Name="usb">
<Device Id="vidpid:045e 930a">
<Function Type="name:vendorSpecific"/>
</Device>
</DeviceCapability>
В следующем примере приложение может получить доступ к интерфейсу конкретного поставщика в другой версии устройства OSR USB Fx2. Обратите внимание на формат classId: "ff * *". Код класса — "ff", за которым следуют подстановочные знаки (* *) для включения любого подкласса и кода протокола.
<DeviceCapability Name="usb">
<Device Id="vidpid:045e 930a">
<Function Type="classId:ff * *"/>
</Device>
</DeviceCapability>
В следующем примере приложение может получить доступ к устройству с помощью GUID интерфейса устройства, определенного в дескрипторе ОС MS или в INF устройства.
В этом случае значение идентификатора устройства не должно равняться "any".
<DeviceCapability Name="usb">
<Device Id=" vidpid:1234 5678">
<Function Type="winUsbId:"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"/>
</Device>
</DeviceCapability>
Пакет манифеста приложения для примера 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>