Socket
Socket
Sign inDemoInstall

accel-mma84

Package Overview
Dependencies
Maintainers
2
Versions
13
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

accel-mma84 - npm Package Compare versions

Comparing version 0.2.0 to 0.2.1

260

index.js

@@ -37,3 +37,3 @@ var util = require('util');

// Interrupt pin for the data ready event
self.dataInterrupt = self.hardware.gpio(2);
self.dataInterrupt = self.hardware.digital[2];
// Address for i2C

@@ -44,59 +44,64 @@ // TODO: Account for manual address changes?

// Check that we can read the correct chip id
self._getChipID(function IDRead(err, c) {
if (err) {
// Fail the init
return self._failProcedure(err);
}
// should always return 0x2A
if (c !== 0x2A) {
// This is the wrong chip
err = new Error("Could not connect to MMA8452Q, received " + c.toString() + ". Expected 0x2A.");
// Fail the init
return self._failProcedure(err);
}
// Set the scale range to standard
self.setScaleRange(self.scaleRange, function(err) {
self.queue.place(function one() {
self._getChipID(function IDRead(err, c) {
if (err) {
return self._failProcedure(err, callback);
// Fail the init
return self._failProcedure(err);
}
else {
// Set the output rate to standard
self.setOutputRate(self.outputRate, function(err) {
if (err) {
return self._failProcedure(err, callback);
}
else {
// Emit the ready event
setImmediate(function emitReady() {
self.emit('ready');
});
// Call the callback with object
if (callback) callback(null, self);
return;
}
});
// should always return 0x2A
if (c !== 0x2A) {
// This is the wrong chip
err = new Error("Could not connect to MMA8452Q, received " + c.toString() + ". Expected 0x2A.");
// Fail the init
return self._failProcedure(err);
}
});
// Set up an interrupt handler for data ready
self.dataInterrupt.watch('low', self._dataReady.bind(self));
// Set the scale range to standard
self.setScaleRange(self.scaleRange, function(err) {
if (err) {
return self._failProcedure(err, callback);
}
else {
// Set the output rate to standard
self.setOutputRate(self.outputRate, function(err) {
if (err) {
return self._failProcedure(err, callback);
}
else {
// Emit the ready event
setImmediate(function emitReady() {
self.emit('ready');
self.queue.next();
});
// Call the callback with object
if (callback) callback(null, self);
self.on('newListener', function(event) {
// If we have a new sample listener
if (event == 'data' || event == 'sample') {
// Enable interrupts at whatever rate was previously set.
self.enableDataInterrupts(true, queueNext);
}
});
return;
}
});
}
});
self.on('removeListener', function(event) {
// If we have a new || event == 'sample' listener
if (event == 'data' || event == 'sample') {
// Disable interrupt.
self.enableDataInterrupts(false, queueNext);
}
// Set up an interrupt handler for data ready
self.dataInterrupt.watch('low', self._dataReady.bind(self));
});
});
self.on('newListener', function(event) {
// If we have a new sample listener
if (event == 'data' || event == 'sample') {
// Enable interrupts at whatever rate was previously set.
self.enableDataInterrupts(true, queueNext);
}
});
self.on('removeListener', function(event) {
// If we have a new || event == 'sample' listener
if (event == 'data' || event == 'sample') {
// Disable interrupt.
self.enableDataInterrupts(false, queueNext);
}
});
self.queue.next();
}

@@ -241,2 +246,79 @@

// Sets the accelerometer to read up to 2, 4, or 8 Gs of acceleration (smaller range = better precision)
Accelerometer.prototype._unsafeSetScaleRange = function(scaleRange, callback) {
var self = this;
var fsr = scaleRange;
if (fsr > 8) fsr = 8; //Easy error check
fsr >>= 2; // Neat trick, see page 22. 00 = 2G, 01 = 4G, 10 = 8G
// Go into standby to edit registers
self._changeRegister(function change(complete) {
if (err) {
return complete(err);
}
else {
// Write the new scale into the register
self._writeRegister(XYZ_DATA_CFG, fsr, function wroteReg(err) {
self.scaleRange = scaleRange;
return complete(err);
});
}
}, function scaleSet(err) {
if (callback) {
callback(err);
}
setImmediate(self.queue.next);
});
}
// Sets the output rate of the data (1.56-800 Hz)
Accelerometer.prototype._unsafeSetOutputRate = function (hz, callback) {
var self = this;
// Put accel into standby
self._changeRegister( function setRegisters(finishChange) {
// Find the closest available rate (rounded down)
self._getClosestOutputRate(hz, function gotRequested(err, closest) {
if (err) {
return finishChange(new Error("Rate must be >= 1.56Hz"));
}
else {
// Set our property
self.outputRate = closest;
// Get the binary representation of the rate (for the register)
var bin = self.availableOutputRates().indexOf(closest);
// If the binary rep could be found
if (bin !== -1) {
// Read the current register value
self._readRegister(CTRL_REG1, function readComplete(err, regVal) {
if (err) {
return finishChange(err);
}
else {
// Clear the three bits of output rate control (0b11000111 = 199)
regVal &= 199;
// Move the binary rep into place (bits 3:5)
if (bin !== 0) regVal |= (bin << 3);
// Write that value into the control register
self._writeRegister(CTRL_REG1, regVal, finishChange);
}
});
}
else {
return finishChange(new Error("Invalid output rate."));
}
}
})
},
function rateSet(err) {
if (callback) {
callback(err);
}
setImmediate(self.queue.next);
});
};
// Logs the available interrupt rates in Hz

@@ -318,80 +400,10 @@ Accelerometer.prototype.availableOutputRates = function() {

// Sets the output rate of the data (1.56-800 Hz)
// Queueing version of Accelerometer#_unsafeSetOutputRate
Accelerometer.prototype.setOutputRate = function (hz, callback) {
var self = this;
// Put accel into standby
self.queue.place(function addedQueue() {
self._changeRegister( function setRegisters(finishChange) {
// Find the closest available rate (rounded down)
self._getClosestOutputRate(hz, function gotRequested(err, closest) {
if (err) {
return finishChange(new Error("Rate must be >= 1.56Hz"));
}
else {
// Set our property
self.outputRate = closest;
// Get the binary representation of the rate (for the register)
var bin = self.availableOutputRates().indexOf(closest);
// If the binary rep could be found
if (bin !== -1) {
// Read the current register value
self._readRegister(CTRL_REG1, function readComplete(err, regVal) {
if (err) {
return finishChange(err);
}
else {
// Clear the three bits of output rate control (0b11000111 = 199)
regVal &= 199;
// Move the binary rep into place (bits 3:5)
if (bin !== 0) regVal |= (bin << 3);
// Write that value into the control register
self._writeRegister(CTRL_REG1, regVal, finishChange);
}
});
}
else {
return finishChange(new Error("Invalid output rate."));
}
}
});
},
function rateSet(err) {
if (callback) {
callback(err);
}
setImmediate(self.queue.next);
});
});
this.queue.place(this._unsafeSetOutputRate.bind(this, hz, callback));
};
// Sets the accelerometer to read up to 2, 4, or 8 Gs of acceleration (smaller range = better precision)
// Queueing version of Accelerometer#_unsafeSetScaleRange
Accelerometer.prototype.setScaleRange = function(scaleRange, callback) {
var self = this;
var fsr = scaleRange;
if (fsr > 8) fsr = 8; //Easy error check
fsr >>= 2; // Neat trick, see page 22. 00 = 2G, 01 = 4G, 10 = 8G
// Go into standby to edit registers
self.queue.place( function queueScale() {
self._changeRegister(function change(complete) {
if (err) {
return complete(err);
}
else {
// Write the new scale into the register
self._writeRegister(XYZ_DATA_CFG, fsr, function wroteReg(err) {
self.scaleRange = scaleRange;
return complete(err);
});
}
}, function scaleSet(err) {
if (callback) {
callback(err);
}
setImmediate(self.queue.next);
});
});
this.queue.place(this._unsafeSetScaleRange.bind(this, scaleRange, callback));
};

@@ -398,0 +410,0 @@

{
"name": "accel-mma84",
"version": "0.2.0",
"version": "0.2.1",
"description": "Library to run the MMA8452Q accelerometer.",
"main": "index.js",
"dependencies" : {
"sync-queue" : "0.0.1"
"scripts": {
"test": "tinytap -e 'tessel run {} ${ACCEL_PORT}' test/*.js"
},
"dependencies": {
"sync-queue": "0.0.1"
},
"hardware": {
"./examples": false
},
"scripts": {
"test": "./testsuite.js"
},
"devDependencies": {
"tape": "~2.3.2",
"tap": "git+https://github.com/tcr/node-tap.git#3cb76e",
"shelljs": "~0.3.0"
},
"repository": "https://github.com/tessel/accel-mma84",
"author": "Tim Cameron Ryan <tim@timryan.org>",
"license": "MIT"
"license": "MIT",
"devDependencies": {
"tinytap": "~0.0.2"
}
}

@@ -10,11 +10,9 @@ /* test rig */ var t = 1, tmax = 5

accel.on('ready', function () {
accel.on('sample', function (xyz) {
ok(Array.isArray(xyz), 'accelerometer data is array');
ok(xyz.length == 3, 'three samples');
ok(typeof xyz[0] == 'number', 'idx 0 is number');
ok(typeof xyz[1] == 'number', 'idx 1 is number');
ok(typeof xyz[2] == 'number', 'idx 2 is number');
process.exit(0);
});
accel.on('sample', function (xyz) {
ok(Array.isArray(xyz), 'accelerometer data is array');
ok(xyz.length == 3, 'three samples');
ok(typeof xyz[0] == 'number', 'idx 0 is number');
ok(typeof xyz[1] == 'number', 'idx 1 is number');
ok(typeof xyz[2] == 'number', 'idx 2 is number');
process.exit(0);
});
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc