From 611f51ed073de48e83f46d47c82cd5ebe61258d7 Mon Sep 17 00:00:00 2001
From: yy1717 <fctom1215@outlook.com>
Date: 星期三, 16 九月 2020 18:14:27 +0800
Subject: [PATCH] 加入地图标定模式

---
 lib/src/main/cpp/master/comm_if.cpp |  154 +++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 119 insertions(+), 35 deletions(-)

diff --git a/lib/src/main/cpp/master/comm_if.cpp b/lib/src/main/cpp/master/comm_if.cpp
index c81177e..0468b02 100644
--- a/lib/src/main/cpp/master/comm_if.cpp
+++ b/lib/src/main/cpp/master/comm_if.cpp
@@ -64,6 +64,9 @@
 #define ID_SM_DISTANCE              0x0020
 #define ID_SM_CARSENSOR              0x0013
 
+#define ID_MS_ROAD_BRIEF        0x0015              // 绉戠洰涓夐」鐩爣瀹氾紝杩涘嚭鏌愭潯璺殑鎻愮ず
+#define ID_MS_CROSSING_BRIEF    0x0016              // 绉戠洰涓夐」鐩爣瀹氾紝鎺ヨ繎/椹剁鏌愬悇璺彛鐨勬彁绀�
+
 #define MA_OUT_GPS_BRIEF        0x0001
 #define MA_OUT_RTK_BRIEF        0x0002
 #define MA_OUT_CAR_BRIEF        0x0004
@@ -438,6 +441,38 @@
     writer.EndObject();
 
     SendMsgToMainProcIndep(ID_SM_DISTANCE, sb.GetString());
+}
+
+void MA_SendRoadStatus(const struct roadStatusBrief *brief)
+{
+    StringBuffer sb;
+    Writer<StringBuffer> writer(sb);
+
+    writer.StartObject();
+    writer.Key("road_id");
+    writer.Int(brief->road_id);
+    writer.Key("status");
+    writer.Int(brief->status);
+    writer.EndObject();
+
+    SendMsgToMainProcIndep(ID_MS_ROAD_BRIEF, sb.GetString());
+}
+
+void MA_SendCrossingStatus(const struct crossingStatusBrief *brief)
+{
+    StringBuffer sb;
+    Writer<StringBuffer> writer(sb);
+
+    writer.StartObject();
+    writer.Key("road_id");
+    writer.Int(brief->road_id);
+    writer.Key("crossing_index");
+    writer.Int(brief->crossing_index);
+    writer.Key("status");
+    writer.Int(brief->status);
+    writer.EndObject();
+
+    SendMsgToMainProcIndep(ID_MS_CROSSING_BRIEF, sb.GetString());
 }
 
 void MA_SendExamWrong(vector<ExamFault> &ExamFaultList)
@@ -844,10 +879,6 @@
 
                 road_exam_map map;
 
-                map.roads.clear();
-                map.specialAreas.clear();
-                map.triggerLines.clear();
-
                 if (doc.HasMember("road")) {
                     const Value &a = doc["road"];
 
@@ -860,23 +891,6 @@
                                 DEBUG("璺痠d %d", s.GetInt());
                                 road.id = s.GetInt();
                             }
-                            if (itr->HasMember("start_line")) {
-                                const Value &a2 = (*itr)["start_line"];
-
-                                PointF p1, p2;
-                                int n = 0;
-
-                                for (Value::ConstValueIterator itr2 = a2.Begin(); itr2 != a2.End(); ++itr2, ++n) {
-                                    DEBUG("璧峰绾� %d", (*itr2).GetInt());
-                                    if (n == 0) {
-                                        p1 = mapPoints[(*itr2).GetInt()];
-                                    } else if (n == 1) {
-                                        p2 = mapPoints[(*itr2).GetInt()];
-                                    }
-                                }
-
-                                MakeLine(&road.startLine, &p1, &p2);
-                            }
                             if (itr->HasMember("crossing")) {
                                 const Value &a2 = (*itr)["crossing"];
 
@@ -887,20 +901,12 @@
                                     if (!itr2->IsObject()) {
                                         break;
                                     }
-                                    if (itr2->HasMember("active")) {
-                                        const Value &s = (*itr2)["active"];
-                                        temp.active = s.GetInt();
-                                        DEBUG("璺彛鍔ㄤ綔 %d", temp.active);
-                                    }
                                     if (itr2->HasMember("stop_flag")) {
                                         const Value &s = (*itr2)["stop_flag"];
                                         temp.stopFlag = s.GetInt();
                                         DEBUG("璺彛鍋滆溅 %d", temp.stopFlag);
-                                    }
-                                    if (itr2->HasMember("tts")) {
-                                        const Value &s = (*itr2)["tts"];
-                                        temp.tts = s.GetString();
-                                        DEBUG("璺彛鎻愮ず %s", temp.tts.c_str());
+                                    } else {
+                                        temp.stopFlag = false;
                                     }
                                     if (itr2->HasMember("line")) {
                                         const Value &s = (*itr2)["line"];
@@ -920,8 +926,10 @@
                                     }
                                     if (itr2->HasMember("center_point")) {
                                         const Value &s = (*itr2)["center_point"];
-
                                         temp.centrePoint = mapPoints[s.GetInt()];
+                                        temp.centrePointValid = true;
+                                    } else {
+                                        temp.centrePointValid = false;
                                     }
                                     crossing.push_back(temp);
                                 }
@@ -1092,7 +1100,7 @@
                         map.specialAreas.push_back(specialArea);
                     }
                 }
-                if (doc.HasMember("trigger_line")) {
+                /*if (doc.HasMember("trigger_line")) {
                     const Value &a = doc["trigger_line"];
 
                     for (Value::ConstValueIterator itr = a.Begin();
@@ -1139,7 +1147,7 @@
 
                         map.triggerLines.push_back(trigger);
                     }
-                }
+                }*/
                 if (doc.HasMember("red_line")) {
                     const Value &a = doc["red_line"];
 
@@ -1169,10 +1177,86 @@
                     }
                 }
 
+                vector<scheme_t> schemes;
+
+                if (doc.HasMember("scheme")) {
+                    const Value &a = doc["scheme"];
+
+                    for (Value::ConstValueIterator itr = a.Begin();
+                         itr != a.End(); ++itr) {
+                        scheme_t scheme;
+                        if (itr->HasMember("name")) {
+                            const Value &s = (*itr)["name"];
+                            scheme.name = s.GetString();
+                        }
+                        if (itr->HasMember("crossing_active")) {
+                            const Value &a2 = (*itr)["crossing_active"];
+
+                            for (Value::ConstValueIterator itr2 = a2.Begin();
+                                 itr2 != a2.End(); ++itr2) {
+                                crossing_active_t act;
+
+                                if (itr2->HasMember("road")) {
+                                    const Value &s = (*itr2)["road"];
+                                    act.road_id = s.GetInt();
+                                }
+                                if (itr2->HasMember("idx")) {
+                                    const Value &s = (*itr2)["idx"];
+                                    act.index = s.GetInt();
+                                }
+                                if (itr2->HasMember("active")) {
+                                    const Value &s = (*itr2)["active"];
+                                    act.active = s.GetInt();
+                                }
+
+                                scheme.crossingActive.push_back(act);
+                            }
+                        }
+                        if (itr->HasMember("trigger_line")) {
+                            const Value &a2 = (*itr)["trigger_line"];
+
+                            for (Value::ConstValueIterator itr2 = a2.Begin();
+                                 itr2 != a2.End(); ++itr2) {
+                                trigger_line_t ins;
+
+                                if (itr2->HasMember("x_y")) {
+                                    const Value &a3 = (*itr2)["x_y"];
+                                    if (a3.IsArray()) {
+                                        PointF point;
+                                        int n = 0;
+                                        for (Value::ConstValueIterator itr3 = a3.Begin();
+                                             itr3 != a3.End(); ++itr3) {
+                                            if (n == 0) {
+                                                point.X = (*itr3).GetDouble();
+                                                n = 1;
+                                            } else if (n == 1) {
+                                                point.Y = (*itr3).GetDouble();
+                                                ins.points.push_back(point);
+                                                n = 0;
+                                            }
+                                        }
+                                    }
+                                }
+                                if (itr2->HasMember("road")) {
+                                    const Value &s = (*itr2)["road"];
+                                    ins.road = s.GetInt();
+                                }
+                                if (itr2->HasMember("type")) {
+                                    const Value &s = (*itr2)["type"];
+                                    ins.active = s.GetInt();
+                                }
+
+                                scheme.triggerLines.push_back(ins);
+                            }
+                        }
+                        schemes.push_back(scheme);
+                    }
+                }
+
                 DEBUG("鍦板浘瑙f瀽瀹屾瘯");
 
                 CleanRoadMap();
-                SetRoadMap(map);
+                SetRoadMap(map, schemes);
             } else {
                 DEBUG("############## 鍦板浘瑙f瀽鍑洪敊###################");
             }

--
Gitblit v1.8.0