local P = {} function P.parse(line) -- print("inter_parse: line="..line) line = string.sub(line, 1, string.find(line, "\r")) local cmd; local i = string.find(line, ":") if not i 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 last = i + 1 local args = {} while i do local key local value i = string.find(line, " ", last) arg = string.sub(line, last, i) arg = arg:gsub("%s+", "") if #arg > 0 then print("inter_parse: arg: "..arg) j = string.find(arg, "=") if not j then if #arg > 0 then key = arg args[key] = true print("inter_parse: key="..key.."=true") end else key = string.sub(arg, 1, j-1) value = string.sub(arg, j+1) print("inter_parse: key="..key..", value="..value) end end if not i then break end last = i + 1 end return cmd, args end local cb function inter_on_line(line) print("line:"..line) local cmd, args = P.parse(line) if not cmd then return end if cb then cb(cmd, args) end end function P.init(callback) cb = callback uart.on("data", "\r", inter_on_line, 0) end return P