blob: bde904f5db27ab35e40b3941d2854d7f9a870dd8 [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"
Yu-Han Yang030d0332018-12-09 10:47:42 -080023#include "GnssMeasurement.h"
Yu-Han Yang9c6c20b2018-11-06 14:12:49 -080024
Anil Admal3a405c52018-11-14 09:35:14 -080025using ::android::hardware::Status;
26
Yu-Han Yang9c6c20b2018-11-06 14:12:49 -080027namespace android {
28namespace hardware {
29namespace gnss {
30namespace V2_0 {
31namespace implementation {
32
gomo1da4b5c2018-12-02 02:49:10 -080033sp<V2_0::IGnssCallback> Gnss::sGnssCallback_2_0 = nullptr;
34sp<V1_1::IGnssCallback> Gnss::sGnssCallback_1_1 = nullptr;
Yu-Han Yang9c6c20b2018-11-06 14:12:49 -080035
36// Methods from V1_0::IGnss follow.
37Return<bool> Gnss::setCallback(const sp<V1_0::IGnssCallback>&) {
38 // TODO implement
39 return bool{};
40}
41
42Return<bool> Gnss::start() {
43 // TODO implement
44 return bool{};
45}
46
47Return<bool> Gnss::stop() {
48 // TODO implement
49 return bool{};
50}
51
52Return<void> Gnss::cleanup() {
53 // TODO implement
54 return Void();
55}
56
57Return<bool> Gnss::injectTime(int64_t, int64_t, int32_t) {
58 // TODO implement
59 return bool{};
60}
61
62Return<bool> Gnss::injectLocation(double, double, float) {
63 // TODO implement
64 return bool{};
65}
66
67Return<void> Gnss::deleteAidingData(V1_0::IGnss::GnssAidingData) {
68 // TODO implement
69 return Void();
70}
71
72Return<bool> Gnss::setPositionMode(V1_0::IGnss::GnssPositionMode,
73 V1_0::IGnss::GnssPositionRecurrence, uint32_t, uint32_t,
74 uint32_t) {
75 // TODO implement
76 return bool{};
77}
78
79Return<sp<V1_0::IAGnssRil>> Gnss::getExtensionAGnssRil() {
80 // TODO implement
81 return sp<V1_0::IAGnssRil>{};
82}
83
84Return<sp<V1_0::IGnssGeofencing>> Gnss::getExtensionGnssGeofencing() {
85 // TODO implement
86 return sp<V1_0::IGnssGeofencing>{};
87}
88
89Return<sp<V1_0::IAGnss>> Gnss::getExtensionAGnss() {
90 // TODO implement
91 return sp<V1_0::IAGnss>{};
92}
93
94Return<sp<V1_0::IGnssNi>> Gnss::getExtensionGnssNi() {
95 // TODO implement
96 return sp<V1_0::IGnssNi>{};
97}
98
99Return<sp<V1_0::IGnssMeasurement>> Gnss::getExtensionGnssMeasurement() {
Yu-Han Yang030d0332018-12-09 10:47:42 -0800100 // Not supported
101 return nullptr;
Yu-Han Yang9c6c20b2018-11-06 14:12:49 -0800102}
103
104Return<sp<V1_0::IGnssNavigationMessage>> Gnss::getExtensionGnssNavigationMessage() {
105 // TODO implement
106 return sp<V1_0::IGnssNavigationMessage>{};
107}
108
109Return<sp<V1_0::IGnssXtra>> Gnss::getExtensionXtra() {
110 // TODO implement
111 return sp<V1_0::IGnssXtra>{};
112}
113
114Return<sp<V1_0::IGnssConfiguration>> Gnss::getExtensionGnssConfiguration() {
115 // TODO implement
116 return sp<V1_0::IGnssConfiguration>{};
117}
118
119Return<sp<V1_0::IGnssDebug>> Gnss::getExtensionGnssDebug() {
120 // TODO implement
121 return sp<V1_0::IGnssDebug>{};
122}
123
124Return<sp<V1_0::IGnssBatching>> Gnss::getExtensionGnssBatching() {
125 // TODO implement
126 return sp<V1_0::IGnssBatching>{};
127}
128
129// Methods from V1_1::IGnss follow.
130Return<bool> Gnss::setCallback_1_1(const sp<V1_1::IGnssCallback>& callback) {
131 ALOGD("Gnss::setCallback_1_1");
132 if (callback == nullptr) {
133 ALOGE("%s: Null callback ignored", __func__);
134 return false;
135 }
136
gomo1da4b5c2018-12-02 02:49:10 -0800137 sGnssCallback_1_1 = callback;
Yu-Han Yang9c6c20b2018-11-06 14:12:49 -0800138
Yu-Han Yang030d0332018-12-09 10:47:42 -0800139 uint32_t capabilities = (uint32_t)V1_0::IGnssCallback::Capabilities::MEASUREMENTS;
gomo1da4b5c2018-12-02 02:49:10 -0800140 auto ret = sGnssCallback_1_1->gnssSetCapabilitesCb(capabilities);
Yu-Han Yang9c6c20b2018-11-06 14:12:49 -0800141 if (!ret.isOk()) {
142 ALOGE("%s: Unable to invoke callback", __func__);
143 }
144
145 V1_1::IGnssCallback::GnssSystemInfo gnssInfo = {.yearOfHw = 2019};
146
gomo1da4b5c2018-12-02 02:49:10 -0800147 ret = sGnssCallback_1_1->gnssSetSystemInfoCb(gnssInfo);
Yu-Han Yang9c6c20b2018-11-06 14:12:49 -0800148 if (!ret.isOk()) {
149 ALOGE("%s: Unable to invoke callback", __func__);
150 }
151
152 auto gnssName = "Google Mock GNSS Implementation v2.0";
gomo1da4b5c2018-12-02 02:49:10 -0800153 ret = sGnssCallback_1_1->gnssNameCb(gnssName);
Yu-Han Yang9c6c20b2018-11-06 14:12:49 -0800154 if (!ret.isOk()) {
155 ALOGE("%s: Unable to invoke callback", __func__);
156 }
157
158 return true;
159}
160
161Return<bool> Gnss::setPositionMode_1_1(V1_0::IGnss::GnssPositionMode,
162 V1_0::IGnss::GnssPositionRecurrence, uint32_t, uint32_t,
163 uint32_t, bool) {
164 // TODO implement
165 return bool{};
166}
167
168Return<sp<V1_1::IGnssConfiguration>> Gnss::getExtensionGnssConfiguration_1_1() {
169 // TODO implement
170 return sp<V1_1::IGnssConfiguration>{};
171}
172
173Return<sp<V1_1::IGnssMeasurement>> Gnss::getExtensionGnssMeasurement_1_1() {
Yu-Han Yang030d0332018-12-09 10:47:42 -0800174 ALOGD("Gnss::getExtensionGnssMeasurement_1_1");
175 return new GnssMeasurement();
Yu-Han Yang9c6c20b2018-11-06 14:12:49 -0800176}
177
178Return<bool> Gnss::injectBestLocation(const V1_0::GnssLocation&) {
179 // TODO implement
180 return bool{};
181}
182
183// Methods from V2_0::IGnss follow.
Anil Admal3a405c52018-11-14 09:35:14 -0800184Return<sp<V2_0::IAGnss>> Gnss::getExtensionAGnss_2_0() {
185 return new AGnss{};
186}
187
Anil Admalb02bcc12018-11-14 10:23:45 -0800188Return<sp<V2_0::IAGnssRil>> Gnss::getExtensionAGnssRil_2_0() {
189 return new AGnssRil{};
190}
191
Yu-Han Yang9c6c20b2018-11-06 14:12:49 -0800192Return<sp<V2_0::IGnssMeasurement>> Gnss::getExtensionGnssMeasurement_2_0() {
Yu-Han Yang030d0332018-12-09 10:47:42 -0800193 ALOGD("Gnss::getExtensionGnssMeasurement_2_0");
194 return new GnssMeasurement();
Yu-Han Yang9c6c20b2018-11-06 14:12:49 -0800195}
196
gomo1da4b5c2018-12-02 02:49:10 -0800197Return<sp<measurement_corrections::V1_0::IMeasurementCorrections>>
198Gnss::getExtensionMeasurementCorrections() {
199 // TODO implement
200 return sp<measurement_corrections::V1_0::IMeasurementCorrections>{};
201}
202
203Return<bool> Gnss::setCallback_2_0(const sp<V2_0::IGnssCallback>& callback) {
204 ALOGD("Gnss::setCallback_2_0");
205 if (callback == nullptr) {
206 ALOGE("%s: Null callback ignored", __func__);
207 return false;
208 }
209
210 sGnssCallback_2_0 = callback;
211
212 uint32_t capabilities = 0x0;
213 auto ret = sGnssCallback_2_0->gnssSetCapabilitesCb(capabilities);
214 if (!ret.isOk()) {
215 ALOGE("%s: Unable to invoke callback", __func__);
216 }
217
218 V1_1::IGnssCallback::GnssSystemInfo gnssInfo = {.yearOfHw = 2019};
219
220 ret = sGnssCallback_2_0->gnssSetSystemInfoCb(gnssInfo);
221 if (!ret.isOk()) {
222 ALOGE("%s: Unable to invoke callback", __func__);
223 }
224
225 auto gnssName = "Google Mock GNSS Implementation v2.0";
226 ret = sGnssCallback_2_0->gnssNameCb(gnssName);
227 if (!ret.isOk()) {
228 ALOGE("%s: Unable to invoke callback", __func__);
229 }
230
231 return true;
232}
233
Yu-Han Yang9c6c20b2018-11-06 14:12:49 -0800234} // namespace implementation
235} // namespace V2_0
236} // namespace gnss
237} // namespace hardware
238} // namespace android