fctom1215
2020-03-18 b3608d75b6dd9d74aa1a71e1a2ef2a970e6a050c
挡位匹配.
5个文件已修改
95 ■■■■■ 已修改文件
lib/src/main/cpp/test_common/car_sensor.h 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lib/src/main/cpp/test_items/stop_and_start.cpp 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lib/src/main/cpp/test_items2/road_exam.cpp 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lib/src/main/cpp/utils/xconvert.cpp 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lib/src/main/cpp/utils/xconvert.h 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lib/src/main/cpp/test_common/car_sensor.h
@@ -19,7 +19,7 @@
    MAIN_BEAM_LAMP,
    SEATBELT,
    ENGINE_START,
    CAR_STATUS_END
    CAR_STATUS_END              //////////////
};
enum {
@@ -35,7 +35,14 @@
    FLASH_BEAM_LIGHT,
    FOG_LIGHT,
    INSERT_SEATBELT,
    ENGINE_START_ACTIVE
    ENGINE_START_ACTIVE,
    SHIFT_N,
    SHIFT_R,
    SHIFT_1,
    SHIFT_2,
    SHIFT_3,
    SHIFT_4,
    SHIFT_5
};
void CarSensorInit(void);
lib/src/main/cpp/test_items/stop_and_start.cpp
@@ -28,7 +28,6 @@
static bool testing = false;
static double slideDistance;
static PointF stopPoint;
static int prevMoveDirect;
@@ -50,7 +49,6 @@
{
    DEBUG("进入坡起项目");
    testing = true;
    slideDistance = 0.0;
    prevMoveDirect = moveDirect;
@@ -134,9 +132,9 @@
    if (stopCar) {
        if (IntersectionOfLine(map->point[4], stopPoint, car->carXY[car->axial[AXIAL_FRONT]]) == 1) {
            // 发生后滑
            slideDistance = DistanceOf(stopPoint, car->carXY[car->axial[AXIAL_FRONT]]);
            double slideDistance = DistanceOf(stopPoint, car->carXY[car->axial[AXIAL_FRONT]]);
            if (slideLongDistance > SLIDE_DISTANCE_THRESHOLD_YELLOW) {
            if (slideDistance > SLIDE_DISTANCE_THRESHOLD_YELLOW) {
                slideNormalDistance = true;
            }
lib/src/main/cpp/test_items2/road_exam.cpp
@@ -22,6 +22,8 @@
static const int TURN_THRESHOLD = 10;
static const int TURN_CHECK_INTERVAL = D_SEC(1);
const double SLIDE_DISTANCE_THRESHOLD_RED = 0.3;
const double SLIDE_DISTANCE_THRESHOLD_YELLOW = 0.1;
static bool occurCrashRedLine;
static bool occurCrashGreenLine;
@@ -36,6 +38,10 @@
static bool reportStopCarOnRedArea;
static PointF stopPoint;
static bool slideLongDistance;
static bool slideNormalDistance;
static bool occurSlide;
static struct drive_timer {
    int hour;
    int min;
@@ -49,6 +55,7 @@
static const uint32_t TURN_SIGNAL_LAMP_ADVANCE = D_SEC(3);
static const double MAX_SPEED = 40.0 * 1000.0 / 3600.0;
static const int SPEED_SHIFT_TABLE[][2] = {{0, 20}, {5, 30}, {15, 40}, {25, 10000}, {35, 10000}};
static void Rtk2DirveTimer(struct drive_timer &tm, const struct RtkTime *rtkTime);
static char isTurn(int currYaw, int prevYaw);
@@ -71,6 +78,9 @@
    prevMoveDirect = 0;
    reportStopCarOnRedArea = false;
    occurSlide = false;
    slideLongDistance = false;
    slideNormalDistance = false;
}
void TestRoadGeneral(LIST_ROAD_MAP &RoadMapList, const car_model *car, LIST_CAR_MODEL &CarModelList, double speed, int moveDirect, const struct RtkTime *rtkTime)
@@ -85,14 +95,40 @@
        occurOverSpeed = false;
    }
    // 挡位匹配检测
    switch (ReadCarStatus(SHIFT)) {
        case SHIFT_N:
            if (moveDirect != 0) {
            }
            break;
        case SHIFT_1:
            if (ConvertMs2KMs(speed) < SPEED_SHIFT_TABLE[0][0] || ConvertMs2KMs(speed) > SPEED_SHIFT_TABLE[0][1]) {
            }
            break;
        case SHIFT_2:
            break;
        case SHIFT_3:
            break;
        case SHIFT_4:
            break;
        case SHIFT_5:
            break;
        default:break;
    }
    // 起步后滑
    if (moveDirect != prevMoveDirect) {
        if (moveDirect == 0) {
            stopTimepoint = TimeMakeComposite(rtkTime->hh, rtkTime->mm, rtkTime->ss, rtkTime->mss*10);
            reportStopCarOnRedArea = false;
            DEBUG("停车了 %d %d %d %d %d %d %d", rtkTime->YY, rtkTime->MM, rtkTime->DD, rtkTime->hh, rtkTime->mm, rtkTime->ss, rtkTime->mss);
        } else if (moveDirect == -1) {
        } else if (moveDirect == -1 && prevMoveDirect == 0) {
            DEBUG("开始后滑");
            stopPoint = car->basePoint;
            occurSlide = true;
        }
        prevMoveDirect = moveDirect;
    } else if (moveDirect == 0) {
@@ -104,8 +140,31 @@
            DEBUG("中途停车");
            reportStopCarOnRedArea = true;
        }
    } else if (moveDirect == -1) {
        if (occurSlide) {
            double slideDistance = DistanceOf(stopPoint, car->basePoint);
        stopPoint = car->basePoint;
            if (slideDistance > SLIDE_DISTANCE_THRESHOLD_YELLOW) {
                slideNormalDistance = true;
            }
            if (slideDistance > SLIDE_DISTANCE_THRESHOLD_RED && !slideLongDistance) {
                // 后滑超过30厘米, 不合格
                AddExamFault(5, rtkTime);
                DEBUG("后滑超过30厘米");
                slideLongDistance = true;
            }
        }
    } else {
        if (slideNormalDistance) {
            // 后滑,扣10分
            AddExamFault(18, rtkTime);
            DEBUG("后滑超过10厘米, 但不超过30厘米");
        }
        slideNormalDistance = false;
        slideLongDistance = false;
        occurSlide = false;
    }
    switch (ReadCarStatus(TURN_SIGNAL_LAMP)) {
lib/src/main/cpp/utils/xconvert.cpp
@@ -18,6 +18,16 @@
#define DAYS_PER_WEEK       7
#define DAYS_PER_YEAR       365
double ConvertKMh2Ms(int kmh)
{
    return ((double)kmh) * 1000.0 / 3600.0;
}
double ConvertMs2KMs(double ms)
{
    return ms * 3600.0 / 1000.0;
}
void ConvertPhoneNum(uint8_t *dst, int length, const char *src)
{
    int p = length - 1;
lib/src/main/cpp/utils/xconvert.h
@@ -7,6 +7,9 @@
#include <cstdint>
double ConvertKMh2Ms(int kmh);
double ConvertMs2KMs(double ms);
void ConvertPhoneNum(uint8_t *dst, int length, const char *src);
void ConvertHex2String(char *str, const uint8_t *hex, int length);
void ConvertString2Hex(uint8_t *hex, int length, const char *str);