From 7c5b25c8617807635e9f272ebe9e98304d07cf2f Mon Sep 17 00:00:00 2001
From: fctom1215 <fctom1215@outlook.com>
Date: 星期五, 14 二月 2020 14:28:25 +0800
Subject: [PATCH] 增加单片机信息传递。
---
lib/src/main/cpp/driver_test.cpp | 44 +++++-
lib/src/main/cpp/test_items/stop_and_start.cpp | 28 ++--
lib/src/main/cpp/test_items/comm_test.h | 14 ++
lib/src/main/cpp/CMakeLists.txt | 1
lib/src/main/cpp/driver_test.h | 3
lib/src/main/cpp/master/comm_if.h | 10 +
lib/src/main/cpp/test_items/turn_a90.cpp | 29 ++--
lib/src/main/cpp/test_items/park_edge.cpp | 18 +-
lib/src/main/cpp/rtk_platform/platform.h | 1
lib/src/main/cpp/master/comm_if.cpp | 35 +++++
lib/src/main/cpp/test_items/comm_test.cpp | 63 ++++++++++
lib/src/main/cpp/utils/xconvert.h | 2
lib/src/main/cpp/utils/xconvert.cpp | 23 +++
lib/src/main/cpp/mcu/mcu_if.cpp | 9
lib/src/main/cpp/rtk_platform/platform.cpp | 24 ++++
15 files changed, 248 insertions(+), 56 deletions(-)
diff --git a/lib/src/main/cpp/CMakeLists.txt b/lib/src/main/cpp/CMakeLists.txt
index 759cbf1..044fbc1 100644
--- a/lib/src/main/cpp/CMakeLists.txt
+++ b/lib/src/main/cpp/CMakeLists.txt
@@ -33,6 +33,7 @@
test_items/stop_and_start.cpp
test_items/driving_curve.cpp
test_items/turn_a90.cpp
+ test_items/comm_test.cpp
rtk_module/rtk.cpp
rtk_module/virtual_rtk.cpp
master/comm_if.cpp
diff --git a/lib/src/main/cpp/driver_test.cpp b/lib/src/main/cpp/driver_test.cpp
index 64c63c9..ca588b9 100644
--- a/lib/src/main/cpp/driver_test.cpp
+++ b/lib/src/main/cpp/driver_test.cpp
@@ -80,6 +80,13 @@
static car_model *CarModel = NULL;
static car_model *CarModelPrev = NULL;
+static struct sensor_cfg {
+ int gpioId;
+ int funId;
+ int validLvl;
+} SensorConfig[32];
+static int SensorNum = 0;
+
#define MOV_AVG_SIZE 1
#define RTK_BUFFER_SIZE 100
#define CAR_MODEL_CACHE_SIZE 10
@@ -104,6 +111,9 @@
MapNum = 0;
CarModel = NULL;
CarModelPrev = NULL;
+
+ SensorNum = 0;
+ memset(SensorConfig, 0, sizeof(SensorConfig));
RtkBuffer = (rtk_info *) malloc(RTK_BUFFER_SIZE * sizeof(rtk_info));
RtkBufferNum = RtkBufferIn = 0;
@@ -287,9 +297,26 @@
DEBUG("SetCarMeasurePoint Calc Over");
}
-void SetSensorCfg(int (*sensor)[2], int sensorNum)
+void SetSensorCfg(int (*sensor)[3], int sensorNum)
{
DEBUG("SetSensorCfg sensorNum %d", sensorNum);
+
+ SensorNum = sensorNum;
+ for (int i = 0; i < sensorNum; ++i) {
+ SensorConfig[i].gpioId = sensor[i][0];
+ SensorConfig[i].funId = sensor[i][1];
+ SensorConfig[i].validLvl = sensor[i][2];
+ }
+}
+
+void GetFuncGpio(int func, int &gpio, int &lvl)
+{
+ for (int i = 0; i < SensorNum; ++i) {
+ if (SensorConfig[i].funId == func) {
+ gpio = SensorConfig[i].gpioId;
+ lvl = SensorConfig[i].validLvl;
+ }
+ }
}
void StartDriverExam(int start)
@@ -345,7 +372,7 @@
RtkBuffer[index].mm, RtkBuffer[index].ss, RtkBuffer[index].dss);
brief.qf = RtkBuffer[index].qf;
- brief.map_id = 865;//GetMapId(CurrExamMapIndex, MapList, MapNum);
+ brief.map_id = 866;//GetMapId(CurrExamMapIndex, MapList, MapNum);
brief.move = move;
brief.speed = speed * 3.6;
brief.heading = RtkBuffer[index].heading;
@@ -469,15 +496,14 @@
}
/*************************************************
- * 2娆¢噰鏍风浉宸殑鏃堕棿
+ * 2娆¢噰鏍风浉宸殑鏃堕棿, a 鏈�杩戠殑锛宐 鍏堝墠鐨�
* @param a
* @param b
* @return ms
*/
static uint32_t CalcTimeDiff(const rtk_info *a, const rtk_info *b)
{
- return ABS((long)(TimeMakeComposite(2000 + a->YY, a->MM, a->DD, a->hh, a->mm, a->ss) * 1000 + a->dss*10) -
- (long)(TimeMakeComposite(2000 + b->YY, b->MM, b->DD, b->hh, b->mm, b->ss) * 1000 + b->dss*10));
+ return TimeGetDiff(a->hh, a->mm, a->ss, a->dss*10, b->hh, b->mm, b->ss, b->dss*10);
}
static bool UpdateCarCoord(double &spd, int &mov, int &idx)
@@ -686,7 +712,7 @@
{
// 杞︾殑鏈�鍓嶇偣鏄惁杩涘叆鍦板浘
for (int i = 0; i < mapNum && car != NULL; ++i) {
- if (mapList[i].type == MAP_TYPE_STOP_START) {
+ /*if (mapList[i].type == MAP_TYPE_STOP_START) {
// 鏋勯�犺櫄鎷熺殑宸︿笂瑙掔偣
double x9, y9, xo, yo;
@@ -721,7 +747,7 @@
free(map.point);
if (enter) return i;
- } /*else if (mapList[i].type == MAP_TYPE_CURVE) {
+ } else if (mapList[i].type == MAP_TYPE_CURVE) {
} else if (mapList[i].type == MAP_TYPE_PARK_BUTTOM || mapList[i].type == MAP_TYPE_PART_EDGE) {
if (IntersectionOf(car->carXY[ car->axial[AXIAL_FRONT] ], &mapList[i].map) == GM_Containment) {
@@ -734,7 +760,7 @@
DistanceOf(car->carXY[car->axial[AXIAL_FRONT]], enterLine2) > 0.1)
return i;
}
- } else if (mapList[i].type == MAP_TYPE_TURN_90) {
+ } else */if (mapList[i].type == MAP_TYPE_TURN_90) {
if (IntersectionOf(car->carXY[ car->axial[AXIAL_FRONT] ], &mapList[i].map) == GM_Containment) {
Line enterLine1;
@@ -743,7 +769,7 @@
if (DistanceOf(car->carXY[car->axial[AXIAL_FRONT]], enterLine1) > 0.1)
return i;
}
- }*/
+ }
}
return -1;
}
diff --git a/lib/src/main/cpp/driver_test.h b/lib/src/main/cpp/driver_test.h
index c1c2b58..339469c 100644
--- a/lib/src/main/cpp/driver_test.h
+++ b/lib/src/main/cpp/driver_test.h
@@ -81,7 +81,8 @@
void SetCarMeasurePoint(double *basePoint, int *axial, int *left_front_tire,
int *right_front_tire, int *left_rear_tire, int *right_rear_tire,
int *body, int bodyNum, double (*point)[2], int pointNum);
-void SetSensorCfg(int (*sensor)[2], int sensorNum);
+void SetSensorCfg(int (*sensor)[3], int sensorNum);
+void GetFuncGpio(int func, int &gpio, int &lvl);
void StartDriverExam(int start);
void UpdateRTKInfo(const rtk_info *s);
void AddExamFault(int wrong, const struct RtkTime *rtkTime);
diff --git a/lib/src/main/cpp/master/comm_if.cpp b/lib/src/main/cpp/master/comm_if.cpp
index fc9f457..688ffe2 100644
--- a/lib/src/main/cpp/master/comm_if.cpp
+++ b/lib/src/main/cpp/master/comm_if.cpp
@@ -36,7 +36,7 @@
#define ID_MS_MAP 0x8006
#define ID_SM_READ_CAR 0x0007
#define ID_MS_CAR 0x8007
-#define ID_SM_READ_SENSOR_CFG 0x0008
+#define ID_SM_MCU_BRIEF 0x0008
#define ID_MS_SENSOR_CFG 0x8008
#define ID_MS_START_EXAM 0x8009
#define ID_SM_EXAM_STATUS 0x0009
@@ -135,7 +135,7 @@
void MA_ReadSensor(void)
{
- SendMsgToMainProc(ID_SM_READ_SENSOR_CFG, NULL);
+
}
void MA_SendExamStatus(int start, int errorCode)
@@ -153,6 +153,31 @@
writer.EndObject();
SendMsgToMainProc(ID_SM_EXAM_STATUS, sb.GetString());
+}
+
+void MA_SendMcuBrief(const struct mcuBrief *brief)
+{
+ StringBuffer sb;
+ Writer<StringBuffer> writer(sb);
+
+ writer.StartObject();
+
+ writer.Key("version");
+ writer.String(brief->version);
+ writer.Key("selftest");
+ writer.Int(brief->selftest);
+ writer.Key("gpio");
+ writer.Int(brief->gpio);
+ writer.Key("speed");
+ writer.Int(brief->speed);
+ writer.Key("engine");
+ writer.Int(brief->engine);
+ writer.Key("sn");
+ writer.String(brief->sn);
+
+ writer.EndObject();
+
+ SendMsgToMainProc(ID_SM_MCU_BRIEF, sb.GetString());
}
void MA_SendGpsBrief(const struct gpsBrief *brief)
@@ -615,7 +640,7 @@
if (a.IsArray() && a.Size() > 0) {
int n = a.Size();
int i = 0;
- int (*sensor)[2] = (int (*)[2]) new int[n][2];
+ int (*sensor)[3] = (int (*)[3]) new int[n][3];
for (Value::ConstValueIterator itr = a.Begin(); itr != a.End(); ++itr) {
// a gpio mapping
@@ -627,6 +652,10 @@
const Value &s = (*itr)["func_id"];
sensor[i][1] = s.GetInt();
}
+ if (itr->HasMember("level")) {
+ const Value &s = (*itr)["level"];
+ sensor[i][2] = s.GetInt();
+ }
++i;
}
SetSensorCfg(sensor, n);
diff --git a/lib/src/main/cpp/master/comm_if.h b/lib/src/main/cpp/master/comm_if.h
index aaeae65..deae21e 100644
--- a/lib/src/main/cpp/master/comm_if.h
+++ b/lib/src/main/cpp/master/comm_if.h
@@ -8,6 +8,15 @@
#include <cstdint>
#include "../driver_test.h"
+struct mcuBrief {
+ char version[70];
+ int selftest;
+ int gpio;
+ int speed;
+ int engine;
+ char sn[20];
+};
+
struct gpsBrief {
char utc[32];
int sat_num;
@@ -61,6 +70,7 @@
void MA_ReadCar(void);
void MA_ReadSensor(void);
void MA_SendExamStatus(int start, int errorCode);
+void MA_SendMcuBrief(const struct mcuBrief *brief);
void MA_SendGpsBrief(const struct gpsBrief *brief);
void MA_SendRtkBrief(const struct rtkBrief *brief);
void MA_SendCarPosition(const struct carBrief *brief);
diff --git a/lib/src/main/cpp/mcu/mcu_if.cpp b/lib/src/main/cpp/mcu/mcu_if.cpp
index 44e0c9e..9821685 100644
--- a/lib/src/main/cpp/mcu/mcu_if.cpp
+++ b/lib/src/main/cpp/mcu/mcu_if.cpp
@@ -11,6 +11,7 @@
#include "../defs.h"
#include "../jni_log.h"
#include "../common/serial_port.h"
+#include "../rtk_platform/platform.h"
#define DEBUG(fmt, args...) LOGD("<mcu_if> <%s>: " fmt, __func__, ##args)
@@ -62,6 +63,7 @@
static int dfuTryCnt = 0;
const int DFU_MAX_TRY = 3;
const int DFU_FILE_BLOCK_SIZE = 896;
+
static void *UartThread1(void *p);
static void ParseMcuTimeout(union sigval sig);
@@ -357,12 +359,9 @@
break;
case ID_MC_CAR_INFO: {
DEBUG("ID_MC_CAR_INFO %d", lenth);
- char ver[64] = {0};
- memcpy(ver, data, 32);
-
- DEBUG("ID_MC_CAR_INFO %s", ver);
-
+ if (lenth > 0)
+ PlatformStatusChanged(MCU_UPDATE_EVT, data, lenth);
break;
}
case ID_MC_RTK_DATA:
diff --git a/lib/src/main/cpp/rtk_platform/platform.cpp b/lib/src/main/cpp/rtk_platform/platform.cpp
index 322708f..bd801f8 100644
--- a/lib/src/main/cpp/rtk_platform/platform.cpp
+++ b/lib/src/main/cpp/rtk_platform/platform.cpp
@@ -390,6 +390,30 @@
MA_SendRtkBrief(&brief);
UpdateRTKInfo(rtk);
}
+ if (events & MCU_UPDATE_EVT) {
+ DEBUG("MCU_UPDATE_EVT length %d", length);
+ // 0-31 version
+ // 32-33 selftest
+ // 34-35 gpio
+ // 36-37 speed
+ // 38-39 engine
+ // 40-55 sn
+ struct mcuBrief brief;
+
+ memset(&brief, 0, sizeof(brief));
+
+ int x = 0;
+ while(data[x] != 0 && x < 32) x++;
+
+ ConvertHex2String(brief.version, data, x);
+ brief.selftest = BUILD_UINT16(data[33], data[32]);
+ brief.gpio = BUILD_UINT16(data[35], data[34]);
+ brief.speed = BUILD_UINT16(data[37], data[36]);
+ brief.engine = BUILD_UINT16(data[39], data[38]);
+ memcpy(brief.sn, data+40, 16);
+
+ MA_SendMcuBrief(&brief);
+ }
}
static void *PlatformDataListenThread(void *p) {
diff --git a/lib/src/main/cpp/rtk_platform/platform.h b/lib/src/main/cpp/rtk_platform/platform.h
index 4008293..05898a5 100644
--- a/lib/src/main/cpp/rtk_platform/platform.h
+++ b/lib/src/main/cpp/rtk_platform/platform.h
@@ -13,6 +13,7 @@
#define PLATFORM_LOGIN_EVT 0x0008
#define RTK_UPDATE_EVT 0x0010
#define GPS_UPDATE_EVT 0x0020
+#define MCU_UPDATE_EVT 0x0040
typedef struct {
char domain_name[32];
diff --git a/lib/src/main/cpp/test_items/comm_test.cpp b/lib/src/main/cpp/test_items/comm_test.cpp
new file mode 100644
index 0000000..3ea8099
--- /dev/null
+++ b/lib/src/main/cpp/test_items/comm_test.cpp
@@ -0,0 +1,63 @@
+//
+// Created by fctom on 2020/2/13.
+//
+
+#include "comm_test.h"
+#include "../driver_test.h"
+#include "../defs.h"
+
+static bool seatbeltInsert;
+static bool engineStart;
+
+const int ENGINE_MIN_ROTATE = 200;
+
+static uint16_t gpioStore = 0;
+static uint16_t engineStore = 0;
+
+static void SensorChange(int index, bool value);
+
+void CommTestStart(void)
+{
+ gpioStore = engineStore = 0;
+}
+
+void UpdateSensor(uint16_t gpio, uint16_t speed, uint16_t engine)
+{
+ int idx, lvl;
+
+ uint16_t chg = gpioStore^gpio;
+
+ if (chg == 0)
+ return;
+
+ for (int i = 0; i < 16; ++i) {
+ if (chg & BV(i)) {
+ SensorChange(i, (bool)(gpio & BV(i)));
+ }
+ }
+
+ gpioStore = gpio;
+
+
+
+ // 瀹夊叏甯�
+
+ // 鎸′綅
+
+ // 鍚姩鎸囩ず
+
+ // 鐔勭伀鐩戞帶
+}
+
+static void SensorChange(int index, bool value)
+{
+ int func;
+
+ switch (func) {
+ case SENSOR_SEATBELT:
+ break;
+ case SENSOR_TURNRIGHT:
+ break;
+
+ }
+}
diff --git a/lib/src/main/cpp/test_items/comm_test.h b/lib/src/main/cpp/test_items/comm_test.h
new file mode 100644
index 0000000..a1f7a5c
--- /dev/null
+++ b/lib/src/main/cpp/test_items/comm_test.h
@@ -0,0 +1,14 @@
+//
+// Created by fctom on 2020/2/13.
+//
+
+#ifndef MYAPPLICATION2_COMM_TEST_H
+#define MYAPPLICATION2_COMM_TEST_H
+
+#define SENSOR_SEATBELT 0
+#define SENSOR_TURNRIGHT 1
+#define SENSOR_TURNLEFT 2
+#define SENSOR_HANDBREAK 3
+
+
+#endif //MYAPPLICATION2_COMM_TEST_H
diff --git a/lib/src/main/cpp/test_items/park_edge.cpp b/lib/src/main/cpp/test_items/park_edge.cpp
index 105bd16..c5ed6ec 100644
--- a/lib/src/main/cpp/test_items/park_edge.cpp
+++ b/lib/src/main/cpp/test_items/park_edge.cpp
@@ -17,11 +17,11 @@
using namespace std;
-const int PARK_TIMEOUT = 90;
+const int PARK_TIMEOUT = D_SEC(90);
const uint32_t STOP_CAR_TIME = D_SEC(2);
static bool reportExamTimeout;
-static uint64_t stopTimepoint = 0;
+static uint32_t stopTimepoint = 0;
static bool occurCrashRedLine1, occurCrashRedLine2;
static int prevMoveStatus, storeMoveStatusBeforeStop;
static int parkStatus;
@@ -45,7 +45,7 @@
occurMoveBack = false;
if (moveStatus == -1) {
occurMoveBack = true;
- moveBackTimePoint = TimeMakeComposite(2000 + rtkTime->YY, rtkTime->MM, rtkTime->DD, rtkTime->hh, rtkTime->mm, rtkTime->ss);
+ moveBackTimePoint = TimeMakeComposite(rtkTime->hh, rtkTime->mm, rtkTime->ss, rtkTime->mss*10);
}
DEBUG("杩涘叆渚ф柟鍋滆溅鍦哄湴");
@@ -87,7 +87,7 @@
}
if (occurMoveBack) {
- uint32_t tp = TimeMakeComposite(2000 + rtkTime->YY, rtkTime->MM, rtkTime->DD, rtkTime->hh, rtkTime->mm, rtkTime->ss);
+ uint32_t tp = TimeMakeComposite(rtkTime->hh, rtkTime->mm, rtkTime->ss, rtkTime->mss*10);
if (!reportExamTimeout && tp - moveBackTimePoint >= PARK_TIMEOUT) {
// 瓒呮椂90绉掞紝涓嶅悎鏍�
@@ -100,15 +100,13 @@
if (moveStatus != prevMoveStatus) {
if (moveStatus == 0) {
parkStatus = 0;
- stopTimepoint = TimeMakeComposite(2000 + rtkTime->YY, rtkTime->MM, rtkTime->DD, rtkTime->hh, rtkTime->mm, rtkTime->ss);
- stopTimepoint = stopTimepoint * 1000 + rtkTime->mss*10;
+ stopTimepoint = TimeMakeComposite(rtkTime->hh, rtkTime->mm, rtkTime->ss, rtkTime->mss*10);
storeMoveStatusBeforeStop = prevMoveStatus;
DEBUG("鍋滆溅浜� %d %d %d %d %d %d %d", rtkTime->YY, rtkTime->MM, rtkTime->DD, rtkTime->hh, rtkTime->mm, rtkTime->ss, rtkTime->mss);
} else {
DEBUG("缁х画琛岄┒ %d %d %d %d %d %d %d", rtkTime->YY, rtkTime->MM, rtkTime->DD, rtkTime->hh, rtkTime->mm, rtkTime->ss, rtkTime->mss);
- uint64_t tp = TimeMakeComposite(2000 + rtkTime->YY, rtkTime->MM, rtkTime->DD, rtkTime->hh, rtkTime->mm, rtkTime->ss);
- tp = tp * 1000 + rtkTime->mss * 10;
+ uint32_t tp = TimeMakeComposite(rtkTime->hh, rtkTime->mm, rtkTime->ss, rtkTime->mss*10);
DEBUG("鍋滆溅鏃堕棿 %ld", tp - stopTimepoint);
@@ -144,13 +142,13 @@
if (moveStatus == -1 && !occurMoveBack) {
DEBUG("寮�濮嬪�掕溅");
occurMoveBack = true;
- moveBackTimePoint = TimeMakeComposite(2000 + rtkTime->YY, rtkTime->MM, rtkTime->DD, rtkTime->hh, rtkTime->mm, rtkTime->ss);
+ moveBackTimePoint = TimeMakeComposite(rtkTime->hh, rtkTime->mm, rtkTime->ss, rtkTime->mss*10);
}
}
prevMoveStatus = moveStatus;
} else if (moveStatus == 0 && parkStatus == 0) {
- uint64_t tp = TimeMakeComposite(2000 + rtkTime->YY, rtkTime->MM, rtkTime->DD, rtkTime->hh, rtkTime->mm, rtkTime->ss);
+ uint32_t tp = TimeMakeComposite(rtkTime->hh, rtkTime->mm, rtkTime->ss, rtkTime->mss*10);
tp = tp * 1000 + rtkTime->mss * 10;
if (tp - stopTimepoint >= STOP_CAR_TIME) {
diff --git a/lib/src/main/cpp/test_items/stop_and_start.cpp b/lib/src/main/cpp/test_items/stop_and_start.cpp
index 1398ee5..9c0c69e 100644
--- a/lib/src/main/cpp/test_items/stop_and_start.cpp
+++ b/lib/src/main/cpp/test_items/stop_and_start.cpp
@@ -16,12 +16,6 @@
using namespace std;
-enum
-{
- STOP_CAR,
- START_CAR
-};
-
const double STOP_DISTANCE_THRESHOLD_RED = 0.5;
const double EDGE_DISTANCE_THRESHOLD_RED = 0.5;
const double EDGE_DISTANCE_THRESHOLD_YELLOW = 0.3;
@@ -38,7 +32,7 @@
static PointF stopPoint;
static int prevMoveDirect;
-static uint64_t stopTimepoint = 0;
+static uint32_t stopTimepoint = 0;
static bool stopCar = false;
static uint32_t stopCarTime;
static bool occurCrashRedLine = false;
@@ -61,9 +55,7 @@
prevMoveDirect = moveDirect;
if (moveDirect == 0) {
- stopTimepoint = TimeMakeComposite(2000 + rtkTime->YY, rtkTime->MM, rtkTime->DD, rtkTime->hh,
- rtkTime->mm, rtkTime->ss);
- stopTimepoint = stopTimepoint * 1000 + rtkTime->mss * 10;
+ stopTimepoint = TimeMakeComposite(rtkTime->hh, rtkTime->mm, rtkTime->ss, rtkTime->mss*10);
}
occurCrashRedLine = false;
@@ -96,18 +88,16 @@
if (prevMoveDirect != moveDirect) {
if (moveDirect == 0) {
- stopTimepoint = TimeMakeComposite(2000 + rtkTime->YY, rtkTime->MM, rtkTime->DD, rtkTime->hh, rtkTime->mm, rtkTime->ss);
- stopTimepoint = stopTimepoint * 1000 + rtkTime->mss*10;
+ stopTimepoint = TimeMakeComposite(rtkTime->hh, rtkTime->mm, rtkTime->ss, rtkTime->mss*10);
}
prevMoveDirect = moveDirect;
} else if (moveDirect == 0) {
- uint64_t tp = TimeMakeComposite(2000 + rtkTime->YY, rtkTime->MM, rtkTime->DD, rtkTime->hh, rtkTime->mm, rtkTime->ss);
- tp = tp * 1000 + rtkTime->mss * 10;
+ uint32_t tp = TimeMakeComposite(rtkTime->hh, rtkTime->mm, rtkTime->ss, rtkTime->mss*10);
if (tp - stopTimepoint >= STOP_CAR_TIME && !stopCar) {
// 杩欓噷鍒ゆ柇鍋滆溅鐘舵��
stopCar = true;
- stopCarTime = TimeMakeComposite(2000 + rtkTime->YY, rtkTime->MM, rtkTime->DD, rtkTime->hh, rtkTime->mm, rtkTime->ss);
+ stopCarTime = TimeMakeComposite(rtkTime->hh, rtkTime->mm, rtkTime->ss, rtkTime->mss*10);
stopPoint = car->carXY[car->body[0]];
@@ -161,9 +151,10 @@
}
}
+
if (!reportStartTimeout && (IntersectionOfLine(map->point[4], stopPoint, car->carXY[car->axial[AXIAL_FRONT]]) != -1 ||
DistanceOf(stopPoint, car->carXY[car->axial[AXIAL_FRONT]]) < 0.1)) {
- if (TimeMakeComposite(2000 + rtkTime->YY, rtkTime->MM, rtkTime->DD, rtkTime->hh, rtkTime->mm, rtkTime->ss) - stopCarTime > CAR_START_TIMEOUT) {
+ if (TimeMakeComposite(rtkTime->hh, rtkTime->mm, rtkTime->ss, rtkTime->mss*10) - stopCarTime > CAR_START_TIMEOUT) {
// 璧锋鏃堕棿瓒呰繃30绉掞紝涓嶅悎鏍�
AddExamFault(15, rtkTime);
DEBUG("璧锋鏃堕棿瓒呰繃30绉�");
@@ -217,6 +208,9 @@
int rel1 = IntersectionOfLine(map->point[4], map->point[3], car->carXY[car->body[0]]);
int rel2 = IntersectionOfLine(map->point[5], map->point[6], car->carXY[car->body[0]]);
+ DEBUG("%d %d %f, %f", car->body[0], car->axial[AXIAL_FRONT], car->carXY[car->body[0]].X, car->carXY[car->body[0]].Y);
+ DEBUG("rel1 %d rel2 %d", rel1, rel2);
+
if (rel1 == 1) {
Line line1;
@@ -231,6 +225,8 @@
dis = DistanceOf(car->carXY[car->body[0]], line2);
}
+ DEBUG("DistanceOfHead2Stopline dis %f", dis);
+
return dis;
}
diff --git a/lib/src/main/cpp/test_items/turn_a90.cpp b/lib/src/main/cpp/test_items/turn_a90.cpp
index d03e269..f76ac16 100644
--- a/lib/src/main/cpp/test_items/turn_a90.cpp
+++ b/lib/src/main/cpp/test_items/turn_a90.cpp
@@ -21,9 +21,9 @@
static bool TA90Testing;
-static int azimuth;
+static int enterAreaHeading;
static bool turnLeftFinished;
-static uint64_t stopTimepoint = 0;
+static uint32_t stopTimepoint = 0;
static bool reportStopCarTimeout;
static int prevMoveDirect;
@@ -34,11 +34,11 @@
void StartTurnA90(int moveDirect, double heading, const struct RtkTime *rtkTime)
{
- azimuth = (int) heading;
+ DEBUG("杩涘叆鐩磋杞集鍦哄湴");
+ enterAreaHeading = (int) heading;
prevMoveDirect = moveDirect;
if (moveDirect == 0) {
- stopTimepoint = TimeMakeComposite(2000 + rtkTime->YY, rtkTime->MM, rtkTime->DD, rtkTime->hh, rtkTime->mm, rtkTime->ss);
- stopTimepoint = stopTimepoint * 1000 + rtkTime->mss*10;
+ stopTimepoint = TimeMakeComposite(rtkTime->hh, rtkTime->mm, rtkTime->ss, rtkTime->mss*10);
}
reportStopCarTimeout = false;
crashRedLine = false;
@@ -66,8 +66,7 @@
if (moveDirect != prevMoveDirect) {
if (moveDirect == 0) {
- stopTimepoint = TimeMakeComposite(2000 + rtkTime->YY, rtkTime->MM, rtkTime->DD, rtkTime->hh, rtkTime->mm, rtkTime->ss);
- stopTimepoint = stopTimepoint * 1000 + rtkTime->mss*10;
+ stopTimepoint = TimeMakeComposite(rtkTime->hh, rtkTime->mm, rtkTime->ss, rtkTime->mss*10);
reportStopCarTimeout = false;
DEBUG("鍋滆溅浜� %d %d %d %d %d %d %d", rtkTime->YY, rtkTime->MM, rtkTime->DD, rtkTime->hh, rtkTime->mm, rtkTime->ss, rtkTime->mss);
@@ -76,8 +75,7 @@
}
prevMoveDirect = moveDirect;
} else if (moveDirect == 0) {
- uint64_t tp = TimeMakeComposite(2000 + rtkTime->YY, rtkTime->MM, rtkTime->DD, rtkTime->hh, rtkTime->mm, rtkTime->ss);
- tp = tp * 1000 + rtkTime->mss * 10;
+ uint32_t tp = TimeMakeComposite(rtkTime->hh, rtkTime->mm, rtkTime->ss, rtkTime->mss*10);
if (tp - stopTimepoint >= STOP_CAR_TIME && !reportStopCarTimeout) {
// 鍋滆溅瓒�2绉掞紝姣忔鎵�5鍒�
@@ -90,14 +88,21 @@
// 妫�鏌ヨ浆鍚戠姸鎬�
int az = (int) heading;
- if (ABS(az - azimuth) > 180) {
- az = 360 - ABS(az-azimuth);
+ if (ABS(az - enterAreaHeading) > 180) {
+ az = 360 - ABS(az-enterAreaHeading);
} else {
- az = ABS(az - azimuth);
+ az = ABS(az - enterAreaHeading);
}
+
+
if (az >= 30) {
if (!turnLeftFinished) {
+ if((( ((int)heading) + 360 - enterAreaHeading) % 360) < 180) {
+ DEBUG("鍙宠浆");
+ } else {
+ DEBUG("宸﹁浆");
+ }
// 杞悜鐏湭寮�鍚紝鎵�10鍒�
AddExamFault(30, rtkTime);
DEBUG("杞悜鐏湭寮�鍚�");
diff --git a/lib/src/main/cpp/utils/xconvert.cpp b/lib/src/main/cpp/utils/xconvert.cpp
index 62aeca2..0232370 100644
--- a/lib/src/main/cpp/utils/xconvert.cpp
+++ b/lib/src/main/cpp/utils/xconvert.cpp
@@ -107,3 +107,26 @@
totalSeconds += daysThisYear * SECONDS_PER_DAY;
return totalSeconds;
}
+
+uint32_t TimeMakeComposite(int hour, int minute, int second, int msecond)
+{
+ return (hour*SECONDS_PER_HOUR + minute*SECONDS_PER_MINUTE + second) * 1000 + msecond;
+}
+
+/*********************************************************
+ * TIME1 - TIME2: msecond
+ * @param hour1
+ * @param minute1
+ * @param second1
+ * @param msecond1
+ * @param hour2
+ * @param minute2
+ * @param second2
+ * @param msecond2
+ * @return
+ */
+uint32_t TimeGetDiff(int hour1, int minute1, int second1, int msecond1, int hour2, int minute2, int second2, int msecond2)
+{
+ return (TimeMakeComposite(hour1, minute1, second1, msecond1) + SECONDS_PER_DAY * 1000 -
+ TimeMakeComposite(hour2, minute2, second2, msecond2)) % (SECONDS_PER_DAY * 1000);
+}
diff --git a/lib/src/main/cpp/utils/xconvert.h b/lib/src/main/cpp/utils/xconvert.h
index 7278c0c..cec7129 100644
--- a/lib/src/main/cpp/utils/xconvert.h
+++ b/lib/src/main/cpp/utils/xconvert.h
@@ -11,5 +11,7 @@
void ConvertHex2String(char *str, const uint8_t *hex, int length);
void ConvertString2Hex(uint8_t *hex, int length, const char *str);
uint32_t TimeMakeComposite(int year, int month, int day, int hour, int minute, int second);
+uint32_t TimeMakeComposite(int hour, int minute, int second, int msecond);
+uint32_t TimeGetDiff(int hour1, int minute1, int second1, int msecond1, int hour2, int minute2, int second2, int msecond2);
#endif //MYAPPLICATION2_XCONVERT_H
--
Gitblit v1.8.0