Quellcode durchsuchen

add: 添加luat_flash头文件,改造OTA调用机制

Wendal Chen vor 3 Jahren
Ursprung
Commit
c597bc6556
4 geänderte Dateien mit 55 neuen und 1 gelöschten Zeilen
  1. 43 0
      luat/include/luat_flash.h
  2. 3 1
      luat/include/luat_ota.h
  3. 7 0
      luat/modules/luat_main.c
  4. 2 0
      luat/modules/luat_ota.c

+ 43 - 0
luat/include/luat_flash.h

@@ -0,0 +1,43 @@
+
+#ifndef LUAT_flash_H
+#define LUAT_flash_H
+#include "luat_base.h"
+/**
+ * @defgroup luatos_flash 片上Flash操作
+ * @{
+ */
+
+/**
+ * @brief 读取指定区域的Flash数据
+ * 
+ * @param buff[OUT] 读出的数据
+ * @param addr 偏移量, 与具体设备相关
+ * @param len 读取长度
+ * @return int <= 0错误 >0实际读取的大小
+ */
+int luat_flash_read(char* buff, size_t addr, size_t len);
+
+/**
+ * @brief 写入指定区域的flash数据
+ * 
+ * @param buff[IN] 写入的数据
+ * @param addr 偏移量, 与具体设备相关
+ * @param len 写入长度
+ * @return int <= 0错误 >0实际写入的大小
+ */
+int luat_flash_write(char* buff, size_t addr, size_t len);
+
+/**
+ * @brief 抹除指定区域的flash数据
+ * 
+ * @param addr 偏移量, 与具体设备相关
+ * @param len 抹除长度,通常为区域大小, 例如4096
+ * @return int != 0错误 =0 正常
+ */
+int luat_flash_erase(size_t addr, size_t len);
+
+
+/**
+ * @}
+ */
+#endif

+ 3 - 1
luat/include/luat_ota.h

@@ -28,6 +28,8 @@ int luat_ota_update_or_rollback(void);
 void luat_ota_reboot(int timeout_ms);
 
 int luat_ota(uint32_t luadb_addr);
-int luat_flash_write(uint32_t addr, uint8_t * buf, uint32_t len);
+
+int luat_ota_exec(void);
+// int luat_flash_write(uint32_t addr, uint8_t * buf, uint32_t len);
 
 #endif

+ 7 - 0
luat/modules/luat_main.c

@@ -177,6 +177,13 @@ int luat_main (void) {
 #ifdef AIR302
     // 是否需要升级或者回滚
     luat_ota_update_or_rollback();
+#else
+#ifdef LUAT_USE_OTA
+  if (luat_ota_exec() == 0) {
+    luat_os_reboot(5);
+  }
+#endif
+
 #endif
 
   luat_main_call();

+ 2 - 0
luat/modules/luat_ota.c

@@ -4,6 +4,7 @@
 #include "luat_fs.h"
 #include "luat_timer.h"
 #include "luat_malloc.h"
+#include "luat_flash.h"
 
 #define LUAT_LOG_TAG "ota"
 #include "luat_log.h"
@@ -309,6 +310,7 @@ _close_decompress:
                   len = luat_fs_fread(buff, sizeof(uint8_t), UPDATE_BUFF_SIZE, fd);
                   if (len < 1)
                       break;
+                  luat_flash_erase(luadb_addr + offset, UPDATE_BUFF_SIZE);
                   luat_flash_write(luadb_addr + offset, buff, UPDATE_BUFF_SIZE);
                   offset += len;
                 }