UNPKG

cdif-sensortag

Version:

CDIF BLE module for the TI SensorTag

198 lines (153 loc) 8.04 kB
// http://processors.wiki.ti.com/index.php/SensorTag_User_Guide var IR_TEMPERATURE_UUID = 'f000aa0004514000b000000000000000'; var HUMIDITY_UUID = 'f000aa2004514000b000000000000000'; var BAROMETRIC_PRESSURE_UUID = 'f000aa4004514000b000000000000000'; var SIMPLE_KEY_UUID = 'ffe0'; var IR_TEMPERATURE_CONFIG_UUID = 'f000aa0204514000b000000000000000'; var IR_TEMPERATURE_DATA_UUID = 'f000aa0104514000b000000000000000'; var IR_TEMPERATURE_PERIOD_UUID = 'f000aa0304514000b000000000000000'; var IR_TEMPERATURE_PERIOD_UUID = 'f000aa0304514000b000000000000000'; var HUMIDITY_CONFIG_UUID = 'f000aa2204514000b000000000000000'; var HUMIDITY_DATA_UUID = 'f000aa2104514000b000000000000000'; var HUMIDITY_PERIOD_UUID = 'f000aa2304514000b000000000000000'; var BAROMETRIC_PRESSURE_CONFIG_UUID = 'f000aa4204514000b000000000000000'; var BAROMETRIC_PRESSURE_DATA_UUID = 'f000aa4104514000b000000000000000'; var BAROMETRIC_PRESSURE_PERIOD_UUID = 'f000aa4404514000b000000000000000'; var SIMPLE_KEY_DATA_UUID = 'ffe1'; function SensorTagCommon() { this.onIrTemperatureChangeBinded = this.onIrTemperatureChange.bind(this); this.onHumidityChangeBinded = this.onHumidityChange.bind(this); this.onBarometricPressureChangeBinded = this.onBarometricPressureChange.bind(this); this.onSimpleKeyChangeBinded = this.onSimpleKeyChange.bind(this); } SensorTagCommon.prototype.toString = function() { return JSON.stringify({ id: this.id, type: this.type }); }; SensorTagCommon.prototype.writePeriodCharacteristic = function(serviceUuid, characteristicUuid, period, callback) { period /= 10; // input is scaled by units of 10ms if (period < 10) { period = 10; } else if (period > 255) { period = 255; } this.device.writeUInt8Characteristic(serviceUuid, characteristicUuid, period, callback); }; SensorTagCommon.prototype.enableConfigCharacteristic = function(serviceUuid, characteristicUuid, callback) { this.device.writeUInt8Characteristic(serviceUuid, characteristicUuid, 0x01, callback); }; SensorTagCommon.prototype.disableConfigCharacteristic = function(serviceUuid, characteristicUuid, callback) { this.device.writeUInt8Characteristic(serviceUuid, characteristicUuid, 0x00, callback); }; SensorTagCommon.prototype.setIrTemperaturePeriod = function(period, callback) { this.writePeriodCharacteristic(IR_TEMPERATURE_UUID, IR_TEMPERATURE_PERIOD_UUID, period, callback); }; SensorTagCommon.prototype.enableIrTemperature = function(callback) { this.enableConfigCharacteristic(IR_TEMPERATURE_UUID, IR_TEMPERATURE_CONFIG_UUID, callback); }; SensorTagCommon.prototype.disableIrTemperature = function(callback) { this.disableConfigCharacteristic(IR_TEMPERATURE_UUID, IR_TEMPERATURE_CONFIG_UUID, callback); }; SensorTagCommon.prototype.readIrTemperature = function(callback) { this.device.readDataCharacteristic(IR_TEMPERATURE_UUID, IR_TEMPERATURE_DATA_UUID, function(error, data) { if (error) { return callback(error); } this.convertIrTemperatureData(data, function(objectTemperature, ambientTemperature) { callback(null, objectTemperature, ambientTemperature); }.bind(this)); }.bind(this)); }; SensorTagCommon.prototype.onIrTemperatureChange = function(data) { this.convertIrTemperatureData(data, function(objectTemperature, ambientTemperature) { this.emit('irTemperatureChange', objectTemperature, ambientTemperature); }.bind(this)); }; SensorTagCommon.prototype.notifyIrTemperature = function(callback) { this.device.notifyCharacteristic(IR_TEMPERATURE_UUID, IR_TEMPERATURE_DATA_UUID, true, this.onIrTemperatureChangeBinded, callback); }; SensorTagCommon.prototype.unnotifyIrTemperature = function(callback) { this.device.notifyCharacteristic(IR_TEMPERATURE_UUID, IR_TEMPERATURE_DATA_UUID, false, this.onIrTemperatureChangeBinded, callback); }; SensorTagCommon.prototype.setIrTemperaturePeriod = function(period, callback) { this.writePeriodCharacteristic(IR_TEMPERATURE_UUID, IR_TEMPERATURE_PERIOD_UUID, period, callback); }; SensorTagCommon.prototype.setHumidityPeriod = function(period, callback) { this.writePeriodCharacteristic(HUMIDITY_UUID, HUMIDITY_PERIOD_UUID, period, callback); }; SensorTagCommon.prototype.enableHumidity = function(callback) { this.enableConfigCharacteristic(HUMIDITY_UUID, HUMIDITY_CONFIG_UUID, callback); }; SensorTagCommon.prototype.disableHumidity = function(callback) { this.disableConfigCharacteristic(HUMIDITY_UUID, HUMIDITY_CONFIG_UUID, callback); }; SensorTagCommon.prototype.readHumidity = function(callback) { this.device.readDataCharacteristic(HUMIDITY_UUID, HUMIDITY_DATA_UUID, function(error, data) { if (error) { return callback(error); } this.convertHumidityData(data, function(temperature, humidity) { callback(null, temperature, humidity); }); }.bind(this)); }; SensorTagCommon.prototype.onHumidityChange = function(data) { this.convertHumidityData(data, function(temperature, humidity) { this.emit('humidityChange', temperature, humidity); }.bind(this)); }; SensorTagCommon.prototype.notifyHumidity = function(callback) { this.device.notifyCharacteristic(HUMIDITY_UUID, HUMIDITY_DATA_UUID, true, this.onHumidityChangeBinded, callback); }; SensorTagCommon.prototype.unnotifyHumidity = function(callback) { this.device.notifyCharacteristic(HUMIDITY_UUID, HUMIDITY_DATA_UUID, false, this.onHumidityChangeBinded, callback); }; SensorTagCommon.prototype.setBarometricPressurePeriod = function(period, callback) { this.writePeriodCharacteristic(BAROMETRIC_PRESSURE_UUID, BAROMETRIC_PRESSURE_PERIOD_UUID, period, callback); }; SensorTagCommon.prototype.disableBarometricPressure = function(callback) { this.disableConfigCharacteristic(BAROMETRIC_PRESSURE_UUID, BAROMETRIC_PRESSURE_CONFIG_UUID, callback); }; SensorTagCommon.prototype.readBarometricPressure = function(callback) { this.device.readDataCharacteristic(BAROMETRIC_PRESSURE_UUID, BAROMETRIC_PRESSURE_DATA_UUID, function(error, data) { if (error) { return callback(error); } this.convertBarometricPressureData(data, function(pressure) { callback(null, pressure); }.bind(this)); }.bind(this)); }; SensorTagCommon.prototype.onBarometricPressureChange = function(data) { this.convertBarometricPressureData(data, function(pressure) { this.emit('barometricPressureChange', pressure); }.bind(this)); }; SensorTagCommon.prototype.notifyBarometricPressure = function(callback) { this.device.notifyCharacteristic(BAROMETRIC_PRESSURE_UUID, BAROMETRIC_PRESSURE_DATA_UUID, true, this.onBarometricPressureChangeBinded, callback); }; SensorTagCommon.prototype.unnotifyBarometricPressure = function(callback) { this.device.notifyCharacteristic(BAROMETRIC_PRESSURE_UUID, BAROMETRIC_PRESSURE_DATA_UUID, false, this.onBarometricPressureChangeBinded, callback); }; SensorTagCommon.prototype.onSimpleKeyChange = function(data) { this.convertSimpleKeyData(data, function(/*left, right, ...*/) { var emitArguments = Array.prototype.slice.call(arguments); emitArguments.unshift('simpleKeyChange'); this.emit.apply(this, emitArguments); }.bind(this)); }; SensorTagCommon.prototype.convertSimpleKeyData = function(data, callback) { var b = data.readUInt8(0); var left = (b & 0x2) ? true : false; var right = (b & 0x1) ? true : false; callback(left, right); }; SensorTagCommon.prototype.notifySimpleKey = function(callback) { this.device.notifyCharacteristic(SIMPLE_KEY_UUID, SIMPLE_KEY_DATA_UUID, true, this.onSimpleKeyChangeBinded, callback); }; SensorTagCommon.prototype.unnotifySimpleKey = function(callback) { this.device.notifyCharacteristic(SIMPLE_KEY_UUID, SIMPLE_KEY_DATA_UUID, false, this.onSimpleKeyChangeBinded, callback); }; module.exports = SensorTagCommon;