Отправка данных мигает (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, но особый формат отчетов о функциях, которые он отправляет и получает, нестандартен.

Другие вопросы по тегам