added arguments checking on incoming package
parent
615586173d
commit
78397d22bf
|
@ -3,7 +3,7 @@
|
|||
*
|
||||
*/
|
||||
import Bus from '../src/bus-packet'
|
||||
const PATH = '/opt/uci/unix.sock'
|
||||
// const PATH = ''
|
||||
|
||||
;
|
||||
(async () => {
|
||||
|
|
|
@ -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"
|
||||
},
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue