//
|
// 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("<road_exam car_start> <%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;
|
}
|