//to run this test you MUST install @uci/i2c which is not a dependency of @uci/mcp // npm install @uci/i2c const Bus = require('@uci/i2c').Bus, MCP = require('../lib/mcp23008-17'), expect = require('chai').expect, pause = require('@uci/utils').pPause let bus = new Bus() let ADDR = 0x27 let CHIP = 'MCP23017' let MS = 300 // so humans can watch the lights on boards with leds otherwise set to zero let PORT = 'B' let id = `${CHIP} at I2C bus address of 0x${ADDR.toString(16)}` let mcp = new MCP[CHIP](bus, ADDR, { pin_cfg_default: 'output', id: id }); describe( `Testing Chip ${id}, port: ${PORT}`, function () { hooks() eachpin() somepins() }) //****************** TESTS ********************** function eachpin() { it('==> test each pin', async function () { for (let pin of mcp.ports[PORT].pins) { await mcp.pinsOn(pin.address, PORT) let result = await mcp.readPort(PORT) expect(result, `pin ${pin.id} at address ${pin.address} write/read failed`).to.equal(pin.address) await mcp.pinsOff(pin.address, PORT) await pause(MS) } }) } function somepins() { it('==> on, off toggle some pins', async function () { let pins = [1, 7, 8] await mcp.pinsOn(pins, PORT, 'PLC') let shouldbe = [1, 7, 8] let result = await mcp.readPort(PORT, { format: 'PLC' }) expect(result.sort(), 'pin write/read failed on').to.deep.equal(shouldbe.sort()) await pause(MS) pins = [2, 1, 7] await mcp.pinsOn(pins, PORT, 'PLC') shouldbe = [2, 1, 7, 8] result = await mcp.readPort(PORT, { format: 'PLC' }) expect(result.sort(), 'pin write/read failed on 2').to.deep.equal(shouldbe.sort()) await pause(MS) pins = [2, 1, 6] await mcp.toggle(pins, PORT, 'PLC') shouldbe = [6, 7, 8] result = await mcp.readPort(PORT, { format: 'PLC' }) expect(result.sort(), 'pin write/read failed toggle').to.deep.equal(shouldbe.sort()) await pause(MS) pins = [2, 1, 6, 7] await mcp.pinsOff(pins, PORT, 'PLC') shouldbe = [8] result = await mcp.readPort(PORT, { format: 'PLC' }) expect(result.sort(), 'pin write/read failed off').to.deep.equal(shouldbe.sort()) await pause(MS) }) } function hooks() { before(async() => { await mcp.init() }) beforeEach(async() => { await mcp.allOff(PORT) // start clean }) after(async() => { await mcp.allOff(PORT) // start clean }) }