From 4bd08f0355b6b2cf3c027202d5ad301b4e182953 Mon Sep 17 00:00:00 2001
From: yy1717 <fctom1215@outlook.com>
Date: 星期五, 31 三月 2023 17:16:22 +0800
Subject: [PATCH] 科目二修改

---
 lib/src/main/cpp/rtk_module/rtk.cpp |   87 +++++++++++++++++++++++++++----------------
 1 files changed, 55 insertions(+), 32 deletions(-)

diff --git a/lib/src/main/cpp/rtk_module/rtk.cpp b/lib/src/main/cpp/rtk_module/rtk.cpp
index 88adfa5..de85611 100644
--- a/lib/src/main/cpp/rtk_module/rtk.cpp
+++ b/lib/src/main/cpp/rtk_module/rtk.cpp
@@ -21,6 +21,7 @@
 #include "virtual_rtk.h"
 #include "../mcu/mcu_if.h"
 #include "../mcu/ahp.h"
+#include "../utils/xconvert.h"
 
 #define DEBUG(fmt, args...)     LOGD("<rtk> <%s>: " fmt, __func__, ##args)
 
@@ -40,9 +41,25 @@
 static gpsStatus_t gpsStatus;
 static char rtkModel[32] = {0};
 
-static rtk_info CurrRTKInfo;
 static bool needSetPjk = false;
 static int lostCnt;
+
+// 缁勫悎PJK鍜孴RA鐨勬秷鎭唴瀹�
+static struct {
+    int year;
+    int month;
+    int day;
+    int hour;
+    int min;
+    int sec;
+    int millisec;
+    int qf;
+    double heading;
+    double pitch;
+    double roll;
+    double x;
+    double y;
+} xy_temp;
 
 static void CheckPjkParam(void);
 static void CheckPjkParamTimeout(apptimer_var_t val);
@@ -312,28 +329,31 @@
     int ss = str2int(s->nmea_value[0].data + 4, 2);
     int dss = str2int(s->nmea_value[0].data + 7, 2);
 
-    CurrRTKInfo.MM = str2int(s->nmea_value[1].data, 2);
-    CurrRTKInfo.DD = str2int(s->nmea_value[1].data + 2, 2);
-    CurrRTKInfo.YY = str2int(s->nmea_value[1].data + 4, 2);
+    xy_temp.month = str2int(s->nmea_value[1].data, 2);
+    xy_temp.day = str2int(s->nmea_value[1].data + 2, 2);
+    xy_temp.year = str2int(s->nmea_value[1].data + 4, 2);
 
-    CurrRTKInfo.qf = str2int(s->nmea_value[6].data, s->nmea_value[6].length);
+    xy_temp.qf = str2int(s->nmea_value[6].data, s->nmea_value[6].length);
 
     // NOTE: RTK妯″潡鏄互鍗楀寳鍚戜负X杞达紝瑗夸笢鍚戜负Y杞达紝鎴戜滑浜ゆ崲涓嬶紝浠ョ鍚堜竴鑸�昏緫
-    str2float(&CurrRTKInfo.y, s->nmea_value[2].data, s->nmea_value[2].length);
-    str2float(&CurrRTKInfo.x, s->nmea_value[4].data, s->nmea_value[4].length);
+    str2float(&xy_temp.y, s->nmea_value[2].data, s->nmea_value[2].length);
+    str2float(&xy_temp.x, s->nmea_value[4].data, s->nmea_value[4].length);
 
-    if (CurrRTKInfo.hh == hh && CurrRTKInfo.mm == mm && CurrRTKInfo.ss == ss && CurrRTKInfo.dss == dss) {
-        PlatformStatusChanged(RTK_UPDATE_EVT, (uint8_t *)&CurrRTKInfo, sizeof(CurrRTKInfo));
-//        UpdateRTKInfo(&CurrRTKInfo);
-//        up_num++;
-        /*if ((up_num % 5) == 0)*/ {
-//            NewMgrEvent(DRIVER_UPDATE_EVT);
-        }
+    if (xy_temp.hour == hh && xy_temp.min == mm && xy_temp.sec == ss && xy_temp.millisec == dss) {
+        rtk_info_t rtk;
+        rtk.qf = xy_temp.qf;
+        rtk.utc_time = static_cast<int64_t>(TimeMakeComposite(2000 + xy_temp.year, xy_temp.month, xy_temp.day, xy_temp.hour, xy_temp.min, xy_temp.sec))*static_cast<int64_t>(1000) + static_cast<int64_t>(dss*10);
+        rtk.x = xy_temp.x;
+        rtk.y = xy_temp.y;
+        rtk.heading = xy_temp.heading;
+        rtk.pitch = xy_temp.pitch;
+        rtk.roll = xy_temp.roll;
+        PlatformStatusChanged(RTK_UPDATE_EVT, (uint8_t *)&rtk, sizeof(rtk));
     }
-    CurrRTKInfo.hh = hh;
-    CurrRTKInfo.mm = mm;
-    CurrRTKInfo.ss = ss;
-    CurrRTKInfo.dss = dss;
+    xy_temp.hour = hh;
+    xy_temp.min = mm;
+    xy_temp.sec = ss;
+    xy_temp.millisec = dss;
 }
 
 void handleGPTRA(const struct nmea *s) {
@@ -344,22 +364,25 @@
     int ss = str2int(s->nmea_value[0].data + 4, 2);
     int dss = str2int(s->nmea_value[0].data + 7, 2);
 
-    str2float(&CurrRTKInfo.heading, s->nmea_value[1].data, s->nmea_value[1].length);
-    str2float(&CurrRTKInfo.pitch, s->nmea_value[2].data, s->nmea_value[2].length);
-    str2float(&CurrRTKInfo.roll, s->nmea_value[3].data, s->nmea_value[3].length);
+    str2float(&xy_temp.heading, s->nmea_value[1].data, s->nmea_value[1].length);
+    str2float(&xy_temp.pitch, s->nmea_value[2].data, s->nmea_value[2].length);
+    str2float(&xy_temp.roll, s->nmea_value[3].data, s->nmea_value[3].length);
 
-    if (CurrRTKInfo.hh == hh && CurrRTKInfo.mm == mm && CurrRTKInfo.ss == ss && CurrRTKInfo.dss == dss) {
-        PlatformStatusChanged(RTK_UPDATE_EVT, (uint8_t *)&CurrRTKInfo, sizeof(CurrRTKInfo));
-//        UpdateRTKInfo(&CurrRTKInfo);
-//        up_num++;
-        /*if ((up_num % 5) == 0)*/ {
-//            NewMgrEvent(DRIVER_UPDATE_EVT);
-        }
+    if (xy_temp.hour == hh && xy_temp.min == mm && xy_temp.sec == ss && xy_temp.millisec == dss) {
+        rtk_info_t rtk;
+        rtk.qf = xy_temp.qf;
+        rtk.utc_time = static_cast<int64_t>(TimeMakeComposite(2000 + xy_temp.year, xy_temp.month, xy_temp.day, xy_temp.hour, xy_temp.min, xy_temp.sec))*static_cast<int64_t>(1000) + static_cast<int64_t>(dss*10);
+        rtk.x = xy_temp.x;
+        rtk.y = xy_temp.y;
+        rtk.heading = xy_temp.heading;
+        rtk.pitch = xy_temp.pitch;
+        rtk.roll = xy_temp.roll;
+        PlatformStatusChanged(RTK_UPDATE_EVT, (uint8_t *)&rtk, sizeof(rtk));
     }
-    CurrRTKInfo.hh = hh;
-    CurrRTKInfo.mm = mm;
-    CurrRTKInfo.ss = ss;
-    CurrRTKInfo.dss = dss;
+    xy_temp.hour = hh;
+    xy_temp.min = mm;
+    xy_temp.sec = ss;
+    xy_temp.millisec = dss;
 }
 
 static void CheckPjkParam(void)

--
Gitblit v1.8.0