sunzhipeng 2 лет назад
Родитель
Сommit
c6010800f2

+ 3 - 2
demo/pm/EC618_Lowpower/main.lua

@@ -8,8 +8,9 @@ _G.sysplus = require("sysplus")
 log.style(1)
 
 
--- require "functionTest"
-require "psm_plus"
+require "functionTest"
+-- require "psm_plus"
+-- require "remote_net_wakeup"
 
 -- 用户代码已结束---------------------------------------------
 -- 结尾总是这一句

+ 3 - 1
demo/pm/EC618_Lowpower/psm_plus.lua

@@ -63,6 +63,8 @@ local function testTask(ip, port)
     pm.dtimerStart(3, period)
     pm.power(pm.WORK_MODE,3)
     log.info(rtos.meminfo("sys"))
-    sys.wait(10000)
+    sys.wait(15000)
+    log.info("进入极致功耗模式失败,尝试重启")
+    rtos.reboot()
 end
 sysplus.taskInitEx(testTask, d1Name, netCB, server_ip, server_port)

+ 102 - 0
demo/pm/EC618_Lowpower/remote_net_wakeup.lua

@@ -0,0 +1,102 @@
+-- netlab.luatos.com上打开TCP,然后修改IP和端口号,自动回复netlab下发的数据,自收自发测试
+
+local server_ip = "112.125.89.8"
+local server_port = 45471
+local rxbuf = zbuff.create(8192)
+
+local socketTxCycle = 5 * 1000
+local socketWaitTxSuccess = 15 * 1000
+local socketTxQueue = {}
+
+local function insertData(data)
+    if #socketTxQueue >= 10 then -- 缓存10条消息
+        return
+    end
+
+    table.insert(socketTxQueue , data)
+    if #socketTxQueue == 1 then
+        sys.publish("SOCKET_APP_NEW_SOCKET")
+    end
+end
+
+local function heartTimerCb()
+    insertData("heart")
+end  
+
+local function netCB(netc, event, param)
+    log.info("netc", netc, event, param)
+    if param ~= 0 then
+        sys.timerStop(heartTimerCb)
+        sys.publish("socket_disconnect")
+        return
+    end
+	if event == socket.LINK then
+	elseif event == socket.ON_LINE then
+        sys.timerLoopStart(heartTimerCb, 60000)
+        insertData("hello,luatos!")
+	elseif event == socket.EVENT then
+        socket.rx(netc, rxbuf)
+        socket.wait(netc)
+        if rxbuf:used() > 0 then
+            insertData("recv ok")
+        end
+        rxbuf:del()
+	elseif event == socket.TX_OK then
+        socket.wait(netc)
+        log.info("发送完成")
+        sys.publish("SOCKET_TX_OK")
+	elseif event == socket.CLOSE then
+        sys.timerStop(heartTimerCb)
+        sys.publish("socket_disconnect")
+    end
+end
+
+local netc = socket.create(nil, netCB)
+
+local function socketTask()
+
+	socket.debug(netc, true)
+	socket.config(netc, nil, nil, nil, 300, 5, 6)   --开启TCP保活,防止长时间无数据交互被运营商断线
+    while true do
+        local succ, result = socket.connect(netc, server_ip, server_port)
+        if not succ then
+            log.info("未知错误,5秒后重连")
+        else
+            local result, msg = sys.waitUntil("socket_disconnect")
+        end
+        log.info("服务器断开了,5秒后重连")
+        socket.close(netc)
+        log.info(rtos.meminfo("sys"))
+        sys.wait(5000)
+    end
+end
+
+sys.taskInit(function ()
+    local needWait
+    while true do
+        if #socketTxQueue >= 1 then
+            local txData = table.remove(socketTxQueue, 1)
+            local succ, full, result = socket.tx(netc, txData)
+            if succ then
+                needWait = true
+            end
+            if needWait then
+                local result = sys.waitUntil("SOCKET_TX_OK", socketWaitTxSuccess)
+                log.info("result", result)
+            end
+        else
+            sys.waitUntil("SOCKET_APP_NEW_SOCKET")
+        end
+    end
+end)
+
+
+function socketDemo()
+    gpio.setup(23,nil)
+    gpio.setup(32, function()
+        insertData("wakeup data")
+    end, gpio.PULLUP, gpio.FALLING)
+    pm.power(pm.WORK_MODE, 1)
+	sys.taskInit(socketTask)
+end
+socketDemo()