From 86fdebcc6b934eeee584709fa666067f32a09ea8 Mon Sep 17 00:00:00 2001 From: madsenco Date: Fri, 25 Feb 2011 17:45:38 +0100 Subject: [PATCH 1/2] Laundry session --- nmeamux/root/usr/bin/nmeamux | 69 ++++++++++++++++++++++++++++++++++-- 1 file changed, 67 insertions(+), 2 deletions(-) diff --git a/nmeamux/root/usr/bin/nmeamux b/nmeamux/root/usr/bin/nmeamux index fbef3e9..68474a6 100755 --- a/nmeamux/root/usr/bin/nmeamux +++ b/nmeamux/root/usr/bin/nmeamux @@ -16,6 +16,7 @@ local NmeaNode = Class("NmeaNode", nil, { mName = NIL, mSinks = NIL, mPortNo = NIL, + mSocket = NIL, mListeners = NIL, }) @@ -67,6 +68,40 @@ local sampleConf = { local nodes = {} +function configure(t) + local inp = {} + for nm, cfg in pairs(t.ports) do + inp[nm] = cfg.input + nodes[nm] = NmeaPort(nm, cfg.path, cfg.inputs, cfg.port, cfg.speed) + end + for nm, cfg in pairs(t.outputs) do + inp[nm] = cfg.input + nodes[nm] = NmeaOutput(nm, cfg.output, cfg.port, cfg.speed) + end + for nm, cfg in pairs(t.filter) do + inp[nm] = cfg.input + nodes[nm] = NmeaFilter(nm, cfg.path, cfg.port, cfg.speed) + end + + for nm, inputs in pairs(inp) do + for _, i in pairs(inputs) do + nodes[i]:addSink(nodes[nm]) + end + end +end + +function startSystem() + node:start() + end +end + +function stopSystem() + for _,n in pairs(nodes) do + n:stop() + end + nodes = {} +end + function NmeaNode:processInput(str, toListeners) -- Simple relay for _,s in pairs(self.mSinks) do s:processInput(str) end @@ -80,8 +115,38 @@ function NmeaNode:addSink(new) self.mSinks[new.mName] = new end -function NmeaNode:start(str) +function NmeaNode:start() if not self.mPortNo then return end + -- TODO Open socket + self.mSocket = XXXX + self.mListeners = tnew {} + appc.addInput(self.mSocket, function(s) + local sock = accept() + self.mListeners:append(sock) + self:acceptSock(sock) + end end --- vim: set sw=3 sts=3 et nu: +function NmeaPort:start() + local fd = io.open(self.mPath) + self.mPortReg = appc.addInput(self.mSocket, function(s) + line = line..s:read() +end + +function NmeaPort:AcceptSock(sock) +end + +function NmeaNode:stop() + if self.mSocket then self.mSocket:close() + for _,l in pairs(self.mListeners) do l:close() end + self.mSocket = nil + self.mListeners = tnew {} +end + +function main() + configure() + startSystem() +end + +return ac.ADDR_TRANSIENT, main +-- vim: set sw=3 sts=3 et nu: \ No newline at end of file From d6f3c4ffa02dec6c6be6a637ed80116487b7c28c Mon Sep 17 00:00:00 2001 From: madsenco Date: Fri, 25 Feb 2011 22:31:30 +0100 Subject: [PATCH 2/2] backup --- nmeamux/root/etc/hotplug.d/usbtty/usbtty.hotplug | 6 ++++++ nmeamux/root/usr/bin/nmeamux | 12 +++++++----- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/nmeamux/root/etc/hotplug.d/usbtty/usbtty.hotplug b/nmeamux/root/etc/hotplug.d/usbtty/usbtty.hotplug index dbf7121..861835e 100755 --- a/nmeamux/root/etc/hotplug.d/usbtty/usbtty.hotplug +++ b/nmeamux/root/etc/hotplug.d/usbtty/usbtty.hotplug @@ -4,6 +4,7 @@ exec 1>/dev/console 2>&1 P=/sys$DEVPATH [ -r $P/uevent ] && . $P/uevent +[ -r $P/../../uevent ] && . $P/../../uevent # Exit unless proper type [ $SUBSYSTEM = "usb-serial" -a -n "$DRIVER" ] || exit 0 @@ -28,6 +29,11 @@ if [ $ACTION = "add" ] ;then mkdir -p $DEVP ln -sf /dev/$MDEV $DEVP/$PORT say "Add $DEVP/$PORT -> /dev/$MDEV MANU $MANU" + if [ -n $DEVNAME ] ;then + DEVADDR=$(echo $DEVNAME | tr / _) + ln -sf /dev/$MDEV $DEVP/$DEVADDR + say "Add $DEVP/$DEVADDR -> /dev/$MDEV MANU $MANU" + fi elif [ $ACTION = "remove" ] ;then rm -f /dev/ttyusb/$MANU/$DEV_NM/$PORT say "Rem $DEVP/$PORT -> /dev/$MDEV MANU $MANU" diff --git a/nmeamux/root/usr/bin/nmeamux b/nmeamux/root/usr/bin/nmeamux index 68474a6..c526f1a 100755 --- a/nmeamux/root/usr/bin/nmeamux +++ b/nmeamux/root/usr/bin/nmeamux @@ -48,19 +48,21 @@ local sampleConf = { p_lospeed_1 = { path = "/dev/ttyusb/mos7840-9710-7840/0", speed=4800 , port=26001}, p_lospeed_2 = { path = "/dev/ttyusb/mos7840-9710-7840/1", speed=4800 , port=26002}, p_hispeed = { path = "/dev/ttyusb/mos7840-9710-7840/2", speed=38400 , port=26003}, - p_gps = { path = "/dev/ttyusb/pl2303-067b-2303/0", speed=38400 , port=26004}, + p_gps = { path = "/dev/ttyusb/pl2303-067b-2303/bus_usb_001_004", + speed=4800 , port=26004}, p_ais = { path = "/dev/ttyusb/ftdi_sio-0403-6001/0", speed=38400 , port=25001}, p_pactor = { path = "/dev/ttyusb/ftdi_sio-0403-d010/0", speed=9600 , port=25002}, p_garmin1 = { path = "/dev/ttyusb/mos7840-9710-7840/3", speed=9600 , port=25003}, p_garmin2 = { path = "/dev/ttyS0", speed=9600 , port=25004}, p_bkhousemux = { path = "/dev/ttyusb/BROOKHOUSE10-7840/3", speed=38400 , port=25005}, - p_navtex = { path = "/dev/ttyusb/NAVTEX-------7840/3", speed=38400 , port=25006}, + p_navtex = { path = "/dev/ttyusb/pl2303-067b-2303/bus_usb_001_011", + speed=38400 , port=25006}, }, filter = { nogps_bkhousemux = { inputs = { "p_bkhousemux" } , port=28001, - neg = { "^..RMB", "^..VDV" } }, + neg = { "^...GGA", "^...GSA", "^...GSV", } }, gps_bkhousemux = { inputs = { "p_bkhousemux" } , port=28002, - pos = { "^..RMB", "^..VDV" } }, + pos = { "^...GGA", "^...GSA", "^...RMC", "^...GSV", } }, autopilot = { inputs = { "p_hispeed" }, port=28003, pos = { "^..XTE", "^..WPT" } }, }, @@ -149,4 +151,4 @@ function main() end return ac.ADDR_TRANSIENT, main --- vim: set sw=3 sts=3 et nu: \ No newline at end of file +-- vim: set sw=3 sts=3 et nu: