From 25a3ca90950b952e1c59885bfbe5b6fb4cd128a6 Mon Sep 17 00:00:00 2001 From: David Kebler Date: Sun, 15 Jan 2017 17:59:50 -0800 Subject: [PATCH] refactor bus and device class, testing of i2c r/w --- lib/bus.js | 42 +++++++++++++++++++++++++++++++++++++----- lib/device.js | 18 +++++++----------- package.json | 1 + test/bus.test.js | 18 ++++++++++++++++++ 4 files changed, 63 insertions(+), 16 deletions(-) create mode 100644 test/bus.test.js diff --git a/lib/bus.js b/lib/bus.js index f557db9..3d60e15 100644 --- a/lib/bus.js +++ b/lib/bus.js @@ -4,18 +4,50 @@ const i2c = require('i2c-bus'), pA = require('bluebird').promisifyAll, pQ = require('promisqueue') +const pify = require('pify') + // TODO Create a Bus master class then BusRPi classes etc for actual hardware. class Bus { - constructor(busnum) { - this.methods = pA(i2c.open(busnum, () => {}), { suffix: "_p" }) //,multiArgs: true}) + + constructor(busnum = 1) { + this.busnum = busnum this.q = new pQ({ limit: 1 }) + this.qAdd = (pjob) => { this.q.add(() => pjob) } + this.bus = i2c.open(this.busnum, () => {}) } - scan() { return this.bus.scan_p() } - close() { return this.bus.close_p() } + // init() { + // const bus = pA(i2c.open(this.busnum, () => {}), { suffix: "_p" }) //,multiArgs: true}) + // + // } - qAdd(job) { this.q.add(() => job) } + scan() { return pify(this.bus.scan_p)() } + close() { return pify(this.bus.close_p)() } + + readRaw(address, length, buffer) { + return this.qAdd(pify(this.bus.i2cRead)(address, length, buffer)) + } + + writeRaw(address, length, buffer) { + return this.qAdd(pify(this.bus.i2cWrite)(address, length, buffer)) + } + + read(address, cmd) { + return this.qAdd(pify(this.bus.readByte)(address, cmd)) + } + + write(address, cmd, byte) { + return this.qAdd(pify(this.bus.writeByte)(address, cmd, byte)) + } + + read2(address, cmd) { + return this.qAdd(pify(this.bus.readWord)(address, cmd)) + } + + write2(address, cmd, bytes) { + return this.qAdd(pify(this.bus.writeWord)(address, cmd, bytes)) + } } // end of Bus Class diff --git a/lib/device.js b/lib/device.js index 6b6cd7e..acfa043 100644 --- a/lib/device.js +++ b/lib/device.js @@ -5,7 +5,7 @@ class Device { // bus is i2c-bus bus object constructor(bus, address, opts) { - this.bus = bus.methods // artifact of adapting ic2-bus to class format + this.bus = bus this.address = address if (opts) { this.id = opts.id // must be unique within a bus @@ -15,33 +15,29 @@ class Device { } readRaw(length, buffer) { - return this.bus.i2cRead_p(this.address, length, buffer) + return this.bus.readRaw(this.address, length, buffer) } writeRaw(length, buffer) { - return this.bus.i2cWrite_p(this.address, length, buffer) + return this.bus.writeRaw(this.address, length, buffer) } read(cmd) { - return this.bus.readByte_p(this.address, cmd) + return this.bus.read(this.address, cmd) } write(cmd, byte) { - return this.bus.writeByte_p(this.address, cmd, byte) + return this.bus.write(this.address, cmd, byte) } read2(cmd) { - return this.bus.readWord_p(this.address, cmd) + return this.bus.read2(this.address, cmd) } write2(cmd, bytes) { - return this.bus.writeWord_p(this.address, cmd, bytes) + return this.bus.write2(this.address, cmd, bytes) } - // command with more than two bytes following - readBytes() {} - writeBytes() {} - } module.exports = { diff --git a/package.json b/package.json index 764c8b1..bf6a42f 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,7 @@ "dependencies": { "bluebird": "^3.4.7", "i2c-bus": "^1.2.0", + "pify": "^2.3.0", "promisqueue": "^1.0.3", "require-all": "git+https://github.com/dkebler/node-require-all.git#merge" }, diff --git a/test/bus.test.js b/test/bus.test.js new file mode 100644 index 0000000..c10da2f --- /dev/null +++ b/test/bus.test.js @@ -0,0 +1,18 @@ +'use strict' + +const expect = require('chai').expect, + Bus = require('../lib/bus').Bus + // _ = require('uci-utils') + +let bus = new Bus() + // console.log(bus.write.toString()) + +bus.write(0x21, 0x09, 0xFF) + +describe('Bus Class - ', function () { + + it('Promise Methods are exposed ', function () { + // expect(pin.cfg, "config getter failed").to.deep.equal(gpio.configs('output')) + }) + +});