removed removed this.pins to revert back to using this.commands.pins
emit locally on interruptmaster
parent
ea9a04f6dc
commit
7e0327ebf0
|
@ -51,7 +51,7 @@ export default {
|
||||||
for(let name of Object.keys(PIN.setting)) {
|
for(let name of Object.keys(PIN.setting)) {
|
||||||
let op = cfg[name] ? 'on' : 'off'
|
let op = cfg[name] ? 'on' : 'off'
|
||||||
log.debug({msg:'setting pin register', operation:op, registerName:name, resgisterNum:PIN.setting[name]})
|
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
|
if (busreply.error) return busreply
|
||||||
reply.status[name] = busreply.status
|
reply.status[name] = busreply.status
|
||||||
}
|
}
|
||||||
|
@ -98,13 +98,13 @@ export default {
|
||||||
// threse three only for output pins
|
// threse three only for output pins
|
||||||
state : {
|
state : {
|
||||||
on: async function (packet) {
|
on: async function (packet) {
|
||||||
return this.pin._state(packet,'on')
|
return this.commands.pin._state(packet,'on')
|
||||||
},
|
},
|
||||||
off: async function (packet) {
|
off: async function (packet) {
|
||||||
return this.pin._state(packet,'off')
|
return this.commands.pin._state(packet,'off')
|
||||||
},
|
},
|
||||||
toggle: async function (packet) {
|
toggle: async function (packet) {
|
||||||
return this.pin._state(packet,'toggle')
|
return this.commands.pin._state(packet,'toggle')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} // end pin.
|
} // end pin.
|
||||||
|
|
|
@ -18,13 +18,13 @@ class MCP230XX extends Device {
|
||||||
this.chipCfg = opts.chipCfg || 'default'
|
this.chipCfg = opts.chipCfg || 'default'
|
||||||
this.commands = this.bindFuncs(commands)
|
this.commands = this.bindFuncs(commands)
|
||||||
this.addNamespace('commands', 's') // allow access to commands via socket/server
|
this.addNamespace('commands', 's') // allow access to commands via socket/server
|
||||||
this.pin = this.commands.pin // 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
|
// this._chipcfg = this.commands.chip.cfg // add a simplier reference for local access
|
||||||
}
|
}
|
||||||
|
|
||||||
async init() {
|
async init() {
|
||||||
await super.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) {
|
if (res.error) {
|
||||||
log.fatal({msg:'unable to configure mcp chip', error:res.error, cfg:this.chipCfg, address:this.address})
|
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)}`
|
throw `${res.error} at address ${this.address}/${this.address.toString(16)}`
|
||||||
|
|
|
@ -19,41 +19,6 @@ class MCP230XXi extends MCP230XX {
|
||||||
if (opts.interrupt) delete opts.interrupt.pins // if .interrupt was passed then .pins must be removed
|
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
|
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})
|
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)
|
super(opts)
|
||||||
this.opts = 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})
|
if (this.iport) await this.addSocket('inter-t','s','t',{port:this.iport})
|
||||||
await super.init()
|
await super.init()
|
||||||
// this will set default type to internal pullup, only need to to change indivial pins to external if desired
|
// 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')
|
let status = await this._resetInterrupt('A')
|
||||||
log.debug('configure all port A pins as interrupts. Reset port A interrupt', status)
|
log.debug('configure all port A pins as interrupts. Reset port A interrupt', status)
|
||||||
if (this.chip17) {
|
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')
|
let status = await this._resetInterrupt('B')
|
||||||
log.debug('configure all port B pins as interrupts. Reset port B interrupt', status)
|
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) {
|
async _resetInterrupt(port) {
|
||||||
log.debug(`resetting interrupt for port ${port || 'A'},${this.id} arg ${port !== 'B' ? 0x08 : 0x18}`)
|
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
|
await this.bus.read(port !== 'B' ? 0x08 : 0x18) // 0x08 is intcap interrupt capture register
|
||||||
|
console.log('reset interrupt==============')
|
||||||
return(await this._readyInterrupt(port))
|
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
|
// given a gpio interrupt then push a packet with cmd: 'pin.interrupt.find' and pin: the gpio pin number
|
||||||
find: async function(inter) {
|
find: async function(inter) {
|
||||||
|
console.log('interrupt find calledxxxxx', inter, this.ready)
|
||||||
if (this.ready) {
|
if (this.ready) {
|
||||||
// protects tripped interrupt before it's fully initialized, or interrupt requests arriving before porcessing is complete
|
// protects tripped interrupt before it's fully initialized, or interrupt requests arriving before porcessing is complete
|
||||||
this.ready = false
|
this.ready = false
|
||||||
log.debug({msg:'raw packet from interrupt, finding pin that caused interrupt', inter:inter})
|
log.debug({msg:'raw packet from interrupt, finding pin that caused interrupt', inter:inter})
|
||||||
let packet = { pins: 'all', reg: 'intf' }
|
let packet = { pins: 'all', reg: 'intf' }
|
||||||
packet.port = inter.port || this._getPortByPin(inter.pin)
|
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)
|
let status = await this._resetInterrupt(packet.port)
|
||||||
|
// console.log('interrupt reset ready?', status)
|
||||||
log.debug({interrupt:res, reset:status, msg:'interrupt read and reset'})
|
log.debug({interrupt:res, reset:status, msg:'interrupt read and reset'})
|
||||||
this.ready = true
|
this.ready = true
|
||||||
if (!res.status) {
|
if (!res.status) {
|
||||||
|
@ -177,9 +145,12 @@ const icommands = {
|
||||||
delete inter.cmd; delete inter._header; delete inter.pin
|
delete inter.cmd; delete inter._header; delete inter.pin
|
||||||
Object.assign(res,inter)
|
Object.assign(res,inter)
|
||||||
delete res.status
|
delete res.status
|
||||||
res.state = (await this.pin.status(packet)).status.pins[0][1]
|
res.interrupt_ready = status || false
|
||||||
log.debug('emit/call interrupt details processing', res)
|
res.state = (await this.commands.pin.status(packet)).status.pins[0][1]
|
||||||
this.emit('mcpInterrupt',Object.assign({},res)) // emit for end user purposes, don't allow mutation
|
// 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)
|
this._interruptProcess(res)
|
||||||
return res
|
return res
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Reference in New Issue