| | |
| | | static bool engineRuning = false; |
| | | const int ENGINE_MIN_ROTATE = 200; |
| | | static bool engineStart = false; |
| | | static bool engineStartTimeout = false; |
| | | |
| | | exam_param_t examParam; |
| | | |
| | |
| | | |
| | | 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); |
| | |
| | | |
| | | RtkBuffer = (rtk_info *) malloc(RTK_BUFFER_SIZE * sizeof(rtk_info)); |
| | | RtkBufferNum = RtkBufferIn = 0; |
| | | |
| | | pthread_mutex_init(&clock_mutex, NULL); |
| | | } |
| | | |
| | | static void SetExamParamDefault(void) |
| | |
| | | |
| | | 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; |
| | |
| | | rtkClock.mm = s->mm; |
| | | rtkClock.ss = s->ss; |
| | | rtkClock.mss = s->dss; |
| | | pthread_mutex_unlock(&clock_mutex); |
| | | |
| | | if (ExamStart) { |
| | | ExecuteExam(&rtkClock); // 执行无需车辆定位的项目 |
| | |
| | | |
| | | 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); |
| | |
| | | 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) { |
| | |
| | | |
| | | 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); |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | |
| | | 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; |
| | | } |