mcuUart.lua 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. --- 模块功能:MCU和Air模块串口透传通信.
  2. -- Air模块的串口接收到1024字节的数据,或者接收数据后超时1秒钟不再收到数据,则透传给服务器
  3. --
  4. -- 服务器下发的数据,通过服务器直接透传给MCU
  5. -- @author openLuat
  6. -- @module socketLongConnectionTrasparent.mcuUart
  7. -- @license MIT
  8. -- @copyright openLuat
  9. -- @release 2018.03.30
  10. module(...,package.seeall)
  11. require"pm"
  12. local uartID = 2
  13. local function taskRead()
  14. local cacheData = ""
  15. while true do
  16. local s = uart.read(uartID,"*l")
  17. if s == "" then
  18. uart.on(uartID,"receive",function() sys.publish("UART_RECEIVE") end)
  19. if not sys.waitUntil("UART_RECEIVE",1000) then
  20. sys.publish("UART_RECV_DATA",cacheData:sub(1,1024))
  21. cacheData = cacheData:sub(1025,-1)
  22. end
  23. uart.on(uartID,"receive")
  24. else
  25. cacheData = cacheData..s
  26. if cacheData:len()>=1024 then
  27. sys.publish("UART_RECV_DATA",cacheData:sub(1,1024))
  28. cacheData = cacheData:sub(1025,-1)
  29. end
  30. end
  31. end
  32. end
  33. local function socketRecvData(data)
  34. uart.write(uartID,data)
  35. end
  36. pm.wake("mcuUart.lua")
  37. uart.setup(uartID,115200,8,uart.PAR_NONE,uart.STOP_1)
  38. sys.taskInit(taskRead)
  39. sys.subscribe("SOCKET_RECV_DATA",socketRecvData)