From 96ff5ab3c5c7d83d0444c422023f0d21521d4adc Mon Sep 17 00:00:00 2001
From: fctom1215 <fctom1215@outlook.com>
Date: 星期一, 02 三月 2020 22:56:32 +0800
Subject: [PATCH] 角度修正。

---
 lib/src/main/cpp/test_items/driving_curve.cpp |   96 +++++++++++++++++++++++++++---------------------
 lib/src/main/cpp/rtk_module/rtk.cpp           |    2 
 lib/src/main/cpp/test_items/driving_curve.h   |    6 +-
 3 files changed, 58 insertions(+), 46 deletions(-)

diff --git a/lib/src/main/cpp/rtk_module/rtk.cpp b/lib/src/main/cpp/rtk_module/rtk.cpp
index bb5e332..cda71de 100644
--- a/lib/src/main/cpp/rtk_module/rtk.cpp
+++ b/lib/src/main/cpp/rtk_module/rtk.cpp
@@ -202,7 +202,7 @@
         }*/
 
         if (RxBufLen > 0) {
-#if 0
+#if 1
             const uint8_t *ptr = parseGPS(RxBuf, RxBuf + RxBufLen);
             if(ptr != RxBuf) {
                 memcpy(RxBuf, ptr, RxBufLen - (ptr - RxBuf));
diff --git a/lib/src/main/cpp/test_items/driving_curve.cpp b/lib/src/main/cpp/test_items/driving_curve.cpp
index c924ced..b5294a1 100644
--- a/lib/src/main/cpp/test_items/driving_curve.cpp
+++ b/lib/src/main/cpp/test_items/driving_curve.cpp
@@ -3,12 +3,16 @@
 //
 
 #include "driving_curve.h"
+#include "../jni_log.h"
 #include "../driver_test.h"
 #include "../common/apptimer.h"
+#include "../utils/xconvert.h"
 
 #include <vector>
 
 using namespace std;
+
+#define DEBUG(fmt, args...)     LOGD("<driving_curve> <%s>: " fmt, __func__, ##args)
 
 enum {
     DRIVING_ON_CURVE
@@ -16,62 +20,70 @@
 
 const uint32_t STOP_CAR_TIME = D_SEC(2);
 
-static bool carStopEvent = false;
-static bool DCTesting = false;
-static int currTarget;
+static bool testing = false;
 static uint32_t stopTimepoint = 0;
+
+static bool reportStopCarTimeout;
+static int prevMoveDirect;
+static bool crashRedLine;
+static struct {
+    int leftStart;
+    int leftEnd;
+    int rightStart;
+    int rightEnd;
+} calcZone;
 
 static bool CrashRedLine(const Polygon *left, const Polygon *right, const car_model_cache_t *car);
 static bool ExitTestArea(const Polygon *left, const Polygon *right, const car_model_cache_t *car);
 
-void StartDrivingCurve(void)
+void StartDrivingCurve(int moveDirect, const struct RtkTime *rtkTime)
 {
-    DCTesting = true;
-    carStopEvent = false;
-    currTarget = DRIVING_ON_CURVE;
+    DEBUG("杩涘叆鏇茬嚎琛岄┒鍦哄湴");
+
+    testing = true;
+
+    prevMoveDirect = moveDirect;
+    if (moveDirect == 0) {
+        stopTimepoint = TimeMakeComposite(rtkTime->hh, rtkTime->mm, rtkTime->ss, rtkTime->mss*10);
+    }
+    reportStopCarTimeout = false;
+    crashRedLine = false;
+
+    calcZone.leftStart = calcZone.leftEnd = calcZone.rightStart = calcZone.rightEnd = -1;
 }
 
-void StopDrivingCurve(void)
+int TestDrivingCurve(const Polygon *map, const Polygon *map2, const car_model *car, const car_model *carPrev, double speed, int moveDirect, const struct RtkTime *rtkTime)
 {
-    DCTesting = false;
-}
+    Line start, end;
+    Polygon zone;
 
-int TestDrivingCurve(vector<int>&err, const Polygon *map, const Polygon *map2, const car_model_cache_t *car, double speed, int run_status)
-{
-    int status = 0;
-
-    if (!DCTesting)
-        return -2;
-
-    if (currTarget == DRIVING_ON_CURVE) {
-        if (CrashRedLine(map, map2, car)) {
-            // 杞﹁疆鍘嬬嚎
-            err.push_back(27);
-            status = -1;
-        }
-
-        if (ExitTestArea(map, map2, car)) {
-            // 娴嬭瘯瀹屾垚
-            status = 1;
-        }
-
-        if (run_status != 0) {
-            if (carStopEvent && AppTimer_GetTickCount() - stopTimepoint > D_SEC(2)) {
-                // 涓�斿仠杞�
-                err.push_back(28);
-            }
-            carStopEvent = false;
-        } else {
-            carStopEvent = true;
-            stopTimepoint = AppTimer_GetTickCount();
-        }
+    if (calcZone.leftStart == -1) {
+        calcZone.leftStart = 0;
+    }
+    if (calcZone.rightStart == -1) {
+        calcZone.rightStart = 0;
     }
 
-    if (status != 0) {
-        StopDrivingCurve();
+    start.X1 = map->point[calcZone.leftStart].X;
+    start.Y1 = map->point[calcZone.leftStart].Y;
+
+    start.X2 = map->point[calcZone.rightStart].X;
+    start.Y2 = map->point[calcZone.rightStart].Y;
+
+    zone.num = 4;
+    zone.point = (PointF *) malloc(zone.num * sizeof(PointF));
+    zone.point[0] = car->carXY[car->left_front_tire[TIRE_OUTSIDE]];
+    zone.point[1] = car->carXY[car->right_front_tire[TIRE_OUTSIDE]];
+    zone.point[2] = car->carXY[car->right_rear_tire[TIRE_OUTSIDE]];
+    zone.point[3] = car->carXY[car->left_rear_tire[TIRE_OUTSIDE]];
+
+    if (IntersectionOf(start, &zone) == GM_None) {
+
     }
 
-    return status;
+    free(zone.point);
+
+    return testing ? 1 : 0;
 }
 
 // 杞﹁疆鏄惁鍘嬭竟绾�
diff --git a/lib/src/main/cpp/test_items/driving_curve.h b/lib/src/main/cpp/test_items/driving_curve.h
index 3628bd4..57f3daa 100644
--- a/lib/src/main/cpp/test_items/driving_curve.h
+++ b/lib/src/main/cpp/test_items/driving_curve.h
@@ -10,8 +10,8 @@
 
 using namespace std;
 
-void StartDrivingCurve(void);
-void StopDrivingCurve(void);
-int TestDrivingCurve(vector<int>&err, const Polygon *map, const Polygon *map2, const car_model_cache_t *car, double speed, int run_status);
+void StartDrivingCurve(int moveDirect, const struct RtkTime *rtkTime);
+
+int TestDrivingCurve(const Polygon *map, const Polygon *map2, const car_model *car, const car_model *carPrev, double speed, int moveDirect, const struct RtkTime *rtkTime);
 
 #endif //RTKDRIVERTEST_DRIVING_CURVE_H

--
Gitblit v1.8.0