From f7a18ec4494b9c5c9ef3fd440bbf68ffc6425e18 Mon Sep 17 00:00:00 2001
From: yy1717 <fctom1215@outlook.com>
Date: 星期四, 08 十二月 2022 15:40:56 +0800
Subject: [PATCH] 智慧驾培首次提交

---
 lib/src/main/cpp/driver_test.cpp |   68 +++++++++++++++++++++++++---------
 1 files changed, 50 insertions(+), 18 deletions(-)

diff --git a/lib/src/main/cpp/driver_test.cpp b/lib/src/main/cpp/driver_test.cpp
index a25a74a..365bbd8 100644
--- a/lib/src/main/cpp/driver_test.cpp
+++ b/lib/src/main/cpp/driver_test.cpp
@@ -8,7 +8,7 @@
 #include <cstdlib>
 #include <cmath>
 #include <semaphore.h>
-#include <pthread.h>
+#include <mutex>
 #include <cstring>
 #include <vector>
 #include <list>
@@ -158,19 +158,22 @@
 static rtk_info *RtkBuffer = NULL;
 static int RtkBufferNum = 0, RtkBufferIn = 0;
 
-static pthread_mutex_t clock_mutex = PTHREAD_MUTEX_INITIALIZER;
+static std::mutex clock_mutex;
 static struct RtkTime rtkClock;
 
 static void SetExamParamDefault(void);
-static void EngineStartHold(union sigval sig);
+static void EngineStartHold(apptimer_var_t val);
 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);
+static void ReadDriverExamPrimerTimeout(apptimer_var_t val);
 static void UpdateCarBodyCoord(struct RtkTime *rtkTime, double azimuth, double pitch, double roll, PointF main_ant, car_model *carModel);
 static bool UpdateCarCoord(double &spd, int &mov, int &idx);
 
 static void PrintObdInfo(struct RtkTime *rtkTime, double speed);
+
+
+static void ClockGener(apptimer_var_t val);
 
 void DriverTestInit(void)
 {
@@ -195,7 +198,7 @@
     RtkBuffer = (rtk_info *) malloc(RTK_BUFFER_SIZE * sizeof(rtk_info));
     RtkBufferNum = RtkBufferIn = 0;
 
-    pthread_mutex_init(&clock_mutex, NULL);
+//    AppTimer_add(ClockGener, 200);            // App鑷繁浜х敓瀹氭椂鑺傛媿
 }
 
 static void SetExamParamDefault(void)
@@ -293,10 +296,8 @@
     examParam.crossing_turn_unknown_tts = DEFAULT_CROSSING_TURN_UNKNOWN_TTS;
 }
 
-static void ReadDriverExamPrimerTimeout(union sigval sig)
+static void ReadDriverExamPrimerTimeout(apptimer_var_t val)
 {
-    AppTimer_delete(ReadDriverExamPrimerTimeout);
-    AppTimer_add(ReadDriverExamPrimerTimeout, D_SEC(2));
     ReadDriverExamPrimer();
 }
 
@@ -669,9 +670,42 @@
     }
 }
 
+static void ClockGener(apptimer_var_t val)
+{
+    rtk_info rtk;
+
+    rtk.qf = 3;
+    rtk.heading = 0;
+    rtk.pitch = 0;
+    rtk.roll = 0;
+    rtk.x = 0;
+    rtk.y = 0;
+
+    struct timeval    tv;
+    struct timezone tz;
+
+    gettimeofday(&tv, &tz);
+
+    struct tm *pTime = localtime(&tv.tv_sec);
+
+    rtk.YY = (pTime->tm_year + 1900) % 100;
+    rtk.MM = pTime->tm_mon + 1;
+    rtk.DD = pTime->tm_mday;
+    rtk.hh = pTime->tm_hour;
+    rtk.mm = pTime->tm_min;
+    rtk.ss = pTime->tm_sec;
+    rtk.dss = tv.tv_usec / 1000;
+
+//    DEBUG("妯℃嫙鏃堕棿 锛�%d-%d-%d %d:%d:%d.%d", rtk.YY, 1+pTime->tm_mon, pTime->tm_mday, pTime->tm_hour, pTime->tm_min, pTime->tm_sec, rtk.dss);
+
+    UpdateRTKInfo(&rtk);
+
+    AppTimer_add(ClockGener, 200);
+}
+
 void UpdateRTKInfo(const rtk_info *s)
 {
-    pthread_mutex_lock(&clock_mutex);
+    std::unique_lock<std::mutex> lk(clock_mutex);
     rtkClock.YY = s->YY;
     rtkClock.MM = s->MM;
     rtkClock.DD = s->DD;
@@ -679,7 +713,7 @@
     rtkClock.mm = s->mm;
     rtkClock.ss = s->ss;
     rtkClock.mss = s->dss;
-    pthread_mutex_unlock(&clock_mutex);
+    lk.unlock();
 
     if (ExamStart) {
         ExecuteExam(&rtkClock);     // 鎵ц鏃犻渶杞﹁締瀹氫綅鐨勯」鐩�
@@ -969,15 +1003,14 @@
     }
 }
 
-static void EngineStartHold(union sigval sig) {
-    AppTimer_delete(EngineStartHold);
+static void EngineStartHold(apptimer_var_t val) {
     DEBUG("鐐圭伀瓒呮椂");
     if (ReadCarStatus(ENGINE_START) == ENGINE_START_ACTIVE) {
         struct RtkTime rtkTime;
 
-        pthread_mutex_lock(&clock_mutex);
+        std::unique_lock<std::mutex> lk(clock_mutex);
         rtkTime = rtkClock;
-        pthread_mutex_unlock(&clock_mutex);
+        lk.unlock();
 
         // 涓嶅強鏃舵澗寮�鍚姩寮�鍏筹紝鎵�10鍒�
         if (ExamType == TEST_TYPE_AREA) {
@@ -1316,7 +1349,7 @@
 {
     // 鍏虫満
     if (event == 1) {
-        ShutdownInd(timeout);
+
     }
     // 閲嶅惎
     if (event == 0) {
@@ -1337,10 +1370,9 @@
     if (res != 0) {
         struct RtkTime rtkTime;
 
-        pthread_mutex_lock(&clock_mutex);
+        std::unique_lock<std::mutex> lk(clock_mutex);
         rtkTime = rtkClock;
-        pthread_mutex_unlock(&clock_mutex);
-
+        lk.unlock();
         AddExamFault(40101, &rtkTime);
     }
     exam_dummy_light = 2;

--
Gitblit v1.8.0