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 +++++++++++++++++++++++++++++------------------------- 1 files changed, 58 insertions(+), 50 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; } } -- Gitblit v1.8.0