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