From e021e593c56c3338ddddd35d7817ef6cd2fa504b Mon Sep 17 00:00:00 2001
From: fctom1215 <fctom1215@outlook.com>
Date: 星期日, 15 三月 2020 22:55:22 +0800
Subject: [PATCH] 完善车辆信号测试。

---
 lib/src/main/cpp/test_items2/dummy_light.cpp |   94 +++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 83 insertions(+), 11 deletions(-)

diff --git a/lib/src/main/cpp/test_items2/dummy_light.cpp b/lib/src/main/cpp/test_items2/dummy_light.cpp
index c25c199..83d3ee1 100644
--- a/lib/src/main/cpp/test_items2/dummy_light.cpp
+++ b/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));
     }
 }

--
Gitblit v1.8.0