uci-mcp/test/cntrl.js

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 }
// }