aboutsummaryrefslogtreecommitdiff
path: root/mqtt-bridge/inter.lua
diff options
context:
space:
mode:
Diffstat (limited to 'mqtt-bridge/inter.lua')
-rw-r--r--mqtt-bridge/inter.lua73
1 files changed, 73 insertions, 0 deletions
diff --git a/mqtt-bridge/inter.lua b/mqtt-bridge/inter.lua
new file mode 100644
index 0000000..eb64a98
--- /dev/null
+++ b/mqtt-bridge/inter.lua
@@ -0,0 +1,73 @@
+function inter_parse(line)
+ print("inter_parse: line="..line)
+
+ line = string.sub(line, 1, string.find(line, "\r"))
+
+ local cmd = nil;
+ local i = string.find(line, ":")
+ if i == nil then
+ print("inter_parse: invalid line: no command, line="..line)
+ return
+ end
+ local cmd = string.sub(line, 1, i - 1)
+ print("inter_parse: cmd="..cmd)
+
+ local args = {}
+ last = i+1
+ while i ~= nil do
+ local key
+ local value
+
+ i = string.find(line, " ", last)
+
+ arg = string.sub(line, last, i)
+ print("inter_parse: arg: "..arg)
+ j = string.find(arg, "=")
+ if j == nil then
+ key = arg
+ args[key] = true
+ print("inter_parse: key="..key.."=true")
+ else
+ key = string.sub(arg, 1, j-1)
+ value = string.sub(arg, j+1)
+ print("inter_parse: key="..key..", value="..value)
+ end
+ if i == nil then
+ break
+ end
+ last = i + 1
+ end
+
+ return cmd, args
+end
+
+local cb
+-- require('inter'); inter_init();
+-- cmd:abc=123 xyz=qwe woot
+function inter_on_line(line)
+ print("line:"..line)
+
+ local cmd, args = inter_parse(line)
+ if cmd == nil then
+ return
+ end
+
+-- print("cmd="..cmd)
+-- for k, v in pairs(args) do
+-- print(k.."="..tostring(v))
+-- end
+ if cb then
+ cb(cmd, args)
+ end
+end
+
+function inter_init(callback)
+ -- uart.setup(id, baud, databits, parity, stopbits, echo)
+ -- uart.setup(0, 115200, 8, 0, 1, 0)
+ -- uart.setup(0, 9600, 8, 0, 1, 0)
+ cb = callback
+
+ tmr.alarm(0, 1000, 0, function() print("still alive!"); end)
+ uart.on("data", "\r", inter_on_line, 0)
+ print("inter ready: callback.."..tostring(cb))
+end