Эх сурвалжийг харах

add: fota.run支持指定偏移量和长度

Wendal Chen 1 жил өмнө
parent
commit
3794571f4a

+ 18 - 5
luat/modules/luat_lib_fota.c

@@ -109,8 +109,10 @@ static int l_fota_wait(lua_State* L)
 
 /**
 写入fota数据
-@api fota.run(buff)
+@api fota.run(buff, offset, len)
 @zbuff/string fota数据,尽量用zbuff
+@int 起始偏移量,传入zbuff时有效,默认是0
+@int 写入长度,传入zbuff时有效,默认是zbuff:used()
 @return boolean 有异常返回false,无异常返回true
 @return boolean 接收到最后一块返回true
 @return int 还未写入的数据量,超过64K必须做等待
@@ -118,16 +120,27 @@ static int l_fota_wait(lua_State* L)
 local result, isDone, cache = fota.run(buf) -- 写入fota流程
 
 -- 提示: ,如果传入的是zbuff,写入成功后,请自行清空zbuff内的数据
+
+-- 2024.4.3新增offset, len参数, 仅对zbuff有效
+fota.run(buff, 0, 1024)
 */
 static int l_fota_write(lua_State* L)
 {
-	int result;
-    size_t len;
-    const char *buf;
+	int result = 0;
+    size_t len = 0;
+    const char *buf = NULL;
     if(lua_isuserdata(L, 1))
     {
         luat_zbuff_t *buff = ((luat_zbuff_t *)luaL_checkudata(L, 1, LUAT_ZBUFF_TYPE));
-        result = luat_fota_write(buff->addr, buff->used);
+        size_t offset = luaL_optinteger(L, 2, 0);
+        len = luaL_optinteger(L, 3, buff->used - offset);
+        if (len + offset > buff->len) {
+            LLOGE("len too long %d > %d", len, buff->len);
+            result = -1;
+        }
+        else {
+            result = luat_fota_write(buff->addr + offset, len);
+        }
     }
     else
     {