From 91534e59ac99449404bc9ad96696662044dd0afc Mon Sep 17 00:00:00 2001
From: yy1717 <fctom1215@outlook.com>
Date: 星期五, 10 一月 2020 17:04:04 +0800
Subject: [PATCH] s
---
lib/src/main/cpp/rtk_module/rtk.cpp | 99 ++++++++++++++++++++++++-------------------------
1 files changed, 48 insertions(+), 51 deletions(-)
diff --git a/lib/src/main/cpp/rtk_module/rtk.cpp b/lib/src/main/cpp/rtk_module/rtk.cpp
index 6a2c6fe..8515bb4 100644
--- a/lib/src/main/cpp/rtk_module/rtk.cpp
+++ b/lib/src/main/cpp/rtk_module/rtk.cpp
@@ -38,8 +38,8 @@
static gpsStatus_t gpsStatus;
static int tra_hh, tra_mm, tra_ss, tra_dss;
-struct rtk_info CurrRTKInfo;
-static time_t recved_gprmc_time = 0, recved_gpgga_time = 0;;
+
+static rtk_info CurrRTKInfo;
static void CheckPjkParam(void);
static void CheckPjkParamTimeout(union sigval sig);
@@ -49,10 +49,12 @@
void ConfigRTKModule(void)
{
// TODO
+ DEBUG("ConfigRTKModule");
memset(&CurrRTKInfo, 0, sizeof(CurrRTKInfo));
tra_hh = tra_mm = tra_ss = tra_dss = 0;
memset(&gpsStatus, 0, sizeof(gpsStatus));
+ gpsStatus.hh = -1;
static struct serial_config serialConfig;
@@ -228,48 +230,38 @@
{
DEBUG("handleGPGGA num = %d", s->nmea_num);
if (s->nmea_num >= 10) {
+ gpsStatus.gps_status = str2int(s->nmea_value[5].data, s->nmea_value[5].length);
+
+ int hh = str2int(s->nmea_value[0].data, 2);
+ int mm = str2int(s->nmea_value[0].data + 2, 2);
+ int ss = str2int(s->nmea_value[0].data + 4, 2);
+ int mss = str2int(s->nmea_value[0].data + 7, 2);
+
double lat1, lat2, lon1, lon2, alt;
- int qf;
+ str2float(&lat1, s->nmea_value[1].data, 2);
+ str2float(&lat2, s->nmea_value[1].data+2, s->nmea_value[1].length-2);
- qf = str2int(s->nmea_value[5].data, s->nmea_value[5].length);
+ str2float(&lon1, s->nmea_value[3].data, 3);
+ str2float(&lon2, s->nmea_value[3].data+3, s->nmea_value[3].length-3);
- if (qf > 0) {
- str2float(&lat1, s->nmea_value[1].data, 2);
- str2float(&lat2, s->nmea_value[1].data+2, s->nmea_value[1].length-2);
+ lat1 = lat1 + lat2/60.0;
+ lon1 = lon1 + lon2/60.0;
- str2float(&lon1, s->nmea_value[3].data, 3);
- str2float(&lon2, s->nmea_value[3].data+3, s->nmea_value[3].length-3);
+ str2float(&alt, s->nmea_value[8].data, s->nmea_value[8].length);
- lat1 = lat1 + lat2/60.0;
- lon1 = lon1 + lon2/60.0;
+ gpsStatus.latitude = lat1;
+ gpsStatus.longitude = lon1;
+ gpsStatus.altitude = alt;
+ gpsStatus.satNum = str2int(s->nmea_value[6].data, s->nmea_value[6].length);
- str2float(&alt, s->nmea_value[8].data, s->nmea_value[8].length);
-
- gpsStatus.gps_status = 1;
- gpsStatus.latitude = (uint32_t)(lat1 * 1000000);
- gpsStatus.longitude = (uint32_t)(lon1 * 1000000);
-
-// char buff1[32] = {0};
-// char buff2[32] = {0};
-// char buff3[32] = {0};
-//
-// memcpy(buff1, s->nmea_value[1].data, s->nmea_value[1].length);
-// memcpy(buff2, s->nmea_value[3].data, s->nmea_value[3].length);
-// memcpy(buff3, s->nmea_value[8].data, s->nmea_value[8].length);
-//
-// DEBUG("%s %s %s: lat = %ld lon = %ld alt = %f", buff1, buff2, buff3, gpsStatus.latitude, gpsStatus.longitude, alt);
-
- gpsStatus.altitude = (int) fabs(alt);
-
- recved_gpgga_time = AppTimer_GetTickCount();
-
- if (abs(recved_gpgga_time - recved_gprmc_time) < 500) {
- RequestRtkDownload(gpsStatus.latitude, gpsStatus.longitude, gpsStatus.altitude,
- gpsStatus.bcd_time, 1);
- }
- } else {
- gpsStatus.gps_status = 0;
+ if (hh == gpsStatus.hh && mm == gpsStatus.mm && ss == gpsStatus.ss && mss == gpsStatus.mss) {
+ // 鍚屾鐨凴MC娑堟伅涔熸敹闆嗕簡
+ PlatformStatusChanged(GPS_UPDATE_EVT, (uint8_t *)&gpsStatus, sizeof(gpsStatus));
}
+ gpsStatus.hh = hh;
+ gpsStatus.mm = mm;
+ gpsStatus.ss = ss;
+ gpsStatus.mss = mss;
}
}
@@ -282,29 +274,32 @@
void handleGPRMC(const struct nmea *s)
{
DEBUG("handleGPRMC num = %d", s->nmea_num);
- if (s->nmea_num >= 9) {
+
+ if (s->nmea_num >= 9) {
int hh = str2int(s->nmea_value[0].data, 2);
int mm = str2int(s->nmea_value[0].data + 2, 2);
int ss = str2int(s->nmea_value[0].data + 4, 2);
+ int mss = str2int(s->nmea_value[0].data + 7, 2);
- int DD = str2int(s->nmea_value[8].data, 2);
- int MM = str2int(s->nmea_value[8].data + 2, 2);
- int YY = str2int(s->nmea_value[8].data + 4, 2);
+ gpsStatus.DD = str2int(s->nmea_value[8].data, 2);
+ gpsStatus.MM = str2int(s->nmea_value[8].data + 2, 2);
+ gpsStatus.YY = str2int(s->nmea_value[8].data + 4, 2);
- gpsStatus.bcd_time[0] = ((YY/10)<<4) + (YY%10);
- gpsStatus.bcd_time[1] = ((MM/10)<<4) + (MM%10);
- gpsStatus.bcd_time[2] = ((DD/10)<<4) + (DD%10);
- gpsStatus.bcd_time[3] = ((hh/10)<<4) + (hh%10);
- gpsStatus.bcd_time[4] = ((mm/10)<<4) + (mm%10);
- gpsStatus.bcd_time[5] = ((ss/10)<<4) + (ss%10);
+ double speed;
- recved_gprmc_time = AppTimer_GetTickCount();
+ str2float(&speed, s->nmea_value[6].data, s->nmea_value[6].length);
- if (abs(recved_gpgga_time - recved_gprmc_time) < 500) {
- RequestRtkDownload(gpsStatus.latitude, gpsStatus.longitude, gpsStatus.altitude,
- gpsStatus.bcd_time, 1);
+ gpsStatus.speed = speed * 1.85184; // 鑺� -> 鍏噷
+
+ if (hh == gpsStatus.hh && mm == gpsStatus.mm && ss == gpsStatus.ss && mss == gpsStatus.mss) {
+ // 鍚屾鐨凣GA娑堟伅涔熸敹闆嗕簡
+ PlatformStatusChanged(GPS_UPDATE_EVT, (uint8_t *)&gpsStatus, sizeof(gpsStatus));
}
+ gpsStatus.hh = hh;
+ gpsStatus.mm = mm;
+ gpsStatus.ss = ss;
+ gpsStatus.mss = mss;
}
}
@@ -379,6 +374,7 @@
// }
if (CurrRTKInfo.hh == tra_hh && CurrRTKInfo.mm == tra_mm && CurrRTKInfo.ss == tra_ss && CurrRTKInfo.dss == tra_dss) {
+ PlatformStatusChanged(RTK_UPDATE_EVT, (uint8_t *)&CurrRTKInfo, sizeof(CurrRTKInfo));
UpdateRTKInfo(&CurrRTKInfo);
// up_num++;
/*if ((up_num % 5) == 0)*/ {
@@ -400,6 +396,7 @@
// CurrRTKInfo.heading = 60;
if (CurrRTKInfo.hh == tra_hh && CurrRTKInfo.mm == tra_mm && CurrRTKInfo.ss == tra_ss && CurrRTKInfo.dss == tra_dss) {
+ PlatformStatusChanged(RTK_UPDATE_EVT, (uint8_t *)&CurrRTKInfo, sizeof(CurrRTKInfo));
UpdateRTKInfo(&CurrRTKInfo);
// up_num++;
/*if ((up_num % 5) == 0)*/ {
--
Gitblit v1.8.0