blob: 886a3a8d7cfcb72df434f71abdac305f551e2f93 [file] [log] [blame]
Yu-Han Yang9c6c20b2018-11-06 14:12:49 -08001/*
2 * Copyright (C) 2018 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#define LOG_TAG "Gnss"
18
19#include "Gnss.h"
20#include <log/log.h>
Anil Admalb02bcc12018-11-14 10:23:45 -080021#include "AGnssRil.h"
Yu-Han Yang030d0332018-12-09 10:47:42 -080022#include "GnssMeasurement.h"
Yu-Han Yang9c6c20b2018-11-06 14:12:49 -080023
24namespace android {
25namespace hardware {
26namespace gnss {
27namespace V2_0 {
28namespace implementation {
29
gomo1da4b5c2018-12-02 02:49:10 -080030sp<V2_0::IGnssCallback> Gnss::sGnssCallback_2_0 = nullptr;
31sp<V1_1::IGnssCallback> Gnss::sGnssCallback_1_1 = nullptr;
Yu-Han Yang9c6c20b2018-11-06 14:12:49 -080032
33// Methods from V1_0::IGnss follow.
34Return<bool> Gnss::setCallback(const sp<V1_0::IGnssCallback>&) {
35 // TODO implement
36 return bool{};
37}
38
39Return<bool> Gnss::start() {
40 // TODO implement
41 return bool{};
42}
43
44Return<bool> Gnss::stop() {
45 // TODO implement
46 return bool{};
47}
48
49Return<void> Gnss::cleanup() {
50 // TODO implement
51 return Void();
52}
53
54Return<bool> Gnss::injectTime(int64_t, int64_t, int32_t) {
55 // TODO implement
56 return bool{};
57}
58
59Return<bool> Gnss::injectLocation(double, double, float) {
60 // TODO implement
61 return bool{};
62}
63
64Return<void> Gnss::deleteAidingData(V1_0::IGnss::GnssAidingData) {
65 // TODO implement
66 return Void();
67}
68
69Return<bool> Gnss::setPositionMode(V1_0::IGnss::GnssPositionMode,
70 V1_0::IGnss::GnssPositionRecurrence, uint32_t, uint32_t,
71 uint32_t) {
72 // TODO implement
73 return bool{};
74}
75
76Return<sp<V1_0::IAGnssRil>> Gnss::getExtensionAGnssRil() {
77 // TODO implement
78 return sp<V1_0::IAGnssRil>{};
79}
80
81Return<sp<V1_0::IGnssGeofencing>> Gnss::getExtensionGnssGeofencing() {
82 // TODO implement
83 return sp<V1_0::IGnssGeofencing>{};
84}
85
86Return<sp<V1_0::IAGnss>> Gnss::getExtensionAGnss() {
87 // TODO implement
88 return sp<V1_0::IAGnss>{};
89}
90
91Return<sp<V1_0::IGnssNi>> Gnss::getExtensionGnssNi() {
92 // TODO implement
93 return sp<V1_0::IGnssNi>{};
94}
95
96Return<sp<V1_0::IGnssMeasurement>> Gnss::getExtensionGnssMeasurement() {
Yu-Han Yang030d0332018-12-09 10:47:42 -080097 // Not supported
98 return nullptr;
Yu-Han Yang9c6c20b2018-11-06 14:12:49 -080099}
100
101Return<sp<V1_0::IGnssNavigationMessage>> Gnss::getExtensionGnssNavigationMessage() {
102 // TODO implement
103 return sp<V1_0::IGnssNavigationMessage>{};
104}
105
106Return<sp<V1_0::IGnssXtra>> Gnss::getExtensionXtra() {
107 // TODO implement
108 return sp<V1_0::IGnssXtra>{};
109}
110
111Return<sp<V1_0::IGnssConfiguration>> Gnss::getExtensionGnssConfiguration() {
112 // TODO implement
113 return sp<V1_0::IGnssConfiguration>{};
114}
115
116Return<sp<V1_0::IGnssDebug>> Gnss::getExtensionGnssDebug() {
117 // TODO implement
118 return sp<V1_0::IGnssDebug>{};
119}
120
121Return<sp<V1_0::IGnssBatching>> Gnss::getExtensionGnssBatching() {
122 // TODO implement
123 return sp<V1_0::IGnssBatching>{};
124}
125
126// Methods from V1_1::IGnss follow.
127Return<bool> Gnss::setCallback_1_1(const sp<V1_1::IGnssCallback>& callback) {
128 ALOGD("Gnss::setCallback_1_1");
129 if (callback == nullptr) {
130 ALOGE("%s: Null callback ignored", __func__);
131 return false;
132 }
133
gomo1da4b5c2018-12-02 02:49:10 -0800134 sGnssCallback_1_1 = callback;
Yu-Han Yang9c6c20b2018-11-06 14:12:49 -0800135
Yu-Han Yang030d0332018-12-09 10:47:42 -0800136 uint32_t capabilities = (uint32_t)V1_0::IGnssCallback::Capabilities::MEASUREMENTS;
gomo1da4b5c2018-12-02 02:49:10 -0800137 auto ret = sGnssCallback_1_1->gnssSetCapabilitesCb(capabilities);
Yu-Han Yang9c6c20b2018-11-06 14:12:49 -0800138 if (!ret.isOk()) {
139 ALOGE("%s: Unable to invoke callback", __func__);
140 }
141
142 V1_1::IGnssCallback::GnssSystemInfo gnssInfo = {.yearOfHw = 2019};
143
gomo1da4b5c2018-12-02 02:49:10 -0800144 ret = sGnssCallback_1_1->gnssSetSystemInfoCb(gnssInfo);
Yu-Han Yang9c6c20b2018-11-06 14:12:49 -0800145 if (!ret.isOk()) {
146 ALOGE("%s: Unable to invoke callback", __func__);
147 }
148
149 auto gnssName = "Google Mock GNSS Implementation v2.0";
gomo1da4b5c2018-12-02 02:49:10 -0800150 ret = sGnssCallback_1_1->gnssNameCb(gnssName);
Yu-Han Yang9c6c20b2018-11-06 14:12:49 -0800151 if (!ret.isOk()) {
152 ALOGE("%s: Unable to invoke callback", __func__);
153 }
154
155 return true;
156}
157
158Return<bool> Gnss::setPositionMode_1_1(V1_0::IGnss::GnssPositionMode,
159 V1_0::IGnss::GnssPositionRecurrence, uint32_t, uint32_t,
160 uint32_t, bool) {
161 // TODO implement
162 return bool{};
163}
164
165Return<sp<V1_1::IGnssConfiguration>> Gnss::getExtensionGnssConfiguration_1_1() {
166 // TODO implement
167 return sp<V1_1::IGnssConfiguration>{};
168}
169
170Return<sp<V1_1::IGnssMeasurement>> Gnss::getExtensionGnssMeasurement_1_1() {
Yu-Han Yang030d0332018-12-09 10:47:42 -0800171 ALOGD("Gnss::getExtensionGnssMeasurement_1_1");
172 return new GnssMeasurement();
Yu-Han Yang9c6c20b2018-11-06 14:12:49 -0800173}
174
175Return<bool> Gnss::injectBestLocation(const V1_0::GnssLocation&) {
176 // TODO implement
177 return bool{};
178}
179
180// Methods from V2_0::IGnss follow.
Anil Admalb02bcc12018-11-14 10:23:45 -0800181Return<sp<V2_0::IAGnssRil>> Gnss::getExtensionAGnssRil_2_0() {
182 return new AGnssRil{};
183}
184
Yu-Han Yang9c6c20b2018-11-06 14:12:49 -0800185Return<sp<V2_0::IGnssMeasurement>> Gnss::getExtensionGnssMeasurement_2_0() {
Yu-Han Yang030d0332018-12-09 10:47:42 -0800186 ALOGD("Gnss::getExtensionGnssMeasurement_2_0");
187 return new GnssMeasurement();
Yu-Han Yang9c6c20b2018-11-06 14:12:49 -0800188}
189
gomo1da4b5c2018-12-02 02:49:10 -0800190Return<sp<measurement_corrections::V1_0::IMeasurementCorrections>>
191Gnss::getExtensionMeasurementCorrections() {
192 // TODO implement
193 return sp<measurement_corrections::V1_0::IMeasurementCorrections>{};
194}
195
196Return<bool> Gnss::setCallback_2_0(const sp<V2_0::IGnssCallback>& callback) {
197 ALOGD("Gnss::setCallback_2_0");
198 if (callback == nullptr) {
199 ALOGE("%s: Null callback ignored", __func__);
200 return false;
201 }
202
203 sGnssCallback_2_0 = callback;
204
205 uint32_t capabilities = 0x0;
206 auto ret = sGnssCallback_2_0->gnssSetCapabilitesCb(capabilities);
207 if (!ret.isOk()) {
208 ALOGE("%s: Unable to invoke callback", __func__);
209 }
210
211 V1_1::IGnssCallback::GnssSystemInfo gnssInfo = {.yearOfHw = 2019};
212
213 ret = sGnssCallback_2_0->gnssSetSystemInfoCb(gnssInfo);
214 if (!ret.isOk()) {
215 ALOGE("%s: Unable to invoke callback", __func__);
216 }
217
218 auto gnssName = "Google Mock GNSS Implementation v2.0";
219 ret = sGnssCallback_2_0->gnssNameCb(gnssName);
220 if (!ret.isOk()) {
221 ALOGE("%s: Unable to invoke callback", __func__);
222 }
223
224 return true;
225}
226
Yu-Han Yang9c6c20b2018-11-06 14:12:49 -0800227} // namespace implementation
228} // namespace V2_0
229} // namespace gnss
230} // namespace hardware
231} // namespace android