Bleno 对二进制数据抛出索引超出范围错误
Bleno throws an index-out-of-range error on binary data
我的代码提供 BLE 服务,在 nodejs 下 运行 并且使用 bleno 包。
我的服务特性支持read
和notify
。
这是我对 onSubscribe
函数的简化实现:
function(maxValueSize, updateValueCallback) {
var a = buildPacket();
var buf = Buffer.from(a);
console.log('Buffer: ', buf);
updateValueCallback(this.RESULT_SUCCESS, buf);
}
函数 buildPacket
returns 一个 Uint8Array
的 20 字节。控制台语句显示缓冲区为 20 字节并具有预期值。
但是,调用 updateValueCallback
会引发错误:
RangeError: Index out of range
at checkInt (buffer.js:1187:11)
at Buffer.writeUInt8 (buffer.js:1233:5)
at Gatt.<anonymous> (/home/pi/Dev/MyTest/node_modules/bleno/lib/hci socket/gatt.js:881:33)
这里是来自gatt.js的相关代码:
878 if (useNotify) {
879 var notifyMessage = new Buffer(3 + dataLength);
880
881 notifyMessage.writeUInt8(ATT_OP_HANDLE_NOTIFY, 0);
882 notifyMessage.writeUInt16LE(valueHandle, 1);
我是否遗漏了任何步骤?
我阅读的关于 bleno 的大多数示例似乎都发送字符串数据。但是,我需要发送二进制数据。发送二进制数据有什么特殊要求吗?
原来 updateValueCallback
只接受一个参数。我应该更仔细地看一下 bleno 的例子:-(.
只需将 buf
作为唯一参数传递即可解决问题。
我的代码提供 BLE 服务,在 nodejs 下 运行 并且使用 bleno 包。
我的服务特性支持read
和notify
。
这是我对 onSubscribe
函数的简化实现:
function(maxValueSize, updateValueCallback) {
var a = buildPacket();
var buf = Buffer.from(a);
console.log('Buffer: ', buf);
updateValueCallback(this.RESULT_SUCCESS, buf);
}
函数 buildPacket
returns 一个 Uint8Array
的 20 字节。控制台语句显示缓冲区为 20 字节并具有预期值。
但是,调用 updateValueCallback
会引发错误:
RangeError: Index out of range
at checkInt (buffer.js:1187:11)
at Buffer.writeUInt8 (buffer.js:1233:5)
at Gatt.<anonymous> (/home/pi/Dev/MyTest/node_modules/bleno/lib/hci socket/gatt.js:881:33)
这里是来自gatt.js的相关代码:
878 if (useNotify) {
879 var notifyMessage = new Buffer(3 + dataLength);
880
881 notifyMessage.writeUInt8(ATT_OP_HANDLE_NOTIFY, 0);
882 notifyMessage.writeUInt16LE(valueHandle, 1);
我是否遗漏了任何步骤?
我阅读的关于 bleno 的大多数示例似乎都发送字符串数据。但是,我需要发送二进制数据。发送二进制数据有什么特殊要求吗?
原来 updateValueCallback
只接受一个参数。我应该更仔细地看一下 bleno 的例子:-(.
只需将 buf
作为唯一参数传递即可解决问题。