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