yy1717
2022-12-08 f7a18ec4494b9c5c9ef3fd440bbf68ffc6425e18
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;