From 026e1750503ec74bbe181bce3ece9931c244e367 Mon Sep 17 00:00:00 2001
From: yy1717 <fctom1215@outlook.com>
Date: 星期三, 03 二月 2021 09:23:31 +0800
Subject: [PATCH] 适配模拟灯光。

---
 lib/src/main/cpp/driver_test.cpp |   47 ++++++++++++++++++++++++++++++++++-------------
 1 files changed, 34 insertions(+), 13 deletions(-)

diff --git a/lib/src/main/cpp/driver_test.cpp b/lib/src/main/cpp/driver_test.cpp
index 29b76ee..9e0f000 100644
--- a/lib/src/main/cpp/driver_test.cpp
+++ b/lib/src/main/cpp/driver_test.cpp
@@ -147,7 +147,6 @@
 static bool engineRuning = false;
 const int ENGINE_MIN_ROTATE = 200;
 static bool engineStart = false;
-static bool engineStartTimeout = false;
 
 exam_param_t examParam;
 
@@ -157,6 +156,9 @@
 
 static rtk_info *RtkBuffer = NULL;
 static int RtkBufferNum = 0, RtkBufferIn = 0;
+
+static pthread_mutex_t clock_mutex = PTHREAD_MUTEX_INITIALIZER;
+static struct RtkTime rtkClock;
 
 static void SetExamParamDefault(void);
 static void EngineStartHold(union sigval sig);
@@ -191,6 +193,8 @@
 
     RtkBuffer = (rtk_info *) malloc(RTK_BUFFER_SIZE * sizeof(rtk_info));
     RtkBufferNum = RtkBufferIn = 0;
+
+    pthread_mutex_init(&clock_mutex, NULL);
 }
 
 static void SetExamParamDefault(void)
@@ -643,8 +647,7 @@
 
 void UpdateRTKInfo(const rtk_info *s)
 {
-    struct RtkTime rtkClock;
-
+    pthread_mutex_lock(&clock_mutex);
     rtkClock.YY = s->YY;
     rtkClock.MM = s->MM;
     rtkClock.DD = s->DD;
@@ -652,6 +655,7 @@
     rtkClock.mm = s->mm;
     rtkClock.ss = s->ss;
     rtkClock.mss = s->dss;
+    pthread_mutex_unlock(&clock_mutex);
 
     if (ExamStart) {
         ExecuteExam(&rtkClock);     // 鎵ц鏃犻渶杞﹁締瀹氫綅鐨勯」鐩�
@@ -845,8 +849,10 @@
 
     if (ReadCarStatus(ENGINE_START) == ENGINE_START_ACTIVE) {
         if (!engineStart) {
+            DEBUG("妫�娴嬪埌鐐圭伀");
             engineStart = true;
             if (ReadCarStatus(GEAR) != GEAR_N) {
+                DEBUG("涓嶅湪绌烘尅鐐圭伀");
                 // 涓嶆槸绌烘尅鐐圭伀锛屼笉鍚堟牸
                 if (ExamType == TEST_TYPE_AREA)
                     AddExamFault(10105, rtkTime);
@@ -857,16 +863,9 @@
             AppTimer_add(EngineStartHold, examParam.hold_start_key_limit_time);
         }
     } else if (engineStart) {
+        DEBUG("妫�娴嬪埌鍏抽棴鐐圭伀");
         engineStart = false;
         AppTimer_delete(EngineStartHold);
-    }
-
-    if (engineStartTimeout) {
-        engineStartTimeout = false;
-
-        // 涓嶅強鏃舵澗寮�鍚姩寮�鍏筹紝鎵�10鍒�
-        if (ExamType == TEST_TYPE_AREA)
-            AddExamFault(10201, rtkTime);
     }
 
     if (ExamType == TEST_TYPE_ROAD_DUMMY_LIGHT) {
@@ -911,9 +910,20 @@
 
 static void EngineStartHold(union sigval sig) {
     AppTimer_delete(EngineStartHold);
-
+    DEBUG("鐐圭伀瓒呮椂");
     if (ReadCarStatus(ENGINE_START) == ENGINE_START_ACTIVE) {
-        engineStartTimeout = true;
+        struct RtkTime rtkTime;
+
+        pthread_mutex_lock(&clock_mutex);
+        rtkTime = rtkClock;
+        pthread_mutex_unlock(&clock_mutex);
+
+        // 涓嶅強鏃舵澗寮�鍚姩寮�鍏筹紝鎵�10鍒�
+        if (ExamType == TEST_TYPE_AREA) {
+            AddExamFault(10201, &rtkTime);
+        } else if (ExamType != TEST_TYPE_ROAD_CALIBRATE) {
+            AddExamFault(40207, &rtkTime);
+        }
     }
 }
 
@@ -1260,5 +1270,16 @@
 
 void PrepareOver(int res)
 {
+    DEBUG("涓婅溅鍑嗗缁撴潫 %d", res);
+
+    if (res != 0) {
+        struct RtkTime rtkTime;
+
+        pthread_mutex_lock(&clock_mutex);
+        rtkTime = rtkClock;
+        pthread_mutex_unlock(&clock_mutex);
+
+        AddExamFault(40101, &rtkTime);
+    }
     exam_dummy_light = 2;
 }

--
Gitblit v1.8.0