remote_net_wakeup.lua 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. -- netlab.luatos.com上打开TCP,然后修改IP和端口号,自动回复netlab下发的数据,自收自发测试
  2. local server_ip = "112.125.89.8"
  3. local server_port = 45471
  4. local rxbuf = zbuff.create(8192)
  5. local socketIsConnected = false
  6. local socketTxCycle = 5 * 1000
  7. local socketWaitTxSuccess = 15 * 1000
  8. local socketTxQueue = {}
  9. local function insertData(data)
  10. if #socketTxQueue >= 10 then -- 缓存10条消息
  11. return
  12. end
  13. table.insert(socketTxQueue , data)
  14. if #socketTxQueue == 1 then
  15. sys.publish("SOCKET_APP_NEW_SOCKET")
  16. end
  17. end
  18. local function heartTimerCb()
  19. insertData("heart")
  20. end
  21. local function netCB(netc, event, param)
  22. log.info("netc", netc, event, param)
  23. if param ~= 0 then
  24. socketIsConnected = false
  25. sys.timerStop(heartTimerCb)
  26. sys.publish("socket_disconnect")
  27. return
  28. end
  29. if event == socket.LINK then
  30. elseif event == socket.ON_LINE then
  31. socketIsConnected = true
  32. sys.timerLoopStart(heartTimerCb, 60000)
  33. sys.publish("SOCKET_APP_IS_READY")
  34. insertData("hello,luatos!")
  35. elseif event == socket.EVENT then
  36. socket.rx(netc, rxbuf)
  37. socket.wait(netc)
  38. if rxbuf:used() > 0 then
  39. insertData("recv ok")
  40. end
  41. rxbuf:del()
  42. elseif event == socket.TX_OK then
  43. socket.wait(netc)
  44. log.info("发送完成")
  45. sys.publish("SOCKET_TX_OK")
  46. elseif event == socket.CLOSED then
  47. socketIsConnected = false
  48. sys.timerStop(heartTimerCb)
  49. sys.publish("socket_disconnect")
  50. end
  51. end
  52. local netc = socket.create(nil, netCB)
  53. local function socketTask()
  54. socket.debug(netc, true)
  55. socket.config(netc, nil, nil, nil, 300, 5, 6) --开启TCP保活,防止长时间无数据交互被运营商断线
  56. while true do
  57. local succ, result = socket.connect(netc, server_ip, server_port)
  58. if not succ then
  59. log.info("未知错误,5秒后重连")
  60. else
  61. local result, msg = sys.waitUntil("socket_disconnect")
  62. end
  63. log.info("服务器断开了,5秒后重连")
  64. socket.close(netc)
  65. log.info(rtos.meminfo("sys"))
  66. sys.wait(5000)
  67. end
  68. end
  69. sys.taskInit(function ()
  70. local needWait
  71. while true do
  72. if socketIsConnected then
  73. if #socketTxQueue >= 1 then
  74. local txData = table.remove(socketTxQueue, 1)
  75. local succ, full, result = socket.tx(netc, txData)
  76. if succ then
  77. local result = sys.waitUntil("SOCKET_TX_OK", socketWaitTxSuccess)
  78. log.info("result", result)
  79. else
  80. socketIsConnected = false
  81. sys.publish("socket_disconnect")
  82. end
  83. else
  84. sys.waitUntil("SOCKET_APP_NEW_SOCKET")
  85. end
  86. else
  87. sys.waitUntil("SOCKET_APP_IS_READY")
  88. end
  89. end
  90. end)
  91. function socketDemo()
  92. gpio.setup(23,nil)
  93. gpio.setup(32, function()
  94. insertData("wakeup data")
  95. end, gpio.PULLUP, gpio.FALLING)
  96. pm.power(pm.WORK_MODE, 1)
  97. sys.taskInit(socketTask)
  98. end
  99. socketDemo()