Răsfoiți Sursa

fix: libgnss.clear清理不够干净

Wendal Chen 1 an în urmă
părinte
comite
4554d9a561
2 a modificat fișierele cu 21 adăugiri și 3 ștergeri
  1. 20 2
      components/minmea/luat_gnss.c
  2. 1 1
      components/minmea/luat_lib_libgnss.c

+ 20 - 2
components/minmea/luat_gnss.c

@@ -37,11 +37,29 @@ void luat_libgnss_uart_recv_cb(int uart_id, uint32_t data_len) {
     }
 }
 
+static void clear_data(minmea_data_t* ptr) {
+    if (ptr) {
+        memset(ptr, 0, sizeof(minmea_data_t));
+    }
+}
+
 int luat_libgnss_init(int clear) {
     if (clear) {
         memset(&gnssctx.frame_rmc, 0, sizeof(struct minmea_sentence_rmc));
-        if (gnssctx.rmc) {
-            memset(gnssctx.rmc, 0, 128);
+        clear_data(gnssctx.rmc);
+        clear_data(gnssctx.gga);
+        clear_data(gnssctx.gll);
+        clear_data(gnssctx.gst);
+        clear_data(gnssctx.vtg);
+        clear_data(gnssctx.zda);
+        clear_data(gnssctx.txt);
+        for (size_t i = 0; i < FRAME_GSV_MAX; i++)
+        {
+            clear_data(gnssctx.gsv[i]);
+        }
+        for (size_t i = 0; i < FRAME_GSA_MAX; i++)
+        {
+            clear_data(gnssctx.gsa[i]);
         }
     }
     return 0;

+ 1 - 1
components/minmea/luat_lib_libgnss.c

@@ -918,7 +918,7 @@ static int l_libgnss_get_gll(lua_State* L) {
  */
 static int l_libgnss_clear(lua_State*L) {
     (void)L;
-    memset(&gnssctx.frame_rmc, 0, sizeof(struct minmea_sentence_rmc));
+    luat_libgnss_init(true);
     return 0;
 }