1*4d7e907cSAndroid Build Coastguard Worker /*
2*4d7e907cSAndroid Build Coastguard Worker * Copyright (C) 2018 The Android Open Source Project
3*4d7e907cSAndroid Build Coastguard Worker *
4*4d7e907cSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
5*4d7e907cSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
6*4d7e907cSAndroid Build Coastguard Worker * You may obtain a copy of the License at
7*4d7e907cSAndroid Build Coastguard Worker *
8*4d7e907cSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
9*4d7e907cSAndroid Build Coastguard Worker *
10*4d7e907cSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
11*4d7e907cSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
12*4d7e907cSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*4d7e907cSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
14*4d7e907cSAndroid Build Coastguard Worker * limitations under the License.
15*4d7e907cSAndroid Build Coastguard Worker */
16*4d7e907cSAndroid Build Coastguard Worker
17*4d7e907cSAndroid Build Coastguard Worker #define LOG_TAG "Gnss"
18*4d7e907cSAndroid Build Coastguard Worker
19*4d7e907cSAndroid Build Coastguard Worker #include "Gnss.h"
20*4d7e907cSAndroid Build Coastguard Worker
21*4d7e907cSAndroid Build Coastguard Worker #include <log/log.h>
22*4d7e907cSAndroid Build Coastguard Worker
23*4d7e907cSAndroid Build Coastguard Worker #include "AGnss.h"
24*4d7e907cSAndroid Build Coastguard Worker #include "AGnssRil.h"
25*4d7e907cSAndroid Build Coastguard Worker #include "GnssBatching.h"
26*4d7e907cSAndroid Build Coastguard Worker #include "GnssConfiguration.h"
27*4d7e907cSAndroid Build Coastguard Worker #include "GnssMeasurement.h"
28*4d7e907cSAndroid Build Coastguard Worker #include "GnssMeasurementCorrections.h"
29*4d7e907cSAndroid Build Coastguard Worker #include "GnssVisibilityControl.h"
30*4d7e907cSAndroid Build Coastguard Worker #include "Utils.h"
31*4d7e907cSAndroid Build Coastguard Worker
32*4d7e907cSAndroid Build Coastguard Worker using ::android::hardware::Status;
33*4d7e907cSAndroid Build Coastguard Worker using ::android::hardware::gnss::common::Utils;
34*4d7e907cSAndroid Build Coastguard Worker using ::android::hardware::gnss::measurement_corrections::V1_0::implementation::
35*4d7e907cSAndroid Build Coastguard Worker GnssMeasurementCorrections;
36*4d7e907cSAndroid Build Coastguard Worker using ::android::hardware::gnss::visibility_control::V1_0::implementation::GnssVisibilityControl;
37*4d7e907cSAndroid Build Coastguard Worker
38*4d7e907cSAndroid Build Coastguard Worker namespace android {
39*4d7e907cSAndroid Build Coastguard Worker namespace hardware {
40*4d7e907cSAndroid Build Coastguard Worker namespace gnss {
41*4d7e907cSAndroid Build Coastguard Worker namespace V2_0 {
42*4d7e907cSAndroid Build Coastguard Worker namespace implementation {
43*4d7e907cSAndroid Build Coastguard Worker
44*4d7e907cSAndroid Build Coastguard Worker using GnssSvFlags = IGnssCallback::GnssSvFlags;
45*4d7e907cSAndroid Build Coastguard Worker
46*4d7e907cSAndroid Build Coastguard Worker sp<V2_0::IGnssCallback> Gnss::sGnssCallback_2_0 = nullptr;
47*4d7e907cSAndroid Build Coastguard Worker sp<V1_1::IGnssCallback> Gnss::sGnssCallback_1_1 = nullptr;
48*4d7e907cSAndroid Build Coastguard Worker
Gnss()49*4d7e907cSAndroid Build Coastguard Worker Gnss::Gnss() : mMinIntervalMs(1000) {}
50*4d7e907cSAndroid Build Coastguard Worker
~Gnss()51*4d7e907cSAndroid Build Coastguard Worker Gnss::~Gnss() {
52*4d7e907cSAndroid Build Coastguard Worker stop();
53*4d7e907cSAndroid Build Coastguard Worker }
54*4d7e907cSAndroid Build Coastguard Worker
55*4d7e907cSAndroid Build Coastguard Worker // Methods from V1_0::IGnss follow.
setCallback(const sp<V1_0::IGnssCallback> &)56*4d7e907cSAndroid Build Coastguard Worker Return<bool> Gnss::setCallback(const sp<V1_0::IGnssCallback>&) {
57*4d7e907cSAndroid Build Coastguard Worker // TODO(b/124012850): Implement function.
58*4d7e907cSAndroid Build Coastguard Worker return bool{};
59*4d7e907cSAndroid Build Coastguard Worker }
60*4d7e907cSAndroid Build Coastguard Worker
start()61*4d7e907cSAndroid Build Coastguard Worker Return<bool> Gnss::start() {
62*4d7e907cSAndroid Build Coastguard Worker if (mIsActive) {
63*4d7e907cSAndroid Build Coastguard Worker ALOGW("Gnss has started. Restarting...");
64*4d7e907cSAndroid Build Coastguard Worker stop();
65*4d7e907cSAndroid Build Coastguard Worker }
66*4d7e907cSAndroid Build Coastguard Worker
67*4d7e907cSAndroid Build Coastguard Worker mIsActive = true;
68*4d7e907cSAndroid Build Coastguard Worker mThread = std::thread([this]() {
69*4d7e907cSAndroid Build Coastguard Worker while (mIsActive == true) {
70*4d7e907cSAndroid Build Coastguard Worker const auto location = Utils::getMockLocationV2_0();
71*4d7e907cSAndroid Build Coastguard Worker this->reportLocation(location);
72*4d7e907cSAndroid Build Coastguard Worker
73*4d7e907cSAndroid Build Coastguard Worker std::this_thread::sleep_for(std::chrono::milliseconds(mMinIntervalMs));
74*4d7e907cSAndroid Build Coastguard Worker }
75*4d7e907cSAndroid Build Coastguard Worker });
76*4d7e907cSAndroid Build Coastguard Worker return true;
77*4d7e907cSAndroid Build Coastguard Worker }
78*4d7e907cSAndroid Build Coastguard Worker
stop()79*4d7e907cSAndroid Build Coastguard Worker Return<bool> Gnss::stop() {
80*4d7e907cSAndroid Build Coastguard Worker mIsActive = false;
81*4d7e907cSAndroid Build Coastguard Worker if (mThread.joinable()) {
82*4d7e907cSAndroid Build Coastguard Worker mThread.join();
83*4d7e907cSAndroid Build Coastguard Worker }
84*4d7e907cSAndroid Build Coastguard Worker return true;
85*4d7e907cSAndroid Build Coastguard Worker }
86*4d7e907cSAndroid Build Coastguard Worker
cleanup()87*4d7e907cSAndroid Build Coastguard Worker Return<void> Gnss::cleanup() {
88*4d7e907cSAndroid Build Coastguard Worker // TODO(b/124012850): Implement function.
89*4d7e907cSAndroid Build Coastguard Worker return Void();
90*4d7e907cSAndroid Build Coastguard Worker }
91*4d7e907cSAndroid Build Coastguard Worker
injectTime(int64_t,int64_t,int32_t)92*4d7e907cSAndroid Build Coastguard Worker Return<bool> Gnss::injectTime(int64_t, int64_t, int32_t) {
93*4d7e907cSAndroid Build Coastguard Worker // TODO(b/124012850): Implement function.
94*4d7e907cSAndroid Build Coastguard Worker return bool{};
95*4d7e907cSAndroid Build Coastguard Worker }
96*4d7e907cSAndroid Build Coastguard Worker
injectLocation(double,double,float)97*4d7e907cSAndroid Build Coastguard Worker Return<bool> Gnss::injectLocation(double, double, float) {
98*4d7e907cSAndroid Build Coastguard Worker // TODO(b/124012850): Implement function.
99*4d7e907cSAndroid Build Coastguard Worker return bool{};
100*4d7e907cSAndroid Build Coastguard Worker }
101*4d7e907cSAndroid Build Coastguard Worker
deleteAidingData(V1_0::IGnss::GnssAidingData)102*4d7e907cSAndroid Build Coastguard Worker Return<void> Gnss::deleteAidingData(V1_0::IGnss::GnssAidingData) {
103*4d7e907cSAndroid Build Coastguard Worker // TODO(b/124012850): Implement function.
104*4d7e907cSAndroid Build Coastguard Worker return Void();
105*4d7e907cSAndroid Build Coastguard Worker }
106*4d7e907cSAndroid Build Coastguard Worker
setPositionMode(V1_0::IGnss::GnssPositionMode,V1_0::IGnss::GnssPositionRecurrence,uint32_t,uint32_t,uint32_t)107*4d7e907cSAndroid Build Coastguard Worker Return<bool> Gnss::setPositionMode(V1_0::IGnss::GnssPositionMode,
108*4d7e907cSAndroid Build Coastguard Worker V1_0::IGnss::GnssPositionRecurrence, uint32_t, uint32_t,
109*4d7e907cSAndroid Build Coastguard Worker uint32_t) {
110*4d7e907cSAndroid Build Coastguard Worker return true;
111*4d7e907cSAndroid Build Coastguard Worker }
112*4d7e907cSAndroid Build Coastguard Worker
getExtensionAGnssRil()113*4d7e907cSAndroid Build Coastguard Worker Return<sp<V1_0::IAGnssRil>> Gnss::getExtensionAGnssRil() {
114*4d7e907cSAndroid Build Coastguard Worker // TODO(b/124012850): Implement function.
115*4d7e907cSAndroid Build Coastguard Worker return sp<V1_0::IAGnssRil>{};
116*4d7e907cSAndroid Build Coastguard Worker }
117*4d7e907cSAndroid Build Coastguard Worker
getExtensionGnssGeofencing()118*4d7e907cSAndroid Build Coastguard Worker Return<sp<V1_0::IGnssGeofencing>> Gnss::getExtensionGnssGeofencing() {
119*4d7e907cSAndroid Build Coastguard Worker // TODO(b/124012850): Implement function.
120*4d7e907cSAndroid Build Coastguard Worker return sp<V1_0::IGnssGeofencing>{};
121*4d7e907cSAndroid Build Coastguard Worker }
122*4d7e907cSAndroid Build Coastguard Worker
getExtensionAGnss()123*4d7e907cSAndroid Build Coastguard Worker Return<sp<V1_0::IAGnss>> Gnss::getExtensionAGnss() {
124*4d7e907cSAndroid Build Coastguard Worker // TODO(b/124012850): Implement function.
125*4d7e907cSAndroid Build Coastguard Worker return sp<V1_0::IAGnss>{};
126*4d7e907cSAndroid Build Coastguard Worker }
127*4d7e907cSAndroid Build Coastguard Worker
getExtensionGnssNi()128*4d7e907cSAndroid Build Coastguard Worker Return<sp<V1_0::IGnssNi>> Gnss::getExtensionGnssNi() {
129*4d7e907cSAndroid Build Coastguard Worker // The IGnssNi.hal interface is deprecated in 2.0.
130*4d7e907cSAndroid Build Coastguard Worker return nullptr;
131*4d7e907cSAndroid Build Coastguard Worker }
132*4d7e907cSAndroid Build Coastguard Worker
getExtensionGnssMeasurement()133*4d7e907cSAndroid Build Coastguard Worker Return<sp<V1_0::IGnssMeasurement>> Gnss::getExtensionGnssMeasurement() {
134*4d7e907cSAndroid Build Coastguard Worker // Not supported
135*4d7e907cSAndroid Build Coastguard Worker return nullptr;
136*4d7e907cSAndroid Build Coastguard Worker }
137*4d7e907cSAndroid Build Coastguard Worker
getExtensionGnssNavigationMessage()138*4d7e907cSAndroid Build Coastguard Worker Return<sp<V1_0::IGnssNavigationMessage>> Gnss::getExtensionGnssNavigationMessage() {
139*4d7e907cSAndroid Build Coastguard Worker // TODO(b/124012850): Implement function.
140*4d7e907cSAndroid Build Coastguard Worker return sp<V1_0::IGnssNavigationMessage>{};
141*4d7e907cSAndroid Build Coastguard Worker }
142*4d7e907cSAndroid Build Coastguard Worker
getExtensionXtra()143*4d7e907cSAndroid Build Coastguard Worker Return<sp<V1_0::IGnssXtra>> Gnss::getExtensionXtra() {
144*4d7e907cSAndroid Build Coastguard Worker // TODO(b/124012850): Implement function.
145*4d7e907cSAndroid Build Coastguard Worker return sp<V1_0::IGnssXtra>{};
146*4d7e907cSAndroid Build Coastguard Worker }
147*4d7e907cSAndroid Build Coastguard Worker
getExtensionGnssConfiguration()148*4d7e907cSAndroid Build Coastguard Worker Return<sp<V1_0::IGnssConfiguration>> Gnss::getExtensionGnssConfiguration() {
149*4d7e907cSAndroid Build Coastguard Worker // TODO(b/124012850): Implement function.
150*4d7e907cSAndroid Build Coastguard Worker return sp<V1_0::IGnssConfiguration>{};
151*4d7e907cSAndroid Build Coastguard Worker }
152*4d7e907cSAndroid Build Coastguard Worker
getExtensionGnssDebug()153*4d7e907cSAndroid Build Coastguard Worker Return<sp<V1_0::IGnssDebug>> Gnss::getExtensionGnssDebug() {
154*4d7e907cSAndroid Build Coastguard Worker // TODO(b/124012850): Implement function.
155*4d7e907cSAndroid Build Coastguard Worker return sp<V1_0::IGnssDebug>{};
156*4d7e907cSAndroid Build Coastguard Worker }
157*4d7e907cSAndroid Build Coastguard Worker
getExtensionGnssBatching()158*4d7e907cSAndroid Build Coastguard Worker Return<sp<V1_0::IGnssBatching>> Gnss::getExtensionGnssBatching() {
159*4d7e907cSAndroid Build Coastguard Worker // TODO(b/124012850): Implement function.
160*4d7e907cSAndroid Build Coastguard Worker return sp<V1_0::IGnssBatching>{};
161*4d7e907cSAndroid Build Coastguard Worker }
162*4d7e907cSAndroid Build Coastguard Worker
163*4d7e907cSAndroid Build Coastguard Worker // Methods from V1_1::IGnss follow.
setCallback_1_1(const sp<V1_1::IGnssCallback> & callback)164*4d7e907cSAndroid Build Coastguard Worker Return<bool> Gnss::setCallback_1_1(const sp<V1_1::IGnssCallback>& callback) {
165*4d7e907cSAndroid Build Coastguard Worker ALOGD("Gnss::setCallback_1_1");
166*4d7e907cSAndroid Build Coastguard Worker if (callback == nullptr) {
167*4d7e907cSAndroid Build Coastguard Worker ALOGE("%s: Null callback ignored", __func__);
168*4d7e907cSAndroid Build Coastguard Worker return false;
169*4d7e907cSAndroid Build Coastguard Worker }
170*4d7e907cSAndroid Build Coastguard Worker
171*4d7e907cSAndroid Build Coastguard Worker sGnssCallback_1_1 = callback;
172*4d7e907cSAndroid Build Coastguard Worker
173*4d7e907cSAndroid Build Coastguard Worker uint32_t capabilities = (uint32_t)V1_0::IGnssCallback::Capabilities::MEASUREMENTS;
174*4d7e907cSAndroid Build Coastguard Worker auto ret = sGnssCallback_1_1->gnssSetCapabilitesCb(capabilities);
175*4d7e907cSAndroid Build Coastguard Worker if (!ret.isOk()) {
176*4d7e907cSAndroid Build Coastguard Worker ALOGE("%s: Unable to invoke callback", __func__);
177*4d7e907cSAndroid Build Coastguard Worker }
178*4d7e907cSAndroid Build Coastguard Worker
179*4d7e907cSAndroid Build Coastguard Worker V1_1::IGnssCallback::GnssSystemInfo gnssInfo = {.yearOfHw = 2019};
180*4d7e907cSAndroid Build Coastguard Worker
181*4d7e907cSAndroid Build Coastguard Worker ret = sGnssCallback_1_1->gnssSetSystemInfoCb(gnssInfo);
182*4d7e907cSAndroid Build Coastguard Worker if (!ret.isOk()) {
183*4d7e907cSAndroid Build Coastguard Worker ALOGE("%s: Unable to invoke callback", __func__);
184*4d7e907cSAndroid Build Coastguard Worker }
185*4d7e907cSAndroid Build Coastguard Worker
186*4d7e907cSAndroid Build Coastguard Worker auto gnssName = "Google Mock GNSS Implementation v2.0";
187*4d7e907cSAndroid Build Coastguard Worker ret = sGnssCallback_1_1->gnssNameCb(gnssName);
188*4d7e907cSAndroid Build Coastguard Worker if (!ret.isOk()) {
189*4d7e907cSAndroid Build Coastguard Worker ALOGE("%s: Unable to invoke callback", __func__);
190*4d7e907cSAndroid Build Coastguard Worker }
191*4d7e907cSAndroid Build Coastguard Worker
192*4d7e907cSAndroid Build Coastguard Worker return true;
193*4d7e907cSAndroid Build Coastguard Worker }
194*4d7e907cSAndroid Build Coastguard Worker
setPositionMode_1_1(V1_0::IGnss::GnssPositionMode,V1_0::IGnss::GnssPositionRecurrence,uint32_t,uint32_t,uint32_t,bool)195*4d7e907cSAndroid Build Coastguard Worker Return<bool> Gnss::setPositionMode_1_1(V1_0::IGnss::GnssPositionMode,
196*4d7e907cSAndroid Build Coastguard Worker V1_0::IGnss::GnssPositionRecurrence, uint32_t, uint32_t,
197*4d7e907cSAndroid Build Coastguard Worker uint32_t, bool) {
198*4d7e907cSAndroid Build Coastguard Worker return true;
199*4d7e907cSAndroid Build Coastguard Worker }
200*4d7e907cSAndroid Build Coastguard Worker
getExtensionGnssConfiguration_1_1()201*4d7e907cSAndroid Build Coastguard Worker Return<sp<V1_1::IGnssConfiguration>> Gnss::getExtensionGnssConfiguration_1_1() {
202*4d7e907cSAndroid Build Coastguard Worker // TODO(b/124012850): Implement function.
203*4d7e907cSAndroid Build Coastguard Worker return sp<V1_1::IGnssConfiguration>{};
204*4d7e907cSAndroid Build Coastguard Worker }
205*4d7e907cSAndroid Build Coastguard Worker
getExtensionGnssMeasurement_1_1()206*4d7e907cSAndroid Build Coastguard Worker Return<sp<V1_1::IGnssMeasurement>> Gnss::getExtensionGnssMeasurement_1_1() {
207*4d7e907cSAndroid Build Coastguard Worker ALOGD("Gnss::getExtensionGnssMeasurement_1_1");
208*4d7e907cSAndroid Build Coastguard Worker return new GnssMeasurement();
209*4d7e907cSAndroid Build Coastguard Worker }
210*4d7e907cSAndroid Build Coastguard Worker
injectBestLocation(const V1_0::GnssLocation &)211*4d7e907cSAndroid Build Coastguard Worker Return<bool> Gnss::injectBestLocation(const V1_0::GnssLocation&) {
212*4d7e907cSAndroid Build Coastguard Worker // TODO(b/124012850): Implement function.
213*4d7e907cSAndroid Build Coastguard Worker return bool{};
214*4d7e907cSAndroid Build Coastguard Worker }
215*4d7e907cSAndroid Build Coastguard Worker
216*4d7e907cSAndroid Build Coastguard Worker // Methods from V2_0::IGnss follow.
getExtensionGnssConfiguration_2_0()217*4d7e907cSAndroid Build Coastguard Worker Return<sp<V2_0::IGnssConfiguration>> Gnss::getExtensionGnssConfiguration_2_0() {
218*4d7e907cSAndroid Build Coastguard Worker return new GnssConfiguration{};
219*4d7e907cSAndroid Build Coastguard Worker }
220*4d7e907cSAndroid Build Coastguard Worker
getExtensionGnssDebug_2_0()221*4d7e907cSAndroid Build Coastguard Worker Return<sp<V2_0::IGnssDebug>> Gnss::getExtensionGnssDebug_2_0() {
222*4d7e907cSAndroid Build Coastguard Worker // TODO(b/124012850): Implement function.
223*4d7e907cSAndroid Build Coastguard Worker return sp<V2_0::IGnssDebug>{};
224*4d7e907cSAndroid Build Coastguard Worker }
225*4d7e907cSAndroid Build Coastguard Worker
getExtensionAGnss_2_0()226*4d7e907cSAndroid Build Coastguard Worker Return<sp<V2_0::IAGnss>> Gnss::getExtensionAGnss_2_0() {
227*4d7e907cSAndroid Build Coastguard Worker return new AGnss{};
228*4d7e907cSAndroid Build Coastguard Worker }
229*4d7e907cSAndroid Build Coastguard Worker
getExtensionAGnssRil_2_0()230*4d7e907cSAndroid Build Coastguard Worker Return<sp<V2_0::IAGnssRil>> Gnss::getExtensionAGnssRil_2_0() {
231*4d7e907cSAndroid Build Coastguard Worker return new AGnssRil{};
232*4d7e907cSAndroid Build Coastguard Worker }
233*4d7e907cSAndroid Build Coastguard Worker
getExtensionGnssMeasurement_2_0()234*4d7e907cSAndroid Build Coastguard Worker Return<sp<V2_0::IGnssMeasurement>> Gnss::getExtensionGnssMeasurement_2_0() {
235*4d7e907cSAndroid Build Coastguard Worker ALOGD("Gnss::getExtensionGnssMeasurement_2_0");
236*4d7e907cSAndroid Build Coastguard Worker return new GnssMeasurement();
237*4d7e907cSAndroid Build Coastguard Worker }
238*4d7e907cSAndroid Build Coastguard Worker
239*4d7e907cSAndroid Build Coastguard Worker Return<sp<measurement_corrections::V1_0::IMeasurementCorrections>>
getExtensionMeasurementCorrections()240*4d7e907cSAndroid Build Coastguard Worker Gnss::getExtensionMeasurementCorrections() {
241*4d7e907cSAndroid Build Coastguard Worker ALOGD("Gnss::getExtensionMeasurementCorrections");
242*4d7e907cSAndroid Build Coastguard Worker return new GnssMeasurementCorrections();
243*4d7e907cSAndroid Build Coastguard Worker }
244*4d7e907cSAndroid Build Coastguard Worker
getExtensionVisibilityControl()245*4d7e907cSAndroid Build Coastguard Worker Return<sp<visibility_control::V1_0::IGnssVisibilityControl>> Gnss::getExtensionVisibilityControl() {
246*4d7e907cSAndroid Build Coastguard Worker ALOGD("Gnss::getExtensionVisibilityControl");
247*4d7e907cSAndroid Build Coastguard Worker return new GnssVisibilityControl();
248*4d7e907cSAndroid Build Coastguard Worker }
249*4d7e907cSAndroid Build Coastguard Worker
getExtensionGnssBatching_2_0()250*4d7e907cSAndroid Build Coastguard Worker Return<sp<V2_0::IGnssBatching>> Gnss::getExtensionGnssBatching_2_0() {
251*4d7e907cSAndroid Build Coastguard Worker return new GnssBatching();
252*4d7e907cSAndroid Build Coastguard Worker }
253*4d7e907cSAndroid Build Coastguard Worker
setCallback_2_0(const sp<V2_0::IGnssCallback> & callback)254*4d7e907cSAndroid Build Coastguard Worker Return<bool> Gnss::setCallback_2_0(const sp<V2_0::IGnssCallback>& callback) {
255*4d7e907cSAndroid Build Coastguard Worker ALOGD("Gnss::setCallback_2_0");
256*4d7e907cSAndroid Build Coastguard Worker if (callback == nullptr) {
257*4d7e907cSAndroid Build Coastguard Worker ALOGE("%s: Null callback ignored", __func__);
258*4d7e907cSAndroid Build Coastguard Worker return false;
259*4d7e907cSAndroid Build Coastguard Worker }
260*4d7e907cSAndroid Build Coastguard Worker
261*4d7e907cSAndroid Build Coastguard Worker sGnssCallback_2_0 = callback;
262*4d7e907cSAndroid Build Coastguard Worker
263*4d7e907cSAndroid Build Coastguard Worker using Capabilities = V2_0::IGnssCallback::Capabilities;
264*4d7e907cSAndroid Build Coastguard Worker const auto capabilities = Capabilities::MEASUREMENTS | Capabilities::MEASUREMENT_CORRECTIONS |
265*4d7e907cSAndroid Build Coastguard Worker Capabilities::LOW_POWER_MODE | Capabilities::SATELLITE_BLACKLIST;
266*4d7e907cSAndroid Build Coastguard Worker auto ret = sGnssCallback_2_0->gnssSetCapabilitiesCb_2_0(capabilities);
267*4d7e907cSAndroid Build Coastguard Worker if (!ret.isOk()) {
268*4d7e907cSAndroid Build Coastguard Worker ALOGE("%s: Unable to invoke callback", __func__);
269*4d7e907cSAndroid Build Coastguard Worker }
270*4d7e907cSAndroid Build Coastguard Worker
271*4d7e907cSAndroid Build Coastguard Worker V1_1::IGnssCallback::GnssSystemInfo gnssInfo = {.yearOfHw = 2019};
272*4d7e907cSAndroid Build Coastguard Worker
273*4d7e907cSAndroid Build Coastguard Worker ret = sGnssCallback_2_0->gnssSetSystemInfoCb(gnssInfo);
274*4d7e907cSAndroid Build Coastguard Worker if (!ret.isOk()) {
275*4d7e907cSAndroid Build Coastguard Worker ALOGE("%s: Unable to invoke callback", __func__);
276*4d7e907cSAndroid Build Coastguard Worker }
277*4d7e907cSAndroid Build Coastguard Worker
278*4d7e907cSAndroid Build Coastguard Worker auto gnssName = "Google Mock GNSS Implementation v2.0";
279*4d7e907cSAndroid Build Coastguard Worker ret = sGnssCallback_2_0->gnssNameCb(gnssName);
280*4d7e907cSAndroid Build Coastguard Worker if (!ret.isOk()) {
281*4d7e907cSAndroid Build Coastguard Worker ALOGE("%s: Unable to invoke callback", __func__);
282*4d7e907cSAndroid Build Coastguard Worker }
283*4d7e907cSAndroid Build Coastguard Worker
284*4d7e907cSAndroid Build Coastguard Worker return true;
285*4d7e907cSAndroid Build Coastguard Worker }
286*4d7e907cSAndroid Build Coastguard Worker
reportLocation(const V2_0::GnssLocation & location) const287*4d7e907cSAndroid Build Coastguard Worker Return<void> Gnss::reportLocation(const V2_0::GnssLocation& location) const {
288*4d7e907cSAndroid Build Coastguard Worker std::unique_lock<std::mutex> lock(mMutex);
289*4d7e907cSAndroid Build Coastguard Worker if (sGnssCallback_2_0 == nullptr) {
290*4d7e907cSAndroid Build Coastguard Worker ALOGE("%s: sGnssCallback 2.0 is null.", __func__);
291*4d7e907cSAndroid Build Coastguard Worker return Void();
292*4d7e907cSAndroid Build Coastguard Worker }
293*4d7e907cSAndroid Build Coastguard Worker sGnssCallback_2_0->gnssLocationCb_2_0(location);
294*4d7e907cSAndroid Build Coastguard Worker return Void();
295*4d7e907cSAndroid Build Coastguard Worker }
296*4d7e907cSAndroid Build Coastguard Worker
injectBestLocation_2_0(const V2_0::GnssLocation &)297*4d7e907cSAndroid Build Coastguard Worker Return<bool> Gnss::injectBestLocation_2_0(const V2_0::GnssLocation&) {
298*4d7e907cSAndroid Build Coastguard Worker // TODO(b/124012850): Implement function.
299*4d7e907cSAndroid Build Coastguard Worker return bool{};
300*4d7e907cSAndroid Build Coastguard Worker }
301*4d7e907cSAndroid Build Coastguard Worker
302*4d7e907cSAndroid Build Coastguard Worker } // namespace implementation
303*4d7e907cSAndroid Build Coastguard Worker } // namespace V2_0
304*4d7e907cSAndroid Build Coastguard Worker } // namespace gnss
305*4d7e907cSAndroid Build Coastguard Worker } // namespace hardware
306*4d7e907cSAndroid Build Coastguard Worker } // namespace android
307