From e021e593c56c3338ddddd35d7817ef6cd2fa504b Mon Sep 17 00:00:00 2001 From: fctom1215 <fctom1215@outlook.com> Date: 星期日, 15 三月 2020 22:55:22 +0800 Subject: [PATCH] 完善车辆信号测试。 --- lib/src/main/cpp/driver_test.cpp | 108 +++++++++++---------- lib/src/main/cpp/test_common/car_sensor.h | 5 lib/src/main/cpp/test_items2/dummy_light.cpp | 94 ++++++++++++++++-- lib/src/main/cpp/test_items2/dummy_light.h | 20 +++ lib/src/main/cpp/test_items2/common_check.cpp | 12 +- lib/src/main/cpp/test_common/car_sensor.cpp | 3 6 files changed, 171 insertions(+), 71 deletions(-) diff --git a/lib/src/main/cpp/driver_test.cpp b/lib/src/main/cpp/driver_test.cpp index 91672cc..8d94ecf 100644 --- a/lib/src/main/cpp/driver_test.cpp +++ b/lib/src/main/cpp/driver_test.cpp @@ -89,6 +89,7 @@ static int CurrEnterMapIndex = -1; static int CurrExamStatus = EXAM_AREA_NONE; // 1 娴嬭瘯瀹屾垚 0 娴嬭瘯涓� -1 娴嬭瘯閿欒閫�鍑� +static int exam_dummy_light; static car_model *CarModel = NULL; static car_model *CarModelPrev = NULL; @@ -96,6 +97,9 @@ static struct dummy_light_exam *DummyLightContent; static int DummyLightContentSize; static bool engineRuning = false; +const int ENGINE_MIN_ROTATE = 200; +static bool engineStart = false; +static bool engineStartTimeout = false; #define MOV_AVG_SIZE 1 #define RTK_BUFFER_SIZE 100 @@ -105,6 +109,8 @@ static int RtkBufferNum = 0, RtkBufferIn = 0; static void DetectEnterOrExitMap(void); +static void EngineStartHold(union sigval sig); +static void ExecuteExam(const struct RtkTime* rtkTime); static void ExecuteExam(double speed, int move, double azimuth, const struct RtkTime* rtkTime); static uint32_t CalcTimeDiff(const rtk_info *a, const rtk_info *b); static void ReadDriverExamPrimerTimeout(union sigval sig); @@ -332,8 +338,6 @@ for (int i = 0; i < n; i++) { DummyLightContent[i] = cfg[i]; } - - StartDummyLightExam(DummyLightContent, DummyLightContentSize); } void StartDriverExam(int start, int type) @@ -374,7 +378,7 @@ reportSeatbeltEject = false; if (type == TEST_TYPE_ROAD_DUMMY_LIGHT) { - StartDummyLightExam(DummyLightContent, DummyLightContentSize); + exam_dummy_light = 0; } } MA_SendExamStatus(1, 0); @@ -510,7 +514,56 @@ static void ExecuteExam(const struct RtkTime* rtkTime) { + if (ReadCarStatus(ENGINE_RPM) < ENGINE_MIN_ROTATE) { + if (engineRuning) { + engineRuning = false; + if (ExamType == TEST_TYPE_AREA) { + // 鐔勭伀1娆★紝鎵�10鍒� + AddExamFault(5, rtkTime); + } else { + AddExamFault(20, rtkTime); + } + } + } else { + engineRuning = true; + } + if (ReadCarStatus(ENGINE_START) == ENGINE_START_ACTIVE) { + if (!engineStart) { + engineStart = true; + if (ReadCarStatus(SHIFT) != 'N') { + // 涓嶆槸绌烘尅鐐圭伀锛屼笉鍚堟牸 + if (ExamType == TEST_TYPE_AREA) + AddExamFault(3, rtkTime); + else + AddExamFault(4, rtkTime); + } + AppTimer_delete(EngineStartHold); + AppTimer_add(EngineStartHold, D_SEC(2)); + } + } else if (engineStart) { + engineStart = false; + AppTimer_delete(EngineStartHold); + } + + if (engineStartTimeout) { + engineStartTimeout = false; + + // 涓嶅強鏃舵澗寮�鍚姩寮�鍏筹紝鎵�10鍒� + if (ExamType == TEST_TYPE_AREA) + AddExamFault(4, rtkTime); + } + + if (ExamType == TEST_TYPE_ROAD_DUMMY_LIGHT) { + if (exam_dummy_light == 0) { + StartDummyLightExam(DummyLightContent, DummyLightContentSize, rtkTime); + exam_dummy_light = 1; + // 姹囨姤鐏厜鑰冭瘯寮�濮� + } else if (exam_dummy_light == 1) { + exam_dummy_light = ExecuteDummyLightExam(rtkTime); + // 姹囨姤鐏厜鑰冭瘯缁撴潫 + } + } } static void ExecuteExam(double speed, int move, double azimuth, const struct RtkTime* rtkTime) @@ -607,53 +660,8 @@ static void EngineStartHold(union sigval sig) { AppTimer_delete(EngineStartHold); - // 涓嶅強鏃舵澗寮�鍚姩寮�鍏筹紝鎵�10鍒� - if (ReadSensor(SENSOR_ENGINE_START) == 1 && ExamStart) { - if (ExamType == TEST_TYPE_AREA) - AddExamFault(4, &rtkClock); - } -} - -void SensorChanged(int *sensorId, int *sensorValue, int num) -{ - const int ENGINE_MIN_ROTATE = 200; - - for (int i = 0; i < num; ++i) { - switch (sensorId[i]) { - case SENSOR_SEATBELT: - break; - case SENSOR_ENGINE_START: - AppTimer_delete(EngineStartHold); - - if (sensorValue[i] == 1) { - if (ReadSensor(SENSOR_SHIFT_N) == 0) { - // 涓嶆槸绌烘尅鐐圭伀锛屼笉鍚堟牸 - if (ExamType == TEST_TYPE_AREA) - AddExamFault(3, &rtkClock); - else - AddExamFault(4, &rtkClock); - } - AppTimer_add(EngineStartHold, D_SEC(2)); - } - break; - case SENSOR_ENGINE_RPM: - if (sensorValue[i] < ENGINE_MIN_ROTATE) { - if (engineRuning) { - engineRuning = false; - if (ExamType == TEST_TYPE_AREA) { - // 鐔勭伀1娆★紝鎵�10鍒� - AddExamFault(5, &rtkClock); - } else { - AddExamFault(20, &rtkClock); - } - } - } else { - engineRuning = true; - } - break; - default: - break; - } + if (ReadCarStatus(ENGINE_START) == ENGINE_START_ACTIVE) { + engineStartTimeout = true; } } diff --git a/lib/src/main/cpp/test_common/car_sensor.cpp b/lib/src/main/cpp/test_common/car_sensor.cpp index 2a8e020..d053ad9 100644 --- a/lib/src/main/cpp/test_common/car_sensor.cpp +++ b/lib/src/main/cpp/test_common/car_sensor.cpp @@ -244,14 +244,13 @@ WriteCarStatus(MAIN_BEAM_LAMP, MAIN_BEAM_LIGHT); } - if (flashMainBeamCnt > 3) { // 浜�-鐏�-浜�-鐏� + if (++flashMainBeamCnt > 3) { // 浜�-鐏�-浜�-鐏� WriteCarStatus(FLASH_BEAM_LAMP, FLASH_BEAM_LIGHT); AppTimer_delete(flashBeamLightClose); AppTimer_add(flashBeamLightClose, D_SEC(5)); } - flashMainBeamCnt++; AppTimer_delete(confirmFlashBeamLightLater); AppTimer_add(confirmFlashBeamLightLater, D_SEC(3)); break; diff --git a/lib/src/main/cpp/test_common/car_sensor.h b/lib/src/main/cpp/test_common/car_sensor.h index 5d85ea7..0350fd9 100644 --- a/lib/src/main/cpp/test_common/car_sensor.h +++ b/lib/src/main/cpp/test_common/car_sensor.h @@ -18,12 +18,14 @@ FLASH_BEAM_LAMP, MAIN_BEAM_LAMP, SEATBELT, + ENGINE_START, CAR_STATUS_END }; enum { OFF_LIGHT = 0, EJECT_SEATBELT = 0, + ENGINE_START_INACTIVE = 0, HAZARD_LIGHTS, LEFT_TURN_LIGHT, RIGHT_TURN_LIGHT, @@ -32,7 +34,8 @@ MAIN_BEAM_LIGHT, FLASH_BEAM_LIGHT, FOG_LIGHT, - INSERT_SEATBELT + INSERT_SEATBELT, + ENGINE_START_ACTIVE }; void CarSensorInit(void); diff --git a/lib/src/main/cpp/test_items2/common_check.cpp b/lib/src/main/cpp/test_items2/common_check.cpp index d4e483b..3dde24c 100644 --- a/lib/src/main/cpp/test_items2/common_check.cpp +++ b/lib/src/main/cpp/test_items2/common_check.cpp @@ -20,14 +20,14 @@ if (prevMoveDirect == 0) { // 璧锋鎸傞敊鎸★紝涓嶅悎鏍� - if (ReadSensor(SENSOR_SHIFT_1) != 1) { - AddExamFault(19, rtkTime); - } +// if (ReadSensor(SENSOR_SHIFT_1) != 1) { +// AddExamFault(19, rtkTime); +// } // 璧锋娌℃湁鍏抽棴杞﹂棬锛屼笉鍚堟牸 - if (ReadSensor(SENSOR_DOOR) != 1) { - AddExamFault(23, rtkTime); - } +// if (ReadSensor(SENSOR_DOOR) != 1) { +// AddExamFault(23, rtkTime); +// } // 鍚庢粦鍒ゆ柇 diff --git a/lib/src/main/cpp/test_items2/dummy_light.cpp b/lib/src/main/cpp/test_items2/dummy_light.cpp index c25c199..83d3ee1 100644 --- a/lib/src/main/cpp/test_items2/dummy_light.cpp +++ b/lib/src/main/cpp/test_items2/dummy_light.cpp @@ -7,46 +7,119 @@ #include "dummy_light.h" #include "../native-lib.h" #include "../jni_log.h" +#include "../test_common/car_sensor.h" #define DEBUG(fmt, args...) LOGD("<dummy_light> <%s>: " fmt, __func__, ##args) +static struct RtkTime currRtkTime; static struct dummy_light_exam *content; static int contentNum; static int currContent; +static int checkCnt; +static bool turn_left_active, flash_beam_active; -static void DummyLightCheckLight(union sigval sig); +static void DummyLightCheckActive(union sigval sig); static void ExamDummyLight(union sigval sig); -void StartDummyLightExam(struct dummy_light_exam *ptr, int num) +void StartDummyLightExam(struct dummy_light_exam *ptr, int num, const struct RtkTime* rtkTime) { DEBUG("StartDummyLightExam"); content = ptr; contentNum = num; currContent = 0; + currRtkTime = *rtkTime; - AppTimer_delete(DummyLightCheckLight); + AppTimer_delete(DummyLightCheckActive); AppTimer_delete(ExamDummyLight); AppTimer_add(ExamDummyLight, D_SEC(2)); +} + +int ExecuteDummyLightExam(const struct RtkTime* rtkTime) +{ + currRtkTime = *rtkTime; + return (currContent == contentNum)?2:1; } void DummyLightTTSDone(int id) { DEBUG("DummyLightTTSDone %d", id); - + // 绛夎闊虫挱鎶ュ畬姣曞悗璁℃椂 if (id == 100) { - AppTimer_add(DummyLightCheckLight, D_SEC(3), id); + AppTimer_add(DummyLightCheckActive, D_SEC(3), id); } else if (id == 101) { - AppTimer_add(DummyLightCheckLight, D_SEC(1), id); + AppTimer_add(DummyLightCheckActive, D_SEC(1), id); + } else if (id == OVERTAKE) { + checkCnt = 0; + turn_left_active = flash_beam_active = false; + AppTimer_add(DummyLightCheckActive, D_SEC(1), id); } else { - AppTimer_add(DummyLightCheckLight, D_SEC(5), id); + AppTimer_add(DummyLightCheckActive, D_SEC(5), id); } } -static void DummyLightCheckLight(union sigval sig) +static void DummyLightCheckActive(union sigval sig) { - AppTimer_delete(DummyLightCheckLight); + AppTimer_delete(DummyLightCheckActive); - DEBUG("DummyLightCheckLight %d", sig.sival_int); + DEBUG("DummyLightCheckActive %d", sig.sival_int); + + switch (sig.sival_int) { + case DRIVE_AT_NIGHT: + case TURN_ON_MAIN_BEAM_LAMP: + if (ReadCarStatus(MAIN_BEAM_LAMP) != MAIN_BEAM_LIGHT) { + AddExamFault(58, &currRtkTime); + } + break; + case TURN_ON_DIPPED_LAMP: + case BRIDGE_MEET_CAR: + case FOLLOW_CAR: + if (ReadCarStatus(DIPPED_BEAM_LAMP) != DIPPED_BEAM_LIGHT) { + AddExamFault(58, &currRtkTime); + } + break; + case DRIVE_IN_FOG: + if (ReadCarStatus(FOG_LAMP) != FOG_LIGHT) { + AddExamFault(58, &currRtkTime); + } + break; + case THROUGE_CROSSWALK: + case THROUGE_CURVE: + case THROUGE_CROSSROADS: + if (ReadCarStatus(FLASH_BEAM_LAMP) != FLASH_BEAM_LIGHT) { + AddExamFault(58, &currRtkTime); + } + break; + case OVERTAKE: + if (++checkCnt < 5) { + if (!flash_beam_active) { + if (ReadCarStatus(TURN_SIGNAL_LAMP) == LEFT_TURN_LIGHT) { + turn_left_active = true; + } + } + if (turn_left_active) { + if (ReadCarStatus(FLASH_BEAM_LAMP) == FLASH_BEAM_LIGHT) { + flash_beam_active = true; + } + } + AppTimer_add(DummyLightCheckActive, D_SEC(1), OVERTAKE); + return; + } else { + if (!flash_beam_active || !turn_left_active) { + AddExamFault(58, &currRtkTime); + } + } + break; + case CAR_FAULT: + case PARK_CAR_TEMP: + if (ReadCarStatus(TURN_SIGNAL_LAMP) != HAZARD_LIGHTS) { + AddExamFault(58, &currRtkTime); + } + break; + default: + break; + } + + AppTimer_add(ExamDummyLight, D_SEC(1)); } static void ExamDummyLight(union sigval sig) @@ -58,6 +131,5 @@ PlayTTS(content[currContent].tts, content[currContent].item); currContent++; - AppTimer_add(ExamDummyLight, D_SEC(5)); } } diff --git a/lib/src/main/cpp/test_items2/dummy_light.h b/lib/src/main/cpp/test_items2/dummy_light.h index 34bc315..8f481d2 100644 --- a/lib/src/main/cpp/test_items2/dummy_light.h +++ b/lib/src/main/cpp/test_items2/dummy_light.h @@ -5,12 +5,30 @@ #ifndef MYAPPLICATION2_DUMMY_LIGHT_H #define MYAPPLICATION2_DUMMY_LIGHT_H +#include "../driver_test.h" + +enum { + TURN_ON_DIPPED_LAMP = 1, + DRIVE_AT_NIGHT, + BRIDGE_MEET_CAR, + TURN_ON_MAIN_BEAM_LAMP, + FOLLOW_CAR, + DRIVE_IN_FOG, + THROUGE_CROSSWALK, + CAR_FAULT, + THROUGE_CURVE, + THROUGE_CROSSROADS, + PARK_CAR_TEMP, + OVERTAKE +}; + struct dummy_light_exam { int item; char tts[512]; }; -void StartDummyLightExam(struct dummy_light_exam *ptr, int num); +void StartDummyLightExam(struct dummy_light_exam *ptr, int num, const struct RtkTime* rtkTime); +int ExecuteDummyLightExam(const struct RtkTime* rtkTime); void DummyLightTTSDone(int id); #endif //MYAPPLICATION2_DUMMY_LIGHT_H -- Gitblit v1.8.0