From c64da51ae481dfc2a25e5a6e39bb94f22d65428a Mon Sep 17 00:00:00 2001
From: yy1717 <fctom1215@outlook.com>
Date: 星期五, 10 一月 2020 13:33:09 +0800
Subject: [PATCH] s

---
 lib/src/main/cpp/driver_test.cpp |   90 ++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 84 insertions(+), 6 deletions(-)

diff --git a/lib/src/main/cpp/driver_test.cpp b/lib/src/main/cpp/driver_test.cpp
index 55464ad..945f6bb 100644
--- a/lib/src/main/cpp/driver_test.cpp
+++ b/lib/src/main/cpp/driver_test.cpp
@@ -86,6 +86,19 @@
 
 struct car_desc_ *CarDesc = NULL;
 
+typedef struct {
+    PointF basePoint;
+    int axial[2];
+    int left_front_tire[2];
+    int right_front_tire[2];
+    int left_rear_tire[2];
+    int right_rear_tire[2];
+    int pointNum;
+    struct car_desc_ *carDesc;
+} car_model;
+
+static car_model *CarModel = NULL;
+
 struct car_coord_ *CarCoord = NULL;
 static double currSpeed = 0, currAzimuth = 0;
 static PointF currCoord;
@@ -122,6 +135,7 @@
 {
     memset(&MapList, 0, sizeof(MapList));
     MapNum = 0;
+    CarModel = NULL;
 
     carModelDescFile = (carModelDesc_t *)malloc(sizeof(carModelDesc_t));
 
@@ -259,22 +273,20 @@
     ErrorList.clear();
 
     TextSpeak("寮�濮嬫祴璇�");
-
-    AppTimer_add(ReadDriverExamPrimerTimeout, D_SEC(2));
-    ReadDriverExamPrimer();
 }
 
 static void ReadDriverExamPrimerTimeout(union sigval sig)
 {
     AppTimer_delete(ReadDriverExamPrimerTimeout);
+    AppTimer_add(ReadDriverExamPrimerTimeout, D_SEC(2));
     ReadDriverExamPrimer();
 }
 
 void ReadDriverExamPrimer(void)
 {
-//    MA_ReadMap();
-//    MA_ReadCar();
-//    MA_ReadSensor();
+    MA_ReadMap();
+    MA_ReadCar();
+    MA_ReadSensor();
 }
 
 void ClearMap(void)
@@ -327,6 +339,56 @@
                     double (*point)[2], int pointNum)
 {
     DEBUG("SetCarMeasurePoint pointNum %d", pointNum);
+
+    if (point == NULL || pointNum == 0) return;
+
+    if (CarModel != NULL) {
+        CarModel->carDesc != NULL;
+        free(CarModel->carDesc);
+        free(CarModel);
+        CarModel = NULL;
+    }
+
+    CarModel = (car_model *)malloc(sizeof(CarModel));
+    CarModel->basePoint.X = basePoint[0];
+    CarModel->basePoint.Y = basePoint[1];
+    CarModel->axial[0] = axial[0];
+    CarModel->axial[1] = axial[1];
+    CarModel->left_front_tire[0] = left_front_tire[0];
+    CarModel->left_front_tire[1] = left_front_tire[1];
+    CarModel->right_front_tire[0] = right_front_tire[0];
+    CarModel->right_front_tire[1] = right_front_tire[1];
+    CarModel->left_rear_tire[0] = left_rear_tire[0];
+    CarModel->left_rear_tire[1] = left_rear_tire[1];
+    CarModel->right_rear_tire[0] = right_rear_tire[0];
+    CarModel->right_rear_tire[1] = right_rear_tire[1];
+    CarModel->pointNum = pointNum;
+
+    CarModel->carDesc = (struct car_desc_ *)malloc(sizeof(struct car_desc_) * pointNum);
+
+    // 娴嬮噺鍧愭爣杞崲涓鸿窛绂�-瑙掑害褰㈠紡
+    double C02 = (point[0][0]-basePoint[0])*(point[0][0]-basePoint[0]) +
+                 (point[0][1]-basePoint[1])*(point[0][1]-basePoint[1]);
+    double C0 = sqrt(C02);
+
+    CarModel->carDesc[0].distance = sqrt(C02);
+    CarModel->carDesc[0].angle = 0.0;
+
+    for (int i = 1; i < pointNum; ++i) {
+        double dis2 = (point[i][0]-basePoint[0])*(point[i][0]-basePoint[0]) +
+                      (point[i][1]-basePoint[1])*(point[i][1]-basePoint[1]);
+        double dis = sqrt(dis2);
+
+        CarModel->carDesc[i].distance = dis;
+
+        CarModel->carDesc[i].angle = 180 * acos((dis2 + C02 - ((point[i][0]-point[0][0])*(point[i][0]-point[0][0]) +
+                                                   (point[i][1]-point[0][1])*(point[i][1]-point[0][1])))/(2*C0*dis)) / M_PI;
+
+        if (i > axial[1])
+            CarModel->carDesc[i].angle = 360.0 - CarModel->carDesc[i].angle;
+    }
+
+    DEBUG("SetCarMeasurePoint Calc Over");
 }
 
 void SetSensorCfg(int (*sensor)[2], int sensorNum)
@@ -334,6 +396,22 @@
     DEBUG("SetSensorCfg sensorNum %d", sensorNum);
 }
 
+void StartDriverExam(int start)
+{
+    bool err = false;
+
+    if (MapNum == 0) {
+        err = true;
+        MA_SendExamStatus(0, -1);
+    }
+    if (CarModel == NULL) {
+        err = true;
+        MA_SendExamStatus(0, -2);
+    }
+    if (!err)
+        MA_SendExamStatus(1, 0);
+}
+
 void UpdateRTKInfo(struct rtk_info *s)
 {
     struct tm test_tm;

--
Gitblit v1.8.0