• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2019 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 #pragma once
18 
19 #include <android/hardware/gnss/2.1/IGnss.h>
20 #include <hidl/MQDescriptor.h>
21 #include <hidl/Status.h>
22 #include <atomic>
23 #include <mutex>
24 #include <thread>
25 #include "GnssAntennaInfo.h"
26 #include "GnssConfiguration.h"
27 
28 namespace android {
29 namespace hardware {
30 namespace gnss {
31 namespace V2_1 {
32 
33 using GnssSvInfo = IGnssCallback::GnssSvInfo;
34 
35 namespace implementation {
36 
37 struct Gnss : public IGnss {
38     Gnss();
39     ~Gnss();
40     // Methods from V1_0::IGnss follow.
41     Return<bool> setCallback(const sp<V1_0::IGnssCallback>& callback) override;
42     Return<bool> start() override;
43     Return<bool> stop() override;
44     Return<void> cleanup() override;
45     Return<bool> injectTime(int64_t timeMs, int64_t timeReferenceMs,
46                             int32_t uncertaintyMs) override;
47     Return<bool> injectLocation(double latitudeDegrees, double longitudeDegrees,
48                                 float accuracyMeters) override;
49     Return<void> deleteAidingData(V1_0::IGnss::GnssAidingData aidingDataFlags) override;
50     Return<bool> setPositionMode(V1_0::IGnss::GnssPositionMode mode,
51                                  V1_0::IGnss::GnssPositionRecurrence recurrence,
52                                  uint32_t minIntervalMs, uint32_t preferredAccuracyMeters,
53                                  uint32_t preferredTimeMs) override;
54     Return<sp<V1_0::IAGnssRil>> getExtensionAGnssRil() override;
55     Return<sp<V1_0::IGnssGeofencing>> getExtensionGnssGeofencing() override;
56     Return<sp<V1_0::IAGnss>> getExtensionAGnss() override;
57     Return<sp<V1_0::IGnssNi>> getExtensionGnssNi() override;
58     Return<sp<V1_0::IGnssMeasurement>> getExtensionGnssMeasurement() override;
59     Return<sp<V1_0::IGnssNavigationMessage>> getExtensionGnssNavigationMessage() override;
60     Return<sp<V1_0::IGnssXtra>> getExtensionXtra() override;
61     Return<sp<V1_0::IGnssConfiguration>> getExtensionGnssConfiguration() override;
62     Return<sp<V1_0::IGnssDebug>> getExtensionGnssDebug() override;
63     Return<sp<V1_0::IGnssBatching>> getExtensionGnssBatching() override;
64 
65     // Methods from V1_1::IGnss follow.
66     Return<bool> setCallback_1_1(const sp<V1_1::IGnssCallback>& callback) override;
67     Return<bool> setPositionMode_1_1(V1_0::IGnss::GnssPositionMode mode,
68                                      V1_0::IGnss::GnssPositionRecurrence recurrence,
69                                      uint32_t minIntervalMs, uint32_t preferredAccuracyMeters,
70                                      uint32_t preferredTimeMs, bool lowPowerMode) override;
71     Return<sp<V1_1::IGnssConfiguration>> getExtensionGnssConfiguration_1_1() override;
72     Return<sp<V1_1::IGnssMeasurement>> getExtensionGnssMeasurement_1_1() override;
73     Return<bool> injectBestLocation(const V1_0::GnssLocation& location) override;
74 
75     // Methods from V2_0::IGnss follow.
76     Return<bool> setCallback_2_0(const sp<V2_0::IGnssCallback>& callback) override;
77     Return<sp<V2_0::IGnssConfiguration>> getExtensionGnssConfiguration_2_0() override;
78     Return<sp<V2_0::IGnssDebug>> getExtensionGnssDebug_2_0() override;
79     Return<sp<V2_0::IAGnss>> getExtensionAGnss_2_0() override;
80     Return<sp<V2_0::IAGnssRil>> getExtensionAGnssRil_2_0() override;
81     Return<sp<V2_0::IGnssMeasurement>> getExtensionGnssMeasurement_2_0() override;
82     Return<sp<measurement_corrections::V1_0::IMeasurementCorrections>>
83     getExtensionMeasurementCorrections() override;
84     Return<sp<visibility_control::V1_0::IGnssVisibilityControl>> getExtensionVisibilityControl()
85             override;
86     Return<sp<V2_0::IGnssBatching>> getExtensionGnssBatching_2_0() override;
87     Return<bool> injectBestLocation_2_0(const V2_0::GnssLocation& location) override;
88 
89     // Methods from V2_1::IGnss follow.
90     Return<bool> setCallback_2_1(const sp<V2_1::IGnssCallback>& callback) override;
91     Return<sp<V2_1::IGnssMeasurement>> getExtensionGnssMeasurement_2_1() override;
92     Return<sp<V2_1::IGnssConfiguration>> getExtensionGnssConfiguration_2_1() override;
93     Return<sp<measurement_corrections::V1_1::IMeasurementCorrections>>
94     getExtensionMeasurementCorrections_1_1() override;
95     Return<sp<V2_1::IGnssAntennaInfo>> getExtensionGnssAntennaInfo() override;
96 
97   private:
98     void reportLocation(const V2_0::GnssLocation&) const;
99     void reportLocation(const V1_0::GnssLocation&) const;
100     void reportSvStatus(const hidl_vec<GnssSvInfo>&) const;
101 
102     static sp<V2_1::IGnssCallback> sGnssCallback_2_1;
103     static sp<V2_0::IGnssCallback> sGnssCallback_2_0;
104     static sp<V1_1::IGnssCallback> sGnssCallback_1_1;
105     static sp<V1_0::IGnssCallback> sGnssCallback_1_0;
106     std::atomic<long> mMinIntervalMs;
107     sp<GnssConfiguration> mGnssConfiguration;
108     std::atomic<bool> mIsActive;
109     std::thread mThread;
110     mutable std::mutex mMutex;
111     hidl_vec<GnssSvInfo> filterBlacklistedSatellitesV2_1(hidl_vec<GnssSvInfo> gnssSvInfoList);
112 };
113 
114 }  // namespace implementation
115 }  // namespace V2_1
116 }  // namespace gnss
117 }  // namespace hardware
118 }  // namespace android
119