Parcourir la source

fix: libgnss.clear()未能正确清除历史定位数据

Wendal Chen il y a 3 ans
Parent
commit
f37756ce5e

+ 20 - 15
components/minmea/luat_gnss.c

@@ -45,25 +45,30 @@ void luat_libgnss_uart_recv_cb(int uart_id, uint32_t data_len) {
 }
 
 
-static uint32_t msg_counter[MINMEA_SENTENCE_MAX_ID];
+// static uint32_t msg_counter[MINMEA_SENTENCE_MAX_ID];
 
-int luat_libgnss_init(void) {
-    if (libgnss_gnss)
-        return 0;
-    libgnss_gnss = luat_heap_malloc(sizeof(luat_libgnss_t));
+int luat_libgnss_init(int clear) {
     if (libgnss_gnss == NULL) {
-        LLOGW("out of memory for libgnss data parse");
-        return -1;
+        libgnss_gnss = luat_heap_malloc(sizeof(luat_libgnss_t));
+        if (libgnss_gnss == NULL) {
+            LLOGW("out of memory for libgnss data parse");
+            return -1;
+        }
     }
-    libgnss_gnsstmp = luat_heap_malloc(sizeof(luat_libgnss_tmp_t));
     if (libgnss_gnsstmp == NULL) {
-        luat_heap_free(libgnss_gnss);
-        LLOGW("out of memory for libgnss data parse");
-        return -1;
+        libgnss_gnsstmp = luat_heap_malloc(sizeof(luat_libgnss_tmp_t));
+        if (libgnss_gnsstmp == NULL) {
+            luat_heap_free(libgnss_gnss);
+            libgnss_gnss = NULL;
+            LLOGW("out of memory for libgnss data parse");
+            return -1;
+        }
     }
     // gnss->lua_ref = luaL_ref(L, LUA_REGISTRYINDEX);
-    memset(libgnss_gnss, 0, sizeof(luat_libgnss_t));
-    memset(libgnss_gnsstmp, 0, sizeof(luat_libgnss_tmp_t));
+    if (clear) {
+        memset(libgnss_gnss, 0, sizeof(luat_libgnss_t));
+        memset(libgnss_gnsstmp, 0, sizeof(luat_libgnss_tmp_t));
+    }
     //lua_pushboolean(L, 1);
     return 0;
 }
@@ -105,14 +110,14 @@ int luat_libgnss_parse_data(const char* data, size_t len) {
 }
 
 int luat_libgnss_parse_nmea(const char* line) {
-    if (libgnss_gnss == NULL && luat_libgnss_init()) {
+    if (libgnss_gnss == NULL && luat_libgnss_init(0)) {
         return 0;
     }
     struct minmea_sentence_gsv *frame_gsv = &libgnss_gnsstmp->frame_gsv;
     enum minmea_sentence_id id = minmea_sentence_id(line, false);
     if (id == MINMEA_UNKNOWN || id >= MINMEA_SENTENCE_MAX_ID || id == MINMEA_INVALID)
         return -1;
-    msg_counter[id] ++;
+    // msg_counter[id] ++;
     // int ticks = 0;
     struct tm tblock = {0};
     int ticks = luat_mcu_ticks();

+ 3 - 3
components/minmea/luat_lib_libgnss.c

@@ -584,7 +584,7 @@ libgnss.debug(true)
 libgnss.debug(false)
  */
 static int l_libgnss_debug(lua_State *L) {
-    if (libgnss_gnss == NULL && luat_libgnss_init()) {
+    if (libgnss_gnss == NULL && luat_libgnss_init(0)) {
         return 0;
     }
     if (lua_isboolean(L, 1) && lua_toboolean(L, 1)) {
@@ -746,11 +746,11 @@ static int l_libgnss_get_gll(lua_State* L) {
 @api libgnss.clear()
 @return nil 无返回值
 @usage
--- 该操作会清除所有定位数据,包括调试配置
+-- 该操作会清除所有定位数据
  */
 static int l_libgnss_clear(lua_State*L) {
     (void)L;
-    if (libgnss_gnss == NULL && luat_libgnss_init())
+    if (libgnss_gnss == NULL && luat_libgnss_init(1))
         return 0;
     memset(libgnss_gnss, 0, sizeof(luat_libgnss_t));
     return 0;

+ 1 - 1
components/minmea/minmea.h

@@ -313,7 +313,7 @@ static inline bool minmea_isfield(char c) {
 #define FRAME_GSA_MAX   (6)
 #define FRAME_GSV_MAX   (5)
 
-int luat_libgnss_init(void);
+int luat_libgnss_init(int clear);
 int luat_libgnss_parse_data(const char* data, size_t len);
 int luat_libgnss_parse_nmea(const char* line);
 void luat_libgnss_uart_recv_cb(int uart_id, uint32_t data_len);