fctom1215
2020-03-25 aef1984ccc48e81ab238d889327f85867ca0a973
修改加减挡操作.
4个文件已修改
97 ■■■■ 已修改文件
lib/src/main/cpp/native-lib.cpp 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
lib/src/main/cpp/test_items2/operate_gear.cpp 91 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lib/src/main/cpp/test_items2/operate_gear.h 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
lib/src/main/cpp/test_items2/road_exam.cpp 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
lib/src/main/cpp/native-lib.cpp
@@ -26,7 +26,7 @@
const int RTK_PLATFORM_PORT = 12125;
const uint8_t phone[] = {0x20,0x19,0x10,0x15,0x00,0x00,0x00,0x01};
const char *VIRTUAL_RTK_IP = "192.168.16.100";
const char *VIRTUAL_RTK_IP = "192.168.3.52";
const int VIRTUAL_RTK_PORT = 9001;
static pthread_mutex_t tts_mutex = PTHREAD_MUTEX_INITIALIZER;
lib/src/main/cpp/test_items2/operate_gear.cpp
@@ -11,33 +11,39 @@
#define DEBUG(fmt, args...)     LOGD("<operate_gear> <%s>: " fmt, __func__, ##args)
static struct RtkTime currRtkTime;
static const int MAX_READ_GEAR = 6;
static int opGear;
static bool testing;
static int examTtsSeq = 0;
static int expectGear;
static int upDownShift;
static bool checkError;
static int readGearCnt;
static int opCnt = 0;
enum {
    START_GEAR,
    WAIT_TTS_END,
    TTS_END,
    WAITE_CHECK,
    CHECKED
    SEND_OP_INS,
    CHECK_OP
};
static void CheckGear(union sigval sig);
void StartOperateGearExam(int index, LIST_ROAD_MAP &RoadMapList) {
void StartOperateGearExam(int index, LIST_ROAD_MAP &RoadMapList, const struct RtkTime *rtkTime) {
    if (index == -1)
        return;
    DEBUG("开始加减挡操作");
    testing = true;
    opGear = START_GEAR;
    checkError = false;
    opGear = SEND_OP_INS;
    readGearCnt = 0;
    upDownShift = 0;
    opCnt = 0;
    currRtkTime = *rtkTime;
    AppTimer_delete(CheckGear);
    AppTimer_add(CheckGear, 100);
}
void TerminateOperateGearExam(void)
@@ -45,22 +51,19 @@
    AppTimer_delete(CheckGear);
}
int ExecuteOperateGearExam(int index, LIST_ROAD_MAP &RoadMapList, const car_model *car,
                       LIST_CAR_MODEL &CarModelList, double speed, int moveDirect, const struct RtkTime *rtkTime) {
    DEBUG("opGear %d", opGear);
static void CheckGear(union sigval sig) {
    AppTimer_delete(CheckGear);
    if (opGear == START_GEAR) {
        int currGear = ReadCarStatus(GEAR);
        switch (currGear) {
    if (opGear == SEND_OP_INS) {
        readGearCnt++;
        switch (ReadCarStatus(GEAR)) {
            case GEAR_1: {
                opGear = WAIT_TTS_END;
                upDownShift = 1;
                expectGear = GEAR_2;
                examTtsSeq = PlayTTS("请加到二挡");
                break;
            }
            case GEAR_2: {
                opGear = WAIT_TTS_END;
                if (upDownShift == 0) {
                    upDownShift = 1;
                    expectGear = GEAR_3;
@@ -77,7 +80,6 @@
                break;
            }
            case GEAR_3: {
                opGear = WAIT_TTS_END;
                if (upDownShift == 0) {
                    upDownShift = -1;
                    expectGear = GEAR_2;
@@ -94,7 +96,6 @@
                break;
            }
            case GEAR_4: {
                opGear = WAIT_TTS_END;
                if (upDownShift == 0) {
                    upDownShift = -1;
                    expectGear = GEAR_3;
@@ -111,7 +112,6 @@
                break;
            }
            case GEAR_5: {
                opGear = WAIT_TTS_END;
                upDownShift = -1;
                expectGear = GEAR_4;
                examTtsSeq = PlayTTS("请减到四挡");
@@ -119,51 +119,46 @@
            }
            default:
                // 未读到有效挡位,继续尝试
                if (readGearCnt > MAX_READ_GEAR) {
                    DEBUG("总是读到空挡或无效挡位");
                    AddExamFault(31, &currRtkTime);
                    testing = false;
                } else {
                    AppTimer_add(CheckGear, 500);
                }
                break;
        }
    } else if (opGear == WAIT_TTS_END) {
    } else if (opGear == TTS_END) {
    } else {
        DEBUG("检测挡位 %d", expectGear);
        opCnt++;
        opGear = WAITE_CHECK;
        checkError = false;
        AppTimer_delete(CheckGear);
        AppTimer_add(CheckGear, D_SEC(5));
    } else if (opGear == CHECKED) {
        if (checkError) {
        // 检查挡位
        if (ReadCarStatus(GEAR) != expectGear) {
            // 未按指令操作挡位,不合格
            DEBUG("未按指令操作挡位");
            AddExamFault(31, rtkTime);
        }
            AddExamFault(31, &currRtkTime);
        if (opCnt < 2) {
            opGear = START_GEAR;
            testing = false;
        } else if (opCnt < 2) {
            opGear = SEND_OP_INS;
            AppTimer_add(CheckGear, 500);
        } else {
            testing = false;
        }
    }
}
int ExecuteOperateGearExam(int index, LIST_ROAD_MAP &RoadMapList, const car_model *car,
                       LIST_CAR_MODEL &CarModelList, double speed, int moveDirect, const struct RtkTime *rtkTime) {
    currRtkTime = *rtkTime;
    return testing ? index : -1;
}
void OperateGearTTSDone(int id)
{
    DEBUG("OperateGearTTSDone %d", id);
    DEBUG("升降挡指令发出完毕 %d", id);
    // 等语音播报完毕后计时
    if (id == examTtsSeq) {
        opGear = TTS_END;
        opGear = CHECK_OP;
        AppTimer_add(CheckGear, D_SEC(7));
    }
}
static void CheckGear(union sigval sig)
{
    AppTimer_delete(CheckGear);
    DEBUG("检测挡位 %d", expectGear);
    // 检查挡位
    if (ReadCarStatus(GEAR) != expectGear) {
        // 不执行指定挡位,不合格
        checkError = true;
    }
    opGear = CHECKED;
}
lib/src/main/cpp/test_items2/operate_gear.h
@@ -7,7 +7,7 @@
#include "../driver_test.h"
void StartOperateGearExam(int index, LIST_ROAD_MAP &RoadMapList);
void StartOperateGearExam(int index, LIST_ROAD_MAP &RoadMapList, const struct RtkTime *rtkTime);
int ExecuteOperateGearExam(int index, LIST_ROAD_MAP &RoadMapList, const car_model *car,
                           LIST_CAR_MODEL &CarModelList, double speed, int moveDirect, const struct RtkTime *rtkTime);
void OperateGearTTSDone(int id);
lib/src/main/cpp/test_items2/road_exam.cpp
@@ -518,7 +518,7 @@
            } else if (RoadMapList[currExamMapIndex].type == STOP_CAR_MAP) {
                StartStopCarExam(currExamMapIndex, RoadMapList);
            } else if (RoadMapList[currExamMapIndex].type == OP_GEAER_MAP) {
                StartOperateGearExam(currExamMapIndex, RoadMapList);
                StartOperateGearExam(currExamMapIndex, RoadMapList, rtkTime);
            }
        }
    } else if (startCar == START_CAR_DONE) {