Отправка данных мигает (1) на устройство
Я только начал изучать webusb и пытался использовать его, чтобы включить мигание (1) mk2. Я могу обнаружить устройство, открыть его, запросить интерфейс и вызвать controlTransferOut
, Проблема, которую я сейчас испытываю, заключается в том, что я не знаю, какие данные мне следует отправлять, чтобы они мигали или загорались.
Я использовал этот пример, где кто-то смог управлять им с помощью расширения Chrome, используя chrome.usb
интерфейс как вдохновение в попытке заставить его работать. Я написал следующий код:
const VENDOR_ID = 0x27b8;
navigator.usb.requestDevice({
filters: [{
vendorId: VENDOR_ID
}]
}).then(selectedDevice => {
device = selectedDevice;
return device.open();
}).then(() => {
return device.selectConfiguration(1);
}).then(() => {
return device.claimInterface(0);
}).then(() => {
return device.controlTransferOut({
requestType: 'class',
recipient: 'interface',
request: 0x09,
value: 1,
index: 0
});
}).then(() => {
const r = Math.floor((Math.random() * 255) + 0);
const g = Math.floor((Math.random() * 255) + 0);
const b = Math.floor((Math.random() * 255) + 0);
// not entirely sure what is going on below...
const fadeMillis = 500;
const th = (fadeMillis / 10) >> 8;
const tl = (fadeMillis / 10) & 0xff;
const data = new Uint8Array([0x01, 0x63, r, g, b, th, tl, 0x00, 0x00]).buffer;
return device.transferIn(1, data);
}).then(result => {
console.log(result);
}).catch(error => {
console.log(error);
});
Это не с ошибкой передачи при вызове controlTransferOut
, Однако, если я изменю requestType
к стандарту, то происходит сбой при вызове transferIn
,
Как я могу узнать, в каких данных и в каком формате должны быть данные, чтобы это работало правильно?
1 ответ
Вы должны включить data
во-первых controlTransferOut
, transferIn
не отправляет данные на устройство, а получает их.
Отредактировано для добавления: К сожалению, нет общего способа определения правильного формата для данных, отправляемых на устройство USB или с него, если оно не реализует стандартный класс устройств. Blink(1) mk2 использует протокол HID, но особый формат отчетов о функциях, которые он отправляет и получает, нестандартен.