From 78397d22bf6fc39f59a054614f8c9eb2ef920620 Mon Sep 17 00:00:00 2001 From: David Kebler Date: Sat, 10 Feb 2018 12:34:42 -0800 Subject: [PATCH] added arguments checking on incoming package --- examples/bus.mjs | 2 +- package.json | 1 + src/bus-packet.mjs | 39 ++++++++++++++++----------------------- 3 files changed, 18 insertions(+), 24 deletions(-) diff --git a/examples/bus.mjs b/examples/bus.mjs index d4156af..31b9b49 100644 --- a/examples/bus.mjs +++ b/examples/bus.mjs @@ -3,7 +3,7 @@ * */ import Bus from '../src/bus-packet' -const PATH = '/opt/uci/unix.sock' +// const PATH = '' ; (async () => { diff --git a/package.json b/package.json index 97dd28a..f685ae2 100644 --- a/package.json +++ b/package.json @@ -30,6 +30,7 @@ "@std/esm": "cjs", "dependencies": { "@uci/base": "^0.1.0", + "better-try-catch": "^0.6.2", "i2c-bus": "^1.x", "pify": "^3.0.0" }, diff --git a/src/bus-packet.mjs b/src/bus-packet.mjs index 13d6940..37ff854 100644 --- a/src/bus-packet.mjs +++ b/src/bus-packet.mjs @@ -1,6 +1,7 @@ import i2c from 'i2c-bus' import pify from 'pify' +import btc from 'better-try-catch' // import Base from '@uci/base' import Base from '../../uci-base/src/base' @@ -35,12 +36,14 @@ export default class Bus extends Base { // TODO see if default processing of base can handle this now async _packetProcess (sname,packet){ + // console.log('incoming packet', sname, packet) if (!packet.cmd) return {error: 'no cmd: key in packet', packet: packet } if (this.bus[packet.cmd]) { - // let res = validateArgs(packet) // handle with before hook - // if (res.error) return res.error - packet.cmd_sent = packet.cmd - packet.response = await this.bus[packet.cmd].bind(this)(packet.args) + let checked = validateArgs(packet) // handle with before hook + if (checked.error) return checked.error + let [err,res] = await btc(this.bus[packet.cmd].bind(this))(packet.args) + if (err) return {error: err.msg, packet:packet} + packet.response = res packet.cmd = 'reply' return packet } else return {error: 'no i2c bus function available for packet command', packet: packet } @@ -48,78 +51,68 @@ export default class Bus extends Base { } // end of Bus Packet Class -// replace base processor with one for i2c bus functions - const validateArgs = function (packet) { let missing = [] - console.log(packet) + const ne = arg => { if (packet.args[arg]===undefined) missing.push(arg) } + // console.log('validate packet',packet) if (packet.cmd==='scan' || packet.cmd ==='close') return {} - if (!packet.args.address) missing.push('address') + ne('address') switch (packet.cmd) { case 'readRaw': case 'writeRaw': - if (!packet.args.length) missing.push('length') - if (!packet.args.buffer) missing.push('buffer') + ne('length') + ne('buffer') break case 'read': case 'read2': case 'write': case 'write2': - if (!packet.args.cmd) missing.push('cmd') + ne('cmd') } - switch (packet.cmd) { case 'write': case 'write2': case 'send': - if (!packet.args.byte) missing.push('byte') + ne('byte') } - if (missing.length > 0) { return {error: `following bus arguments are missing ${missing}`, packet: packet } } return {} } -const bus_funcs = { + +const bus_funcs = { scan: function () { return pify(this.i2cbus.scan).bind(this.i2cbus)() }, close: function () { return pify(this.i2cbus.close).bind(this.i2cbus)() }, - readRaw: function (args) { return pify(this.i2cbus.i2cRead).bind(this.i2cbus)(args.address, args.length, args.buffer) }, - writeRaw: function (args) { return pify(this.i2cbus.i2cWrite).bind(this.i2cbus)(args.address, args.length, args.buffer) }, - read: function (args) { // console.log('read: address, cmd', address, cmd) return pify(this.i2cbus.readByte).bind(this.i2cbus)(args.address, args.cmd) }, - write: function (args) { // console.log('write: address, cmd, byte', args.address, args.cmd, args.byte) return pify(this.i2cbus.writeByte.bind(this.i2cbus))(args.address, args.cmd, args.byte) }, - read2: function (args) { return pify(this.i2cbus.readWord.bind(this.i2cbus))(args.address, args.cmd) }, - write2: function (args) { return pify(this.i2cbus.writeWord.bind(this.i2cbus))(args.address, args.cmd, args.byte) }, - receive: function (args) { // console.log('receivebyte', address) return pify(this.i2cbus.receiveByte.bind(this.i2cbus))(args.address) }, - send: function (args) { // console.log('sendbyte', address,byte) return pify(this.i2cbus.sendByte.bind(this.i2cbus))(args.address, args.byte)