From f7a18ec4494b9c5c9ef3fd440bbf68ffc6425e18 Mon Sep 17 00:00:00 2001
From: yy1717 <fctom1215@outlook.com>
Date: 星期四, 08 十二月 2022 15:40:56 +0800
Subject: [PATCH] 智慧驾培首次提交
---
lib/src/main/cpp/rtk_module/rtk.cpp | 204 +++++++--------------------------------------------
1 files changed, 28 insertions(+), 176 deletions(-)
diff --git a/lib/src/main/cpp/rtk_module/rtk.cpp b/lib/src/main/cpp/rtk_module/rtk.cpp
index 67a2d35..88adfa5 100644
--- a/lib/src/main/cpp/rtk_module/rtk.cpp
+++ b/lib/src/main/cpp/rtk_module/rtk.cpp
@@ -4,10 +4,10 @@
#include <cstring>
#include <cstdio>
-#include <pthread.h>
#include <cmath>
#include <cstdlib>
#include <cctype>
+#include <thread>
#include "rtk.h"
#include "parse_gps.h"
#include "../common/serial_port.h"
@@ -20,10 +20,9 @@
#include "../native-lib.h"
#include "virtual_rtk.h"
#include "../mcu/mcu_if.h"
+#include "../mcu/ahp.h"
#define DEBUG(fmt, args...) LOGD("<rtk> <%s>: " fmt, __func__, ##args)
-
-#define RTK_MODULE_UART UART_0
#define PARSE_BUFF_SIZE 4096
@@ -41,64 +40,17 @@
static gpsStatus_t gpsStatus;
static char rtkModel[32] = {0};
-static int (*WriteRtk)(int id, const void *buf, int len);
-
static rtk_info CurrRTKInfo;
static bool needSetPjk = false;
static int lostCnt;
static void CheckPjkParam(void);
-static void CheckPjkParamTimeout(union sigval sig);
+static void CheckPjkParamTimeout(apptimer_var_t val);
static int WriteBluetooth(int id, const void *buf, int len);
static void GetModuleVersion(void);
-static void VersionTimeout(union sigval sig);
-static void GpsDataTimeout(union sigval sig);
-
-static void *UartThread(void *p);
-
-void RtkCommModeSel(int mode)
-{
- if (mode == 0) {
- WriteRtk = WriteSerialPort;
- } else {
- WriteRtk = WriteBluetooth;
- }
-}
-
-void ConfigRTKModule(bool ayDevice)
-{
- // TODO
- DEBUG("ConfigRTKModule");
-
- memset(&CurrRTKInfo, 0, sizeof(CurrRTKInfo));
- CurrRTKInfo.hh = -1;
-
- memset(&gpsStatus, 0, sizeof(gpsStatus));
- gpsStatus.hh = -1;
-
- if (ayDevice) {
- RtkCommModeSel(0);
-
- static struct serial_config serialConfig;
-
- strcpy(serialConfig.name, "/dev/ttyHSL0");
- serialConfig.baud = 115200;
- serialConfig.data_bit = 8;
- serialConfig.verify_bit = 'N';
- serialConfig.stop_bit = 1;
- serialConfig.flow_ctrl = 0;
-
- pthread_t pid;
- pthread_attr_t attr;
- pthread_attr_init(&attr);
- pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);//detached
- pthread_create(&pid, &attr, UartThread, &serialConfig);
- } else {
- RtkCommModeSel(1);
- // 绛夊緟钃濈墮杩炴帴
- }
-}
+static void VersionTimeout(apptimer_var_t val);
+static void GpsDataTimeout(apptimer_var_t val);
// 钃濈墮杩炴帴鍚�
void ConfigRTKModuleLater(void)
@@ -111,12 +63,12 @@
void FactorySettings(void)
{
- WriteRtk(RTK_MODULE_UART, FACTORY, strlen(FACTORY));
+ WriteRtkCommand(FACTORY, strlen(FACTORY));
}
void RebootModule(void)
{
- WriteRtk(RTK_MODULE_UART, REBOOT, strlen(REBOOT));
+ WriteRtkCommand(REBOOT, strlen(REBOOT));
}
void handleRTKRebootComp(const struct nmea *s)
@@ -147,8 +99,8 @@
void SetAYFactoryParam(int freq)
{
- WriteRtk(RTK_MODULE_UART, UNLOGALL, strlen(UNLOGALL));
- WriteRtk(RTK_MODULE_UART, IFCOM2, strlen(IFCOM2));
+ WriteRtkCommand(UNLOGALL, strlen(UNLOGALL));
+ WriteRtkCommand(IFCOM2, strlen(IFCOM2));
if (freq == 0)
freq = 5;
@@ -156,13 +108,13 @@
for (int i = 0; i < sizeof(PJKITEMS)/ sizeof(PJKITEMS[0]); ++i) {
char cmd[64];
sprintf(cmd, "log com1 %s ontime %0.1f\r\n", PJKITEMS[i], 1.0/(double)freq);
- WriteRtk(RTK_MODULE_UART, cmd, strlen(cmd));
+ WriteRtkCommand(cmd, strlen(cmd));
}
for (int i = 0; i < sizeof(GPSITEMS)/ sizeof(GPSITEMS[0]); ++i) {
char cmd[64];
sprintf(cmd, "log com1 %s ontime %0.1f\r\n", GPSITEMS[i], 1.0/(double)freq);
- WriteRtk(RTK_MODULE_UART, cmd, strlen(cmd));
+ WriteRtkCommand(cmd, strlen(cmd));
}
// WriteSerialPort(RTK_MODULE_UART, AY_PJKPARAM, strlen(AY_PJKPARAM));
@@ -175,7 +127,7 @@
sprintf(buff, "set pjkpara 6378137 298.257223563 0 %d 0 500000\r\n", centLon);
- WriteRtk(RTK_MODULE_UART, buff, strlen(buff));
+ WriteRtkCommand(buff, strlen(buff));
DEBUG("%s", buff);
}
@@ -185,79 +137,10 @@
data = gpsStatus;
}
-static void *UartThread(void *p) {
- struct serial_config *cfg = (struct serial_config *) p;
-
- int res = InitSerialPort(RTK_MODULE_UART, cfg->baud, cfg->data_bit, cfg->verify_bit, cfg->stop_bit, cfg->flow_ctrl);
- DEBUG("Serial %s open %d", cfg->name, res);
- uint8_t RxBuf[PARSE_BUFF_SIZE];
- int RxBufLen = 0;
-
- if (res == 0) {
-// CheckPjkParam();
- GetModuleVersion();
- }
-
- while (res == 0) {
- int ul = ReadSerialPort(RTK_MODULE_UART, (uint8_t *)RxBuf + RxBufLen, sizeof(RxBuf) - RxBufLen);
- RxBufLen += ul;
-
- /*{
- static char buffd[16384];
-
- buffd[0] = 0;
- int i = 0;
- for (i = 0; i < ul; i++) {
- if ((i % 32) == 0) {
- sprintf(buffd + strlen(buffd), "\n");
- }
- sprintf(buffd + strlen(buffd), "%02X ", RxBuf[i]);
- if (strlen(buffd) > 800) {
- DEBUG("%s <- %s...", "UART", buffd);
- buffd[0] = 0;
- }
- }
- if (strlen(buffd) > 0)
- DEBUG("%s <- %s", "UART", buffd);
- }*/
-
- if (RxBufLen > 0) {
-#if 1
- if (VirtualIsConnected()) { //PC妯℃嫙鐢ㄦ椂
- static bool first = false;
- if (!first) {
- first = true;
-
- uint8_t buff[33] = "emulator";
- buff[32] = 1;
- PlatformStatusChanged(RTK_STATUS_EVT, buff, 33);
- }
- RxBufLen = 0;
- } else {
- const uint8_t *ptr = parseGPS(RxBuf, RxBuf + RxBufLen);
- if (ptr != RxBuf) {
- memcpy(RxBuf, ptr, RxBufLen - (ptr - RxBuf));
- RxBufLen -= ptr - RxBuf;
- } else if (RxBufLen == PARSE_BUFF_SIZE) { //濉弧浜嗭紝涓旀病鏈変竴涓猏r锛岄兘鎶涘純
- DEBUG("Parse GPS error");
- RxBufLen = 0;
- }
- }
-#else
- RxBufLen = 0; //PC妯℃嫙鐢ㄦ椂
-#endif
- }
- }
- if (res == 0) {
- UninitSerialPort(RTK_MODULE_UART);
- }
- pthread_exit(NULL);
-}
-
void handleUnrecognisedNMEA(const uint8_t *data, uint16_t length) {
char buff[4096] = {0};
memcpy(buff, data, MIN(length, 4000));
-// DEBUG("handleUnrecognisedNMEA: %s", buff);
+ DEBUG("handleUnrecognisedNMEA: %s", buff);
if (length >= 100) {
string cs(buff);
@@ -280,12 +163,20 @@
}
}
+static bool bbs = false;
+
void handleGPGGA(const struct nmea *s)
{
static uint32_t qfCnt = 0;
// DEBUG("handleGPGGA num = %d", s->nmea_num);
if (s->nmea_num >= 10) {
+
+ if (!bbs) {
+ bbs = true;
+ RebootModule();
+ }
+
lostCnt = 0;
AppTimer_delete(GpsDataTimeout);
AppTimer_add(GpsDataTimeout, D_SEC(5));
@@ -325,6 +216,7 @@
// 璁$畻涓ぎ瀛愬崍绾�
int qf = str2int(s->nmea_value[5].data, s->nmea_value[5].length);
+
if (qf > 0) {
qfCnt++;
if (needSetPjk && qfCnt >= 3) {
@@ -430,34 +322,6 @@
str2float(&CurrRTKInfo.y, s->nmea_value[2].data, s->nmea_value[2].length);
str2float(&CurrRTKInfo.x, s->nmea_value[4].data, s->nmea_value[4].length);
- static double sbx = -12;
- static double sby = 27;
-
-// CurrRTKInfo.x = (-2.8984 - 4.913)/2;
-// CurrRTKInfo.y = (31.6962 + 29.4974)/2;
-
- sbx += 0.01;
- sby += 0.01;
-
-// const double by1 = 28.013;
-// const double bx1 = -11.9669;
-//
-// const double by2 = 29.3232;
-// const double bx2 = -9.5057;
-//
-// static double xx = -10.9669, yy = 28.013;
-//
-// CurrRTKInfo.y = yy;
-// CurrRTKInfo.x = xx;
-//
-// if (forwardx) {
-// xx += 0.02;
-// yy += 0.02 * (by2 - by1) / (bx2 - bx1);
-// } else {
-// xx -= 0.02;
-// yy -= 0.02 * (by2 - by1) / (bx2 - bx1);
-// }
-
if (CurrRTKInfo.hh == hh && CurrRTKInfo.mm == mm && CurrRTKInfo.ss == ss && CurrRTKInfo.dss == dss) {
PlatformStatusChanged(RTK_UPDATE_EVT, (uint8_t *)&CurrRTKInfo, sizeof(CurrRTKInfo));
// UpdateRTKInfo(&CurrRTKInfo);
@@ -484,13 +348,6 @@
str2float(&CurrRTKInfo.pitch, s->nmea_value[2].data, s->nmea_value[2].length);
str2float(&CurrRTKInfo.roll, s->nmea_value[3].data, s->nmea_value[3].length);
-// CurrRTKInfo.heading = 60;
-
- static double deg = 0;
-// CurrRTKInfo.heading = deg;
- deg += 2.0;
- if (deg >= 360) deg = 0;
-
if (CurrRTKInfo.hh == hh && CurrRTKInfo.mm == mm && CurrRTKInfo.ss == ss && CurrRTKInfo.dss == dss) {
PlatformStatusChanged(RTK_UPDATE_EVT, (uint8_t *)&CurrRTKInfo, sizeof(CurrRTKInfo));
// UpdateRTKInfo(&CurrRTKInfo);
@@ -507,15 +364,13 @@
static void CheckPjkParam(void)
{
- WriteRtk(RTK_MODULE_UART, INQ_PJK_PARAM, strlen(INQ_PJK_PARAM));
+ WriteRtkCommand(INQ_PJK_PARAM, strlen(INQ_PJK_PARAM));
DEBUG("鑾峰彇PJK鍙傛暟...");
AppTimer_delete(CheckPjkParamTimeout);
AppTimer_add(CheckPjkParamTimeout, D_SEC(3));
}
-static void CheckPjkParamTimeout(union sigval sig) {
- AppTimer_delete(CheckPjkParamTimeout);
-
+static void CheckPjkParamTimeout(apptimer_var_t val) {
DEBUG("鑾峰彇PJK鍙傛暟瓒呮椂");
uint8_t buff[33];
@@ -529,7 +384,7 @@
static int WriteBluetooth(int id, const void *buf, int len)
{
// SendToBluetooth((uint8_t *)buf, len);
- SendMcuCommand(0x000B, (uint8_t *)buf, len);
+// SendMcuCommand(0x000B, (uint8_t *)buf, len);
return len;
}
@@ -537,14 +392,13 @@
{
AppTimer_delete(VersionTimeout);
AppTimer_add(VersionTimeout, D_SEC(3));
- WriteRtk(RTK_MODULE_UART, CMD_VERSION, strlen(CMD_VERSION));
+ WriteRtkCommand(CMD_VERSION, strlen(CMD_VERSION));
DEBUG("鑾峰彇鐗堟湰...");
}
-static void VersionTimeout(union sigval sig)
+static void VersionTimeout(apptimer_var_t val)
{
- AppTimer_delete(VersionTimeout);
DEBUG("鐗堟湰鑾峰彇瓒呮椂");
GetModuleVersion();
@@ -554,10 +408,8 @@
PlatformStatusChanged(RTK_STATUS_EVT, buff, 33);
}
-static void GpsDataTimeout(union sigval sig)
+static void GpsDataTimeout(apptimer_var_t val)
{
- AppTimer_delete(GpsDataTimeout);
-
if (++lostCnt >= 3) {
DEBUG("RTK妯″潡鏀朵笉鍒癎PS鏁版嵁");
GetModuleVersion();
--
Gitblit v1.8.0