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