10 local libfota2 = require("libfota2")
20 -- 5表示使用iot平台VERSION需要使用 xxx.yyy.zzz形式
21 function libfota_cb(result)
22 log.info("fota", "result", result)
25 rtos.reboot() --如果还有其他事情要做,自行决定reboot的时机
29 --下方示例为合宙iot平台,地址:http://iot.openluat.com
30 libfota2.request(libfota_cb)
34 -- 若需要升级, 响应http 200, body为升级文件的内容
35 -- 若不需要升级, 响应300或以上的代码,务必注意
36 local opts = {url="http://xxxxxx.com/xxx/upgrade"}
37 -- opts的详细说明, 看后面的函数API文档
38 libfota2.request(libfota_cb, opts)
42 sys.timerLoopStart(libfota2.request, 4*3600*1000, libfota_cb)
44 sys.timerLoopStart(libfota2.request, 4*3600*1000, libfota_cb, opts)
47 local sys
= require
"sys"
53 local function fota_task(cbFnc
, opts
)
55 local code
, headers
, body
= http
.request(opts
.method
, opts
.url
, opts
.headers
, opts
.body
, opts
, opts
.server_cert
, opts
.client_cert
, opts
.client_key
, opts
.client_password
).wait()
56 -- log.info("http fota", code, headers, body)
57 if code
== 200 or code
== 206 then
63 elseif code
== -4 then
65 elseif code
== -5 then
68 log.info("fota", code
, body
)
76 @api libfota.request(cbFnc, opts)
77 @table fota参数, 后面有详细描述
78 @function cbFnc 用户回调函数,回调函数的调用形式为:cbFnc(result) , 必须传
82 -- opts参数说明, 所有参数都是可选的
83 -- 1. opts.url string 升级所需要的URL, 若使用合宙iot平台,则不需要填
84 -- 2. opts.version string 版本号, 默认是 BSP版本号.x.z格式
85 -- 3. opts.timeout int 请求超时时间, 默认300000毫秒,单位毫秒
86 -- 4. opts.project_key string 合宙IOT平台的项目key, 默认取全局变量PRODUCT_KEY. 自建服务器不用填
87 -- 5. opts.imei string 设备识别码, 默认取IMEI(Cat.1模块)或WLAN MAC地址(wifi模块)或MCU唯一ID
88 -- 6. opts.firmware_name string 固件名称,默认是 _G.PROJECT.. "_LuatOS-SoC_" .. rtos.bsp()
89 -- 7. opts.server_cert string 服务器证书, 默认不使用
90 -- 8. opts.client_cert string 客户端证书, 默认不使用
91 -- 9. opts.client_key string 客户端私钥, 默认不使用
92 -- 10. opts.client_password string 客户端私钥口令, 默认不使用
93 -- 11. opts.method string 请求方法, 默认是GET
94 -- 12. opts.headers table 额外添加的请求头,默认不需要
95 -- 13. opts.body string 额外添加的请求body,默认不需要
97 function libfota2
.request(cbFnc
, opts
)
104 os
.remove("/update.bin")
105 opts
.dst
= "/update.bin"
108 cbFnc
= function() end
112 opts
.url
= "http://iot.openluat.com/api/site/firmware_upgrade"
114 if opts
.url
:sub(1, 4) ~= "###" and not opts
.url_done
then
116 if not opts
.project_key
then
117 opts
.project_key
= _G
.PRODUCT_KEY
118 if not opts
.project_key
then
119 log.error("fota", "iot.openluat.com need PRODUCT_KEY!!!")
125 if not opts
.version
then
126 local x
,y
,z
= string.match(_G
.VERSION
,"(%d+).(%d+).(%d+)")
127 opts
.version
= rtos
.version():sub(2) .. "." .. x
.."."..z
130 if not opts
.firmware_name
then
131 opts
.firmware_name
= _G
.PROJECT
.. "_LuatOS-SoC_" .. rtos
.bsp()
134 if not opts
.imei
then
138 elseif wlan
and wlan
.getMac
then
141 imei
= mcu
.unique_id():toHex()
147 opts
.url
= string.format("%s?imei=%s&project_key=%s&firmware_name=%s&version=%s", opts
.url
, opts
.imei
, opts
.project_key
, opts
.firmware_name
, opts
.version
)
149 opts
.url
= opts
.url
:sub(4)
153 if not opts
.method
then
156 log.info("fota.url", opts
.method
, opts
.url
)
157 log.info("fota.imei", opts
.imei
)
158 log.info("fota.project_key", opts
.project_key
)
159 log.info("fota.firmware_name", opts
.firmware_name
)
160 log.info("fota.version", opts
.version
)
161 sys
.taskInit(fota_task
, cbFnc
, opts
)