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