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