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/test_items2/prepare.h       |    1 
 lib/src/main/cpp/driver_test.cpp             |   47 +++++++++++++++++------
 lib/src/main/cpp/master/comm_if.cpp          |    1 
 lib/src/main/cpp/test_items2/dummy_light.cpp |    9 ++++
 lib/src/main/cpp/test_items2/prepare.cpp     |    7 +++
 lib/src/main/cpp/test_items2/road_exam.cpp   |    5 +-
 lib/build.gradle                             |    1 
 lib/src/main/cpp/rtk_module/virtual_rtk.cpp  |   22 ++++++----
 lib/src/main/cpp/rtk_platform/platform.cpp   |    3 +
 9 files changed, 71 insertions(+), 25 deletions(-)

diff --git a/lib/build.gradle b/lib/build.gradle
index 24ef7ba..8f31f11 100644
--- a/lib/build.gradle
+++ b/lib/build.gradle
@@ -15,6 +15,7 @@
         externalNativeBuild {
             cmake {
                 cppFlags "-std=c++11 -frtti -fexceptions"
+//                cppFlags += "-DAY_DEVICE"
             }
         }
         ndk {
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;
 }
diff --git a/lib/src/main/cpp/master/comm_if.cpp b/lib/src/main/cpp/master/comm_if.cpp
index b2772e1..455de37 100644
--- a/lib/src/main/cpp/master/comm_if.cpp
+++ b/lib/src/main/cpp/master/comm_if.cpp
@@ -141,6 +141,7 @@
                 pthread_mutex_unlock(&msg_mutex);
             } else {
                 // 寤惰繜閲嶅彂
+                DEBUG("鍙戦�佸け璐�");
                 usleep(500000);
                 sem_post(&sem_msg_income);
             }
diff --git a/lib/src/main/cpp/rtk_module/virtual_rtk.cpp b/lib/src/main/cpp/rtk_module/virtual_rtk.cpp
index 04e7a08..fcdfd30 100644
--- a/lib/src/main/cpp/rtk_module/virtual_rtk.cpp
+++ b/lib/src/main/cpp/rtk_module/virtual_rtk.cpp
@@ -35,6 +35,7 @@
 static void TcpDataCallback2(void *buffer, int length, void *p, void *context);
 
 static void ConnectLater(union sigval sig);
+static void ConnectLater2(union sigval sig);
 
 void InitVirtualDevice(const char *domain_name, int port)
 {
@@ -87,14 +88,17 @@
 static void ConnectLater(union sigval sig) {
     AppTimer_delete(ConnectLater);
 
-    if (sig.sival_int == 1) {
-        if (ctp != NULL) {
-            ctp->OpenTcpPort(VAddr.domain_name, VAddr.port);
-        }
-    } else {
-        if (ctp2 != NULL) {
-            ctp2->OpenTcpPort(VAddr.domain_name, VAddr.port + 1);
-        }
+    if (ctp != NULL) {
+        ctp->OpenTcpPort(VAddr.domain_name, VAddr.port);
+    }
+}
+
+static void ConnectLater2(union sigval sig)
+{
+    AppTimer_delete(ConnectLater2);
+
+    if (ctp2 != NULL) {
+        ctp2->OpenTcpPort(VAddr.domain_name, VAddr.port + 1);
     }
 }
 
@@ -155,7 +159,7 @@
         connectCnt2++;
 
         if (connectCnt2 < 3) {
-            AppTimer_add(ConnectLater, D_SEC(3), 2);
+            AppTimer_add(ConnectLater2, D_SEC(3), 2);
         }
         PlayTTS("鐏厜妯℃嫙鍣ㄦ柇寮�", NULL);
     }
diff --git a/lib/src/main/cpp/rtk_platform/platform.cpp b/lib/src/main/cpp/rtk_platform/platform.cpp
index 33efdc8..27dd2a5 100644
--- a/lib/src/main/cpp/rtk_platform/platform.cpp
+++ b/lib/src/main/cpp/rtk_platform/platform.cpp
@@ -516,6 +516,7 @@
             break;
         }
         case CAR_SENSOR_UPDATE_EVT: {
+            DEBUG("CAR_SENSOR_UPDATE_EVT");
             struct carSensorBrief brief;
             int x = 20;
 
@@ -585,6 +586,8 @@
             if (sensor.clutch == 1)
                 sensor.gear = 0;
 
+            DEBUG("鐢垫睜鐢靛帇 %f", sensor.cellVolt);
+
             UpdateSensor(&sensor);
             break;
         }
diff --git a/lib/src/main/cpp/test_items2/dummy_light.cpp b/lib/src/main/cpp/test_items2/dummy_light.cpp
index 3f68f1f..9697856 100644
--- a/lib/src/main/cpp/test_items2/dummy_light.cpp
+++ b/lib/src/main/cpp/test_items2/dummy_light.cpp
@@ -37,6 +37,12 @@
 
         for (int i = 0; i < contentNum; ++i) {
             DEBUG("鐏厜椤圭洰 <%d> item %d, TTS %s", i, content[i].item, content[i].tts.c_str());
+            for (int j = 0; j < content[i].process.size(); ++j) {
+                DEBUG("鐏厜杩囩▼瑙�<%d> %d - %d", i, (content[i].process[j] >> 8) & 0xFF, content[i].process[j] & 0xFF);
+            }
+            for (int j = 0; j < content[i].solution.size(); ++j) {
+                DEBUG("鐏厜鏈�缁堣В<%d> %d - %d", i, (content[i].solution[j] >> 8) & 0xFF, content[i].solution[j] & 0xFF);
+            }
         }
         testing = true;
 
@@ -63,6 +69,7 @@
         for (int i = 0; i < content[question].process.size(); ++i) {
             if (ReadCarStatus((content[question].process[i]>>8) & 0xFF) == content[question].process[i] & 0xFF) {
                 process.push_back(content[question].process[i]);
+                DEBUG("鐏厜鎿嶄綔杩囩▼瑙�1<%d> %d - %d", question, (content[question].process[i]>>8) & 0xFF, content[question].process[i] & 0xFF);
             }
         }
 
@@ -83,6 +90,7 @@
     if (testing) {
         for (int i = 0; i < content[question].process.size(); ++i) {
             if (id == ((content[question].process[i] >> 8) & 0xFF) && value == (content[question].process[i] & 0xFF)) {
+                DEBUG("鐏厜鎿嶄綔杩囩▼瑙�2<%d> %d - %d", question, (content[question].process[i]>>8) & 0xFF, content[question].process[i] & 0xFF);
                 if (process.size() == 0 || process.back() != content[question].process[i]) {
                     process.push_back(content[question].process[i]);
                 }
@@ -113,6 +121,7 @@
 
     for (int i = 0; i < content[question].solution.size(); ++i) {
         if (ReadCarStatus((content[question].solution[i]>>8)&0xFF) != (content[question].solution[i] & 0xFF)) {
+            DEBUG("鐏厜纭涓嶅悎鏍�<%d> %d != %d", question, (content[question].solution[i]>>8) & 0xFF, content[question].solution[i] & 0xFF);
             AddExamFault(content[question].wrongCode, &currRtkTime);
             break;
         }
diff --git a/lib/src/main/cpp/test_items2/prepare.cpp b/lib/src/main/cpp/test_items2/prepare.cpp
index 79fec6c..0ed3d54 100644
--- a/lib/src/main/cpp/test_items2/prepare.cpp
+++ b/lib/src/main/cpp/test_items2/prepare.cpp
@@ -27,6 +27,13 @@
     DEBUG("寮�濮嬩笂杞﹀噯澶�");
 }
 
+void TerminatePrepare(void)
+{
+    exec = false;
+    AppTimer_delete(PrepareTimeout);
+    AppTimer_delete(PrepareTimeout2);
+}
+
 void handlePrepare(uint16_t sensor_id, int value)
 {
     if (!exec)
diff --git a/lib/src/main/cpp/test_items2/prepare.h b/lib/src/main/cpp/test_items2/prepare.h
index 538a015..0f197df 100644
--- a/lib/src/main/cpp/test_items2/prepare.h
+++ b/lib/src/main/cpp/test_items2/prepare.h
@@ -8,6 +8,7 @@
 #include <cstdint>
 
 void StartPrepare(void);
+void TerminatePrepare(void);
 void handlePrepare(uint16_t sensor_id, int value);
 void PrepareOver(int res);
 
diff --git a/lib/src/main/cpp/test_items2/road_exam.cpp b/lib/src/main/cpp/test_items2/road_exam.cpp
index 166cbc3..c946ecc 100644
--- a/lib/src/main/cpp/test_items2/road_exam.cpp
+++ b/lib/src/main/cpp/test_items2/road_exam.cpp
@@ -19,6 +19,7 @@
 #include "car_start.h"
 #include "overtake.h"
 #include "change_lane.h"
+#include "prepare.h"
 
 #include <cmath>
 #include <vector>
@@ -202,9 +203,7 @@
 void TerminateRoadExam(void)
 {
     TerminateDummyLightExam();
-//    TerminateStopCarExam();
-//    TerminateOperateGearExam();
-//    TerminateDriveStraightExam();
+    TerminatePrepare();
 }
 
 /*********************************************************************

--
Gitblit v1.8.0