// // Created by YY on 2020/8/20. // #include "car_start.h" #include "../driver_test.h" #include "../test_common/odo_graph.h" #include "../native-lib.h" #include "../test_common/car_sensor.h" #include "road_exam.h" #include "../jni_log.h" #include "../common/apptimer.h" #define DEBUG(fmt, args...) LOGD(" <%s>: " fmt, __func__, ##args) static double startCarMoveDistance; static bool checkEngineRPM, checkStartCarSignal, checkDoor, handBreakActive; void cb(int seq) { DEBUG("语音结束 %d", seq); } void CarStartInit(void) { startCarMoveDistance = ReadOdo(); checkEngineRPM = false; checkStartCarSignal = false; checkDoor = false; handBreakActive = false; PlayTTS(examParam.start_car_begin_tts, cb); DEBUG("车辆起步"); } bool TestCarStart(const car_model *car, double speed, int moveDirect, const struct RtkTime *rtkTime) { car_sensor_value_t sensor; double moveDistance = ReadOdo() - startCarMoveDistance; // DEBUG("起步行驶距离 %f", moveDistance); if (!checkStartCarSignal && moveDirect == 1) { checkStartCarSignal = true; sensor = ReadCarSensorValue(TURN_SIGNAL_LAMP); if (sensor.name == TURN_SIGNAL_LAMP) { if (sensor.value != LEFT_TURN_LIGHT) { DEBUG("变调未打灯!!"); // 没打灯,不合格 AddExamFault(30121, rtkTime); } else if (TimeGetDiff(rtkTime, &sensor.time) < D_SEC(3)) { DEBUG("转向灯时间不足"); // 不足3秒,不合格 AddExamFault(30122, rtkTime); } } } if (moveDistance > examParam.start_car_limit_distance) { sensor = ReadCarSensorValue(HAND_BREAK); if (sensor.name == HAND_BREAK && sensor.value == BREAK_ACTIVE) { DEBUG("Handbreak active move over 10m"); // 手刹拉起状态下,行驶了10米以上,不合格 AddExamFault(40205, rtkTime); } else if (handBreakActive) { // 手刹拉起状态下,行驶了1米以上,扣10分 DEBUG("Handbreak active move over 1M"); AddExamFault(40206, rtkTime); } PlayTTS(examParam.start_car_end_tts, NULL); DEBUG("############# 完成起步 ############"); return false; } else if (moveDistance >= examParam.open_door_drive_allow_distance) { if (!checkDoor) { checkDoor = true; sensor = ReadCarSensorValue(DOOR); if (sensor.name == DOOR && sensor.value == DOOR_OPEN) { // 车门未完全关闭,不合格 DEBUG("车门未关闭"); AddExamFault(40202, rtkTime); } sensor = ReadCarSensorValue(HAND_BREAK); if (sensor.name == HAND_BREAK && sensor.value == BREAK_ACTIVE) { handBreakActive = true; } } } if (ReadCarStatus(ENGINE_RPM) > examParam.start_car_max_rpm && !checkEngineRPM) { // 转速超标,不合格 DEBUG("转速超标"); AddExamFault(40210, rtkTime); checkEngineRPM = true; } return true; }