2

我正在尝试通过网络蓝牙将示例十六进制字符串发送到 BLE 设备。

此字符串在 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;
}
4

1 回答 1

1

因此,对于 Windows,您似乎有 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));
  });
}
于 2018-11-08T01:48:53.430 回答