From 683b1595260e638d1d3c6cc0d6543a72f6d6f925 Mon Sep 17 00:00:00 2001
From: yy1717 <fctom1215@outlook.com>
Date: 星期二, 12 一月 2021 14:36:42 +0800
Subject: [PATCH] 扣分码标准化

---
 lib/src/main/cpp/rtk_module/rtk.cpp |  193 ++++++++++++++++++++++++++++++-----------------
 1 files changed, 123 insertions(+), 70 deletions(-)

diff --git a/lib/src/main/cpp/rtk_module/rtk.cpp b/lib/src/main/cpp/rtk_module/rtk.cpp
index 244c0b3..82eab51 100644
--- a/lib/src/main/cpp/rtk_module/rtk.cpp
+++ b/lib/src/main/cpp/rtk_module/rtk.cpp
@@ -36,17 +36,24 @@
 const static char SAVECONFIG[] = "saveconfig\r\n";
 const static char *PJKITEMS[] = {"gptra", "ptnlpjk"};
 const static char *GPSITEMS[] = {"gpgga", "gprmc", "gpvtg"};
+const char CMD_VERSION[] = "log version\r\n";
 
 static gpsStatus_t gpsStatus;
+static char rtkModel[32] = {0};
 
 static int (*WriteRtk)(int id, const void *buf, int len);
 
 static rtk_info CurrRTKInfo;
 static bool needSetPjk = false;
+static int lostCnt;
 
 static void CheckPjkParam(void);
 static void CheckPjkParamTimeout(union sigval sig);
 static int WriteBluetooth(int id, const void *buf, int len);
+static void GetModuleVersion(void);
+
+static void VersionTimeout(union sigval sig);
+static void GpsDataTimeout(union sigval sig);
 
 static void *UartThread(void *p);
 
@@ -59,7 +66,7 @@
     }
 }
 
-void ConfigRTKModule(void)
+void ConfigRTKModule(bool ayDevice)
 {
     // TODO
     DEBUG("ConfigRTKModule");
@@ -70,26 +77,34 @@
     memset(&gpsStatus, 0, sizeof(gpsStatus));
     gpsStatus.hh = -1;
 
-    RtkCommModeSel(1);
+    if (ayDevice) {
+        RtkCommModeSel(0);
 
-    /*static struct serial_config serialConfig;
+        static struct serial_config serialConfig;
 
-    strcpy(serialConfig.name, "/dev/ttyHSL0");
-    serialConfig.baud = 115200;
-    serialConfig.data_bit = 8;
-    serialConfig.verify_bit = 'N';
-    serialConfig.stop_bit = 1;
-    serialConfig.flow_ctrl = 0;
+        strcpy(serialConfig.name, "/dev/ttyHSL0");
+        serialConfig.baud = 115200;
+        serialConfig.data_bit = 8;
+        serialConfig.verify_bit = 'N';
+        serialConfig.stop_bit = 1;
+        serialConfig.flow_ctrl = 0;
 
-    pthread_t pid;
-    pthread_attr_t attr;
-    pthread_attr_init(&attr);
-    pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);//detached
-    pthread_create(&pid, &attr, UartThread, &serialConfig);*/
+        pthread_t pid;
+        pthread_attr_t attr;
+        pthread_attr_init(&attr);
+        pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);//detached
+        pthread_create(&pid, &attr, UartThread, &serialConfig);
+    } else {
+        RtkCommModeSel(1);
+        // 绛夊緟钃濈墮杩炴帴
+    }
 }
 
+// 钃濈墮杩炴帴鍚�
 void ConfigRTKModuleLater(void)
 {
+    AppTimer_delete(GpsDataTimeout);
+    AppTimer_delete(VersionTimeout);
     AppTimer_delete(CheckPjkParamTimeout);
     AppTimer_add(CheckPjkParamTimeout, D_SEC(1));
 }
@@ -107,59 +122,27 @@
 void handleRTKRebootComp(const struct nmea *s)
 {
     DEBUG("RTK Reboot complete!!");
-    CheckPjkParam();
+//    CheckPjkParam();
+    GetModuleVersion();
 }
 
 void handlePJKParam(const struct nmea *s) {
     DEBUG("handlePJKParam");
-//PJK Parameter: A:6378137.000, 1/F:298.257223563, B0:0.000000deg, L0:120.000000, N0:0.000, E0:500000.000.
-//PJK Parameter: A:6378137.000, 1/F:298.257223563, B0:29.512453deg, L0:106.455336, N0:0.000, E0:0.000.
-//    bool setparam = true;
-//
-//    const char DP1[] = "A:6378137.000";
-//    const char DP2[] = "1/F:298.257223563";
-//    const char DP3[] = "B0:29.512453deg";
-//    const char DP4[] = "L0:106.455336";
-//    const char DP5[] = "N0:0.000";
-//    const char DP6[] = "E0:0.000";
 
     AppTimer_delete(CheckPjkParamTimeout);
 
-//    for (int i = 0; i < s->nmea_num; ++i) {
-//        char out[64] = {0};
-//
-//        memcpy(out, s->nmea_value[i].data, s->nmea_value[i].length);
-//
-//        DEBUG("handlePJKParam = %s", out);
-//    }
-//
-//    if (s->nmea_num != 6) return;
-//
-//    if (memcmp(s->nmea_value[0].data, DP1, strlen(DP1))) {
-//        setparam = true;
-//    }
-//    if (memcmp(s->nmea_value[1].data, DP2, strlen(DP2))) {
-//        setparam = true;
-//    }
-//    if (memcmp(s->nmea_value[2].data, DP3, strlen(DP3))) {
-//        setparam = true;
-//    }
-//    if (memcmp(s->nmea_value[3].data, DP4, strlen(DP4))) {
-//        setparam = true;
-//    }
-//    if (memcmp(s->nmea_value[4].data, DP5, strlen(DP5))) {
-//        setparam = true;
-//    }
-//    if (memcmp(s->nmea_value[5].data, DP6, strlen(DP6))) {
-//        setparam = true;
-//    }
-//
-//    if (setparam) {
-//        SetAYFactoryParam(5);
-//    }
-
     SetAYFactoryParam(5);
     needSetPjk = true;
+
+    lostCnt = 0;
+    AppTimer_delete(GpsDataTimeout);
+    AppTimer_add(GpsDataTimeout, D_SEC(5));
+
+    uint8_t buff[33];
+
+    memcpy(buff, rtkModel, 32);
+    buff[32] = 1;
+    PlatformStatusChanged(RTK_STATUS_EVT, buff, 33);
 }
 
 void SetAYFactoryParam(int freq)
@@ -211,7 +194,8 @@
     int RxBufLen = 0;
 
     if (res == 0) {
-        CheckPjkParam();
+//        CheckPjkParam();
+        GetModuleVersion();
     }
 
     while (res == 0) {
@@ -240,6 +224,15 @@
         if (RxBufLen > 0) {
 #if 1
             if (VirtualIsConnected()) {     //PC妯℃嫙鐢ㄦ椂
+                static bool first = false;
+
+                if (!first) {
+                    first = true;
+
+                    uint8_t buff[33] = "emulator";
+                    buff[32] = 1;
+                    PlatformStatusChanged(RTK_STATUS_EVT, buff, 33);
+                }
                 RxBufLen = 0;
             } else {
                 const uint8_t *ptr = parseGPS(RxBuf, RxBuf + RxBufLen);
@@ -263,17 +256,41 @@
 }
 
 void handleUnrecognisedNMEA(const uint8_t *data, uint16_t length) {
-//    char buff[4096] = {0};
-//    memcpy(buff, data, MIN(length, 3000));
+    char buff[4096] = {0};
+    memcpy(buff, data, MIN(length, 4000));
 //    DEBUG("handleUnrecognisedNMEA: %s", buff);
+
+    if (length >= 100) {
+        string cs(buff);
+
+        if (cs.find("K708") != string::npos) {
+            // 鏈�鍒濈殑鏍囧噯鍩虹珯妯″潡
+            DEBUG("K708 妯″潡");
+            strcpy(rtkModel, "K708");
+
+            AppTimer_delete(VersionTimeout);
+            CheckPjkParam();
+        } else if (cs.find("K726") != string::npos) {
+            // 绉诲姩绔欐ā鍧楋紝涔熷彲浠ョ敤鍋氬熀绔欏姛鑳�
+            DEBUG("K726 妯″潡");
+            strcpy(rtkModel, "K726");
+
+            AppTimer_delete(VersionTimeout);
+            CheckPjkParam();
+        }
+    }
 }
 
 void handleGPGGA(const struct nmea *s)
 {
     static uint32_t qfCnt = 0;
 
-    DEBUG("handleGPGGA num = %d", s->nmea_num);
+//    DEBUG("handleGPGGA num = %d", s->nmea_num);
     if (s->nmea_num >= 10) {
+        lostCnt = 0;
+        AppTimer_delete(GpsDataTimeout);
+        AppTimer_add(GpsDataTimeout, D_SEC(5));
+
         gpsStatus.gps_status = str2int(s->nmea_value[5].data, s->nmea_value[5].length);
 
         int hh = str2int(s->nmea_value[0].data, 2);
@@ -331,7 +348,7 @@
 
 void handleGPRMC(const struct nmea *s)
 {
-    DEBUG("handleGPRMC num = %d", s->nmea_num);
+//    DEBUG("handleGPRMC num = %d", s->nmea_num);
 
     if (s->nmea_num >= 9) {
         int hh = str2int(s->nmea_value[0].data, 2);
@@ -397,7 +414,7 @@
 }
 
 void handlePJK(const struct nmea *s) {
-    DEBUG("handlePJK num = %d", s->nmea_num);
+//    DEBUG("handlePJK num = %d", s->nmea_num);
 
     int hh = str2int(s->nmea_value[0].data, 2);
     int mm = str2int(s->nmea_value[0].data + 2, 2);
@@ -457,7 +474,7 @@
 }
 
 void handleGPTRA(const struct nmea *s) {
-    DEBUG("handleGPTRA num = %d", s->nmea_num);
+//    DEBUG("handleGPTRA num = %d", s->nmea_num);
 
     int hh = str2int(s->nmea_value[0].data, 2);
     int mm = str2int(s->nmea_value[0].data + 2, 2);
@@ -491,8 +508,8 @@
 
 static void CheckPjkParam(void)
 {
-    int n = WriteRtk(RTK_MODULE_UART, INQ_PJK_PARAM, strlen(INQ_PJK_PARAM));
-    DEBUG("CN = %d", n);
+    WriteRtk(RTK_MODULE_UART, INQ_PJK_PARAM, strlen(INQ_PJK_PARAM));
+    DEBUG("鑾峰彇PJK鍙傛暟...");
     AppTimer_delete(CheckPjkParamTimeout);
     AppTimer_add(CheckPjkParamTimeout, D_SEC(3));
 }
@@ -500,11 +517,14 @@
 static void CheckPjkParamTimeout(union sigval sig) {
     AppTimer_delete(CheckPjkParamTimeout);
 
-    DEBUG("RTK Module failure!!");
+    DEBUG("鑾峰彇PJK鍙傛暟瓒呮椂");
 
-//    PlayTTS("RTK妯″潡鏃犳硶閫氳", NULL);
+    uint8_t buff[33];
+    memcpy(buff, rtkModel, 32);
+    buff[32] = 0;
+    PlatformStatusChanged(RTK_STATUS_EVT, buff, 33);
 
-    CheckPjkParam();
+    GetModuleVersion();
 }
 
 static int WriteBluetooth(int id, const void *buf, int len)
@@ -513,3 +533,36 @@
     SendMcuCommand(0x000B, (uint8_t *)buf, len);
     return len;
 }
+
+static void GetModuleVersion(void)
+{
+    AppTimer_delete(VersionTimeout);
+    AppTimer_add(VersionTimeout, D_SEC(3));
+    WriteRtk(RTK_MODULE_UART, CMD_VERSION, strlen(CMD_VERSION));
+
+    DEBUG("鑾峰彇鐗堟湰...");
+}
+
+static void VersionTimeout(union sigval sig)
+{
+    AppTimer_delete(VersionTimeout);
+    DEBUG("鐗堟湰鑾峰彇瓒呮椂");
+    GetModuleVersion();
+
+    uint8_t buff[33];
+    memcpy(buff, rtkModel, 32);
+    buff[32] = 0;
+    PlatformStatusChanged(RTK_STATUS_EVT, buff, 33);
+}
+
+static void GpsDataTimeout(union sigval sig)
+{
+    AppTimer_delete(GpsDataTimeout);
+
+    if (++lostCnt >= 3) {
+        DEBUG("RTK妯″潡鏀朵笉鍒癎PS鏁版嵁");
+        GetModuleVersion();
+    } else {
+        AppTimer_add(GpsDataTimeout, D_SEC(5));
+    }
+}

--
Gitblit v1.8.0