fctom1215
2020-02-12 7b6dd5603277ac8fddba735c456f99d4c07e2e9b
lib/src/main/cpp/test_items/park_edge.cpp
@@ -20,6 +20,7 @@
const int PARK_TIMEOUT = 90;
const uint32_t STOP_CAR_TIME = D_SEC(2);
static bool reportExamTimeout;
static uint64_t stopTimepoint = 0;
static bool occurCrashRedLine1, occurCrashRedLine2;
static int prevMoveStatus, storeMoveStatusBeforeStop;
@@ -31,10 +32,12 @@
static bool CrashRedLine2(const Polygon *map, const car_model *car);
static bool EnterParking(const Polygon *map, const car_model *car);
static bool ExitParkArea(const Polygon *map, const car_model *car);
static bool ExitParkArea2(const Polygon *map, const car_model *car);
void StartParkEdge(int moveStatus, const struct RtkTime *rtkTime)
{
    occurCrashRedLine1 = occurCrashRedLine2 = false;        // 这个科目规定特殊点,发生一次扣10分,而不直接淘汰
    reportExamTimeout = false;
    prevMoveStatus = moveStatus;
    parkSuccess = false;
@@ -74,25 +77,23 @@
        occurCrashRedLine2 = false;
    }
    if (ExitParkArea(map, car)) {
    if (ExitParkArea(map, car) || ExitParkArea2(map, car)) {
        if (!parkSuccess || !occurMoveBack) {
            // 直接驶离测试区,认为移库不入
            AddExamFault(21, rtkTime);
            DEBUG("直接驶离测试区,移库不入");
            status = -1;
        } else {
            status = 1;
        }
        status = 1;
    }
    if (occurMoveBack) {
        uint32_t tp = TimeMakeComposite(2000 + rtkTime->YY, rtkTime->MM, rtkTime->DD, rtkTime->hh, rtkTime->mm, rtkTime->ss);
        if (tp - moveBackTimePoint >= PARK_TIMEOUT) {
        if (!reportExamTimeout && tp - moveBackTimePoint >= PARK_TIMEOUT) {
            // 超时90秒,不合格
            AddExamFault(22, rtkTime);
            reportExamTimeout = true;
            DEBUG("移库90秒超时");
            status = -1;
        }
    }
@@ -129,7 +130,6 @@
                        // 停止后,车身出线,不合格
                        AddExamFault(21, rtkTime);
                        DEBUG("移库不入");
                        status = -1;
                    }
                    // 在这里检查转向灯状态
@@ -254,3 +254,25 @@
    }
    return true;
}
static bool ExitParkArea2(const Polygon *map, const car_model *car)
{
// 全车都需不在地图中
    bool ret = false;
    Polygon carBody;
    carBody.num = car->bodyNum;
    carBody.point = (PointF *)malloc(carBody.num * sizeof(PointF));
    for (int i = 0; i < carBody.num; ++i) {
        carBody.point[i] = car->carXY[car->body[i]];
    }
    if (IntersectionOf(&carBody, map) == GM_None) {
        ret = true;
    }
    free(carBody.point);
    return ret;
}