UNPKG

noble

Version:

A Node.js BLE (Bluetooth Low Energy) central library.

77 lines (56 loc) 2.38 kB
var debug = require('debug')('signaling'); var events = require('events'); var os = require('os'); var util = require('util'); var CONNECTION_PARAMETER_UPDATE_REQUEST = 0x12; var CONNECTION_PARAMETER_UPDATE_RESPONSE = 0x13; var SIGNALING_CID = 0x0005; var Signaling = function(handle, aclStream) { this._handle = handle; this._aclStream = aclStream; this.onAclStreamDataBinded = this.onAclStreamData.bind(this); this.onAclStreamEndBinded = this.onAclStreamEnd.bind(this); this._aclStream.on('data', this.onAclStreamDataBinded); this._aclStream.on('end', this.onAclStreamEndBinded); }; util.inherits(Signaling, events.EventEmitter); Signaling.prototype.onAclStreamData = function(cid, data) { if (cid !== SIGNALING_CID) { return; } debug('onAclStreamData: ' + data.toString('hex')); var code = data.readUInt8(0); var identifier = data.readUInt8(1); var length = data.readUInt16LE(2); var signalingData = data.slice(4); debug('\tcode = ' + code); debug('\tidentifier = ' + identifier); debug('\tlength = ' + length); if (code === CONNECTION_PARAMETER_UPDATE_REQUEST) { this.processConnectionParameterUpdateRequest(identifier, signalingData); } }; Signaling.prototype.onAclStreamEnd = function() { this._aclStream.removeListener('data', this.onAclStreamDataBinded); this._aclStream.removeListener('end', this.onAclStreamEndBinded); }; Signaling.prototype.processConnectionParameterUpdateRequest = function(identifier, data) { var minInterval = data.readUInt16LE(0) * 1.25; var maxInterval = data.readUInt16LE(2) * 1.25; var latency = data.readUInt16LE(4); var supervisionTimeout = data.readUInt16LE(6) * 10; debug('\t\tmin interval = ', minInterval); debug('\t\tmax interval = ', maxInterval); debug('\t\tlatency = ', latency); debug('\t\tsupervision timeout = ', supervisionTimeout); if (os.platform() !== 'linux' || process.env.HCI_CHANNEL_USER) { var response = new Buffer(6); response.writeUInt8(CONNECTION_PARAMETER_UPDATE_RESPONSE, 0); // code response.writeUInt8(identifier, 1); // identifier response.writeUInt16LE(2, 2); // length response.writeUInt16LE(0, 4); this._aclStream.write(SIGNALING_CID, response); this.emit('connectionParameterUpdateRequest', this._handle, minInterval, maxInterval, latency, supervisionTimeout); } }; module.exports = Signaling;