fctom1215
2020-03-15 e021e593c56c3338ddddd35d7817ef6cd2fa504b
lib/src/main/cpp/test_items2/dummy_light.cpp
@@ -7,46 +7,119 @@
#include "dummy_light.h"
#include "../native-lib.h"
#include "../jni_log.h"
#include "../test_common/car_sensor.h"
#define DEBUG(fmt, args...)     LOGD("<dummy_light> <%s>: " fmt, __func__, ##args)
static struct RtkTime currRtkTime;
static struct dummy_light_exam *content;
static int contentNum;
static int currContent;
static int checkCnt;
static bool turn_left_active, flash_beam_active;
static void DummyLightCheckLight(union sigval sig);
static void DummyLightCheckActive(union sigval sig);
static void ExamDummyLight(union sigval sig);
void StartDummyLightExam(struct dummy_light_exam *ptr, int num)
void StartDummyLightExam(struct dummy_light_exam *ptr, int num, const struct RtkTime* rtkTime)
{
    DEBUG("StartDummyLightExam");
    content = ptr;
    contentNum = num;
    currContent = 0;
    currRtkTime = *rtkTime;
    AppTimer_delete(DummyLightCheckLight);
    AppTimer_delete(DummyLightCheckActive);
    AppTimer_delete(ExamDummyLight);
    AppTimer_add(ExamDummyLight, D_SEC(2));
}
int ExecuteDummyLightExam(const struct RtkTime* rtkTime)
{
    currRtkTime = *rtkTime;
    return (currContent == contentNum)?2:1;
}
void DummyLightTTSDone(int id)
{
    DEBUG("DummyLightTTSDone %d", id);
    // 等语音播报完毕后计时
    if (id == 100) {
        AppTimer_add(DummyLightCheckLight, D_SEC(3), id);
        AppTimer_add(DummyLightCheckActive, D_SEC(3), id);
    } else if (id == 101) {
        AppTimer_add(DummyLightCheckLight, D_SEC(1), id);
        AppTimer_add(DummyLightCheckActive, D_SEC(1), id);
    } else if (id == OVERTAKE) {
        checkCnt = 0;
        turn_left_active = flash_beam_active = false;
        AppTimer_add(DummyLightCheckActive, D_SEC(1), id);
    } else {
        AppTimer_add(DummyLightCheckLight, D_SEC(5), id);
        AppTimer_add(DummyLightCheckActive, D_SEC(5), id);
    }
}
static void DummyLightCheckLight(union sigval sig)
static void DummyLightCheckActive(union sigval sig)
{
    AppTimer_delete(DummyLightCheckLight);
    AppTimer_delete(DummyLightCheckActive);
    DEBUG("DummyLightCheckLight %d", sig.sival_int);
    DEBUG("DummyLightCheckActive %d", sig.sival_int);
    switch (sig.sival_int) {
        case DRIVE_AT_NIGHT:
        case TURN_ON_MAIN_BEAM_LAMP:
            if (ReadCarStatus(MAIN_BEAM_LAMP) != MAIN_BEAM_LIGHT) {
                AddExamFault(58, &currRtkTime);
            }
            break;
        case TURN_ON_DIPPED_LAMP:
        case BRIDGE_MEET_CAR:
        case FOLLOW_CAR:
            if (ReadCarStatus(DIPPED_BEAM_LAMP) != DIPPED_BEAM_LIGHT) {
                AddExamFault(58, &currRtkTime);
            }
            break;
        case DRIVE_IN_FOG:
            if (ReadCarStatus(FOG_LAMP) != FOG_LIGHT) {
                AddExamFault(58, &currRtkTime);
            }
            break;
        case THROUGE_CROSSWALK:
        case THROUGE_CURVE:
        case THROUGE_CROSSROADS:
            if (ReadCarStatus(FLASH_BEAM_LAMP) != FLASH_BEAM_LIGHT) {
                AddExamFault(58, &currRtkTime);
            }
            break;
        case OVERTAKE:
            if (++checkCnt < 5) {
                if (!flash_beam_active) {
                    if (ReadCarStatus(TURN_SIGNAL_LAMP) == LEFT_TURN_LIGHT) {
                        turn_left_active = true;
                    }
                }
                if (turn_left_active) {
                    if (ReadCarStatus(FLASH_BEAM_LAMP) == FLASH_BEAM_LIGHT) {
                        flash_beam_active = true;
                    }
                }
                AppTimer_add(DummyLightCheckActive, D_SEC(1), OVERTAKE);
                return;
            } else {
                if (!flash_beam_active || !turn_left_active) {
                    AddExamFault(58, &currRtkTime);
                }
            }
            break;
        case CAR_FAULT:
        case PARK_CAR_TEMP:
            if (ReadCarStatus(TURN_SIGNAL_LAMP) != HAZARD_LIGHTS) {
                AddExamFault(58, &currRtkTime);
            }
            break;
        default:
            break;
    }
    AppTimer_add(ExamDummyLight, D_SEC(1));
}
static void ExamDummyLight(union sigval sig)
@@ -58,6 +131,5 @@
        PlayTTS(content[currContent].tts, content[currContent].item);
        currContent++;
        AppTimer_add(ExamDummyLight, D_SEC(5));
    }
}