Loading gnss/common/utils/default/NmeaFixInfo.cpp +7 −0 Original line number Diff line number Diff line Loading @@ -202,8 +202,15 @@ std::unique_ptr<V2_0::GnssLocation> NmeaFixInfo::getLocationFromInputStr( uint32_t fixId = 0; double lastTimeStamp = 0; for (const auto& line : nmeaRecords) { if (line.compare(0, strlen(GPGA_RECORD_TAG), GPGA_RECORD_TAG) != 0 && line.compare(0, strlen(GPRMC_RECORD_TAG), GPRMC_RECORD_TAG) != 0) { continue; } std::vector<std::string> sentenceValues; splitStr(line, COMMA_SEPARATOR, sentenceValues); if (sentenceValues.size() < MIN_COL_NUM) { continue; } double currentTimeStamp = std::stof(sentenceValues[1]); // If see a new timestamp, report correct location. if ((currentTimeStamp - lastTimeStamp) > TIMESTAMP_EPSILON && Loading gnss/common/utils/default/include/NmeaFixInfo.h +1 −0 Original line number Diff line number Diff line Loading @@ -32,6 +32,7 @@ constexpr char GPRMC_RECORD_TAG[] = "$GPRMC"; constexpr char LINE_SEPARATOR = '\n'; constexpr char COMMA_SEPARATOR = ','; constexpr double TIMESTAMP_EPSILON = 0.001; constexpr int MIN_COL_NUM = 13; /** Helper class to parse and store the GNSS fix details information. */ class NmeaFixInfo { Loading gnss/common/utils/default/include/v2_1/GnssTemplate.h +9 −2 Original line number Diff line number Diff line Loading @@ -196,6 +196,7 @@ std::unique_ptr<V2_0::GnssLocation> GnssTemplate<T_IGnss>::getLocationFromHW() { return nullptr; } while (true) { memset(inputBuffer, 0, INPUT_BUFFER_SIZE); bytes_read = read(mGnssFd, &inputBuffer, INPUT_BUFFER_SIZE); if (bytes_read <= 0) { break; Loading @@ -218,9 +219,14 @@ Return<bool> GnssTemplate<T_IGnss>::start() { auto svStatus = filterBlocklistedSatellitesV2_1(Utils::getMockSvInfoListV2_1()); this->reportSvStatus(svStatus); auto currentLocation = getLocationFromHW(); if (mGnssFd != -1 && currentLocation != nullptr) { if (mGnssFd != -1) { // Only report location if the return from hardware is valid // note that we can not merge these two "if" together, if didn't // get location from hardware, we shouldn't report location, not // report the "default" one. if (currentLocation != nullptr) { this->reportLocation(*currentLocation); } } else { if (sGnssCallback_2_1 != nullptr || sGnssCallback_2_0 != nullptr) { const auto location = Utils::getMockLocationV2_0(); Loading Loading @@ -259,6 +265,7 @@ Return<bool> GnssTemplate<T_IGnss>::stop() { if (mGnssFd != -1) { close(mGnssFd); mGnssFd = -1; mHardwareModeChecked = false; } return true; } Loading Loading
gnss/common/utils/default/NmeaFixInfo.cpp +7 −0 Original line number Diff line number Diff line Loading @@ -202,8 +202,15 @@ std::unique_ptr<V2_0::GnssLocation> NmeaFixInfo::getLocationFromInputStr( uint32_t fixId = 0; double lastTimeStamp = 0; for (const auto& line : nmeaRecords) { if (line.compare(0, strlen(GPGA_RECORD_TAG), GPGA_RECORD_TAG) != 0 && line.compare(0, strlen(GPRMC_RECORD_TAG), GPRMC_RECORD_TAG) != 0) { continue; } std::vector<std::string> sentenceValues; splitStr(line, COMMA_SEPARATOR, sentenceValues); if (sentenceValues.size() < MIN_COL_NUM) { continue; } double currentTimeStamp = std::stof(sentenceValues[1]); // If see a new timestamp, report correct location. if ((currentTimeStamp - lastTimeStamp) > TIMESTAMP_EPSILON && Loading
gnss/common/utils/default/include/NmeaFixInfo.h +1 −0 Original line number Diff line number Diff line Loading @@ -32,6 +32,7 @@ constexpr char GPRMC_RECORD_TAG[] = "$GPRMC"; constexpr char LINE_SEPARATOR = '\n'; constexpr char COMMA_SEPARATOR = ','; constexpr double TIMESTAMP_EPSILON = 0.001; constexpr int MIN_COL_NUM = 13; /** Helper class to parse and store the GNSS fix details information. */ class NmeaFixInfo { Loading
gnss/common/utils/default/include/v2_1/GnssTemplate.h +9 −2 Original line number Diff line number Diff line Loading @@ -196,6 +196,7 @@ std::unique_ptr<V2_0::GnssLocation> GnssTemplate<T_IGnss>::getLocationFromHW() { return nullptr; } while (true) { memset(inputBuffer, 0, INPUT_BUFFER_SIZE); bytes_read = read(mGnssFd, &inputBuffer, INPUT_BUFFER_SIZE); if (bytes_read <= 0) { break; Loading @@ -218,9 +219,14 @@ Return<bool> GnssTemplate<T_IGnss>::start() { auto svStatus = filterBlocklistedSatellitesV2_1(Utils::getMockSvInfoListV2_1()); this->reportSvStatus(svStatus); auto currentLocation = getLocationFromHW(); if (mGnssFd != -1 && currentLocation != nullptr) { if (mGnssFd != -1) { // Only report location if the return from hardware is valid // note that we can not merge these two "if" together, if didn't // get location from hardware, we shouldn't report location, not // report the "default" one. if (currentLocation != nullptr) { this->reportLocation(*currentLocation); } } else { if (sGnssCallback_2_1 != nullptr || sGnssCallback_2_0 != nullptr) { const auto location = Utils::getMockLocationV2_0(); Loading Loading @@ -259,6 +265,7 @@ Return<bool> GnssTemplate<T_IGnss>::stop() { if (mGnssFd != -1) { close(mGnssFd); mGnssFd = -1; mHardwareModeChecked = false; } return true; } Loading