4G远程更新

2021-01-06  本文已影响0人  Lupino

远程更新对于硬件设备非常的重要,在 4G 的设备上面我们用的是 luat,

但是它原本的 ota 更新是有问题对的, 在他们的 github 上面提交 issue, 没有人鸟。

于是干脆自己设计一个。

我把自己写的应用代码全部都打包到一个文件上面。

在入口的位置,require 两个不同的文件。

用一个 safeRequire 如下:

function safeRequire(file)
    local oldPath = package.path
    package.path = "/?.lua;/?.luac;/?.luae;"..package.path
    local result, para = pcall(require, file .. '_new')

    if not result then
        result, para = pcall(require, file)
    end
    package.path = oldPath
    return result, para
end

--加载功能模块
local result, _ = safeRequire('sensor')

if not result then
    require"sensor"
end

我们主要文件名字为 sensor.lua, 我们更新后的文件叫 /sensor_new.lua, 所以也把它加到 package.path 上。

利用 pcall 的特性去 加载 所需要的 模块。

我们更新固件的时候只需要把文件写到 /sensor_new.lua, 然后重启一下机器就可以。

local function updateDoneCb(result, prompt, heads)
    if result then
        sys.timerStart(function()
            sys.restart("UPDATE_DOWNLOAD_SUCCESS")
        end, 1000)

    end
end
local url = 'https://example.com/path/to/you/sensor.lua'
http.request("GET", url, nil, nil, nil, 60000, updateDoneCb, '/sensor_new.lua')
上一篇下一篇

猜你喜欢

热点阅读