Bleno对二进制数据抛出索引超出范围错误

时间:2019-04-25 01:26:22

标签: node.js bleno

我的提供BLE服务的代码在nodejs下运行,并且使用bleno包。

我的服务特征支持readnotify

这是我对onSubscribe函数的简化实现:

function(maxValueSize, updateValueCallback) {
  var a = buildPacket();
  var buf = Buffer.from(a);
  console.log('Buffer: ', buf);
  updateValueCallback(this.RESULT_SUCCESS, buf);
}

函数buildPacket返回20字节的Uint8Array。控制台语句显示缓冲区为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上的大多数示例似乎都在发送字符串数据。但是,我需要发送二进制数据。发送二进制数据有什么特殊要求吗?

1 个答案:

答案 0 :(得分:0)

结果updateValueCallback仅采用一个参数。我应该更仔细地研究bleno示例:-(。

只需将buf作为唯一参数即可解决此问题。