cdif-sensortag
Version:
CDIF BLE module for the TI SensorTag
352 lines (312 loc) • 10.5 kB
JavaScript
var CC2540SensorTag = require('./cc2540');
var CC2650SensorTag = require('./cc2650');
var CdifDevice = require('cdif-device');
var CdifUtil = require('cdif-util');
var SensorTag = function(bleDevice) {
var spec = null;
var peripheral = bleDevice._peripheral;
var isCC2650 = CC2650SensorTag.is(peripheral);
if (isCC2650) {
spec = require('./cc2650.json');
this.sensorTag = new CC2650SensorTag(peripheral);
} else {
spec = require('./cc2540.json');
this.sensorTag = new CC2540SensorTag(peripheral);
}
CdifDevice.call(this, spec);
this.device = bleDevice;
this.sensorTag.device = bleDevice;
var service;
if (isCC2650) {
this.setAction('urn:cdif-net:serviceID:Illuminance', 'getIlluminanceData', getLuxometerData);
this.setEventSubscription('urn:cdif-net:serviceID:Illuminance', subscribeLuxometerEvent, unsubscribeLuxometerEvent);
}
this.setAction('urn:cdif-net:serviceID:Temperature', 'getTemperatureData', getTemperatureData);
this.setEventSubscription('urn:cdif-net:serviceID:Temperature', subscribeTemperatureEvent, unsubscribeTemperatureEvent);
this.setAction('urn:cdif-net:serviceID:Accelerometer', 'getAccelerometerData', getAccelerometerData);
this.setEventSubscription('urn:cdif-net:serviceID:Accelerometer', subscribeAccelerometerEvent, unsubscribeAccelerometerEvent);
this.setAction('urn:cdif-net:serviceID:Humidity', 'getHumidityData', getHumidityData);
this.setEventSubscription('urn:cdif-net:serviceID:Humidity', subscribeHumidityEvent, unsubscribeHumidityEvent);
this.setAction('urn:cdif-net:serviceID:Magnetometer', 'getMagnetometerData', getMagnetometerData);
this.setEventSubscription('urn:cdif-net:serviceID:Magnetometer', subscribeMagnetometerEvent, unsubscribeMagnetometerEvent);
this.setAction('urn:cdif-net:serviceID:Barometer', 'getBarometerData', getBarometerData);
this.setEventSubscription('urn:cdif-net:serviceID:Barometer', subscribeBarometerEvent, unsubscribeBarometerEvent);
this.setAction('urn:cdif-net:serviceID:Gyroscope', 'getGyroscopeData', getGyroscopeData);
this.setEventSubscription('urn:cdif-net:serviceID:Gyroscope', subscribeGyroscopeEvent, unsubscribeGyroscopeEvent);
};
CdifUtil.inherits(SensorTag, CdifDevice);
SensorTag.is = function(peripheral) {
return (CC2540SensorTag.is(peripheral) || CC2650SensorTag.is(peripheral));
};
var subscribeLuxometerEvent = function(onChange, callback) {
var _this = this;
this.sensorTag.on('luxometerChange', function() {
var output = {};
output['illuminance'] = (arguments[0].toFixed(1)) / 1;
_this.setServiceStates('urn:cdif-net:serviceID:Illuminance', output);
});
this.sensorTag.enableLuxometer(function(error) {
if (error) {
callback(error);
} else {
_this.sensorTag.notifyLuxometer(callback);
}
});
};
var unsubscribeLuxometerEvent = function(callback) {
this.sensorTag.unnotifyLuxometer(function(error) {
callback(error);
});
};
var subscribeTemperatureEvent = function(onChange, callback) {
var _this = this;
this.sensorTag.on('irTemperatureChange', function() {
var output = {};
output['temprature'] = (arguments[1].toFixed(1)) / 1;
_this.setServiceStates('urn:cdif-net:serviceID:Temperature', output);
});
this.sensorTag.enableIrTemperature(function(error) {
if (error) {
callback(error);
} else {
_this.sensorTag.notifyIrTemperature(callback);
}
});
};
var unsubscribeTemperatureEvent = function(callback) {
this.sensorTag.unnotifyIrTemperature(function(error) {
callback(error);
});
};
var subscribeAccelerometerEvent = function(onChange, callback) {
var _this = this;
this.sensorTag.on('accelerometerChange', function() {
var output = {};
output['x'] = (arguments[0].toFixed(1)) / 1;
output['y'] = (arguments[1].toFixed(1)) / 1;
output['z'] = (arguments[2].toFixed(1)) / 1;
_this.setServiceStates('urn:cdif-net:serviceID:Accelerometer', output);
});
this.sensorTag.enableAccelerometer(function(error) {
if (error) {
callback(error);
} else {
_this.sensorTag.notifyAccelerometer(callback);
}
});
};
var unsubscribeAccelerometerEvent = function(callback) {
this.sensorTag.unnotifyAccelerometer(function(error) {
callback(error);
});
};
var subscribeHumidityEvent = function(onChange, callback) {
var _this = this;
this.sensorTag.on('humidityChange', function() {
var output = {};
output['humidity'] = (arguments[1].toFixed(1)) / 1;
_this.setServiceStates('urn:cdif-net:serviceID:Humidity', output);
});
this.sensorTag.enableHumidity(function(error) {
if (error) {
callback(error);
} else {
_this.sensorTag.notifyHumidity(callback);
}
});
};
var unsubscribeHumidityEvent = function(callback) {
this.sensorTag.unnotifyHumidity(function(error) {
callback(error);
});
};
var subscribeMagnetometerEvent = function(onChange, callback) {
var _this = this;
this.sensorTag.on('magnetometerChange', function() {
var output = {};
output['x'] = (arguments[0].toFixed(1)) / 1;
output['y'] = (arguments[1].toFixed(1)) / 1;
output['z'] = (arguments[2].toFixed(1)) / 1;
_this.setServiceStates('urn:cdif-net:serviceID:Magnetometer', output);
});
this.sensorTag.enableMagnetometer(function(error) {
if (error) {
callback(error);
} else {
_this.sensorTag.notifyMagnetometer(callback);
}
});
};
var unsubscribeMagnetometerEvent = function(callback) {
this.sensorTag.unnotifyMagnetometer(function(error) {
callback(error);
});
};
var subscribeBarometerEvent = function(onChange, callback) {
var _this = this;
this.sensorTag.on('barometricPressureChange', function() {
var output = {};
output['pressure'] = (arguments[0].toFixed(1)) / 1;
_this.setServiceStates('urn:cdif-net:serviceID:Barometer', output);
});
this.sensorTag.enableBarometricPressure(function(error) {
if (error) {
callback(error);
} else {
_this.sensorTag.notifyBarometricPressure(callback);
}
});
};
var unsubscribeBarometerEvent = function(callback) {
this.sensorTag.unnotifyBarometricPressure(function(error) {
callback(error);
});
};
var subscribeGyroscopeEvent = function(onChange, callback) {
var _this = this;
this.sensorTag.on('gyroscopeChange', function() {
var output = {};
output['x'] = (arguments[0].toFixed(1)) / 1;
output['y'] = (arguments[1].toFixed(1)) / 1;
output['z'] = (arguments[2].toFixed(1)) / 1;
_this.setServiceStates('urn:cdif-net:serviceID:Gyroscope', output);
});
this.sensorTag.enableGyroscope(function(error) {
if (error) {
callback(error);
} else {
_this.sensorTag.notifyGyroscope(callback);
}
});
};
var unsubscribeGyroscopeEvent = function(callback) {
this.sensorTag.unnotifyGyroscope(function(error) {
callback(error);
});
};
var getLuxometerData = function(args, callback) {
var output = {}; var _this = this;
this.sensorTag.enableLuxometer(function(error) {
if (error) {
callback(error, null);
} else {
_this.sensorTag.readLuxometer(function(error, lux) {
if (error) {
callback(error, null);
} else {
output['illuminance'] = (lux.toFixed(1)) / 1; // cast to number type
callback(null, output);
}
});
}
});
};
var getTemperatureData = function(args, callback) {
var output = {}; var _this = this;
this.sensorTag.enableIrTemperature(function(error) {
if (error) {
callback(error, null);
} else {
_this.sensorTag.readIrTemperature(function(error, objectTemperature, ambientTemperature) {
if (error) {
callback(error, null);
} else {
output['temperature'] = (ambientTemperature.toFixed(1)) / 1;
callback(null, output);
}
});
}
});
};
var getHumidityData = function(args, callback) {
var output = {}; var _this = this;
this.sensorTag.enableHumidity(function(error) {
if (error) {
callback(error, null);
} else {
_this.sensorTag.readHumidity(function(error, temperature, humidity) {
if (error) {
callback(error, null);
} else {
output['humidity'] = (humidity.toFixed(1)) / 1;
callback(null, output);
}
});
}
});
};
var getAccelerometerData = function(args, callback) {
var output = {}; var _this = this;
this.sensorTag.enableAccelerometer(function(error) {
if (error) {
callback(error, null);
} else {
_this.sensorTag.readAccelerometer(function(error, x, y, z) {
if (error) {
callback(error, null);
} else {
output['x'] = (x.toFixed(1)) / 1;
output['y'] = (y.toFixed(1)) / 1;
output['z'] = (z.toFixed(1)) / 1;
callback(null, output);
}
});
}
});
};
var getMagnetometerData = function(args, callback) {
var output = {}; var _this = this;
this.sensorTag.enableMagnetometer(function(error) {
if (error) {
callback(error, null);
} else {
_this.sensorTag.readMagnetometer(function(error, x, y, z) {
if (error) {
callback(error, null);
} else {
output['x'] = (x.toFixed(1)) / 1;
output['y'] = (y.toFixed(1)) / 1;
output['z'] = (z.toFixed(1)) / 1;
callback(null, output);
}
});
}
});
};
var getBarometerData = function(args, callback) {
var output = {}; var _this = this;
this.sensorTag.enableBarometricPressure(function(error) {
if (error) {
callback(error, null);
} else {
_this.sensorTag.readBarometricPressure(function(error, pressure) {
if (error) {
callback(error, null);
} else {
output['pressure'] = (pressure.toFixed(1)) / 1;
callback(null, output);
}
});
}
});
};
var getGyroscopeData = function(args, callback) {
var output = {}; var _this = this;
this.sensorTag.enableGyroscope(function(error) {
if (error) {
callback(error, null);
} else {
_this.sensorTag.readGyroscope(function(error, x, y, z) {
if (error) {
callback(error, null);
} else {
output['x'] = (x.toFixed(1)) / 1;
output['y'] = (y.toFixed(1)) / 1;
output['z'] = (z.toFixed(1)) / 1;
callback(null, output);
}
});
}
});
};
module.exports = SensorTag;