Fix GSI-CTS test failures on rvc-cuttlefish
Bug: 302772063
Bug: 302323260
Bug: 280967958
Bug: 302775394
Test: atest android.location.cts.gnss.GnssMeasurementWhenNoLocationTest
atest android.location.cts.gnss.GnssLocationUpdateIntervalTest
Change-Id: Id1698594df52e7367aa8150bbac5ddc2efe83de7
diff --git a/gnss/2.1/default/Gnss.cpp b/gnss/2.1/default/Gnss.cpp
index 2b327a9..de1b4c5 100644
--- a/gnss/2.1/default/Gnss.cpp
+++ b/gnss/2.1/default/Gnss.cpp
@@ -39,8 +39,10 @@
sp<V2_0::IGnssCallback> Gnss::sGnssCallback_2_0 = nullptr;
sp<V1_1::IGnssCallback> Gnss::sGnssCallback_1_1 = nullptr;
sp<V1_0::IGnssCallback> Gnss::sGnssCallback_1_0 = nullptr;
+constexpr int TTFF_MILLIS = 2200;
-Gnss::Gnss() : mMinIntervalMs(1000), mGnssConfiguration{new GnssConfiguration()} {}
+Gnss::Gnss()
+ : mMinIntervalMs(1000), mGnssConfiguration{new GnssConfiguration()}, mFirstFixReceived(false) {}
Gnss::~Gnss() {
stop();
@@ -58,7 +60,10 @@
while (mIsActive == true) {
auto svStatus = filterBlacklistedSatellitesV2_1(Utils::getMockSvInfoListV2_1());
this->reportSvStatus(svStatus);
-
+ if (!mFirstFixReceived) {
+ std::this_thread::sleep_for(std::chrono::milliseconds(TTFF_MILLIS));
+ mFirstFixReceived = true;
+ }
if (sGnssCallback_2_1 != nullptr || sGnssCallback_2_0 != nullptr) {
const auto location = Utils::getMockLocationV2_0();
this->reportLocation(location);
@@ -132,8 +137,9 @@
return true;
}
-Return<void> Gnss::deleteAidingData(V1_0::IGnss::GnssAidingData) {
- // TODO implement
+Return<void> Gnss::deleteAidingData(V1_0::IGnss::GnssAidingData aidingDataFlags) {
+ ALOGD("deleteAidingData. flags:%d", (int)aidingDataFlags);
+ mFirstFixReceived = false;
return Void();
}
diff --git a/gnss/2.1/default/Gnss.h b/gnss/2.1/default/Gnss.h
index bd5e6e8..7047ae1 100644
--- a/gnss/2.1/default/Gnss.h
+++ b/gnss/2.1/default/Gnss.h
@@ -106,6 +106,7 @@
std::atomic<long> mMinIntervalMs;
sp<GnssConfiguration> mGnssConfiguration;
std::atomic<bool> mIsActive;
+ std::atomic<bool> mFirstFixReceived;
std::thread mThread;
mutable std::mutex mMutex;
hidl_vec<GnssSvInfo> filterBlacklistedSatellitesV2_1(hidl_vec<GnssSvInfo> gnssSvInfoList);
diff --git a/gnss/2.1/default/GnssMeasurement.cpp b/gnss/2.1/default/GnssMeasurement.cpp
index df38bf9..9e13d12 100644
--- a/gnss/2.1/default/GnssMeasurement.cpp
+++ b/gnss/2.1/default/GnssMeasurement.cpp
@@ -65,15 +65,11 @@
Return<V1_0::IGnssMeasurement::GnssMeasurementStatus> GnssMeasurement::setCallback_2_0(
const sp<V2_0::IGnssMeasurementCallback>& callback, bool) {
ALOGD("setCallback_2_0");
- std::unique_lock<std::mutex> lock(mMutex);
- sCallback_2_0 = callback;
-
- if (mIsActive) {
- ALOGW("GnssMeasurement callback already set. Resetting the callback...");
- stop();
+ {
+ std::unique_lock<std::mutex> lock(mMutex);
+ sCallback_2_0 = callback;
}
start();
-
return V1_0::IGnssMeasurement::GnssMeasurementStatus::SUCCESS;
}
@@ -81,15 +77,11 @@
Return<V1_0::IGnssMeasurement::GnssMeasurementStatus> GnssMeasurement::setCallback_2_1(
const sp<V2_1::IGnssMeasurementCallback>& callback, bool) {
ALOGD("setCallback_2_1");
- std::unique_lock<std::mutex> lock(mMutex);
- sCallback_2_1 = callback;
-
- if (mIsActive) {
- ALOGW("GnssMeasurement callback already set. Resetting the callback...");
- stop();
+ {
+ std::unique_lock<std::mutex> lock(mMutex);
+ sCallback_2_1 = callback;
}
start();
-
return V1_0::IGnssMeasurement::GnssMeasurementStatus::SUCCESS;
}
diff --git a/gnss/common/utils/default/Utils.cpp b/gnss/common/utils/default/Utils.cpp
index 386090e..e943013 100644
--- a/gnss/common/utils/default/Utils.cpp
+++ b/gnss/common/utils/default/Utils.cpp
@@ -150,7 +150,8 @@
.verticalAccuracyMeters = kMockVerticalAccuracyMeters,
.speedAccuracyMetersPerSecond = kMockSpeedAccuracyMetersPerSecond,
.bearingAccuracyDegrees = kMockBearingAccuracyDegrees,
- .timestamp = kMockTimestamp};
+ .timestamp =
+ static_cast<int64_t>(kMockTimestamp + ::android::elapsedRealtimeNano() / 1e6)};
return location;
}