149 lines
4.8 KiB
JavaScript
149 lines
4.8 KiB
JavaScript
const Bus = require('@uci/i2c').Bus,
|
|
MCP = require('@uci/mcp'),
|
|
Interrupt = require('@uci/interrupt').Interrupt,
|
|
_ = require('@uci/utils'),
|
|
pause = _.pPause,
|
|
aseq = _.aSeq
|
|
|
|
let bus = new Bus()
|
|
|
|
// let itrProcess = function (port) {
|
|
// return this.read(portReg(0x07, port)).then(resp => {
|
|
// console.log(`port ${port} resp ${resp}`)
|
|
// let sw = this.pid(resp, port)
|
|
// console.log('switch fired', sw)
|
|
// this.pinRead(sw, { cmd: 'intcap' }).then((state) => {
|
|
// console.log('switch state at interrupt', state)
|
|
// return Promise.all([
|
|
// updateRelays(sw, state),
|
|
// this.read(portReg(0x07, port)).then(_.pDelay(100)).then(() => { return this.inter(port).reset() })
|
|
// ])
|
|
// })
|
|
// })
|
|
// }
|
|
|
|
let itrProcess1 = function (port) {
|
|
console.log(`handler1 fired for ${this.id} on port ${port}`)
|
|
this.interruptReset(port)
|
|
return Promise.resolve("handler fired promise returned")
|
|
}
|
|
|
|
let itrProcess2 = function (port) {
|
|
console.log(`handler2 fired for ${this.id} on port ${port}`)
|
|
this.interruptReset(port)
|
|
return Promise.resolve("handler fired promise returned")
|
|
}
|
|
|
|
let LOAD_BANKS = [
|
|
{ id: 'lb1', address: 0x24, desc: 'left cabinet lower bank' },
|
|
{ id: 'lb3', address: 0x25, desc: 'left cabinet upper bank' },
|
|
{ id: 'lb2', address: 0x26, desc: 'right cabinet lower bank' },
|
|
{ id: 'lb4', address: 0x27, desc: 'right cabinet upper bank' }
|
|
]
|
|
|
|
let loadBanks = LOAD_BANKS.map((bank) => {
|
|
return new MCP.MCP23017(bus, bank.address, {
|
|
pin_cfg_default: 'output',
|
|
id: bank.id,
|
|
desc: bank.desc ? bank.desc : ""
|
|
})
|
|
})
|
|
|
|
// loadBanks.forEach(bank => console.log(bank.id, bank.desc))
|
|
|
|
let SWITCH_BANKS = [
|
|
{ id: 'sb4', address: 0x23, desc: 'bottom left', interruptA: 19, interruptB: 26 }, // red, orange
|
|
{ id: 'sb1', address: 0x20, desc: 'upper right', interruptA: 12, interruptB: 16 }, // purple, blue
|
|
{ id: 'sb2', address: 0x21, desc: 'upper left', interruptA: 20, interruptB: 21 }, // yellow, orange
|
|
{ id: 'sb3', address: 0x22, desc: 'bottom right', interruptA: 6, interruptB: 13 } //black, brown
|
|
|
|
]
|
|
|
|
let switchBanks = SWITCH_BANKS.map((bank) => {
|
|
return new MCP.MCP23017(bus, bank.address, {
|
|
pin_cfg_default: 'toggle_switch',
|
|
id: bank.id,
|
|
desc: bank.desc ? bank.desc : "",
|
|
interrupt: bank.interrupt ? new Interrupt(bank.interrupt, bank) : null,
|
|
interruptA: bank.interruptA ? new Interrupt(bank.interruptA, itrProcess1) : null,
|
|
interruptB: bank.interruptB ? new Interrupt(bank.interruptB, itrProcess2) : null,
|
|
pidsA: ['sw1', 'sw2', 'sw3', 'sw4', 'sw5', 'sw6', 'sw7', 'sw8'],
|
|
pidsB: ['sw9', 'sw10', 'sw11', 'sw12', 'sw13', 'sw14', 'sw15', 'sw16']
|
|
// chip_config: 'oneint'
|
|
})
|
|
})
|
|
|
|
// switchBanks.forEach(bank => console.log(bank.id, bank.desc, bank.inter('A').pin, bank.inter('B').pin))
|
|
|
|
async function init(bank) {
|
|
await bank.init()
|
|
console.log(`${bank.id} ${bank.desc} is initialized`)
|
|
// if (bank.id.charAt(0) === 's') {
|
|
// console.log(`bank ${bank.id} pi interrupt set for port A: on rpi pin ${bank.inter('A').pin_number}, for port B on rpi pin ${bank.inter('A').pin_number}`)
|
|
// console.log(`rpi pin mode port A ${bank.inter('A').sbc_interrupt.getMode()}`)
|
|
// }
|
|
}
|
|
|
|
async function start(bank) {
|
|
await bank.start()
|
|
}
|
|
|
|
async function go() {
|
|
await aseq(loadBanks.concat(switchBanks), init)
|
|
await aseq(loadBanks.concat(switchBanks), start)
|
|
}
|
|
|
|
go().catch(err => console.log(err))
|
|
|
|
// init relay board
|
|
// bus.qAdd(relays.init()
|
|
// // .then((resp) => { console.log('relays back from init', resp) })
|
|
// .catch((err) => console.log('====error====\n', err))
|
|
// )
|
|
|
|
// init switch board
|
|
// bus.qAdd(sw1_16.init()
|
|
// .then((resp) => {
|
|
// console.log('switch initilized finished\n', resp)
|
|
// return sw1_16.start()
|
|
// // .then(resp => console.log(resp))
|
|
// })
|
|
// // .then(console.log(sw1_16.inter().fire()))
|
|
// .catch((err) => console.log('====error switch ====\n', err))
|
|
// )
|
|
|
|
//
|
|
// let test = async(function () {
|
|
// return await (delay())
|
|
// })
|
|
//
|
|
// console.log(test())
|
|
|
|
// function temp() { return Promise.resolve('test') }
|
|
|
|
// let resp = await relays.init()
|
|
// console.log("relays ready", resp )
|
|
// console.log( await delay(5000) )
|
|
|
|
// sw1_16.inter('A').on('fired', (hook) => {
|
|
// console.log('interrupt fired', hook)
|
|
// process.bind(sw1_16)('A')
|
|
// .catch(err => console.log("error:", err))
|
|
// })
|
|
//
|
|
// sw1_16.inter('B').on('fired', (hook) => {
|
|
// console.log('interrupt fired', hook)
|
|
// process.bind(sw1_16)('B')
|
|
// .catch(err => console.log("error:", err))
|
|
// })
|
|
|
|
// function updateRelays(sid, state) {
|
|
// console.log(`sw ${sid} state ${state}`)
|
|
// return bus.qAdd(relays.write(0x09, 0x03 * state))
|
|
// // return _.pDelay(100).then((resp) => { console.log('relays updated') })
|
|
// }
|
|
//
|
|
// function portReg(reg, port) {
|
|
// if (port === 'B') { return reg += 0x10 } else { return reg }
|
|
// }
|