diff options
| author | Yuchen He <yuchenhe@google.com> | 2022-01-20 22:57:09 +0000 |
|---|---|---|
| committer | Yuchen He <yuchenhe@google.com> | 2022-01-20 23:17:16 +0000 |
| commit | 090f16c0b8687d569aab0977885ef45ced5d25c4 (patch) | |
| tree | d3f7a104c0cfc3359e913a141de89e291886febb | |
| parent | b4a2d1e64d37b985c00cd6d1e83a1d3b412a66f4 (diff) | |
Supported synchronized fixed location and measurement from device files
Replace NMEA by one row fixed location data
Test: atest VtsHalGnssTargetTest
Test: launch_cvd -cpus 16 -memory_mb 16192 --start_gnss_proxy --gnss_file_path=/usr/local/google/home/yuchenhe/Downloads/raw.txt --fixed_location_file_path=/google/data/rw/users/yu/yuchenhe/input.txt
Bug: 213225295
Change-Id: Ide7bbb3e81a90414496084691227bd95a2e7af18
| -rw-r--r-- | gnss/aidl/default/Gnss.cpp | 8 | ||||
| -rw-r--r-- | gnss/common/utils/default/DeviceFileReader.cpp | 22 | ||||
| -rw-r--r-- | gnss/common/utils/default/GnssReplayUtils.cpp | 13 | ||||
| -rw-r--r-- | gnss/common/utils/default/include/Constants.h | 1 | ||||
| -rw-r--r-- | gnss/common/utils/default/include/GnssReplayUtils.h | 4 |
5 files changed, 40 insertions, 8 deletions
diff --git a/gnss/aidl/default/Gnss.cpp b/gnss/aidl/default/Gnss.cpp index 6331dfd8dc..73f4085dd2 100644 --- a/gnss/aidl/default/Gnss.cpp +++ b/gnss/aidl/default/Gnss.cpp @@ -22,6 +22,7 @@ #include "AGnss.h" #include "AGnssRil.h" #include "DeviceFileReader.h" +#include "FixLocationParser.h" #include "GnssAntennaInfo.h" #include "GnssBatching.h" #include "GnssConfiguration.h" @@ -32,11 +33,9 @@ #include "GnssPsds.h" #include "GnssVisibilityControl.h" #include "MeasurementCorrectionsInterface.h" -#include "NmeaFixInfo.h" #include "Utils.h" namespace aidl::android::hardware::gnss { -using ::android::hardware::gnss::common::NmeaFixInfo; using ::android::hardware::gnss::common::Utils; using ndk::ScopedAStatus; @@ -70,9 +69,12 @@ ScopedAStatus Gnss::setCallback(const std::shared_ptr<IGnssCallback>& callback) } std::unique_ptr<GnssLocation> Gnss::getLocationFromHW() { + if (!::android::hardware::gnss::common::ReplayUtils::hasFixedLocationDeviceFile()) { + return nullptr; + } std::string inputStr = ::android::hardware::gnss::common::DeviceFileReader::Instance().getLocationData(); - return ::android::hardware::gnss::common::NmeaFixInfo::getAidlLocationFromInputStr(inputStr); + return ::android::hardware::gnss::common::FixLocationParser::getLocationFromInputStr(inputStr); } ScopedAStatus Gnss::start() { diff --git a/gnss/common/utils/default/DeviceFileReader.cpp b/gnss/common/utils/default/DeviceFileReader.cpp index 7d4fb04339..dfc086a8b8 100644 --- a/gnss/common/utils/default/DeviceFileReader.cpp +++ b/gnss/common/utils/default/DeviceFileReader.cpp @@ -22,8 +22,17 @@ namespace common { void DeviceFileReader::getDataFromDeviceFile(const std::string& command, int mMinIntervalMs) { char inputBuffer[INPUT_BUFFER_SIZE]; - int mGnssFd = open(ReplayUtils::getGnssPath().c_str(), - O_RDWR | O_NONBLOCK); + std::string deviceFilePath = ""; + if (command == CMD_GET_LOCATION) { + deviceFilePath = ReplayUtils::getFixedLocationPath(); + } else if (command == CMD_GET_RAWMEASUREMENT) { + deviceFilePath = ReplayUtils::getGnssPath(); + } else { + // Invalid command + return; + } + + int mGnssFd = open(deviceFilePath.c_str(), O_RDWR | O_NONBLOCK); if (mGnssFd == -1) { return; @@ -68,10 +77,13 @@ void DeviceFileReader::getDataFromDeviceFile(const std::string& command, int mMi } // Cache the injected data. - if (ReplayUtils::isGnssRawMeasurement(inputStr)) { - data_[CMD_GET_RAWMEASUREMENT] = inputStr; - } else if (ReplayUtils::isNMEA(inputStr)) { + if (command == CMD_GET_LOCATION) { + // TODO validate data data_[CMD_GET_LOCATION] = inputStr; + } else if (command == CMD_GET_RAWMEASUREMENT) { + if (ReplayUtils::isGnssRawMeasurement(inputStr)) { + data_[CMD_GET_RAWMEASUREMENT] = inputStr; + } } } diff --git a/gnss/common/utils/default/GnssReplayUtils.cpp b/gnss/common/utils/default/GnssReplayUtils.cpp index 535647716b..37da57171f 100644 --- a/gnss/common/utils/default/GnssReplayUtils.cpp +++ b/gnss/common/utils/default/GnssReplayUtils.cpp @@ -29,11 +29,24 @@ std::string ReplayUtils::getGnssPath() { return GNSS_PATH; } +std::string ReplayUtils::getFixedLocationPath() { + char devname_value[PROPERTY_VALUE_MAX] = ""; + if (property_get("debug.location.fixedlocation.devname", devname_value, NULL) > 0) { + return devname_value; + } + return FIXED_LOCATION_PATH; +} + bool ReplayUtils::hasGnssDeviceFile() { struct stat sb; return stat(getGnssPath().c_str(), &sb) != -1; } +bool ReplayUtils::hasFixedLocationDeviceFile() { + struct stat sb; + return stat(getFixedLocationPath().c_str(), &sb) != -1; +} + bool ReplayUtils::isGnssRawMeasurement(const std::string& inputStr) { // TODO: add more logic check to by pass invalid data. return !inputStr.empty() && (inputStr.find("Raw") != std::string::npos); diff --git a/gnss/common/utils/default/include/Constants.h b/gnss/common/utils/default/include/Constants.h index f205ba603c..489413e21d 100644 --- a/gnss/common/utils/default/include/Constants.h +++ b/gnss/common/utils/default/include/Constants.h @@ -36,6 +36,7 @@ const float kIrnssL5FreqHz = 1176.45 * 1e6; // Location replay constants constexpr char GNSS_PATH[] = "/dev/gnss0"; +constexpr char FIXED_LOCATION_PATH[] = "/dev/gnss1"; constexpr int INPUT_BUFFER_SIZE = 256; constexpr char CMD_GET_LOCATION[] = "CMD_GET_LOCATION"; constexpr char CMD_GET_RAWMEASUREMENT[] = "CMD_GET_RAWMEASUREMENT"; diff --git a/gnss/common/utils/default/include/GnssReplayUtils.h b/gnss/common/utils/default/include/GnssReplayUtils.h index 32c0e58c0c..d1bbed4b41 100644 --- a/gnss/common/utils/default/include/GnssReplayUtils.h +++ b/gnss/common/utils/default/include/GnssReplayUtils.h @@ -37,10 +37,14 @@ namespace common { struct ReplayUtils { static std::string getGnssPath(); + static std::string getFixedLocationPath(); + static std::string getDataFromDeviceFile(const std::string& command, int mMinIntervalMs); static bool hasGnssDeviceFile(); + static bool hasFixedLocationDeviceFile(); + static bool isGnssRawMeasurement(const std::string& inputStr); static bool isNMEA(const std::string& inputStr); |
