From 4bd08f0355b6b2cf3c027202d5ad301b4e182953 Mon Sep 17 00:00:00 2001 From: yy1717 <fctom1215@outlook.com> Date: 星期五, 31 三月 2023 17:16:22 +0800 Subject: [PATCH] 科目二修改 --- lib/src/main/cpp/master/comm_if.cpp | 196 ++++++++++++++++++++++++++++++++++++------------ 1 files changed, 147 insertions(+), 49 deletions(-) diff --git a/lib/src/main/cpp/master/comm_if.cpp b/lib/src/main/cpp/master/comm_if.cpp index 18a4d2f..486fa55 100644 --- a/lib/src/main/cpp/master/comm_if.cpp +++ b/lib/src/main/cpp/master/comm_if.cpp @@ -16,6 +16,7 @@ #include "../jni_log.h" #include "../mcu/mcu_if.h" #include "../test_common/car_sensor.h" +#include "../map.h" #include <string> #include <iostream> @@ -146,6 +147,31 @@ DEBUG("鍙戦�佸け璐�"); usleep(500000); sem_post(&sem_msg_income); + } + } + } +} + +static void LoadPoint(PointF &p, const rapidjson::Value &v) +{ + if (v.IsArray() && v.Size() >= 2) { + p.X = v[0].GetDouble(); + p.Y = v[1].GetDouble(); + } +} + +static void LoadPoints(vector<PointF> &ps, const rapidjson::Value &v) +{ + if (v.IsArray()) { + PointF point; + for (int i = 0; i < v.Size();) { + if (v.Size() - i >= 2) { + point.X = v[i].GetDouble(); + point.Y = v[i+1].GetDouble(); + ps.push_back(point); + i += 2; + } else { + break; } } } @@ -420,7 +446,7 @@ writer.Double(brief->coord_y); writer.Key("coord_y_dir"); writer.String(b); - writer.Key("heading"); + writer.Key("yaw"); writer.Double(brief->heading); writer.Key("pitch"); writer.Double(brief->pitch); @@ -556,7 +582,7 @@ writer.Int(brief->move); writer.Key("speed"); writer.Double(brief->speed); - writer.Key("heading"); + writer.Key("yaw"); writer.Double(brief->heading); writer.Key("main_ant"); @@ -597,16 +623,16 @@ writer.Key("body"); writer.StartArray(); - for (int i = 0; i < brief->bodyNum; ++i) { + for (int i = 0; i < brief->body.size(); ++i) { writer.Int(brief->body[i]); } writer.EndArray(); writer.Key("point"); writer.StartArray(); - for (int i = 0; i < brief->pointNum; ++i) { - writer.Double(brief->point[i*2]); - writer.Double(brief->point[i*2+1]); + for (int i = 0; i < brief->point.size(); ++i) { + writer.Double(brief->point[i][0]); + writer.Double(brief->point[i][1]); } writer.EndArray(); writer.EndObject(); @@ -1673,63 +1699,136 @@ if (a.IsArray()) { for (Value::ConstValueIterator itr = a.Begin(); itr != a.End(); ++itr) { // a Map - int id, type, pointNum = 0, point2Num = 0; - double (*map)[2] = NULL, (*map2)[2] = NULL; + string name; + int id = -1, type = -1; + //int id, type, pointNum = 0, point2Num = 0; + //double (*map)[2] = NULL, (*map2)[2] = NULL; if (itr->IsObject()) { if (itr->HasMember("id")) { const Value &s = (*itr)["id"]; id = s.GetInt(); } + if (itr->HasMember("name")) { + const Value &s = (*itr)["id"]; + name = s.GetString(); + } if (itr->HasMember("item")) { const Value &s = (*itr)["item"]; type = s.GetInt(); - } - if (itr->HasMember("point")) { - const Value &s = (*itr)["point"]; - int map_index = 0; - for (Value::ConstValueIterator itr2 = s.Begin(); - itr2 != s.End(); ++itr2, ++map_index) { - // 鏇茬嚎椹鹃┒鏈�2缁� - const Value &s2 = (*itr2)["x-y"]; - - if (map_index == 0) { - int i = 0, j = 0; - pointNum = s2.Size() / 2; - map = (double (*)[2]) new double[pointNum][2]; -// map = (double (*)[2]) malloc(pointNum * 2 * sizeof(double)); - - for (Value::ConstValueIterator itr3 = s2.Begin(); - itr3 != s2.End(); ++itr3) { - map[i][j] = (*itr3).GetDouble(); - if (++j == 2) { - j = 0; - i++; - } + switch (type) { + case MAP_TYPE_CURVE: { + curve_map_t map; + map.id = id; + if (itr->HasMember("left_start_point")) { + const Value &s2 = (*itr)["left_start_point"]; + LoadPoint(map.left_start_point, s2); } - } else if (map_index == 1) { - int i = 0, j = 0; - point2Num = s2.Size() / 2; - map2 = (double (*)[2]) new double[s2.Size()][2]; -// map2 = (double (*)[2]) malloc(point2Num * 2 * sizeof(double)); - - for (Value::ConstValueIterator itr3 = s2.Begin(); - itr3 != s2.End(); ++itr3) { - map2[i][j] = (*itr3).GetDouble(); - if (++j == 2) { - j = 0; - i++; - } + if (itr->HasMember("right_start_point")) { + const Value &s2 = (*itr)["right_start_point"]; + LoadPoint(map.right_start_point, s2); } + if (itr->HasMember("left_end_point")) { + const Value &s2 = (*itr)["left_end_point"]; + LoadPoint(map.left_end_point, s2); + } + if (itr->HasMember("right_end_point")) { + const Value &s2 = (*itr)["right_end_point"]; + LoadPoint(map.right_end_point, s2); + } + AddCurveMap(map); + break; } + case MAP_TYPE_PARK_BUTTOM: { + park_button_map_t map; + + map.id = id; + if (itr->HasMember("point") && (*itr)["point"].IsArray()) { + const Value &arr = (*itr)["point"]; + LoadPoints(map.map, arr); + } + AddParkButtonMap(map); + break; + } + case MAP_TYPE_PARK_EDGE: { + park_edge_map_t map; + map.id = id; + if (itr->HasMember("point") && (*itr)["point"].IsArray()) { + const Value &arr = (*itr)["point"]; + LoadPoints(map.map, arr); + } + AddParkEdgeMap(map); + break; + } + case MAP_TYPE_UPHILL: { + uphill_map_t map; + map.id = id; + if (itr->HasMember("point") && (*itr)["point"].IsArray()) { + const Value &arr = (*itr)["point"]; + LoadPoints(map.map, arr); + } + break; + } + case MAP_TYPE_TURN_90: { + turn_a90_map_t map; + map.id = id; + if (itr->HasMember("point") && (*itr)["point"].IsArray()) { + const Value &arr = (*itr)["point"]; + LoadPoints(map.map, arr); + } + break; + } + default: + break; } } - AddAreaMap(id, type, map, pointNum, map2, point2Num); +// if (itr->HasMember("point")) { +// const Value &s = (*itr)["point"]; +// int map_index = 0; +// +// for (Value::ConstValueIterator itr2 = s.Begin(); +// itr2 != s.End(); ++itr2, ++map_index) { +// // 鏇茬嚎椹鹃┒鏈�2缁� +// const Value &s2 = (*itr2)["x-y"]; +// +// if (map_index == 0) { +// int i = 0, j = 0; +// pointNum = s2.Size() / 2; +// map = (double (*)[2]) new double[pointNum][2]; +//// map = (double (*)[2]) malloc(pointNum * 2 * sizeof(double)); +// +// for (Value::ConstValueIterator itr3 = s2.Begin(); +// itr3 != s2.End(); ++itr3) { +// map[i][j] = (*itr3).GetDouble(); +// if (++j == 2) { +// j = 0; +// i++; +// } +// } +// } else if (map_index == 1) { +// int i = 0, j = 0; +// point2Num = s2.Size() / 2; +// map2 = (double (*)[2]) new double[s2.Size()][2]; +//// map2 = (double (*)[2]) malloc(point2Num * 2 * sizeof(double)); +// +// for (Value::ConstValueIterator itr3 = s2.Begin(); +// itr3 != s2.End(); ++itr3) { +// map2[i][j] = (*itr3).GetDouble(); +// if (++j == 2) { +// j = 0; +// i++; +// } +// } +// } +// } +// } - if (map) delete[]map; - if (map2) delete[]map2; +// AddAreaMap(id, type, map, pointNum, map2, point2Num); +// +// if (map) delete[]map; +// if (map2) delete[]map2; } } } @@ -1968,7 +2067,7 @@ Document doc; doc.Parse(value); if (!doc.HasParseError()) { - DEBUG("瑙f瀽鐏厜閰嶇疆..."); + /*DEBUG("瑙f瀽鐏厜閰嶇疆..."); if (doc.HasMember("exam")) { const Value& s = doc["exam"]; s.GetInt(); @@ -2022,12 +2121,11 @@ delete []content; } - } + }*/ } break; } case ID_MS_INQ_ROAD_CROSSING: { - MasterInqRoadStatus(); break; } case ID_MS_BLUETOOTH_NAME: { -- Gitblit v1.8.0