yy1717
2020-09-18 03a05501800d2c02bca1c05ca6f7080d715aba23
lib/src/main/cpp/test_items2/road_exam.cpp
@@ -90,9 +90,11 @@
static bool occurSlide;
static struct RtkTime crashGreenRunTime, crashGreenStartTime, stopTimepoint;
static struct RtkTime gearChangeTimePoint;
static struct RtkTime gearErrorTimePoint;
static struct RtkTime gearNSlideTimePoint;
static int gearChange;
static car_sensor_value_t turnSignalStatus;
@@ -1324,6 +1326,21 @@
            occurSecondBreak = false;
        }
        // 两次换挡不进
        static int prevGear = -1;
        int currGear = ReadCarStatus(GEAR);
        if (currGear != GEAR_N && prevGear == GEAR_N) {
            // 一次换挡
            if (gearChange == currGear && TimeGetDiff(rtkTime, &gearChangeTimePoint) < D_SEC(5)) {
                AddExamFault(7, rtkTime);
            }
            gearChange = currGear;
            gearChangeTimePoint = *rtkTime;
        }
        prevGear = currGear;
        // 挡位匹配检测
        bool currGearError = false;
        bool currGearNSlide = false;
@@ -1475,9 +1492,9 @@
        if (RoadMap.calibrate) {
            if (currExamMapIndex < 0 && oldid >= 0) {
                RoadChange(oldid, 0);
                RoadChange(RoadMap.roads[oldid].id, 0);
            } else if (currExamMapIndex >= 0) {
                RoadChange(currExamMapIndex, 1);
                RoadChange(RoadMap.roads[currExamMapIndex].id, 1);
            }
        }
        Lane.guide = 0;
@@ -1648,6 +1665,9 @@
            RoadExamItem[RoadExamStatus] = ROAD_EXAM_ITEM_EXECED;
            if (RoadExamStatus == ROAD_EXAM_ITEM_CAR_START) {
                freeRunExceptDistance = 60.0;
            } else if (RoadExamStatus == ROAD_EXAM_ITEM_CAR_STOP) {
                // 考试结束
                MA_SendExamStatus(1, 1);
            } else {
                freeRunExceptDistance = 2;//250.0;
            }
@@ -1674,6 +1694,14 @@
    } else if (RoadExamStatus == ROAD_EXAM_READY_NEXT && item == 2) {
        StartOvertakeExam(Lane.no);
        RoadExamStatus = ROAD_EXAM_ITEM_OVER_TAKE;
    } else if (RoadExamStatus == ROAD_EXAM_READY_NEXT && item == 5) {
        if (RoadExamItem[ROAD_EXAM_ITEM_STRAIGHT] == ROAD_EXAM_ITEM_EXECED &&
                RoadExamItem[ROAD_EXAM_ITEM_OP_GEAR] == ROAD_EXAM_ITEM_EXECED &&
                RoadExamItem[ROAD_EXAM_ITEM_CHANGE_LANE] == ROAD_EXAM_ITEM_EXECED &&
                RoadExamItem[ROAD_EXAM_ITEM_OVER_TAKE] == ROAD_EXAM_ITEM_EXECED) {
            StartStopCarExam();
            RoadExamStatus = ROAD_EXAM_ITEM_CAR_STOP;
        }
    }
}