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