From ed76da8e127d9bbf9430011c47145185502b52fa Mon Sep 17 00:00:00 2001 From: Benjie Gillam Date: Sat, 1 Jun 2013 22:25:59 +0200 Subject: [PATCH 1/2] Fix i2c import. --- main.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/main.js b/main.js index bd65539..946c79f 100644 --- a/main.js +++ b/main.js @@ -1,4 +1,4 @@ require('coffee-script'); -var i2c = require('./lib/i2c'); +var i2c = require('i2c'); -module.exports = i2c; \ No newline at end of file +module.exports = i2c; From 25efb2329a4b8edb701a9bb563b95be5ae4a25ba Mon Sep 17 00:00:00 2001 From: Benjie Gillam Date: Mon, 3 Jun 2013 21:14:23 +0100 Subject: [PATCH 2/2] Read from the MCP23017 registers. --- lib/devices/MCP230xx.js | 68 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/lib/devices/MCP230xx.js b/lib/devices/MCP230xx.js index 2ddfaeb..bc168e9 100644 --- a/lib/devices/MCP230xx.js +++ b/lib/devices/MCP230xx.js @@ -97,6 +97,38 @@ MCP230xx.prototype.pullup = function(pins, state, cb) { } }; +MCP230xx.prototype.inputAll = function(cb) { + var _self = this; + _self._readGPIO(function(err, value) { + if (err) return cb(err); + var pins = []; + for (var i = 0; i < _self.num_gpios; i++) { + pins[i] = !!(value & (1 << i)); + } + cb(null, pins); + }); +}; + +MCP230xx.prototype.input = function(pins, cb) { + var _self = this; + step( + function inputAll() { + _self.inputAll(this); + }, + function processResults(err, vals) { + if (!Array.isArray(pins)) { + return cb(null, vals[pins]); + } else { + var result = []; + for (var i = 0, l = pins.length; i < l; i++) { + result.push(vals[pins[i]]); + } + cb(null, result); + } + } + ); +}; + MCP230xx.prototype.output = function(pins, value, cb) { var _self = this; @@ -150,6 +182,42 @@ MCP230xx.prototype._setDirection = function(pins, dir, cb) { } }; +MCP230xx.prototype._readGPIO = function(cb) { + var _self = this; + + var value = 0; + step( + function readRegisterA() { + _self._readU8(MCP23017_GPIOA, this); + }, + function registerARead(err, lower) { + if (err) return cb(err); + value += lower; + this(); + }, + function readRegisterB() { + if (_self.num_gpios > 8) { + _self._readU8(MCP23017_GPIOB, this); + } else { + this(); + } + }, + function registerBRead(err, upper) { + if (err) return cb(err); + if (upper) { + value += (upper << 8); + } + this(); + }, + function done() { + if (cb) { + cb(null, value); + } + return; + } + ); +}; + MCP230xx.prototype._updateRegister = function(registerA, registerB, value, cb) { var _self = this;