WebBluetooth с ошибкой записи в Windows, но не в OSX - PullRequest
0 голосов
/ 07 ноября 2018

Я пытаюсь отправить пример шестнадцатеричной строки на устройство BLE через веб-Bluetooth.

Эта строка отлично отправляется в OSX, но когда я пытаюсь отправить ее в Windows, я получаю следующую ошибку:

Uncaught (in promise) DOMException: GATT operation failed for unknown reason.

Вот код, который я использую для отправки строки и ее преобразования:

        event.target.writeValue(str2ab(":100000000C9434000C943E000C943E000C943E0082*"));

Вот моя функция str2ab:

 function str2ab(str) {
  var buf = new ArrayBuffer(str.length*2); // 2 bytes for each char
  var bufView = new Uint16Array(buf);
  for (var i=0, strLen=str.length; i<strLen; i++) {
    bufView[i] = str.charCodeAt(i);
  }
  return buf;
}

1 Ответ

0 голосов
/ 08 ноября 2018

Похоже, для окон у вас есть ограничение в 20 байт.

Чтобы исправить проблему, я использую буфер записи и рекурсивно перебираю его, пока не будут записаны все фрагменты. Вот код.

function writeBuffer(string) {
  writeOut(string, 0);
}

function writeOut(string, start) {
  if(start >= string.length) return;
  myCharacteristic.writeValue(str2ab(string.substring(start, (start+20)))).then(foo => {
    writeOut(string, (start+20));
  });
}
...