diff --git a/package.json b/package.json index 77c7454..001f56f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@uci/i2c-device", - "version": "0.1.23", + "version": "0.1.25", "description": "Device Classes for I2C Interfacing", "main": "src/device", "scripts": { @@ -26,7 +26,7 @@ }, "homepage": "https://github.com/uCOMmandIt/i2c#readme", "dependencies": { - "@uci/base": "^0.1.31", + "@uci/base": "^0.1.32", "@uci-utils/logger": "^0.0.15" }, "devDependencies": { diff --git a/src/device.js b/src/device.js index 2e2a1b6..1de59bd 100644 --- a/src/device.js +++ b/src/device.js @@ -1,21 +1,21 @@ -import Base from '@uci/base' +import { Base, map, changed, isPlainObject, to, merge } from '@uci/base' import commands from './bus-device-commands' import logger from '@uci-utils/logger' let log = {} class I2CDevice extends Base { constructor(opts) { - opts.ndevice = opts.ndevice || {} - opts.tdevice = opts.tdevice || {} - opts.ndevice.path = opts.ndevice.path || opts.path || 'i2c-device' - opts.tdevice.port = opts.tdevice.port || opts.port || 1777 - opts.bus = opts.bus || {} + // opts.ndevice = opts.ndevice || {} + // opts.tdevice = opts.tdevice || {} + // opts.ndevice.path = opts.ndevice.path || opts.path || 'i2c-device' + // opts.tdevice.port = opts.tdevice.port || opts.port || 1777 + opts.bus = opts.bus || Object.assign({},{host:opts.host, port:opts.port, path:opts.path}) if (opts.bus.host) opts.bus.port = opts.bus.port || 1776 else opts.bus.path = opts.bus.path || 'i2c-bus' super(opts) - this.addSocket('bus','c',opts.bus.host ? 't':'n',opts.bus) - this.addSocket(opts.tdevice.name ||'device:tcp','s','t',opts.tdevice) - this.addSocket(opts.ndevice.name ||'device:np','s','n',opts.ndevice) + this.registerSocket('bus','c',opts.bus.host ? 't':'n',opts.bus) + // this.addSocket(opts.tdevice.name ||'device:tcp','s','t',opts.tdevice) + // this.addSocket(opts.ndevice.name ||'device:np','s','n',opts.ndevice) log = logger({ file: 'src/device-packet.js', @@ -27,20 +27,20 @@ class I2CDevice extends Base { this.address = +opts.address // make sure any passed number is number not a string this.channel = +opts.channel // if using TAC9546A channel number on which device is attached this.bus = this.bindFuncs(commands) + // todo don't override ack this way in case _s moves this._s.ack = async (packet) => { return Object.assign(packet,await this.bus.ack()) } // give socket access to bus.ack - this.getSocket('bus').on('connection:socket',async ev=>{ - if (ev.state==='connected') { - let res = await this.bus.ack() - // console.log('bus address ack was', res.ack) - let socket = this.getSocket('bus').opts - let connection = socket.path || socket.host + ':' + socket.port - if (!res.ack) { - let err ={level:'fatal', res:res, socket:socket, method:'i2c-device', line:37, connection:connection, address:this.address, msg:`no bus or device on bus at address ${this.address}=0x${this.address.toString(16)}`} - this.emit('log', err) - } else this.emit('ready:i2c',{bus:socket, connection:connection}) - } - }) - } + // emit on connected and available + + this.ready.addObserver('i2c',this.ready.getObserver('bus').pipe( + map(async ready => { + if (ready) return (await this.bus.ack()).ack + return false + }) + // , + // map(() => {return false}) + )) + + } // end contructor // TODO enable mux board channel set async _setChannel() { @@ -49,3 +49,4 @@ class I2CDevice extends Base { } // end of i2c Device Class export default I2CDevice +export {I2CDevice, map, changed, isPlainObject, to, merge}