import Interrupt from './interrupt' import logger from '@uci/logger' let log = {} export default class Interrupts { constructor(pins,opts={}) { this.id = this.id || 'interrupts' this.pins = pins this.interrupt={} log = logger({name:'interrupts',id:this.id}) pins.forEach (pin =>{ opts[pin] = opts[pin] || {} opts[pin].id = (opts.id ||'interrupt') + ':' + pin; ['host','port','path','hook','wait','maxwait','leading','mock','trailing','edge','pull'].forEach(prop =>{ opts[pin][prop] = opts[pin][prop] || opts[prop] }) this.interrupt[pin] = new Interrupt(pin,opts[pin]) this.interrupt[pin].hook=hook this.interrupt[pin].reply = () =>{} }) } async init() { return Promise.all(this.pins.map(pin => {return this.interrupt[pin].init()})) } // manual firing for testing fire(pin) { if(pin) { this.interrupt[pin].pin.emit('interrupt',1) console.log('manually firing interrupt for pin', pin) } else { console.log('manually firing interrupt for pins', this.pins) this.pins.forEach (async pin =>{ this.interrupt[pin].pin.emit('interrupt',1) }) } } setHook(func) { this.pins.forEach (async pin =>{ this.interrupt[pin].hook=func }) } } // end Class // default hook const hook = (packet) => { console.log('======Common for all Pins Default Hook=================') console.log(`pin ${packet.pin} on sbc gpio bus has thrown ${packet.count}th interrupt`) console.log('sending to all connected sockets with default cmd:"interrupt"') console.dir(packet) console.log('this is the default beforeHook') console.log('add .hook for your instance or extended class') console.log('=======================') return packet }