Skip to content

Commit

Permalink
Modernize library and test code
Browse files Browse the repository at this point in the history
  • Loading branch information
rwaldron committed Jun 12, 2020
1 parent b0b1a21 commit fbd7064
Show file tree
Hide file tree
Showing 113 changed files with 15,302 additions and 16,576 deletions.
757 changes: 364 additions & 393 deletions lib/accelerometer.js

Large diffs are not rendered by default.

202 changes: 88 additions & 114 deletions lib/altimeter.js
@@ -1,9 +1,9 @@
var Board = require("./board");
var Fn = require("./fn");
var Emitter = require("events").EventEmitter;
var util = require("util");
const Board = require("./board");
const Emitter = require("events");
const { toFixed } = require("./fn");
const priv = new Map();

var Controllers = {
const Controllers = {
MPL3115A2: {
requirements: {
value: {
Expand All @@ -17,106 +17,101 @@ var Controllers = {
}
},
initialize: {
value: function(opts, dataHandler) {
var Multi = require("./imu");
var driver = Multi.Drivers.get(this.board, "MPL3115A2", opts);
driver.on("data", function(data) {
dataHandler(data.altitude);
});
value(options, callback) {
const Multi = require("./imu");
const driver = Multi.Drivers.get(this.board, "MPL3115A2", options);
driver.on("data", ({altitude}) => callback(altitude));
}
},
toMeters: {
value: function(raw) {
writable: true,
value(value) {

// Table 2, Note 3
// "Smallest bit change in register represents minimum value change in
// Pascals or meters. Typical resolution to signify change in altitudeis 0.3 m"
return Fn.toFixed(raw, 1);
return toFixed(value, 1);
}
}
},
MS5611: {
initialize: {
value: function(opts, dataHandler) {
var Multi = require("./imu");
var driver = Multi.Drivers.get(this.board, "MS5611", opts);
driver.on("data", function(data) {
dataHandler(data.altitude);
});
value(options, callback) {
const Multi = require("./imu");
const driver = Multi.Drivers.get(this.board, "MS5611", options);
driver.on("data", ({altitude}) => callback(altitude));
}
},
toMeters: {
value: function(raw) {
writable: true,
value(value) {
// Datasheet available at http://www.te.com/commerce/DocumentDelivery/DDEController?Action=srchrtrv&DocNm=MS5611-01BA03&DocType=Data+Sheet&DocLang=English
//
// From page 1
// "This barometric pressure sensor is optimized for
// altimeters and variometers with an altitude resolution of 10 cm."
return Fn.toFixed(raw, 2);
return toFixed(value, 2);
}
}
},

BMP180: {
initialize: {
value: function(opts, dataHandler) {
var Multi = require("./imu");
var driver = Multi.Drivers.get(this.board, "BMP180", opts);
driver.on("data", function(data) {
dataHandler(data.altitude);
});
value(options, callback) {
const Multi = require("./imu");
const driver = Multi.Drivers.get(this.board, "BMP180", options);
driver.on("data", ({altitude}) => callback(altitude));
}
},
toMeters: {
value: function(raw) {
writable: true,
value(value) {
// Page 6, Table 1
// Resolution of output data 0.01hPa
//
// From paragraph 3.6, page 16 1hPa=8.43m
// resolution ~= 0.08m
return Fn.toFixed(raw, 2);
return toFixed(value, 2);
}
}
},

BMP280: {
initialize: {
value: function(opts, dataHandler) {
var Multi = require("./imu");
var driver = Multi.Drivers.get(this.board, "BMP280", opts);
driver.on("data", function(data) {
dataHandler(data.altitude);
});
value(options, callback) {
const Multi = require("./imu");
const driver = Multi.Drivers.get(this.board, "BMP280", options);
driver.on("data", ({altitude}) => callback(altitude));
}
},
toMeters: {
value: function(raw) {
writable: true,
value(value) {
// Page 8, Table 2
// Resolution of output data in ultra high resolution mode 0.0016hPa
// 1hPa=8.43m
// resolution ~= 0.013m
return Fn.toFixed(raw, 3);
return toFixed(value, 3);
}
}
},
BME280: {
initialize: {
value: function(opts, dataHandler) {
var Multi = require("./imu");
var driver = Multi.Drivers.get(this.board, "BME280", opts);
driver.on("data", function(data) {
dataHandler(data.altitude);
});
value(options, callback) {
const Multi = require("./imu");
const driver = Multi.Drivers.get(this.board, "BME280", options);
driver.on("data", ({altitude}) => callback(altitude));
}
},
toMeters: {
value: function(raw) {
writable: true,
value(value) {
// Page 10, Table 3
// Resolution of pressure output data 0.18Pa
// 1hPa=8.43m
// 100Pa=8.43m
// resolution ~= 0.015m
return Fn.toFixed(raw, 3);
return toFixed(value, 3);
}
}
},
Expand All @@ -125,93 +120,72 @@ var Controllers = {

Controllers["BMP085"] = Controllers["BMP-085"] = Controllers.BMP180;

var priv = new Map();

function Altimeter(opts) {
if (!(this instanceof Altimeter)) {
return new Altimeter(opts);
}
class Altimeter extends Emitter {
constructor(options) {
super();

var controller = null;
var freq;
var last = null;
var raw = null;
var state = {};
Board.Component.call(
this, options = Board.Options(options)
);

Board.Component.call(
this, opts = Board.Options(opts)
);
Board.Controller.call(this, Controllers, options);

freq = opts.freq || 25;
const state = {};
const freq = options.freq || 25;
let last = null;
let value = null;

if (!this.toMeters) {
this.toMeters = options.toMeters || (x => x);
}

if (opts.controller && typeof opts.controller === "string") {
controller = Controllers[opts.controller.toUpperCase()];
} else {
controller = opts.controller;
}
priv.set(this, state);

if (controller == null) {
throw new Error("Altimeter expects a valid controller");
}
const descriptors = {
meters: {
get() {
return this.toMeters(value);
}
},
feet: {
get() {
return toFixed(this.meters * 3.28084, 2);
}
}
};
// Convenience aliases
descriptors.m = descriptors.meters;
descriptors.ft = descriptors.feet;

priv.set(this, state);
Object.defineProperties(this, descriptors);

Board.Controller.call(this, controller, opts);

if (!this.toMeters) {
this.toMeters = opts.toMeters || function(x) {
return x;
};
}
/* istanbul ignore else */
if (typeof this.initialize === "function") {
this.initialize(options, data => value = data);
}

var descriptors = {
meters: {
get: function() {
return this.toMeters(raw);
setInterval(() => {
if (value == null) {
return;
}
},
feet: {
get: function() {
return Fn.toFixed(this.meters * 3.28084, 2);
}
}
};
// Convenience aliases
descriptors.m = descriptors.meters;
descriptors.ft = descriptors.feet;

Object.defineProperties(this, descriptors);
const data = {};
data.m = data.meters = this.meters;
data.ft = data.feet = this.feet;

this.emit("data", data);

/* istanbul ignore else */
if (typeof this.initialize === "function") {
this.initialize(opts, function(data) {
raw = data;
});
/* istanbul ignore else */
if (this.meters !== last) {
last = this.meters;
this.emit("change", data);
}
}, freq);
}

setInterval(function() {
if (raw == null) {
return;
}

var data = {};
data.m = data.meters = this.meters;
data.ft = data.feet = this.feet;

this.emit("data", data);

/* istanbul ignore else */
if (this.meters !== last) {
last = this.meters;
this.emit("change", data);
}
}.bind(this), freq);
}

util.inherits(Altimeter, Emitter);

/* istanbul ignore else */
if (!!process.env.IS_TEST_MODE) {
Altimeter.Controllers = Controllers;
Expand Down
3 changes: 0 additions & 3 deletions lib/animation.js
Expand Up @@ -542,7 +542,4 @@ Animation.Segment = class {
}
};




module.exports = Animation;

0 comments on commit fbd7064

Please sign in to comment.