From f1ff7e339eca91b114497d3e847fa1fc33baccc4 Mon Sep 17 00:00:00 2001
From: yy1717 <fctom1215@outlook.com>
Date: 星期一, 21 九月 2020 10:58:58 +0800
Subject: [PATCH] 坐标

---
 lib/src/main/cpp/driver_test.cpp           |   35 +++++++++++++++++
 lib/src/main/cpp/master/comm_if.cpp        |   13 ++++--
 lib/src/main/cpp/test_items2/road_exam.cpp |   18 +++++++-
 lib/src/main/cpp/driver_test.h             |    2 +
 4 files changed, 61 insertions(+), 7 deletions(-)

diff --git a/lib/src/main/cpp/driver_test.cpp b/lib/src/main/cpp/driver_test.cpp
index 600be36..a9208fb 100644
--- a/lib/src/main/cpp/driver_test.cpp
+++ b/lib/src/main/cpp/driver_test.cpp
@@ -896,6 +896,8 @@
     return true;
 }
 
+static int currRoad = -1, currCrossing = -1;
+
 void RoadChange(int road, int status)
 {
     struct roadStatusBrief brief;
@@ -904,6 +906,8 @@
     brief.status = status;
 
     MA_SendRoadStatus(&brief);
+
+    currRoad = (status == 1? road : -1);
 
     DEBUG("鎶ュ憡闀垮畼 杩涘嚭璺 road %d status %d", road, status);
 }
@@ -917,6 +921,8 @@
     brief.status = status;
 
     MA_SendCrossingStatus(&brief);
+
+    currCrossing = (status == 1? crossing : -1);
 
     DEBUG("鎶ュ憡闀垮畼 杩涘嚭璺彛 road %d crossing %d status %d", road, crossing, status);
 }
@@ -947,6 +953,35 @@
     ExamFaultList.clear();
 }
 
+void MasterInqRoadStatus(void)
+{
+    struct roadStatusBrief brief;
+    struct crossingStatusBrief brief2;
+
+    brief2.road_id = brief.road_id = currRoad;
+
+    if (currRoad >= 0) {
+        brief.status = 1;
+
+        if (currCrossing >= 0) {
+            brief2.crossing_index = currCrossing;
+            brief2.status = 1;
+        } else {
+            brief2.crossing_index = -1;
+            brief2.status = 0;
+        }
+    }
+    else {
+        brief.status = 0;
+        brief2.crossing_index = -1;
+        brief2.status = 0;
+    }
+
+    MA_SendRoadStatus(&brief);
+
+    MA_SendCrossingStatus(&brief2);
+}
+
 /*******************************************************************
  * @brief 鐢变富澶╃嚎鍧愭爣璁$畻杞﹁韩鐐瑰潗鏍�
  * @param azimuth
diff --git a/lib/src/main/cpp/driver_test.h b/lib/src/main/cpp/driver_test.h
index 6c24bc3..07c91ff 100644
--- a/lib/src/main/cpp/driver_test.h
+++ b/lib/src/main/cpp/driver_test.h
@@ -244,4 +244,6 @@
 
 uint32_t TimeGetDiff(const struct RtkTime *rtkTime1, const struct RtkTime *rtkTime2);
 
+void MasterInqRoadStatus(void);
+
 #endif //RTKDRIVERTEST_DRIVER_TEST_H
diff --git a/lib/src/main/cpp/master/comm_if.cpp b/lib/src/main/cpp/master/comm_if.cpp
index 7ffd67d..ca951fa 100644
--- a/lib/src/main/cpp/master/comm_if.cpp
+++ b/lib/src/main/cpp/master/comm_if.cpp
@@ -65,8 +65,9 @@
 #define ID_SM_DISTANCE              0x0020
 #define ID_SM_CARSENSOR              0x0013
 
-#define ID_MS_ROAD_BRIEF        0x0015              // 绉戠洰涓夐」鐩爣瀹氾紝杩涘嚭鏌愭潯璺殑鎻愮ず
-#define ID_MS_CROSSING_BRIEF    0x0016              // 绉戠洰涓夐」鐩爣瀹氾紝鎺ヨ繎/椹剁鏌愬悇璺彛鐨勬彁绀�
+#define ID_SM_ROAD_BRIEF        0x0015              // 绉戠洰涓夐」鐩爣瀹氾紝杩涘嚭鏌愭潯璺殑鎻愮ず
+#define ID_SM_CROSSING_BRIEF    0x0016              // 绉戠洰涓夐」鐩爣瀹氾紝鎺ヨ繎/椹剁鏌愬悇璺彛鐨勬彁绀�
+#define ID_MS_INQ_ROAD_CROSSING 0x8018              // Master鏌ヨ褰撳墠璺鍜岃矾鍙�
 
 #define MA_OUT_GPS_BRIEF        0x0001
 #define MA_OUT_RTK_BRIEF        0x0002
@@ -456,7 +457,7 @@
     writer.Int(brief->status);
     writer.EndObject();
 
-    SendMsgToMainProcIndep(ID_MS_ROAD_BRIEF, sb.GetString());
+    SendMsgToMainProcIndep(ID_SM_ROAD_BRIEF, sb.GetString());
 }
 
 void MA_SendCrossingStatus(const struct crossingStatusBrief *brief)
@@ -473,7 +474,7 @@
     writer.Int(brief->status);
     writer.EndObject();
 
-    SendMsgToMainProcIndep(ID_MS_CROSSING_BRIEF, sb.GetString());
+    SendMsgToMainProcIndep(ID_SM_CROSSING_BRIEF, sb.GetString());
 }
 
 void MA_SendExamWrong(vector<ExamFault> &ExamFaultList)
@@ -1685,6 +1686,10 @@
             }
             break;
         }
+        case ID_MS_INQ_ROAD_CROSSING: {
+            MasterInqRoadStatus();
+            break;
+        }
         default:break;
     }
 }
diff --git a/lib/src/main/cpp/test_items2/road_exam.cpp b/lib/src/main/cpp/test_items2/road_exam.cpp
index 8a1c97f..0a3f627 100644
--- a/lib/src/main/cpp/test_items2/road_exam.cpp
+++ b/lib/src/main/cpp/test_items2/road_exam.cpp
@@ -1012,13 +1012,18 @@
     return CROSSING_NOT_HINT;
 }
 
-static void ResetCrossingStatus(int roadIndex)
+/*****************************************************
+ * 浠ユ甯搁�氳繃璺彛鎴栬嚜鐢遍┚椹剁寮�璺鍚�
+ * @param roadIndex
+ */
+static void ResetCrossingStatus(road_exam_map &RoadMap, int roadIndex)
 {
     while (true) {
         bool w = false;
         for (auto it = CrossingHint.begin(); it != CrossingHint.end(); ++it) {
             if (it->first / 100 == roadIndex && it->second != CROSSING_NOT_HINT) {
                 ChangeCrossingStatus(it->first / 100, it->first % 100, CROSSING_NOT_HINT);
+                CrossingChange(RoadMap.roads[roadIndex].id, it->first % 100, 0);
                 w = true;
                 break;
             }
@@ -1485,9 +1490,8 @@
         DEBUG("閬撹矾ID鍒囨崲 %d ======> %d", oldid, currExamMapIndex);
 
         if (oldid >= 0) {
-            ResetCrossingStatus(oldid);
+            ResetCrossingStatus(RoadMap, oldid);
             ResetErrorLaneRpt(oldid);
-
         }
 
         if (RoadMap.calibrate) {
@@ -1705,6 +1709,14 @@
     }
 }
 
+/*******************************************************************
+ * 杞﹁締瓒婅繃鍋滄绾跨殑鏂瑰紡閫氳繃璺彛
+ * @param RoadMap
+ * @param road
+ * @param stop_line
+ * @param active
+ * @param car
+ */
 void CrossRoadCallback(road_exam_map &RoadMap, int road, int stop_line, int active, const car_model *car)
 {
     if (RoadMap.calibrate) {

--
Gitblit v1.8.0