From 2d6a9d02c77d7e08d4f18ee87d6e3d337b949f47 Mon Sep 17 00:00:00 2001
From: yy1717 <fctom1215@outlook.com>
Date: 星期四, 20 八月 2020 19:35:17 +0800
Subject: [PATCH] 坐标

---
 lib/src/main/cpp/test_items2/operate_gear.cpp |  190 ++++++++++++++++++++---------------------------
 1 files changed, 81 insertions(+), 109 deletions(-)

diff --git a/lib/src/main/cpp/test_items2/operate_gear.cpp b/lib/src/main/cpp/test_items2/operate_gear.cpp
index f40b9db..564cbee 100644
--- a/lib/src/main/cpp/test_items2/operate_gear.cpp
+++ b/lib/src/main/cpp/test_items2/operate_gear.cpp
@@ -8,155 +8,127 @@
 #include "../native-lib.h"
 #include "../test_common/car_sensor.h"
 #include "../jni_log.h"
+#include "../test_common/odo_graph.h"
+#include "road_exam.h"
 
 #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 int readGearCnt;
-static int opCnt = 0;
 
-enum {
-    SEND_OP_INS,
-    CHECK_OP
-};
+static int setup;
 
-static void CheckGear(union sigval sig);
+static double maxMoveDistance;
+static double gearMoveDistance;
 
-void StartOperateGearExam(const struct RtkTime *rtkTime) {
+static void TtsBack(int seq)
+{
+    maxMoveDistance = ReadOdo();
+    setup = 1;
+}
+
+void StartOperateGearExam(void) {
     DEBUG("寮�濮嬪姞鍑忔尅鎿嶄綔");
 
-    testing = true;
-    opGear = SEND_OP_INS;
-    readGearCnt = 0;
-    upDownShift = 0;
-    opCnt = 0;
-    currRtkTime = *rtkTime;
+    setup = 0;
 
-    AppTimer_delete(CheckGear);
-    AppTimer_add(CheckGear, 100);
+    PlayTTS("璇疯繘琛屽姞鍑忔尅浣嶆搷浣�", TtsBack);
 }
 
-void TerminateOperateGearExam(void)
+bool TestOperateGear(const struct RtkTime *rtkTime)
 {
-    AppTimer_delete(CheckGear);
-}
+    car_sensor_value_t sensor = ReadCarSensorValue(GEAR);
 
-static void CheckGear(union sigval sig) {
-    AppTimer_delete(CheckGear);
+    if (sensor.name != GEAR)
+        return false;
 
-    if (opGear == SEND_OP_INS) {
-        readGearCnt++;
-        switch (ReadCarStatus(GEAR)) {
+    if (setup == 0) {
+        return true;
+    } else if (setup == 1) {
+        switch (sensor.value) {
             case GEAR_1: {
-                upDownShift = 1;
                 expectGear = GEAR_2;
-                examTtsSeq = PlayTTS("璇峰姞鍒颁簩鎸�");
+                upDownShift = 1;
+                PlayTTS("璇峰姞鍒颁簩鎸�", NULL);
+                setup = 2;
                 break;
             }
             case GEAR_2: {
-                if (upDownShift == 0) {
-                    upDownShift = 1;
-                    expectGear = GEAR_3;
-                    examTtsSeq = PlayTTS("璇峰姞鍒颁笁鎸�");
-                } else if (upDownShift == 1) {
-                    upDownShift = -1;
-                    expectGear = GEAR_1;
-                    examTtsSeq = PlayTTS("璇峰噺鍒颁竴鎸�");
-                } else {
-                    upDownShift = 1;
-                    expectGear = GEAR_3;
-                    examTtsSeq = PlayTTS("璇峰姞鍒颁笁鎸�");
-                }
+                expectGear = GEAR_3;
+                upDownShift = 1;
+                PlayTTS("璇峰姞鍒颁笁鎸�", NULL);
+                setup = 2;
                 break;
             }
             case GEAR_3: {
-                if (upDownShift == 0) {
-                    upDownShift = -1;
-                    expectGear = GEAR_2;
-                    examTtsSeq = PlayTTS("璇峰噺鍒颁簩鎸�");
-                } else if (upDownShift == 1) {
-                    upDownShift = -1;
-                    expectGear = GEAR_2;
-                    examTtsSeq = PlayTTS("璇峰噺鍒颁簩鎸�");
-                } else {
-                    upDownShift = 1;
-                    expectGear = GEAR_4;
-                    examTtsSeq = PlayTTS("璇峰姞鍒板洓鎸�");
-                }
+                expectGear = GEAR_2;
+                upDownShift = -1;
+                PlayTTS("璇峰噺鍒颁簩鎸�", NULL);
+                setup = 2;
                 break;
             }
             case GEAR_4: {
-                if (upDownShift == 0) {
-                    upDownShift = -1;
-                    expectGear = GEAR_3;
-                    examTtsSeq = PlayTTS("璇峰噺鍒颁笁鎸�");
-                } else if (upDownShift == 1) {
-                    upDownShift = -1;
-                    expectGear = GEAR_3;
-                    examTtsSeq = PlayTTS("璇峰噺鍒颁笁鎸�");
-                } else {
-                    upDownShift = 1;
-                    expectGear = GEAR_5;
-                    examTtsSeq = PlayTTS("璇峰姞鍒颁簲鎸�");
-                }
+                expectGear = GEAR_3;
+                upDownShift = -1;
+                PlayTTS("璇峰噺鍒颁笁鎸�", NULL);
+                setup = 2;
                 break;
             }
             case GEAR_5: {
                 upDownShift = -1;
                 expectGear = GEAR_4;
-                examTtsSeq = PlayTTS("璇峰噺鍒板洓鎸�");
+                PlayTTS("璇峰噺鍒板洓鎸�", NULL);
+                setup = 2;
                 break;
             }
-            default:
-                // 鏈鍒版湁鏁堟尅浣嶏紝缁х画灏濊瘯
-                if (readGearCnt > MAX_READ_GEAR) {
-                    DEBUG("鎬绘槸璇诲埌绌烘尅鎴栨棤鏁堟尅浣�");
-                    AddExamFault(31, &currRtkTime);
-                    testing = false;
-                } else {
-                    AppTimer_add(CheckGear, 500);
-                }
-                break;
         }
-    } else {
-        DEBUG("妫�娴嬫尅浣� %d", expectGear);
-        opCnt++;
-        // 妫�鏌ユ尅浣�
-        if (ReadCarStatus(GEAR) != expectGear) {
+    } else if (setup == 2) {
+        if (sensor.value == GEAR_N) {
+
+        } else if (sensor.value != expectGear) {
             // 鏈寜鎸囦护鎿嶄綔鎸′綅锛屼笉鍚堟牸
             DEBUG("鏈寜鎸囦护鎿嶄綔鎸′綅");
-            AddExamFault(31, &currRtkTime);
-
-            testing = false;
-        } else if (opCnt < 2) {
-            opGear = SEND_OP_INS;
-            readGearCnt = 0;
-            AppTimer_add(CheckGear, 500);
+            AddExamFault(31, rtkTime);
+            return false;
         } else {
-            testing = false;
+            // 鍦ㄦ鎸′綅琛岄┒涓�瀹氳窛绂伙紝鍐嶆墽琛屼笅涓�涓�
+            gearMoveDistance = ReadOdo();
+            setup = 3;
+        }
+    } else if (setup == 3) {
+        if (ReadOdo() - gearMoveDistance > 10) {
+            setup = 4;
+            char buff[128];
+            expectGear += 0 - upDownShift;
+            sprintf(buff, "璇�%s鍒�%d鎸�", upDownShift > 0 ? "鍑�": "鍔�", expectGear - GEAR_N);
+        }
+    } 
+    else if (setup == 4) {
+        if (sensor.value == GEAR_N) {
+
+        } else if (sensor.value != expectGear) {
+            // 鏈寜鎸囦护鎿嶄綔鎸′綅锛屼笉鍚堟牸
+            DEBUG("鏈寜鎸囦护鎿嶄綔鎸′綅");
+            AddExamFault(31, rtkTime);
+            return false;
+        } else {
+            // 鍦ㄦ鎸′綅琛岄┒涓�瀹氳窛绂伙紝鍐嶆墽琛屼笅涓�涓�
+            gearMoveDistance = ReadOdo();
+            setup = 5;
+        }
+    } else if (setup == 5) {
+        if (ReadOdo() - gearMoveDistance > 10) {
+            PlayTTS("鍔犲噺鎸′綅鎿嶄綔缁撴潫", NULL);
+            return false;
         }
     }
-}
 
-int ExecuteOperateGearExam(const struct RtkTime *rtkTime) {
-    currRtkTime = *rtkTime;
-    return testing ? 1 : -1;
-}
-
-void OperateGearTTSDone(int id)
-{
-    // 绛夎闊虫挱鎶ュ畬姣曞悗璁℃椂
-    if (id == examTtsSeq) {
-        DEBUG("鍗囬檷鎸℃寚浠ゅ彂鍑哄畬姣� %d", id);
-        opGear = CHECK_OP;
-        AppTimer_add(CheckGear, D_SEC(7));
+    if (ReadOdo() - maxMoveDistance > 120) {
+        // 鏈寜鎸囦护鎿嶄綔鎸′綅锛屼笉鍚堟牸
+        DEBUG("鏈寜鎸囦护鎿嶄綔鎸′綅");
+        AddExamFault(31, rtkTime);
+        return false;
     }
+
+    return true;
 }

--
Gitblit v1.8.0