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