node.jsbleno

Bleno throws an index-out-of-range error on binary data


My code, that provides a BLE service, is running under nodejs and is using bleno package.

My service characteristic supports read and notify.

Here is my simplified implementation of onSubscribe function:

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

Function buildPacket returns a Uint8Array of 20 bytes. The console statement shows that the buffer is of 20 bytes and has the expected values.

However, call to updateValueCallback throws an error:

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)

Here is the relevant code from 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);

Is there any step I am missing?

Most examples on bleno I read seem to send string data. However, I need to send binary data. Is there anything special required for sending binary data?


Solution

  • Turns out updateValueCallback takes only one parameter. I should have looked at bleno examples a bit more carefully:-(.

    Just passing buf as the sole parameter fixed the problem.