From 683b1595260e638d1d3c6cc0d6543a72f6d6f925 Mon Sep 17 00:00:00 2001
From: yy1717 <fctom1215@outlook.com>
Date: 星期二, 12 一月 2021 14:36:42 +0800
Subject: [PATCH] 扣分码标准化

---
 lib/src/main/cpp/driver_test.cpp |   96 ++++++++++++++++++++++++++++++++++++------------
 1 files changed, 72 insertions(+), 24 deletions(-)

diff --git a/lib/src/main/cpp/driver_test.cpp b/lib/src/main/cpp/driver_test.cpp
index b90ea78..e1df9bb 100644
--- a/lib/src/main/cpp/driver_test.cpp
+++ b/lib/src/main/cpp/driver_test.cpp
@@ -37,6 +37,7 @@
 #include "test_common/car_sensor.h"
 #include "test_items2/road_exam.h"
 #include "test_items/area_exam.h"
+#include "test_items2/prepare.h"
 
 #define DEBUG(fmt, args...)     LOGD("<driver_test> <%s>: " fmt, __func__, ##args)
 
@@ -86,6 +87,12 @@
 static const int DEFAULT_START_CAR_MAX_RMP = 2500;
 static const int DEFAULT_START_CAR_DISTANCE = 10;
 static const double DEFAULT_START_CAR_OPEN_DOOR_DISTANCE = 1.0;
+static const char DEFAULT_PREPARE_TTS[] = "璇峰紑濮嬩笂杞﹀噯澶�";
+static const char DEFAULT_TOUCH_LEFT_FRONT[] = "瀛﹀憳閫氳繃宸﹀墠鏂�";
+static const char DEFAULT_TOUCH_LEFT_REAR[] = "瀛﹀憳閫氳繃宸﹀悗鏂�";
+static const char DEFAULT_TOUCH_RIGHT_FRONT[] = "瀛﹀憳閫氳繃鍙冲墠鏂�";
+static const char DEFAULT_TOUCH_RIGHT_REAR[] = "瀛﹀憳閫氳繃鍙冲悗鏂�";
+static const char DEFAULT_START_ENGINE[] = "璇峰惎鍔ㄥ彂鍔ㄦ満";
 static const char DEFAULT_START_CAR_BEGIN_TTS[] = "璇疯捣姝ワ紝缁х画瀹屾垚鑰冭瘯";
 static const char DEFAULT_START_CAR_END_TTS[] = "璧锋瀹屾垚";
 static const int CHANGE_LANE_MAX_DISTANCE = 100;
@@ -235,6 +242,14 @@
     examParam.start_car_max_rpm = DEFAULT_START_CAR_MAX_RMP;
     examParam.start_car_limit_distance = DEFAULT_START_CAR_DISTANCE;
     examParam.open_door_drive_allow_distance = DEFAULT_START_CAR_OPEN_DOOR_DISTANCE;
+
+    examParam.prepare_tts = DEFAULT_PREPARE_TTS;
+    examParam.touch_leftfront_tts = DEFAULT_TOUCH_LEFT_FRONT;
+    examParam.touch_leftrear_tts = DEFAULT_TOUCH_LEFT_REAR;
+    examParam.touch_rightfront_tts = DEFAULT_TOUCH_RIGHT_FRONT;
+    examParam.touch_rightrear_tts = DEFAULT_TOUCH_RIGHT_REAR;
+    examParam.start_engine_tts = DEFAULT_START_ENGINE;
+
     examParam.start_car_begin_tts = DEFAULT_START_CAR_BEGIN_TTS;
     examParam.start_car_end_tts = DEFAULT_START_CAR_END_TTS;
     examParam.change_lane_limit_distance = CHANGE_LANE_MAX_DISTANCE;
@@ -371,7 +386,7 @@
 
     RoadMap.examScheme.assign(scheme.begin(), scheme.end());
 
-    DEBUG("寰楀埌鏂扮殑璺�冨湴鍥� 椤圭洰鏁伴噺 %d", RoadMap.examScheme.size());
+    DEBUG("寰楀埌璺�冮」鐩柟妗� 椤圭洰鏁伴噺 %d", RoadMap.examScheme.size());
 }
 
 void SetCarMeasurePoint(double *basePoint, int *axial, int *left_front_tire,
@@ -505,18 +520,38 @@
 {
     DEBUG("鑾峰彇妯℃嫙璺�冪伅鍏夋祴璇曢」鐩� N = %d %d", n, ExamStart);
 
+    static const int cov[] = {0,
+                              (DIPPED_BEAM_LAMP<<8)+DIPPED_BEAM_LIGHT,
+                              (MAIN_BEAM_LAMP<<8)+MAIN_BEAM_LIGHT,
+                              (CLEARANCE_LAMP<<8)+CLEARANCE_LIGHT,
+                              (FOG_LAMP<<8)+FOG_LIGHT,
+                              (TURN_SIGNAL_LAMP<<8)+LEFT_TURN_LIGHT,
+                              (TURN_SIGNAL_LAMP<<8)+RIGHT_TURN_LIGHT,
+                              (TURN_SIGNAL_LAMP<<8)+HAZARD_LIGHTS,
+                              (FLASH_BEAM_LAMP<<8)+FLASH_BEAM_LIGHT};
+
     if (ExamStart) return;
 
     if (DummyLightContent != NULL) {
-        free(DummyLightContent);
+        delete []DummyLightContent;
         DummyLightContent = NULL;
+        DummyLightContentSize = 0;
     }
 
-    DummyLightContent = (struct dummy_light_exam *)malloc(n * sizeof(struct dummy_light_exam));
+    DummyLightContent = new struct dummy_light_exam[n];
     DummyLightContentSize = n;
 
     for (int i = 0; i < n; i++) {
-        DummyLightContent[i] = cfg[i];
+        DummyLightContent[i].item = cfg[i].item;
+        DummyLightContent[i].tts = cfg[i].tts;
+        DummyLightContent[i].wrongCode = cfg[i].wrongCode;
+        // Sensor Name<<8 + Sensor Status
+        for (int j = 0; j < cfg[i].process.size(); ++j) {
+            DummyLightContent[i].process[j] = cov[cfg[i].process[j]];
+        }
+        for (int j = 0; j < cfg[i].solution.size(); ++j) {
+            DummyLightContent[i].solution[j] = cov[cfg[i].solution[j]];
+        }
     }
 }
 
@@ -688,8 +723,6 @@
     }
 }
 
-
-
 static void PrintObdInfo(struct RtkTime *rtkTime, double speed) {
     static struct RtkTime cTime = *rtkTime;
 
@@ -791,9 +824,9 @@
             engineRuning = false;
             if (ExamType == TEST_TYPE_AREA) {
                 // 鐔勭伀1娆★紝鎵�10鍒�
-                AddExamFault(5, rtkTime);
+                AddExamFault(10210, rtkTime);
             } else {
-                AddExamFault(20, rtkTime);
+                AddExamFault(30208, rtkTime);
             }
         }
     } else {
@@ -806,9 +839,9 @@
             if (ReadCarStatus(GEAR) != GEAR_N) {
                 // 涓嶆槸绌烘尅鐐圭伀锛屼笉鍚堟牸
                 if (ExamType == TEST_TYPE_AREA)
-                    AddExamFault(3, rtkTime);
+                    AddExamFault(10105, rtkTime);
                 else
-                    AddExamFault(4, rtkTime);
+                    AddExamFault(30105, rtkTime);
             }
             AppTimer_delete(EngineStartHold);
             AppTimer_add(EngineStartHold, examParam.hold_start_key_limit_time);
@@ -823,19 +856,23 @@
 
         // 涓嶅強鏃舵澗寮�鍚姩寮�鍏筹紝鎵�10鍒�
         if (ExamType == TEST_TYPE_AREA)
-            AddExamFault(4, rtkTime);
+            AddExamFault(10201, rtkTime);
     }
 
     if (ExamType == TEST_TYPE_ROAD_DUMMY_LIGHT) {
         if (exam_dummy_light == 0) {
-            StartDummyLightExam(DummyLightContent, DummyLightContentSize, rtkTime);
+            StartPrepare();
+//            StartDummyLightExam(DummyLightContent, DummyLightContentSize, rtkTime);
             exam_dummy_light = 1;
-            // 姹囨姤鐏厜鑰冭瘯寮�濮�
-            DEBUG("鐏厜鑰冭瘯寮�濮�");
-        } else if (exam_dummy_light == 1) {
-            exam_dummy_light = ExecuteDummyLightExam(rtkTime);
-            // 姹囨姤鐏厜鑰冭瘯缁撴潫
-            if (exam_dummy_light == 2) {
+            DEBUG("寮�濮嬩笂杞﹀噯澶�");
+        } else if (exam_dummy_light == 2) {
+            DEBUG("寮�濮嬬伅鍏夎�冭瘯");
+            StartDummyLightExam(DummyLightContent, DummyLightContentSize, rtkTime);
+            exam_dummy_light = 3;
+        } else if (exam_dummy_light == 3) {
+            if (!ExecuteDummyLightExam(rtkTime)) {
+                exam_dummy_light = 4;
+                // 姹囨姤鐏厜鑰冭瘯缁撴潫
                 DEBUG("鐏厜鑰冭瘯缁撴潫");
                 InitRoadExam(RoadMap);
             }
@@ -849,12 +886,12 @@
         if (ReadCarStatus(SEATBELT) == EJECT_SEATBELT && !reportSeatbeltEject) {
             DEBUG("涓嶇郴瀹夊叏甯�");
             reportSeatbeltEject = true;
-            AddExamFault(1, rtkTime);
+            AddExamFault(ExamType == TEST_TYPE_AREA? 10101: 30101, rtkTime);
         }
     }
 
     if (ExamType != TEST_TYPE_AREA) {
-        if (exam_dummy_light == 2 || ExamType == TEST_TYPE_ROAD_TRUE_LIGHT || ExamType == TEST_TYPE_ROAD_CALIBRATE) {
+        if (exam_dummy_light == 4 || ExamType == TEST_TYPE_ROAD_TRUE_LIGHT || ExamType == TEST_TYPE_ROAD_CALIBRATE) {
             TestRoadGeneral(RoadMap, CarModel, CarModelList, speed, move, rtkTime);
         }
     } else {
@@ -1089,13 +1126,13 @@
     sprintf(fault.utc, "%04d%02d%02d%02d%02d%02d.%02d", 2000 + rtkTime->YY,
             rtkTime->MM, rtkTime->DD, rtkTime->hh, rtkTime->mm, rtkTime->ss, rtkTime->mss);
 
-    if (ExamType != TEST_TYPE_AREA) {
-        wrong += 1000;
-    }
+//    if (ExamType != TEST_TYPE_AREA) {
+//        wrong += 1000;
+//    }
 
     fault.wrong_id = wrong;
 
-    DEBUG("鑰冭瘯鍙戠敓閿欒 %d %s", wrong, fault.utc);
+    DEBUG("鑰冭瘯鍙戠敓閿欒 code = %d %s", wrong, fault.utc);
 
     ExamFaultList.push_back(fault);
 
@@ -1204,3 +1241,14 @@
 
     }
 }
+
+void SensorXChanged(uint16_t id, int value)
+{
+    handlePrepare(id, value);
+    handleLigthExam(id, value);
+}
+
+void PrepareOver(int res)
+{
+    exam_dummy_light = 2;
+}

--
Gitblit v1.8.0