我正尝试通过Web蓝牙将示例十六进制字符串发送到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;
}
答案 0 :(得分:1)
因此对于Windows,看起来您有20个字节的限制。
要解决此问题,我使用了写缓冲区,并递归遍历它,直到所有位都被写完为止。这是代码。
{'y': 108.729, 'x': 66.745} >>> {'y': 108.584, 'x': 67.255}
{'y': 108.584, 'x': 67.255} >>> {'y': 90.769, 'x': 139.519}
{'y': 90.769, 'x': 139.519} >>> {'y': 90.161, 'x': 142.494}
{'y': 90.161, 'x': 142.494} >>> {'y': 90.068, 'x': 143.062}