From 4bd08f0355b6b2cf3c027202d5ad301b4e182953 Mon Sep 17 00:00:00 2001
From: yy1717 <fctom1215@outlook.com>
Date: 星期五, 31 三月 2023 17:16:22 +0800
Subject: [PATCH] 科目二修改

---
 lib/src/main/cpp/test_common/odo_graph.cpp |   41 +++++++++++++++++++++++------------------
 1 files changed, 23 insertions(+), 18 deletions(-)

diff --git a/lib/src/main/cpp/test_common/odo_graph.cpp b/lib/src/main/cpp/test_common/odo_graph.cpp
index 87381a9..555b177 100644
--- a/lib/src/main/cpp/test_common/odo_graph.cpp
+++ b/lib/src/main/cpp/test_common/odo_graph.cpp
@@ -3,18 +3,18 @@
 //
 
 #include "odo_graph.h"
-#include "../test_items2/road_exam.h"
 #include "../common/apptimer.h"
 #include "../utils/xconvert.h"
+#include "../driver_test.h"
 
 static double odoGraph;
-static struct RtkTime odoTimer;
-static double odoPrevSpeed;
-static int odoCnt;
+static int64_t prevTimestamp;
+static double prevSpeed;
+static bool isstop;
 
 void ResetOdo(void)
 {
-    odoCnt = 0;
+    isstop = true;
     odoGraph = 0;
 }
 
@@ -23,22 +23,27 @@
     return odoGraph;
 }
 
-void UpdataOdo(double speed, int moveDirect, const struct RtkTime *rtkTime) {
+void UpdataOdo(motion_t &motion) {
     // 琛岄┒璺濈锛屽惈鍊掕溅
-    if (odoCnt == 0 && moveDirect != 0) {
-        odoPrevSpeed = speed;
-        odoCnt = 1;
-        odoTimer = *rtkTime;
-    } else if (odoCnt == 1) {
-        if (moveDirect != 0) {
-            uint32_t tm = TimeGetDiff(rtkTime, &odoTimer);
-            if (tm >= D_SEC(1)) {
-                odoGraph += ((double) tm) * (odoPrevSpeed + speed) / 2.0 / 1000.0;
-                odoTimer = *rtkTime;
-                odoPrevSpeed = speed;
+    if (isstop && motion.move != STOP) {
+        prevSpeed = motion.speed;
+        isstop = false;
+        prevTimestamp = motion.timestamp;
+    } else if (!isstop) {
+        if (motion.move != STOP) {
+            uint32_t elapsed = motion.timestamp - prevTimestamp;
+            if (elapsed >= D_SEC(5)) {      // 涓�旈暱鏃堕棿鏈畾浣嶏紝閲嶆柊寮�濮嬫祴閲�
+                prevSpeed = motion.speed;
+                prevTimestamp = motion.timestamp;
+                return;
+            }
+            if (elapsed >= D_SEC(1)) {
+                odoGraph += ((double) elapsed) * (prevSpeed + motion.speed) / 2.0 / 1000.0;
+                prevTimestamp = motion.timestamp;
+                prevSpeed = motion.speed;
             }
         } else {
-            odoCnt = 0;
+            isstop = true;
         }
     }
 }
\ No newline at end of file

--
Gitblit v1.8.0