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/stop_and_start.cpp | 40 +++++++++++++++++++++++++++++++++------- 1 files changed, 33 insertions(+), 7 deletions(-) diff --git a/lib/src/main/cpp/test_items/stop_and_start.cpp b/lib/src/main/cpp/test_items/stop_and_start.cpp index 91a9b0b..b57ceec 100644 --- a/lib/src/main/cpp/test_items/stop_and_start.cpp +++ b/lib/src/main/cpp/test_items/stop_and_start.cpp @@ -12,6 +12,7 @@ #include "../common/apptimer.h" #include "../utils/xconvert.h" #include "../test_common/car_sensor.h" +#include "../master/comm_if.h" #define DEBUG(fmt, args...) LOGD("<stop_and_start> <%s>: " fmt, __func__, ##args) @@ -31,6 +32,7 @@ static PointF stopPoint; +static int mapIndex = 0; static int prevMoveDirect; static uint32_t stopTimepoint = 0; static bool stopCar = false; @@ -46,11 +48,11 @@ static double DistanceOfTire2Edge(const Polygon *map, const car_model *car); static bool ExitTestArea(const Polygon *map, const car_model *car); -void StartSAS(int moveDirect, const struct RtkTime *rtkTime) +void StartSAS(int index, int moveDirect, const struct RtkTime *rtkTime) { DEBUG("杩涘叆鍧¤捣椤圭洰"); testing = true; - + mapIndex = index; prevMoveDirect = moveDirect; if (moveDirect == 0) { @@ -63,6 +65,8 @@ slideNormalDistance = false; reportSlideFault = false; reportStartTimeout = false; + + MA_EnterMap(mapIndex, MAP_TYPE_STOP_START, 1); } int TestSAS(const Polygon *map, const car_model *car, const car_model *carPrev, double speed, int moveDirect, const struct RtkTime *rtkTime) @@ -81,6 +85,12 @@ if (ExitTestArea(map, car)) { // 椹剁娴嬭瘯鍖� testing = false; + } + + { + double dis2 = DistanceOfTire2Edge(map, car); + + MA_SendDistance(-1, dis2); } if (prevMoveDirect != moveDirect) { @@ -172,6 +182,10 @@ } } + if (!testing) { + MA_EnterMap(mapIndex, MAP_TYPE_STOP_START, 0); + } + return testing ? 1 : 0; } @@ -245,10 +259,22 @@ // 鏁翠釜杞﹁締閮借椹剁璇ユ祴璇曞尯鍩� static bool ExitTestArea(const Polygon *map, const car_model *car) { - // 鍦�8->7绾跨殑鍙充晶 - for (int i = 0; i < car->bodyNum; ++i) { - if (IntersectionOfLine(map->point[8], map->point[7], car->carXY[car->body[i]]) != -1) - return false; + // 鍏ㄨ溅閮介渶涓嶅湪鍦板浘涓� + bool ret = false; + + Polygon carBody; + + carBody.num = car->bodyNum; + carBody.point = (PointF *)malloc(carBody.num * sizeof(PointF)); + for (int i = 0; i < carBody.num; ++i) { + carBody.point[i] = car->carXY[car->body[i]]; } - return true; + + if (IntersectionOf(&carBody, map) == GM_None) { + ret = true; + } + + free(carBody.point); + + return ret; } -- Gitblit v1.8.0