diff --git a/src/commands.js b/src/commands.js index 14d471a..d3b64ec 100644 --- a/src/commands.js +++ b/src/commands.js @@ -51,7 +51,7 @@ export default { for(let name of Object.keys(PIN.setting)) { let op = cfg[name] ? 'on' : 'off' log.debug({msg:'setting pin register', operation:op, registerName:name, resgisterNum:PIN.setting[name]}) - let busreply = await this.pin._state(packet,op,PIN.setting[name]) + let busreply = await this.commands.pin._state(packet,op,PIN.setting[name]) if (busreply.error) return busreply reply.status[name] = busreply.status } @@ -98,13 +98,13 @@ export default { // threse three only for output pins state : { on: async function (packet) { - return this.pin._state(packet,'on') + return this.commands.pin._state(packet,'on') }, off: async function (packet) { - return this.pin._state(packet,'off') + return this.commands.pin._state(packet,'off') }, toggle: async function (packet) { - return this.pin._state(packet,'toggle') + return this.commands.pin._state(packet,'toggle') } } } // end pin. diff --git a/src/mcp230xx.js b/src/mcp230xx.js index 75db54c..9e23572 100644 --- a/src/mcp230xx.js +++ b/src/mcp230xx.js @@ -18,19 +18,19 @@ class MCP230XX extends Device { this.chipCfg = opts.chipCfg || 'default' this.commands = this.bindFuncs(commands) this.addNamespace('commands', 's') // allow access to commands via socket/server - this.pin = this.commands.pin // add a simplier reference for local access - this.chipcfg = this.commands.chip.cfg // add a simplier reference for local access + // this._pin = this.commands.pin // add a simplier reference for local access + // this._chipcfg = this.commands.chip.cfg // add a simplier reference for local access } async init() { await super.init() - let res = await this.chipcfg({cfg:this.chipCfg}) + let res = await this.commands.chip.cfg({cfg:this.chipCfg}) if (res.error) { log.fatal({msg:'unable to configure mcp chip', error:res.error, cfg:this.chipCfg, address:this.address}) throw `${res.error} at address ${this.address}/${this.address.toString(16)}` } await this.commands.pin.cfg({pins:'all'}) //pins are outputs by default - if (this.chip17) await this.commands.pin.cfg({pins:'all', port:'B'}) + if (this.chip17) await this.commands.pin.cfg({pins:'all', port:'B'}) } } // end of MCP230XX Class diff --git a/src/mcp230xxi.js b/src/mcp230xxi.js index 3b16e93..b8284de 100644 --- a/src/mcp230xxi.js +++ b/src/mcp230xxi.js @@ -19,41 +19,6 @@ class MCP230XXi extends MCP230XX { if (opts.interrupt) delete opts.interrupt.pins // if .interrupt was passed then .pins must be removed delete opts.sockets // .sockets is used by uci base so clear it if was used by enduser and sent by mistake log.debug({msg:'passed options before setting',options:opts}) - - // if options doesn't contain a pin number key with mport and other interrupt pin related information - // then it is assume that pins[0] is port A and pins[1] is port B - - // if iport or ipath is set then all interrupts have a single consolidating socket - // if (typeof opts.iport === 'number' || opts.ipath) { - // if (typeof opts.iport === 'number') { - // opts.sockets = (opts.sockets ? opts.sockets + ',' : '') + 'inter#c>t' - // opts.inter = { port: opts.iport } - // opts.inter.host = opts.ihost || opts.host - // } - // if (opts.ipath) { - // opts.inter = { path: opts.ipath || 'interrupt' } - // opts.sockets = (opts.sockets ? opts.sockets + ',' : '') + 'inter#c>n' - // } - // } else { - // // otherwise each pin will have its own socket so make a client for each - // pins.forEach((pin, index) => { - // let ipin = 'i' + pin - // opts[ipin] = opts[pin] || Object.assign({},opts.interrupt) || {} - // if (index === 1) opts[ipin].mport = opts[ipin].mport || 'B' - // delete opts[pin] - // if (opts[ipin].host) { - // opts[ipin].port = opts[ipin].port ? opts[ipin].port + +pin : 9000 + parseInt(pin) - // opts[ipin].host = opts[ipin].host - // opts.sockets = (opts.sockets ? opts.sockets + ',' : '') + ipin + '#c>t' - // } - // // no host will make a pipe by default - // else { - // opts[ipin].path = (opts[ipin].path || 'interrupt') + ':'+ pin - // opts.sockets = (opts.sockets ? opts.sockets + ',' : '') + ipin + '#c>n' - // } - // }) - // } - super(opts) this.opts = opts @@ -82,11 +47,11 @@ class MCP230XXi extends MCP230XX { if (this.iport) await this.addSocket('inter-t','s','t',{port:this.iport}) await super.init() // this will set default type to internal pullup, only need to to change indivial pins to external if desired - await this.pin.cfg({port:'A',pins:'all',cfg:'input_interrupt'}) + await this.commands.pin.cfg({port:'A',pins:'all',cfg:'input_interrupt'}) let status = await this._resetInterrupt('A') log.debug('configure all port A pins as interrupts. Reset port A interrupt', status) if (this.chip17) { - await this.pin.cfg({port:'B',pins:'all',cfg:'input_interrupt'}) + await this.commands.pin.cfg({port:'B',pins:'all',cfg:'input_interrupt'}) let status = await this._resetInterrupt('B') log.debug('configure all port B pins as interrupts. Reset port B interrupt', status) } @@ -106,6 +71,7 @@ class MCP230XXi extends MCP230XX { async _resetInterrupt(port) { log.debug(`resetting interrupt for port ${port || 'A'},${this.id} arg ${port !== 'B' ? 0x08 : 0x18}`) await this.bus.read(port !== 'B' ? 0x08 : 0x18) // 0x08 is intcap interrupt capture register + console.log('reset interrupt==============') return(await this._readyInterrupt(port)) } @@ -153,14 +119,16 @@ const icommands = { }, // given a gpio interrupt then push a packet with cmd: 'pin.interrupt.find' and pin: the gpio pin number find: async function(inter) { + console.log('interrupt find calledxxxxx', inter, this.ready) if (this.ready) { // protects tripped interrupt before it's fully initialized, or interrupt requests arriving before porcessing is complete this.ready = false log.debug({msg:'raw packet from interrupt, finding pin that caused interrupt', inter:inter}) let packet = { pins: 'all', reg: 'intf' } packet.port = inter.port || this._getPortByPin(inter.pin) - let res = await this.pin.status(packet) // read port interrupt status + let res = await this.commands.pin.status(packet) // read port interrupt status let status = await this._resetInterrupt(packet.port) + // console.log('interrupt reset ready?', status) log.debug({interrupt:res, reset:status, msg:'interrupt read and reset'}) this.ready = true if (!res.status) { @@ -177,9 +145,12 @@ const icommands = { delete inter.cmd; delete inter._header; delete inter.pin Object.assign(res,inter) delete res.status - res.state = (await this.pin.status(packet)).status.pins[0][1] - log.debug('emit/call interrupt details processing', res) - this.emit('mcpInterrupt',Object.assign({},res)) // emit for end user purposes, don't allow mutation + res.interrupt_ready = status || false + res.state = (await this.commands.pin.status(packet)).status.pins[0][1] + // console.log('emitting local on interrupt') + this.emit('interrupt',Object.assign({},res)) // emit for end user purposes, don't allow mutation + // this.emit('interrupt') // emit for end user purposes, don't allow mutation + // console.log('============emitted now calling processor=======================================') this._interruptProcess(res) return res } else {