From 24428a1b69afcf113883e9cede1159443201a1b8 Mon Sep 17 00:00:00 2001 From: yy1717 <fctom1215@outlook.com> Date: 星期四, 02 四月 2020 18:57:07 +0800 Subject: [PATCH] 进出科目二区域调整 --- lib/src/main/cpp/test_items/park_bottom.cpp | 38 +++++++++++++++++++++++++++++++------- 1 files changed, 31 insertions(+), 7 deletions(-) diff --git a/lib/src/main/cpp/test_items/park_bottom.cpp b/lib/src/main/cpp/test_items/park_bottom.cpp index b0a598b..3a59252 100644 --- a/lib/src/main/cpp/test_items/park_bottom.cpp +++ b/lib/src/main/cpp/test_items/park_bottom.cpp @@ -9,6 +9,7 @@ #include "../jni_log.h" #include "../driver_test.h" #include "../utils/xconvert.h" +#include "../master/comm_if.h" #include <vector> #include <cstdlib> @@ -27,7 +28,8 @@ const int PARK_TIMEOUT = D_SEC(210); -static bool testing = false; +static bool testing = false, reverseCar = false; +static int mapIndex = 0; const uint32_t STOP_CAR_TIME = D_SEC(2); static uint32_t stopTimepoint; @@ -44,13 +46,15 @@ static char CrossCtrlLine(const Polygon *map, const car_model *car, const car_model *prev_car); static bool EnterParking(const Polygon *map, const car_model *car); -static bool CrashRedLine(const Polygon *map, const car_model *car); +static bool CrashRedLine(const Polygon *map, const car_model *car, int &who); static bool ExitParkArea(const Polygon *map, const car_model *car); -void StartParkBottom(int moveDirect, const struct RtkTime *rtkTime) +void StartParkBottom(int index, int moveDirect, const struct RtkTime *rtkTime) { DEBUG("StartParkBottom"); testing = true; + reverseCar = false; + mapIndex = index; memset(carray, 0, sizeof(carray)); memset(darray, 0, sizeof(darray)); memset(parkStatus, 0, sizeof(parkStatus)); @@ -69,12 +73,13 @@ { char crossCtrlLine = 0; uint32_t tp = TimeMakeComposite(rtkTime->hh, rtkTime->mm, rtkTime->ss, rtkTime->mss*10); + int who = 0; if (ExitParkArea(map, car)) { DEBUG("绂诲紑鍦哄湴"); // 绂诲紑鍦哄湴 testing = false; - if ((parkStatus[0] != 1 || parkStatus[1] != 1) && !reportParkFail) { + if ((parkStatus[0] != 1 || parkStatus[1] != 1) && !reportParkFail && reverseCar) { // 鍊掑簱涓嶅叆锛屼笉鍚堟牸 reportParkFail = true; AddExamFault(8, rtkTime); @@ -83,12 +88,18 @@ goto TEST_END; } - if (CrashRedLine(map, car)) { + + if (CrashRedLine(map, car, who)) { if (!occurCrashRedLine) { occurCrashRedLine = true; // 杞﹁韩鍑虹嚎锛屼笉鍚堟牸 AddExamFault(7, rtkTime); DEBUG("杞﹁疆鍘嬬嚎"); + if (who == 1) { + PlayTTS("鍘嬪乏搴撲綅绾�"); + } else if (who == 2) { + PlayTTS("鍘嬪彸搴撲綅绾�"); + } } } else { occurCrashRedLine = false; @@ -153,6 +164,10 @@ } } else if (moveDirect == -1) { // 鍒囨崲涓哄�掕溅 + if (!reverseCar) { + reverseCar = true; + MA_EnterMap(mapIndex, MAP_TYPE_PARK_BUTTOM, 1); + } if (darray[parkCount] == 0) { if (!crossCtrlLineSw) { // 鍊掕溅鍓嶏紝鍓嶈疆鏈┒杩囨帶鍒剁嚎 @@ -160,7 +175,7 @@ DEBUG("鍊掕溅鍓嶏紝鍓嶈疆鏈┒杩囨帶鍒剁嚎"); } darray[parkCount] = 1; - firstReverseTimepoint = tp; + firstReverseTimepoint = tp; // 棣栨鍊掕溅锛屾墠鎰忓懗鐫�姝ら」鐩紑濮� } } else { // 鍒囨崲涓哄墠杩� @@ -209,6 +224,9 @@ } TEST_END: + if (!testing && reverseCar) { + MA_EnterMap(mapIndex, MAP_TYPE_PARK_BUTTOM, 0); + } return testing ? 1 : 0; } @@ -258,7 +276,7 @@ return succ; } -static bool CrashRedLine(const Polygon *map, const car_model *car) +static bool CrashRedLine(const Polygon *map, const car_model *car, int &who) { bool ret = false; @@ -276,6 +294,12 @@ for (int i = 0; i < sizeof(red_lines) / sizeof(red_lines[0]); ++i) { MakeLine(&red_line, &(map->point[red_lines[i][0]]), &(map->point[red_lines[i][1]])); if (IntersectionOf(red_line, &car_body) != GM_None) { + if (i == 2 || i == 1) { + who = 1; + } else if (i == 4 || i == 5) { + who = 2; + } + ret = true; break; } -- Gitblit v1.8.0