Невозможно открыть устройство, если оно составное (с двумя интерфейсами) с использованием API-интерфейсов webUSB
Я использую браузер Chrome v72.0.3626.109(официальная сборка)(32-разрядная версия) в Windows 10.
Попытка получить интерфейс USB для составного USB-устройства конкретного производителя с 1 интерфейсом, который зависит от поставщика, и другой интерфейс времени выполнения DFU, который загружает драйвер winusb. Я заверил, что драйвер производителя не загружен
открытие устройства через API-интерфейс webUSB device.open() завершается с кодом 18: SecurityError: доступ запрещен.
document.addEventListener('DOMContentLoaded', event => {
let button = document.getElementById('connect')
button.addEventListener('click', async() => {
let device
const VENDOR_ID = 0x04xx
const PRODUCT_ID = 0x6xxx
try {
device = await navigator.usb.requestDevice({
filters: [{
vendorId: VENDOR_ID,
productId: PRODUCT_ID
}]
})
await device.open(); //Begin a session
await device.selectConfiguration(1);
await device.claimInterface(0);
await device.releaseInterface(0);
await device.close();
} catch (error) {
console.log(error)
}
await device.close()
})
})
Другие сценарии, которые я пробовал...
Мое USB-устройство поставляется только с 1 интерфейсом (объемный интерфейс конкретного производителя) и без загруженных драйверов. Устройство не отображается в меню выбора устройств, открытом с помощью requestDevice.
Мое устройство USB имеет только 1 интерфейс (интерфейс времени выполнения DFU) с загруженным драйвером winusb. Устройство будет перечислено, открыто и заявлено, что интерфейс может работать с помощью API webUSB.
Существуют ли ограничения для отображения и открытия USB-устройства конкретного производителя с помощью API-интерфейсов webUSB? Что-то, что мне не хватает?
1 ответ
Интерфейс конкретного поставщика может быть открыт с WebUSB, но драйвер WinUSB должен быть загружен против него. Это требование Windows API, которое браузер использует для открытия устройства.