added arguments checking on incoming package

master
David Kebler 2018-02-10 12:34:42 -08:00
parent 615586173d
commit 78397d22bf
3 changed files with 18 additions and 24 deletions

View File

@ -3,7 +3,7 @@
* *
*/ */
import Bus from '../src/bus-packet' import Bus from '../src/bus-packet'
const PATH = '/opt/uci/unix.sock' // const PATH = ''
; ;
(async () => { (async () => {

View File

@ -30,6 +30,7 @@
"@std/esm": "cjs", "@std/esm": "cjs",
"dependencies": { "dependencies": {
"@uci/base": "^0.1.0", "@uci/base": "^0.1.0",
"better-try-catch": "^0.6.2",
"i2c-bus": "^1.x", "i2c-bus": "^1.x",
"pify": "^3.0.0" "pify": "^3.0.0"
}, },

View File

@ -1,6 +1,7 @@
import i2c from 'i2c-bus' import i2c from 'i2c-bus'
import pify from 'pify' import pify from 'pify'
import btc from 'better-try-catch'
// import Base from '@uci/base' // import Base from '@uci/base'
import Base from '../../uci-base/src/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 // TODO see if default processing of base can handle this now
async _packetProcess (sname,packet){ async _packetProcess (sname,packet){
// console.log('incoming packet', sname, packet)
if (!packet.cmd) return {error: 'no cmd: key in packet', packet: packet } if (!packet.cmd) return {error: 'no cmd: key in packet', packet: packet }
if (this.bus[packet.cmd]) { if (this.bus[packet.cmd]) {
// let res = validateArgs(packet) // handle with before hook let checked = validateArgs(packet) // handle with before hook
// if (res.error) return res.error if (checked.error) return checked.error
packet.cmd_sent = packet.cmd let [err,res] = await btc(this.bus[packet.cmd].bind(this))(packet.args)
packet.response = await this.bus[packet.cmd].bind(this)(packet.args) if (err) return {error: err.msg, packet:packet}
packet.response = res
packet.cmd = 'reply' packet.cmd = 'reply'
return packet return packet
} else return {error: 'no i2c bus function available for packet command', packet: 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 } // end of Bus Packet Class
// replace base processor with one for i2c bus functions
const validateArgs = function (packet) { const validateArgs = function (packet) {
let missing = [] 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.cmd==='scan' || packet.cmd ==='close') return {}
if (!packet.args.address) missing.push('address') ne('address')
switch (packet.cmd) switch (packet.cmd)
{ {
case 'readRaw': case 'readRaw':
case 'writeRaw': case 'writeRaw':
if (!packet.args.length) missing.push('length') ne('length')
if (!packet.args.buffer) missing.push('buffer') ne('buffer')
break break
case 'read': case 'read':
case 'read2': case 'read2':
case 'write': case 'write':
case 'write2': case 'write2':
if (!packet.args.cmd) missing.push('cmd') ne('cmd')
} }
switch (packet.cmd) switch (packet.cmd)
{ {
case 'write': case 'write':
case 'write2': case 'write2':
case 'send': case 'send':
if (!packet.args.byte) missing.push('byte') ne('byte')
} }
if (missing.length > 0) { if (missing.length > 0) {
return {error: `following bus arguments are missing ${missing}`, packet: packet } return {error: `following bus arguments are missing ${missing}`, packet: packet }
} }
return {} return {}
} }
const bus_funcs = {
const bus_funcs = {
scan: function () { return pify(this.i2cbus.scan).bind(this.i2cbus)() }, scan: function () { return pify(this.i2cbus.scan).bind(this.i2cbus)() },
close: function () { return pify(this.i2cbus.close).bind(this.i2cbus)() }, close: function () { return pify(this.i2cbus.close).bind(this.i2cbus)() },
readRaw: function (args) { readRaw: function (args) {
return pify(this.i2cbus.i2cRead).bind(this.i2cbus)(args.address, args.length, args.buffer) return pify(this.i2cbus.i2cRead).bind(this.i2cbus)(args.address, args.length, args.buffer)
}, },
writeRaw: function (args) { writeRaw: function (args) {
return pify(this.i2cbus.i2cWrite).bind(this.i2cbus)(args.address, args.length, args.buffer) return pify(this.i2cbus.i2cWrite).bind(this.i2cbus)(args.address, args.length, args.buffer)
}, },
read: function (args) { read: function (args) {
// console.log('read: address, cmd', address, cmd) // console.log('read: address, cmd', address, cmd)
return pify(this.i2cbus.readByte).bind(this.i2cbus)(args.address, args.cmd) return pify(this.i2cbus.readByte).bind(this.i2cbus)(args.address, args.cmd)
}, },
write: function (args) { write: function (args) {
// console.log('write: address, cmd, byte', args.address, args.cmd, args.byte) // 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) return pify(this.i2cbus.writeByte.bind(this.i2cbus))(args.address, args.cmd, args.byte)
}, },
read2: function (args) { read2: function (args) {
return pify(this.i2cbus.readWord.bind(this.i2cbus))(args.address, args.cmd) return pify(this.i2cbus.readWord.bind(this.i2cbus))(args.address, args.cmd)
}, },
write2: function (args) { write2: function (args) {
return pify(this.i2cbus.writeWord.bind(this.i2cbus))(args.address, args.cmd, args.byte) return pify(this.i2cbus.writeWord.bind(this.i2cbus))(args.address, args.cmd, args.byte)
}, },
receive: function (args) { receive: function (args) {
// console.log('receivebyte', address) // console.log('receivebyte', address)
return pify(this.i2cbus.receiveByte.bind(this.i2cbus))(args.address) return pify(this.i2cbus.receiveByte.bind(this.i2cbus))(args.address)
}, },
send: function (args) { send: function (args) {
// console.log('sendbyte', address,byte) // console.log('sendbyte', address,byte)
return pify(this.i2cbus.sendByte.bind(this.i2cbus))(args.address, args.byte) return pify(this.i2cbus.sendByte.bind(this.i2cbus))(args.address, args.byte)