yy1717
2021-01-12 683b1595260e638d1d3c6cc0d6543a72f6d6f925
lib/src/main/cpp/test_items2/road_exam.cpp
@@ -859,17 +859,17 @@
    if (newLineType >= 100) {
        newLineType -= 100;
        DEBUG("非法跨越分道线");
        AddExamFault(11, rtkTime);
        AddExamFault(30119, rtkTime);
    }
    if (newLineType == LINE_SOLID && CrashLineType != LINE_SOLID) {
        // 车辆行驶中骑轧车道中心实线或者车道边缘实线,不合格
        DEBUG("撞道路边缘线");
        AddExamFault(11, rtkTime);
        AddExamFault(30119, rtkTime);
    }
    if (newLineType == LINE_BOUNDARY && CrashLineType != LINE_BOUNDARY) {
        // 车辆越界,逃跑了,不合格
        DEBUG("车辆越界");
        AddExamFault(3, rtkTime);
        AddExamFault(30103, rtkTime);
    }
    if (newLineType == LINE_DOTTED || newLineType == LINE_HALF_SOLID_LEFT || newLineType == LINE_HALF_SOLID_RIGHT) {
@@ -896,7 +896,7 @@
                    DEBUG("长时间压虚线");
                    checkCrashGreenTimeout = 2;
                    // 长时间骑轧车道分界线行驶,不合格
                    AddExamFault(12, rtkTime);
                    AddExamFault(30120, rtkTime);
                }
            }
        } else {
@@ -935,7 +935,7 @@
                if (turnSignalStatus.value != LEFT_TURN_LIGHT) {
                    DEBUG("变调未打灯!!");
                    // 没打灯,不合格
                    AddExamFault(13, rtkTime);
                    AddExamFault(30121, rtkTime);
                } else if (TimeGetDiff(&crashGreenStartTime, &turnSignalStatus.time) <
                           examParam.turn_signal_min_advance) {
                    DEBUG("转向灯时间不足 %02d-%02d-%02d %02d:%02d:%02d.%03d  -> %02d-%02d-%02d %02d:%02d:%02d.%03d",
@@ -946,13 +946,13 @@
                          turnSignalStatus.time.mm, turnSignalStatus.time.ss, turnSignalStatus.time.mss * 10);
                    // 不足3秒,不合格
                    AddExamFault(14, rtkTime);
                    AddExamFault(30122, rtkTime);
                }
            } else {
                if (turnSignalStatus.value != RIGHT_TURN_LIGHT) {
                    DEBUG("变调未打灯!!");
                    // 没打灯,不合格
                    AddExamFault(13, rtkTime);
                    AddExamFault(30121, rtkTime);
                } else if (TimeGetDiff(&crashGreenStartTime, &turnSignalStatus.time) <
                        examParam.turn_signal_min_advance) {
                    DEBUG("转向灯时间不足 %02d-%02d-%02d %02d:%02d:%02d.%03d  -> %02d-%02d-%02d %02d:%02d:%02d.%03d",
@@ -962,13 +962,13 @@
                          turnSignalStatus.time.YY, turnSignalStatus.time.MM, turnSignalStatus.time.DD, turnSignalStatus.time.hh,
                          turnSignalStatus.time.mm, turnSignalStatus.time.ss, turnSignalStatus.time.mss * 10);
                    // 不足3秒,不合格
                    AddExamFault(14, rtkTime);
                    AddExamFault(30122, rtkTime);
                }
            }
            if (((ChangeLane.gain < 0 && gain < 0) || (ChangeLane.gain > 0 && gain > 0)) && TimeGetDiff(rtkTime, &ChangeLane.time) < examParam.continuous_change_lane_min_time) {
                DEBUG("连续变道");
                AddExamFault(15, rtkTime);
                AddExamFault(30125, rtkTime);
            }
            ChangeLane.gain = gain;
            ChangeLane.time = *rtkTime;
@@ -1304,7 +1304,7 @@
                occurOverSpeed = true;
                // 超速,不合格
                DEBUG("超速 %f", ConvertMs2KMh(speed));
                AddExamFault(10, rtkTime);
                AddExamFault(30118, rtkTime);
            }
        } else if (ConvertMs2KMh(speed) < examParam.road_max_speed - 5) {
            occurOverSpeed = false;
@@ -1316,7 +1316,7 @@
            if (!occurSecondBreak) {
                DEBUG("副刹车动作了");
                occurSecondBreak = true;
                AddExamFault(17, rtkTime);
                AddExamFault(30132, rtkTime);
            }
        } else {
            occurSecondBreak = false;
@@ -1329,7 +1329,7 @@
        if (currGear != GEAR_N && prevGear == GEAR_N) {
            // 一次换挡
            if (gearChange == currGear && TimeGetDiff(rtkTime, &gearChangeTimePoint) < D_SEC(5)) {
                AddExamFault(7, rtkTime);
                AddExamFault(30113, rtkTime);
            }
            gearChange = currGear;
@@ -1392,7 +1392,7 @@
                TimeGetDiff(rtkTime, &gearNSlideTimePoint) > examParam.gear_n_allow_time) {
                // 空档滑行超5秒,不合格
                DEBUG("挡位滑行,超过5秒");
                AddExamFault(8, rtkTime);
                AddExamFault(30114, rtkTime);
                GearNSlideStatus = 2;
            }
        } else if (GearNSlideStatus != 0) {
@@ -1409,7 +1409,7 @@
        if (gearErrorTime > examParam.gear_speed_error_cumulative_time) {
            // 累计15秒,挡位-车速不匹配,不合格
            DEBUG("挡位错误超过15秒");
            AddExamFault(6, rtkTime);
            AddExamFault(30112, rtkTime);
            gearErrorTime = 0;
        }
@@ -1429,7 +1429,7 @@
                if (slideNormalDistance) {
                    // 后滑,扣10分
                    AddExamFault(18, rtkTime);
                    AddExamFault(30202, rtkTime);
                    DEBUG("后滑超过10厘米, 但不超过30厘米");
                }
@@ -1447,7 +1447,7 @@
            if (TimeGetDiff(rtkTime, &stopTimepoint) >= CorrectPauseCriteria(examParam.road_pause_criteria) && !StopCarOnRedArea &&
                StopOnRedArea(RoadMap, car)) {
                // 停车超2秒,停在红区,不合格
                AddExamFault(16, rtkTime);
                AddExamFault(30128, rtkTime);
                DEBUG("禁停区停车");
                StopCarOnRedArea = true;
            }
@@ -1462,7 +1462,7 @@
                if (slideDistance > examParam.road_slide_red_distance && !slideLongDistance) {
                    // 后滑超过30厘米, 不合格
                    AddExamFault(5, rtkTime);
                    AddExamFault(30107, rtkTime);
                    DEBUG("后滑超过30厘米");
                    slideLongDistance = true;
                    slideNormalDistance = false;
@@ -1528,6 +1528,7 @@
            }
        }
    }
    ExitTarget(RoadMap, car, CarModelList, rtkTime);
    if (RoadMap.calibrate == 0) {
@@ -1552,7 +1553,7 @@
                if (!GetErrorLaneRpt(currExamMapIndex, stop_line_index)) {
                    DEBUG("不按规定车道标向行驶 %d: %d  期望 = %d guide = %d", currExamMapIndex,
                          stop_line_index, act, Lane.guide);
                    AddExamFault(9, rtkTime);
                    AddExamFault(30117, rtkTime);
                    SetErrorLaneRpt(currExamMapIndex, stop_line_index, true);
                }
            }
@@ -1568,7 +1569,9 @@
        road_end_point_t ep = NearbyRoadEndPoint(currExamMapIndex, RoadMap, car);
        // 提示路口怎么走
        HintCrossing(RoadMap, ep.road_index, ep.stop_line_index, ep.distance);
        if (forward == 1) {
            HintCrossing(RoadMap, ep.road_index, ep.stop_line_index, ep.distance);
        }
        double freeSepDis = SeparateLength(RoadMap, Lane, car);
@@ -1692,7 +1695,8 @@
                freeRunExceptDistance = 60.0;
            } else if (RoadExamStatus == ROAD_EXAM_ITEM_CAR_STOP) {
                // 考试结束
                MA_SendExamStatus(1, 1);
                MA_SendExamStatus(0, 0);
                PlayTTS("考试结束", NULL);
            } else {
                freeRunExceptDistance = 2;//250.0;
            }
@@ -1841,23 +1845,23 @@
                    if (turnSignalStatus.value != LEFT_TURN_LIGHT) {
                        DEBUG("变调未打灯!!");
                        // 没打灯,不合格
                        AddExamFault(13, rtkTime);
                        AddExamFault(30121, rtkTime);
                    } else if (TimeGetDiff(&beginTurnTime, &turnSignalStatus.time) <
                            examParam.turn_signal_min_advance) {
                        DEBUG("转向灯时间不足");
                        // 不足3秒,不合格
                        AddExamFault(14, rtkTime);
                        AddExamFault(30122, rtkTime);
                    }
                } else {
                    if (turnSignalStatus.value != RIGHT_TURN_LIGHT) {
                        DEBUG("变调未打灯!!");
                        // 没打灯,不合格
                        AddExamFault(13, rtkTime);
                        AddExamFault(30121, rtkTime);
                    } else if (TimeGetDiff(&beginTurnTime, &turnSignalStatus.time) <
                            examParam.turn_signal_min_advance) {
                        DEBUG("转向灯时间不足");
                        // 不足3秒,不合格
                        AddExamFault(14, rtkTime);
                        AddExamFault(30122, rtkTime);
                    }
                }
            } else if (turnTimeCnt > D_SEC(10)) {
@@ -1986,6 +1990,8 @@
        }
    }
//    DEBUG("检查触发点 道 %d 路 %d", RoadMap.examScheme[0].triggerLines[0].road, RoadMap.roads[index].id);
    for (int j = 0; j < RoadMap.examScheme[0].triggerLines.size(); ++j) {
        if (RoadMap.examScheme[0].triggerLines[j].road == RoadMap.roads[index].id) {
@@ -2098,7 +2104,7 @@
                TriggerDetect.insert(pair<int, trigger_detect_t>(j, up));
                DEBUG("观察子<%d> 加入 %f", j, MAX(dist1, dist2));
                DEBUG("观察子<%d> road_id %d 加入 (%f,%f)", j, RoadMap.roads[index].id, RoadMap.examScheme[0].triggerLines[j].points[0].X, RoadMap.examScheme[0].triggerLines[j].points[0].Y);
            }
        }
    }