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