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