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/master/comm_if.cpp |   65 ++++++++++++++++++++++++++++++--
 1 files changed, 60 insertions(+), 5 deletions(-)

diff --git a/lib/src/main/cpp/master/comm_if.cpp b/lib/src/main/cpp/master/comm_if.cpp
index 1af9356..b1898f6 100644
--- a/lib/src/main/cpp/master/comm_if.cpp
+++ b/lib/src/main/cpp/master/comm_if.cpp
@@ -22,6 +22,7 @@
 #include <vector>
 #include <list>
 #include <semaphore.h>
+#include <unistd.h>
 
 #define DEBUG(fmt, args...)     LOGD("<comm_if> <%s>: " fmt, __func__, ##args)
 
@@ -74,6 +75,8 @@
 #define ID_SM_CAN_BRIEF         0x0021
 #define ID_SM_BLUETOOTH_BRIEF   0x0022
 
+#define ID_SM_RTK_STATUS_BRIEF  0x0023
+
 #define MA_OUT_GPS_BRIEF        0x0001
 #define MA_OUT_RTK_BRIEF        0x0002
 #define MA_OUT_CAR_BRIEF        0x0004
@@ -121,16 +124,26 @@
 
         if (MessageBuffer.size() > 0) {
             struct msg_2_main_t msg;
+            int success;
 
             pthread_mutex_lock(&msg_mutex);
             msg = MessageBuffer.back();
-            MessageBuffer.pop_back();
             pthread_mutex_unlock(&msg_mutex);
 
             if (msg.value.length() > 0)
-                SendMsgToMainProc(msg.cmd, msg.value.c_str());
+                success = SendMsgToMainProc(msg.cmd, msg.value.c_str());
             else
-                SendMsgToMainProc(msg.cmd, NULL);
+                success = SendMsgToMainProc(msg.cmd, NULL);
+
+            if (success == 0) {
+                pthread_mutex_lock(&msg_mutex);
+                MessageBuffer.pop_back();
+                pthread_mutex_unlock(&msg_mutex);
+            } else {
+                // 寤惰繜閲嶅彂
+                usleep(500000);
+                sem_post(&sem_msg_income);
+            }
         }
     }
 }
@@ -646,6 +659,7 @@
 {
     switch (cmd) {
         case ID_MS_RTK_PLAT_CFG: {
+            DEBUG("骞冲彴淇℃伅 %s", value);
             if (OnOff == 0) OnOff = MA_OUT_GPS_BRIEF + MA_OUT_RTK_BRIEF + MA_OUT_CAR_BRIEF;
 
             rtk_platform_cfg_t cfg;
@@ -1971,9 +1985,28 @@
                                 const Value &s2 = (*itr)["tts"];
 
                                 content[n].item = s1.GetInt();
-                                strcpy(content[n].tts, s2.GetString());
-                                n++;
+                                content[n].tts = s2.GetString();
                             }
+
+                            if (itr->HasMember("wrong_code")) {
+                                const Value &s = (*itr)["wrong_code"];
+
+                                content[n].wrongCode = s.GetInt();
+                            }
+
+                            if (itr->HasMember("process")) {
+                                const Value& s = doc["process"];
+                                for(Value::ConstValueIterator itr2 = s.Begin(); itr2 != s.End(); ++itr2) {
+                                    content[n].process.push_back(itr2->GetInt());
+                                }
+                            }
+                            if (itr->HasMember("solution")) {
+                                const Value& s = doc["solution"];
+                                for(Value::ConstValueIterator itr2 = s.Begin(); itr2 != s.End(); ++itr2) {
+                                    content[n].solution.push_back(itr2->GetInt());
+                                }
+                            }
+                            n++;
                         }
 
                         SetDummyLightExam(n, content);
@@ -2063,3 +2096,25 @@
 
     SendMsgToMainProcIndep(ID_SM_BLUETOOTH_BRIEF, sb.GetString());
 }
+
+void MA_SendRtkStatus(const char *model, int status)
+{
+    StringBuffer sb;
+    Writer<StringBuffer> writer(sb);
+
+    writer.StartObject();
+
+    writer.Key("model");
+    if (model == NULL || model[0] == 0) {
+        writer.String("Unknown");
+    } else {
+        writer.String(model);
+    }
+
+    writer.Key("status");
+    writer.Int(status);
+
+    writer.EndObject();
+
+    SendMsgToMainProcIndep(ID_SM_RTK_STATUS_BRIEF, sb.GetString());
+}

--
Gitblit v1.8.0