From b73f32bc8ad86a7bb5f0739ac0fd7aa4c04cce98 Mon Sep 17 00:00:00 2001 From: yy1717 <fctom1215@outlook.com> Date: 星期三, 25 三月 2020 19:00:06 +0800 Subject: [PATCH] 加减档 --- lib/src/main/cpp/test_items2/stop_car.h | 1 lib/src/main/cpp/driver_test.cpp | 5 lib/src/main/cpp/test_items/stop_and_start.cpp | 3 lib/src/main/cpp/test_items2/dummy_light.cpp | 6 + lib/src/main/cpp/test_items2/stop_car.cpp | 7 + lib/src/main/cpp/CMakeLists.txt | 1 lib/src/main/cpp/rtk_module/rtk.cpp | 2 lib/src/main/cpp/test_items2/operate_gear.cpp | 169 +++++++++++++++++++++++++++++++++ lib/src/main/cpp/test_items/turn_a90.cpp | 11 + lib/src/main/cpp/test_items2/road_exam.h | 1 lib/src/main/cpp/test_items/park_edge.cpp | 3 lib/src/main/cpp/test_items2/operate_gear.h | 16 +++ lib/src/main/cpp/test_items2/road_exam.cpp | 43 +++++++- lib/src/main/cpp/test_items2/dummy_light.h | 1 lib/src/main/cpp/rtk_platform/platform.cpp | 2 15 files changed, 258 insertions(+), 13 deletions(-) diff --git a/lib/src/main/cpp/CMakeLists.txt b/lib/src/main/cpp/CMakeLists.txt index 171aee1..cb10f90 100644 --- a/lib/src/main/cpp/CMakeLists.txt +++ b/lib/src/main/cpp/CMakeLists.txt @@ -42,6 +42,7 @@ test_items2/through_something.cpp test_items2/drive_straight.cpp test_items2/stop_car.cpp + test_items2/operate_gear.cpp rtk_module/rtk.cpp rtk_module/virtual_rtk.cpp diff --git a/lib/src/main/cpp/driver_test.cpp b/lib/src/main/cpp/driver_test.cpp index 57a835f..ca85d04 100644 --- a/lib/src/main/cpp/driver_test.cpp +++ b/lib/src/main/cpp/driver_test.cpp @@ -551,6 +551,9 @@ if (start == 0) { DEBUG("缁撴潫鑰冭瘯"); + + TerminateRoadExam(); + CurrExamMapIndex = -1; ExamStart = false; MA_SendExamStatus(0, 0); @@ -813,7 +816,7 @@ if (ReadCarStatus(ENGINE_START) == ENGINE_START_ACTIVE) { if (!engineStart) { engineStart = true; - if (ReadCarStatus(GEAR) != 'N') { + if (ReadCarStatus(GEAR) != GEAR_N) { // 涓嶆槸绌烘尅鐐圭伀锛屼笉鍚堟牸 if (ExamType == TEST_TYPE_AREA) AddExamFault(3, rtkTime); diff --git a/lib/src/main/cpp/rtk_module/rtk.cpp b/lib/src/main/cpp/rtk_module/rtk.cpp index 5fc26f8..1a32349 100644 --- a/lib/src/main/cpp/rtk_module/rtk.cpp +++ b/lib/src/main/cpp/rtk_module/rtk.cpp @@ -200,7 +200,7 @@ }*/ if (RxBufLen > 0) { -#if 0 +#if 1 const uint8_t *ptr = parseGPS(RxBuf, RxBuf + RxBufLen); if(ptr != RxBuf) { memcpy(RxBuf, ptr, RxBufLen - (ptr - RxBuf)); diff --git a/lib/src/main/cpp/rtk_platform/platform.cpp b/lib/src/main/cpp/rtk_platform/platform.cpp index 48af7fa..c36ea92 100644 --- a/lib/src/main/cpp/rtk_platform/platform.cpp +++ b/lib/src/main/cpp/rtk_platform/platform.cpp @@ -23,6 +23,7 @@ #include "../driver_test.h" #include "../test_common/car_sensor.h" #include "../test_items2/stop_car.h" +#include "../test_items2/operate_gear.h" #define PARSE_BUFF_SIZE 4096 @@ -434,6 +435,7 @@ if (events & PLAY_TTS_DONE_EVT) { DummyLightTTSDone(*((int *)data)); StopCarTTSDone(*((int *)data)); + OperateGearTTSDone(*((int *)data)); } } diff --git a/lib/src/main/cpp/test_items/park_edge.cpp b/lib/src/main/cpp/test_items/park_edge.cpp index 2e18601..207d9e7 100644 --- a/lib/src/main/cpp/test_items/park_edge.cpp +++ b/lib/src/main/cpp/test_items/park_edge.cpp @@ -9,6 +9,7 @@ #include "../common/apptimer.h" #include "../native-lib.h" #include "../utils/xconvert.h" +#include "../test_common/car_sensor.h" #include <vector> #include <cstdlib> @@ -136,7 +137,7 @@ } // 鍦ㄨ繖閲屾鏌ヨ浆鍚戠伅鐘舵�� - if (true) { + if (ReadCarStatus(TURN_SIGNAL_LAMP) != LEFT_TURN_LIGHT) { // 涓嶅紑杞悜鐏紝鎵�10鍒� AddExamFault(25, rtkTime); DEBUG("鏈紑鍚浆鍚戠伅"); 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 980b782..0acc552 100644 --- a/lib/src/main/cpp/test_items/stop_and_start.cpp +++ b/lib/src/main/cpp/test_items/stop_and_start.cpp @@ -11,6 +11,7 @@ #include "../jni_log.h" #include "../common/apptimer.h" #include "../utils/xconvert.h" +#include "../test_common/car_sensor.h" #define DEBUG(fmt, args...) LOGD("<stop_and_start> <%s>: " fmt, __func__, ##args) @@ -121,7 +122,7 @@ } // 妫�鏌ユ槸鍚︽媺浣忔墜鍒� - if (true) { + if (ReadCarStatus(HAND_BREAK) != BREAK_ACTIVE) { AddExamFault(19, rtkTime); DEBUG("娌℃媺鎵嬪埞"); } diff --git a/lib/src/main/cpp/test_items/turn_a90.cpp b/lib/src/main/cpp/test_items/turn_a90.cpp index fa753ac..6ee18df 100644 --- a/lib/src/main/cpp/test_items/turn_a90.cpp +++ b/lib/src/main/cpp/test_items/turn_a90.cpp @@ -9,6 +9,7 @@ #include "../jni_log.h" #include "../utils/xconvert.h" #include "../defs.h" +#include "../test_common/car_sensor.h" #include <vector> #include <cstdlib> @@ -96,14 +97,20 @@ if (az >= 30) { if (!turnLeftFinished) { + char turn_direct; if((( ((int)heading) + 360 - enterAreaHeading) % 360) < 180) { DEBUG("鍙宠浆"); + turn_direct = 'R'; } else { DEBUG("宸﹁浆"); + turn_direct = 'L'; } // 杞悜鐏湭寮�鍚紝鎵�10鍒� - AddExamFault(30, rtkTime); - DEBUG("杞悜鐏湭寮�鍚�"); + if ((turn_direct == 'R' && ReadCarStatus(TURN_SIGNAL_LAMP) != RIGHT_TURN_LIGHT) || + (turn_direct == 'L' && ReadCarStatus(TURN_SIGNAL_LAMP) != LEFT_TURN_LIGHT)) { + DEBUG("杞悜鐏湭寮�鍚�"); + AddExamFault(30, rtkTime); + } } turnLeftFinished = true; } diff --git a/lib/src/main/cpp/test_items2/dummy_light.cpp b/lib/src/main/cpp/test_items2/dummy_light.cpp index 9c7fc71..c048150 100644 --- a/lib/src/main/cpp/test_items2/dummy_light.cpp +++ b/lib/src/main/cpp/test_items2/dummy_light.cpp @@ -72,6 +72,12 @@ } } +void TerminateDummyLightExam(void) +{ + AppTimer_delete(DummyLightCheckActive); + AppTimer_delete(ExamDummyLight); +} + static void DummyLightCheckActive(union sigval sig) { int active = sig.sival_int; diff --git a/lib/src/main/cpp/test_items2/dummy_light.h b/lib/src/main/cpp/test_items2/dummy_light.h index 6edb749..40a5cf8 100644 --- a/lib/src/main/cpp/test_items2/dummy_light.h +++ b/lib/src/main/cpp/test_items2/dummy_light.h @@ -31,5 +31,6 @@ void StartDummyLightExam(struct dummy_light_exam *ptr, int num, const struct RtkTime* rtkTime); int ExecuteDummyLightExam(const struct RtkTime* rtkTime); void DummyLightTTSDone(int id); +void TerminateDummyLightExam(void); #endif //MYAPPLICATION2_DUMMY_LIGHT_H diff --git a/lib/src/main/cpp/test_items2/operate_gear.cpp b/lib/src/main/cpp/test_items2/operate_gear.cpp new file mode 100644 index 0000000..b0cc48c --- /dev/null +++ b/lib/src/main/cpp/test_items2/operate_gear.cpp @@ -0,0 +1,169 @@ +// +// Created by YY on 2020/3/25. +// + +#include "operate_gear.h" +#include "../driver_test.h" +#include "../common/apptimer.h" +#include "../native-lib.h" +#include "../test_common/car_sensor.h" +#include "../jni_log.h" + +#define DEBUG(fmt, args...) LOGD("<operate_gear> <%s>: " fmt, __func__, ##args) + +static int opGear; +static bool testing; +static int examTtsSeq = 0; +static int expectGear; +static int upDownShift; +static bool checkError; +static int opCnt = 0; + +enum { + START_GEAR, + WAIT_TTS_END, + TTS_END, + WAITE_CHECK, + CHECKED +}; + +static void CheckGear(union sigval sig); + +void StartOperateGearExam(int index, LIST_ROAD_MAP &RoadMapList) { + if (index == -1) + return; + + testing = true; + opGear = START_GEAR; + checkError = false; + upDownShift = 0; + opCnt = 0; +} + +void TerminateOperateGearExam(void) +{ + AppTimer_delete(CheckGear); +} + +int ExecuteOperateGearExam(int index, LIST_ROAD_MAP &RoadMapList, const car_model *car, + LIST_CAR_MODEL &CarModelList, double speed, int moveDirect, const struct RtkTime *rtkTime) { + DEBUG("opGear %d", opGear); + + if (opGear == START_GEAR) { + int currGear = ReadCarStatus(GEAR); + switch (currGear) { + case GEAR_1: { + opGear = WAIT_TTS_END; + upDownShift = 1; + expectGear = GEAR_2; + examTtsSeq = PlayTTS("璇峰姞鍒颁簩鎸�"); + break; + } + case GEAR_2: { + opGear = WAIT_TTS_END; + if (upDownShift == 0) { + upDownShift = 1; + expectGear = GEAR_3; + examTtsSeq = PlayTTS("璇峰姞鍒颁笁鎸�"); + } else if (upDownShift == 1) { + upDownShift = -1; + expectGear = GEAR_1; + examTtsSeq = PlayTTS("璇峰噺鍒颁竴鎸�"); + } else { + upDownShift = 1; + expectGear = GEAR_3; + examTtsSeq = PlayTTS("璇峰姞鍒颁笁鎸�"); + } + break; + } + case GEAR_3: { + opGear = WAIT_TTS_END; + if (upDownShift == 0) { + upDownShift = -1; + expectGear = GEAR_2; + examTtsSeq = PlayTTS("璇峰噺鍒颁簩鎸�"); + } else if (upDownShift == 1) { + upDownShift = -1; + expectGear = GEAR_2; + examTtsSeq = PlayTTS("璇峰噺鍒颁簩鎸�"); + } else { + upDownShift = 1; + expectGear = GEAR_4; + examTtsSeq = PlayTTS("璇峰姞鍒板洓鎸�"); + } + break; + } + case GEAR_4: { + opGear = WAIT_TTS_END; + if (upDownShift == 0) { + upDownShift = -1; + expectGear = GEAR_3; + examTtsSeq = PlayTTS("璇峰噺鍒颁笁鎸�"); + } else if (upDownShift == 1) { + upDownShift = -1; + expectGear = GEAR_3; + examTtsSeq = PlayTTS("璇峰噺鍒颁笁鎸�"); + } else { + upDownShift = 1; + expectGear = GEAR_5; + examTtsSeq = PlayTTS("璇峰姞鍒颁簲鎸�"); + } + break; + } + case GEAR_5: { + opGear = WAIT_TTS_END; + upDownShift = -1; + expectGear = GEAR_4; + examTtsSeq = PlayTTS("璇峰噺鍒板洓鎸�"); + break; + } + default: + // 鏈鍒版湁鏁堟尅浣嶏紝缁х画灏濊瘯 + break; + } + } else if (opGear == WAIT_TTS_END) { + + } else if (opGear == TTS_END) { + opCnt++; + opGear = WAITE_CHECK; + checkError = false; + AppTimer_delete(CheckGear); + AppTimer_add(CheckGear, D_SEC(5)); + } else if (opGear == CHECKED) { + if (checkError) { + // 鏈寜鎸囦护鎿嶄綔鎸′綅锛屼笉鍚堟牸 + DEBUG("鏈寜鎸囦护鎿嶄綔鎸′綅"); + AddExamFault(31, rtkTime); + } + + if (opCnt < 2) { + opGear = START_GEAR; + } else { + testing = false; + } + } + + return testing ? index : -1; +} + +void OperateGearTTSDone(int id) +{ + DEBUG("OperateGearTTSDone %d", id); + // 绛夎闊虫挱鎶ュ畬姣曞悗璁℃椂 + if (id == examTtsSeq) { + opGear = TTS_END; + } +} + +static void CheckGear(union sigval sig) +{ + AppTimer_delete(CheckGear); + + DEBUG("妫�娴嬫尅浣� %d", expectGear); + // 妫�鏌ユ尅浣� + if (ReadCarStatus(GEAR) != expectGear) { + // 涓嶆墽琛屾寚瀹氭尅浣嶏紝涓嶅悎鏍� + checkError = true; + } + opGear = CHECKED; +} diff --git a/lib/src/main/cpp/test_items2/operate_gear.h b/lib/src/main/cpp/test_items2/operate_gear.h new file mode 100644 index 0000000..9db3a44 --- /dev/null +++ b/lib/src/main/cpp/test_items2/operate_gear.h @@ -0,0 +1,16 @@ +// +// Created by YY on 2020/3/25. +// + +#ifndef MYAPPLICATION2_OPERATE_GEAR_H +#define MYAPPLICATION2_OPERATE_GEAR_H + +#include "../driver_test.h" + +void StartOperateGearExam(int index, LIST_ROAD_MAP &RoadMapList); +int ExecuteOperateGearExam(int index, LIST_ROAD_MAP &RoadMapList, const car_model *car, + LIST_CAR_MODEL &CarModelList, double speed, int moveDirect, const struct RtkTime *rtkTime); +void OperateGearTTSDone(int id); +void TerminateOperateGearExam(void); + +#endif //MYAPPLICATION2_OPERATE_GEAR_H diff --git a/lib/src/main/cpp/test_items2/road_exam.cpp b/lib/src/main/cpp/test_items2/road_exam.cpp index b280802..6c9e1a6 100644 --- a/lib/src/main/cpp/test_items2/road_exam.cpp +++ b/lib/src/main/cpp/test_items2/road_exam.cpp @@ -14,6 +14,7 @@ #include "../master/comm_if.h" #include "drive_straight.h" #include "stop_car.h" +#include "operate_gear.h" #include <vector> #include <list> @@ -40,6 +41,7 @@ static bool occurCrashRedLine; static bool occurCrashGreenLine; static bool occurOverSpeed; +static bool occurSecondBreak; static int checkCrashGreenTimeout; static char carIntersectionOfGreenLine; static int currTurnSignalStatus; @@ -66,9 +68,13 @@ static int startCar; static int currExamMapIndex; +static bool checkDoor = false; +static bool handBreakActive = false; +static bool reportRPMOver = false; + static const int MAX_ENGINE_RPM = 2500; -static const double START_CAR_MOVE_DISTANCE = 0.5;//10.0; -static const double START_CAR_CHECK_DOOR_DISTANCE = 0.1;//1.0; +static const double START_CAR_MOVE_DISTANCE = 10.0; +static const double START_CAR_CHECK_DOOR_DISTANCE = 1.0; static const uint32_t GEAR_N_SLIDE_TIMEOUT = D_SEC(5); static const uint32_t GEAR_ERROR_TIMEOUT = D_SEC(15); static const uint32_t STOP_CAR_TIME = D_SEC(2); @@ -97,6 +103,7 @@ occurCrashRedLine = false; occurCrashGreenLine = false; occurOverSpeed = false; + occurSecondBreak = false; checkCrashGreenTimeout = 0; carIntersectionOfGreenLine = 0; @@ -116,14 +123,22 @@ currExamMapIndex = -1; startCar = START_CAR_NOT_DO; + + checkDoor = false; + handBreakActive = false; + reportRPMOver = false; +} + +void TerminateRoadExam(void) +{ + TerminateDummyLightExam(); + TerminateStopCarExam(); + TerminateOperateGearExam(); } static void TestRoadStartCar(const car_model *car, double speed, int moveDirect, const struct RtkTime *rtkTime) { double moveDistance; - static bool checkDoor = false; - static bool handBreakActive = false; - static bool reportRPMOver = false; if (startCar == START_CAR_NOT_DO) { startPoint = car->basePoint; @@ -186,6 +201,18 @@ } } else { occurOverSpeed = false; + } + + // 鍓埞杞︽娴� + if (ReadCarStatus(SECOND_BREAK) == BREAK_ACTIVE) { + // 鍓埞杞﹁俯涓嬶紝涓嶅悎鏍� + if (!occurSecondBreak) { + DEBUG("鍓埞杞﹀姩浣滀簡"); + occurSecondBreak = true; + AddExamFault(17, rtkTime); + } + } else { + occurSecondBreak = false; } // 鎸′綅鍖归厤妫�娴� @@ -327,7 +354,6 @@ currTurnSignalStatus = ReadCarStatus(TURN_SIGNAL_LAMP); break; } - // 妫�鏌ユ槸鍚︽寔缁浆鍚� char turnDirect = CheckCarTurn(CarModelList); @@ -491,6 +517,8 @@ StartDriveStraightExam(currExamMapIndex, RoadMapList); } else if (RoadMapList[currExamMapIndex].type == STOP_CAR_MAP) { StartStopCarExam(currExamMapIndex, RoadMapList); + } else if (RoadMapList[currExamMapIndex].type == OP_GEAER_MAP) { + StartOperateGearExam(currExamMapIndex, RoadMapList); } } } else if (startCar == START_CAR_DONE) { @@ -506,6 +534,9 @@ } else if (RoadMapList[currExamMapIndex].type == STOP_CAR_MAP) { currExamMapIndex = ExecuteStopCarExam(currExamMapIndex, RoadMapList, car, CarModelList, speed, moveDirect, rtkTime); + } else if (RoadMapList[currExamMapIndex].type == OP_GEAER_MAP) { + currExamMapIndex = ExecuteOperateGearExam(currExamMapIndex, RoadMapList, car, + CarModelList, speed, moveDirect, rtkTime); } if (currExamMapIndex == -1) { diff --git a/lib/src/main/cpp/test_items2/road_exam.h b/lib/src/main/cpp/test_items2/road_exam.h index ec4f712..015a29e 100644 --- a/lib/src/main/cpp/test_items2/road_exam.h +++ b/lib/src/main/cpp/test_items2/road_exam.h @@ -28,6 +28,7 @@ void Rtk2DriveTimer(struct drive_timer &tm, const struct RtkTime *rtkTime); void InitRoadExam(void); +void TerminateRoadExam(void); void TestRoadGeneral(LIST_ROAD_MAP &RoadMapList, const car_model *car, LIST_CAR_MODEL &CarModelList, double speed, int moveDirect, const struct RtkTime *rtkTime); bool ExitSonArea(int index, LIST_ROAD_MAP &RoadMapList, const car_model *car); bool CrashSonRedLine(int index, LIST_ROAD_MAP &RoadMapList, const car_model *car, LIST_CAR_MODEL &CarModelList); diff --git a/lib/src/main/cpp/test_items2/stop_car.cpp b/lib/src/main/cpp/test_items2/stop_car.cpp index 7630016..6629623 100644 --- a/lib/src/main/cpp/test_items2/stop_car.cpp +++ b/lib/src/main/cpp/test_items2/stop_car.cpp @@ -61,13 +61,18 @@ void StopCarTTSDone(int id) { - DEBUG("DummyLightTTSDone %d", id); + DEBUG("StopCarTTSDone %d", id); // 绛夎闊虫挱鎶ュ畬姣曞悗璁℃椂 if (id == examTtsSeq) { ttsPlayEnd = 1; } } +void TerminateStopCarExam(void) +{ + AppTimer_delete(PlayTTSTimeout); +} + int ExecuteStopCarExam(int index, LIST_ROAD_MAP &RoadMapList, const car_model *car, LIST_CAR_MODEL &CarModelList, double speed, int moveDirect, const struct RtkTime *rtkTime) { if (ttsPlayEnd == 1) { diff --git a/lib/src/main/cpp/test_items2/stop_car.h b/lib/src/main/cpp/test_items2/stop_car.h index fe2b92a..afaf176 100644 --- a/lib/src/main/cpp/test_items2/stop_car.h +++ b/lib/src/main/cpp/test_items2/stop_car.h @@ -11,5 +11,6 @@ void StopCarTTSDone(int id); int ExecuteStopCarExam(int index, LIST_ROAD_MAP &RoadMapList, const car_model *car, LIST_CAR_MODEL &CarModelList, double speed, int moveDirect, const struct RtkTime *rtkTime); +void TerminateStopCarExam(void); #endif //MYAPPLICATION2_STOP_CAR_H -- Gitblit v1.8.0