blob: 217f0f358b03dd584d3dea425fc132dda2f30b4f [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 Admal3a405c52018-11-14 09:35:14 -080021#include "AGnss.h"
Anil Admalb02bcc12018-11-14 10:23:45 -080022#include "AGnssRil.h"
Anil Admal4e50a4c2018-12-19 15:22:13 -080023#include "GnssConfiguration.h"
Yu-Han Yang030d0332018-12-09 10:47:42 -080024#include "GnssMeasurement.h"
Anil Admal4d739e72018-11-14 12:38:57 -080025#include "GnssVisibilityControl.h"
Yu-Han Yang9c6c20b2018-11-06 14:12:49 -080026
Anil Admal3a405c52018-11-14 09:35:14 -080027using ::android::hardware::Status;
Anil Admal4d739e72018-11-14 12:38:57 -080028using ::android::hardware::gnss::visibility_control::V1_0::implementation::GnssVisibilityControl;
Anil Admal3a405c52018-11-14 09:35:14 -080029
Yu-Han Yang9c6c20b2018-11-06 14:12:49 -080030namespace android {
31namespace hardware {
32namespace gnss {
33namespace V2_0 {
34namespace implementation {
35
gomo1da4b5c2018-12-02 02:49:10 -080036sp<V2_0::IGnssCallback> Gnss::sGnssCallback_2_0 = nullptr;
37sp<V1_1::IGnssCallback> Gnss::sGnssCallback_1_1 = nullptr;
Yu-Han Yang9c6c20b2018-11-06 14:12:49 -080038
39// Methods from V1_0::IGnss follow.
40Return<bool> Gnss::setCallback(const sp<V1_0::IGnssCallback>&) {
41 // TODO implement
42 return bool{};
43}
44
45Return<bool> Gnss::start() {
46 // TODO implement
47 return bool{};
48}
49
50Return<bool> Gnss::stop() {
51 // TODO implement
52 return bool{};
53}
54
55Return<void> Gnss::cleanup() {
56 // TODO implement
57 return Void();
58}
59
60Return<bool> Gnss::injectTime(int64_t, int64_t, int32_t) {
61 // TODO implement
62 return bool{};
63}
64
65Return<bool> Gnss::injectLocation(double, double, float) {
66 // TODO implement
67 return bool{};
68}
69
70Return<void> Gnss::deleteAidingData(V1_0::IGnss::GnssAidingData) {
71 // TODO implement
72 return Void();
73}
74
75Return<bool> Gnss::setPositionMode(V1_0::IGnss::GnssPositionMode,
76 V1_0::IGnss::GnssPositionRecurrence, uint32_t, uint32_t,
77 uint32_t) {
78 // TODO implement
79 return bool{};
80}
81
82Return<sp<V1_0::IAGnssRil>> Gnss::getExtensionAGnssRil() {
83 // TODO implement
84 return sp<V1_0::IAGnssRil>{};
85}
86
87Return<sp<V1_0::IGnssGeofencing>> Gnss::getExtensionGnssGeofencing() {
88 // TODO implement
89 return sp<V1_0::IGnssGeofencing>{};
90}
91
92Return<sp<V1_0::IAGnss>> Gnss::getExtensionAGnss() {
93 // TODO implement
94 return sp<V1_0::IAGnss>{};
95}
96
97Return<sp<V1_0::IGnssNi>> Gnss::getExtensionGnssNi() {
Anil Admal4d739e72018-11-14 12:38:57 -080098 // The IGnssNi.hal interface is deprecated in 2.0.
99 return nullptr;
Yu-Han Yang9c6c20b2018-11-06 14:12:49 -0800100}
101
102Return<sp<V1_0::IGnssMeasurement>> Gnss::getExtensionGnssMeasurement() {
Yu-Han Yang030d0332018-12-09 10:47:42 -0800103 // Not supported
104 return nullptr;
Yu-Han Yang9c6c20b2018-11-06 14:12:49 -0800105}
106
107Return<sp<V1_0::IGnssNavigationMessage>> Gnss::getExtensionGnssNavigationMessage() {
108 // TODO implement
109 return sp<V1_0::IGnssNavigationMessage>{};
110}
111
112Return<sp<V1_0::IGnssXtra>> Gnss::getExtensionXtra() {
113 // TODO implement
114 return sp<V1_0::IGnssXtra>{};
115}
116
117Return<sp<V1_0::IGnssConfiguration>> Gnss::getExtensionGnssConfiguration() {
118 // TODO implement
119 return sp<V1_0::IGnssConfiguration>{};
120}
121
122Return<sp<V1_0::IGnssDebug>> Gnss::getExtensionGnssDebug() {
123 // TODO implement
124 return sp<V1_0::IGnssDebug>{};
125}
126
127Return<sp<V1_0::IGnssBatching>> Gnss::getExtensionGnssBatching() {
128 // TODO implement
129 return sp<V1_0::IGnssBatching>{};
130}
131
132// Methods from V1_1::IGnss follow.
133Return<bool> Gnss::setCallback_1_1(const sp<V1_1::IGnssCallback>& callback) {
134 ALOGD("Gnss::setCallback_1_1");
135 if (callback == nullptr) {
136 ALOGE("%s: Null callback ignored", __func__);
137 return false;
138 }
139
gomo1da4b5c2018-12-02 02:49:10 -0800140 sGnssCallback_1_1 = callback;
Yu-Han Yang9c6c20b2018-11-06 14:12:49 -0800141
Yu-Han Yang030d0332018-12-09 10:47:42 -0800142 uint32_t capabilities = (uint32_t)V1_0::IGnssCallback::Capabilities::MEASUREMENTS;
gomo1da4b5c2018-12-02 02:49:10 -0800143 auto ret = sGnssCallback_1_1->gnssSetCapabilitesCb(capabilities);
Yu-Han Yang9c6c20b2018-11-06 14:12:49 -0800144 if (!ret.isOk()) {
145 ALOGE("%s: Unable to invoke callback", __func__);
146 }
147
148 V1_1::IGnssCallback::GnssSystemInfo gnssInfo = {.yearOfHw = 2019};
149
gomo1da4b5c2018-12-02 02:49:10 -0800150 ret = sGnssCallback_1_1->gnssSetSystemInfoCb(gnssInfo);
Yu-Han Yang9c6c20b2018-11-06 14:12:49 -0800151 if (!ret.isOk()) {
152 ALOGE("%s: Unable to invoke callback", __func__);
153 }
154
155 auto gnssName = "Google Mock GNSS Implementation v2.0";
gomo1da4b5c2018-12-02 02:49:10 -0800156 ret = sGnssCallback_1_1->gnssNameCb(gnssName);
Yu-Han Yang9c6c20b2018-11-06 14:12:49 -0800157 if (!ret.isOk()) {
158 ALOGE("%s: Unable to invoke callback", __func__);
159 }
160
161 return true;
162}
163
164Return<bool> Gnss::setPositionMode_1_1(V1_0::IGnss::GnssPositionMode,
165 V1_0::IGnss::GnssPositionRecurrence, uint32_t, uint32_t,
166 uint32_t, bool) {
167 // TODO implement
168 return bool{};
169}
170
171Return<sp<V1_1::IGnssConfiguration>> Gnss::getExtensionGnssConfiguration_1_1() {
172 // TODO implement
173 return sp<V1_1::IGnssConfiguration>{};
174}
175
176Return<sp<V1_1::IGnssMeasurement>> Gnss::getExtensionGnssMeasurement_1_1() {
Yu-Han Yang030d0332018-12-09 10:47:42 -0800177 ALOGD("Gnss::getExtensionGnssMeasurement_1_1");
178 return new GnssMeasurement();
Yu-Han Yang9c6c20b2018-11-06 14:12:49 -0800179}
180
181Return<bool> Gnss::injectBestLocation(const V1_0::GnssLocation&) {
182 // TODO implement
183 return bool{};
184}
185
186// Methods from V2_0::IGnss follow.
Anil Admal4e50a4c2018-12-19 15:22:13 -0800187Return<sp<V2_0::IGnssConfiguration>> Gnss::getExtensionGnssConfiguration_2_0() {
188 return new GnssConfiguration{};
189}
190
Anil Admal3a405c52018-11-14 09:35:14 -0800191Return<sp<V2_0::IAGnss>> Gnss::getExtensionAGnss_2_0() {
192 return new AGnss{};
193}
194
Anil Admalb02bcc12018-11-14 10:23:45 -0800195Return<sp<V2_0::IAGnssRil>> Gnss::getExtensionAGnssRil_2_0() {
196 return new AGnssRil{};
197}
198
Yu-Han Yang9c6c20b2018-11-06 14:12:49 -0800199Return<sp<V2_0::IGnssMeasurement>> Gnss::getExtensionGnssMeasurement_2_0() {
Yu-Han Yang030d0332018-12-09 10:47:42 -0800200 ALOGD("Gnss::getExtensionGnssMeasurement_2_0");
201 return new GnssMeasurement();
Yu-Han Yang9c6c20b2018-11-06 14:12:49 -0800202}
203
gomo1da4b5c2018-12-02 02:49:10 -0800204Return<sp<measurement_corrections::V1_0::IMeasurementCorrections>>
205Gnss::getExtensionMeasurementCorrections() {
206 // TODO implement
207 return sp<measurement_corrections::V1_0::IMeasurementCorrections>{};
208}
209
Anil Admal4d739e72018-11-14 12:38:57 -0800210Return<sp<visibility_control::V1_0::IGnssVisibilityControl>> Gnss::getExtensionVisibilityControl() {
211 ALOGD("Gnss::getExtensionVisibilityControl");
212 return new GnssVisibilityControl();
213}
214
gomo1da4b5c2018-12-02 02:49:10 -0800215Return<bool> Gnss::setCallback_2_0(const sp<V2_0::IGnssCallback>& callback) {
216 ALOGD("Gnss::setCallback_2_0");
217 if (callback == nullptr) {
218 ALOGE("%s: Null callback ignored", __func__);
219 return false;
220 }
221
222 sGnssCallback_2_0 = callback;
223
224 uint32_t capabilities = 0x0;
225 auto ret = sGnssCallback_2_0->gnssSetCapabilitesCb(capabilities);
226 if (!ret.isOk()) {
227 ALOGE("%s: Unable to invoke callback", __func__);
228 }
229
230 V1_1::IGnssCallback::GnssSystemInfo gnssInfo = {.yearOfHw = 2019};
231
232 ret = sGnssCallback_2_0->gnssSetSystemInfoCb(gnssInfo);
233 if (!ret.isOk()) {
234 ALOGE("%s: Unable to invoke callback", __func__);
235 }
236
237 auto gnssName = "Google Mock GNSS Implementation v2.0";
238 ret = sGnssCallback_2_0->gnssNameCb(gnssName);
239 if (!ret.isOk()) {
240 ALOGE("%s: Unable to invoke callback", __func__);
241 }
242
243 return true;
244}
245
Yu-Han Yang9c6c20b2018-11-06 14:12:49 -0800246} // namespace implementation
247} // namespace V2_0
248} // namespace gnss
249} // namespace hardware
250} // namespace android