xref: /aosp_15_r20/hardware/interfaces/gnss/aidl/default/Gnss.h (revision 4d7e907c777eeecc4c5bd7cf640a754fac206ff7)
1*4d7e907cSAndroid Build Coastguard Worker /*
2*4d7e907cSAndroid Build Coastguard Worker  * Copyright (C) 2020 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 #pragma once
18*4d7e907cSAndroid Build Coastguard Worker 
19*4d7e907cSAndroid Build Coastguard Worker #include <aidl/android/hardware/gnss/BnAGnss.h>
20*4d7e907cSAndroid Build Coastguard Worker #include <aidl/android/hardware/gnss/BnAGnssRil.h>
21*4d7e907cSAndroid Build Coastguard Worker #include <aidl/android/hardware/gnss/BnGnss.h>
22*4d7e907cSAndroid Build Coastguard Worker #include <aidl/android/hardware/gnss/BnGnssAntennaInfo.h>
23*4d7e907cSAndroid Build Coastguard Worker #include <aidl/android/hardware/gnss/BnGnssBatching.h>
24*4d7e907cSAndroid Build Coastguard Worker #include <aidl/android/hardware/gnss/BnGnssConfiguration.h>
25*4d7e907cSAndroid Build Coastguard Worker #include <aidl/android/hardware/gnss/BnGnssDebug.h>
26*4d7e907cSAndroid Build Coastguard Worker #include <aidl/android/hardware/gnss/BnGnssMeasurementInterface.h>
27*4d7e907cSAndroid Build Coastguard Worker #include <aidl/android/hardware/gnss/BnGnssPowerIndication.h>
28*4d7e907cSAndroid Build Coastguard Worker #include <aidl/android/hardware/gnss/BnGnssPsds.h>
29*4d7e907cSAndroid Build Coastguard Worker #include <aidl/android/hardware/gnss/gnss_assistance/BnGnssAssistanceInterface.h>
30*4d7e907cSAndroid Build Coastguard Worker #include <aidl/android/hardware/gnss/measurement_corrections/BnMeasurementCorrectionsInterface.h>
31*4d7e907cSAndroid Build Coastguard Worker #include <aidl/android/hardware/gnss/visibility_control/BnGnssVisibilityControl.h>
32*4d7e907cSAndroid Build Coastguard Worker #include <atomic>
33*4d7e907cSAndroid Build Coastguard Worker #include <mutex>
34*4d7e907cSAndroid Build Coastguard Worker #include <thread>
35*4d7e907cSAndroid Build Coastguard Worker #include "GnssConfiguration.h"
36*4d7e907cSAndroid Build Coastguard Worker #include "GnssMeasurementInterface.h"
37*4d7e907cSAndroid Build Coastguard Worker #include "GnssPowerIndication.h"
38*4d7e907cSAndroid Build Coastguard Worker #include "Utils.h"
39*4d7e907cSAndroid Build Coastguard Worker 
40*4d7e907cSAndroid Build Coastguard Worker namespace aidl::android::hardware::gnss {
41*4d7e907cSAndroid Build Coastguard Worker 
42*4d7e907cSAndroid Build Coastguard Worker class Gnss : public BnGnss {
43*4d7e907cSAndroid Build Coastguard Worker   public:
44*4d7e907cSAndroid Build Coastguard Worker     Gnss();
~Gnss()45*4d7e907cSAndroid Build Coastguard Worker     ~Gnss() { stop(); };
46*4d7e907cSAndroid Build Coastguard Worker     ndk::ScopedAStatus setCallback(const std::shared_ptr<IGnssCallback>& callback) override;
47*4d7e907cSAndroid Build Coastguard Worker     ndk::ScopedAStatus start() override;
48*4d7e907cSAndroid Build Coastguard Worker     ndk::ScopedAStatus stop() override;
49*4d7e907cSAndroid Build Coastguard Worker     ndk::ScopedAStatus close() override;
50*4d7e907cSAndroid Build Coastguard Worker 
51*4d7e907cSAndroid Build Coastguard Worker     ndk::ScopedAStatus injectTime(int64_t timeMs, int64_t timeReferenceMs,
52*4d7e907cSAndroid Build Coastguard Worker                                   int uncertaintyMs) override;
53*4d7e907cSAndroid Build Coastguard Worker     ndk::ScopedAStatus injectLocation(const GnssLocation& location) override;
54*4d7e907cSAndroid Build Coastguard Worker     ndk::ScopedAStatus injectBestLocation(const GnssLocation& location) override;
55*4d7e907cSAndroid Build Coastguard Worker     ndk::ScopedAStatus deleteAidingData(GnssAidingData aidingDataFlags) override;
56*4d7e907cSAndroid Build Coastguard Worker     ndk::ScopedAStatus setPositionMode(const PositionModeOptions& options) override;
57*4d7e907cSAndroid Build Coastguard Worker     ndk::ScopedAStatus startSvStatus() override;
58*4d7e907cSAndroid Build Coastguard Worker     ndk::ScopedAStatus stopSvStatus() override;
59*4d7e907cSAndroid Build Coastguard Worker     ndk::ScopedAStatus startNmea() override;
60*4d7e907cSAndroid Build Coastguard Worker     ndk::ScopedAStatus stopNmea() override;
61*4d7e907cSAndroid Build Coastguard Worker 
62*4d7e907cSAndroid Build Coastguard Worker     ndk::ScopedAStatus getExtensionPsds(std::shared_ptr<IGnssPsds>* iGnssPsds) override;
63*4d7e907cSAndroid Build Coastguard Worker     ndk::ScopedAStatus getExtensionGnssConfiguration(
64*4d7e907cSAndroid Build Coastguard Worker             std::shared_ptr<IGnssConfiguration>* iGnssConfiguration) override;
65*4d7e907cSAndroid Build Coastguard Worker     ndk::ScopedAStatus getExtensionGnssPowerIndication(
66*4d7e907cSAndroid Build Coastguard Worker             std::shared_ptr<IGnssPowerIndication>* iGnssPowerIndication) override;
67*4d7e907cSAndroid Build Coastguard Worker     ndk::ScopedAStatus getExtensionGnssMeasurement(
68*4d7e907cSAndroid Build Coastguard Worker             std::shared_ptr<IGnssMeasurementInterface>* iGnssMeasurement) override;
69*4d7e907cSAndroid Build Coastguard Worker     ndk::ScopedAStatus getExtensionGnssBatching(
70*4d7e907cSAndroid Build Coastguard Worker             std::shared_ptr<IGnssBatching>* iGnssBatching) override;
71*4d7e907cSAndroid Build Coastguard Worker     ndk::ScopedAStatus getExtensionGnssGeofence(
72*4d7e907cSAndroid Build Coastguard Worker             std::shared_ptr<IGnssGeofence>* iGnssGeofence) override;
73*4d7e907cSAndroid Build Coastguard Worker     ndk::ScopedAStatus getExtensionGnssNavigationMessage(
74*4d7e907cSAndroid Build Coastguard Worker             std::shared_ptr<IGnssNavigationMessageInterface>* iGnssNavigationMessage) override;
75*4d7e907cSAndroid Build Coastguard Worker     ndk::ScopedAStatus getExtensionAGnss(std::shared_ptr<IAGnss>* iAGnss) override;
76*4d7e907cSAndroid Build Coastguard Worker     ndk::ScopedAStatus getExtensionAGnssRil(std::shared_ptr<IAGnssRil>* iAGnssRil) override;
77*4d7e907cSAndroid Build Coastguard Worker     ndk::ScopedAStatus getExtensionGnssDebug(std::shared_ptr<IGnssDebug>* iGnssDebug) override;
78*4d7e907cSAndroid Build Coastguard Worker     ndk::ScopedAStatus getExtensionGnssVisibilityControl(
79*4d7e907cSAndroid Build Coastguard Worker             std::shared_ptr<android::hardware::gnss::visibility_control::IGnssVisibilityControl>*
80*4d7e907cSAndroid Build Coastguard Worker                     iGnssVisibilityControl) override;
81*4d7e907cSAndroid Build Coastguard Worker     ndk::ScopedAStatus getExtensionGnssAntennaInfo(
82*4d7e907cSAndroid Build Coastguard Worker             std::shared_ptr<IGnssAntennaInfo>* iGnssAntennaInfo) override;
83*4d7e907cSAndroid Build Coastguard Worker     ndk::ScopedAStatus getExtensionMeasurementCorrections(
84*4d7e907cSAndroid Build Coastguard Worker             std::shared_ptr<android::hardware::gnss::measurement_corrections::
85*4d7e907cSAndroid Build Coastguard Worker                                     IMeasurementCorrectionsInterface>* iMeasurementCorrections)
86*4d7e907cSAndroid Build Coastguard Worker             override;
87*4d7e907cSAndroid Build Coastguard Worker     ndk::ScopedAStatus getExtensionGnssAssistanceInterface(
88*4d7e907cSAndroid Build Coastguard Worker             std::shared_ptr<android::hardware::gnss::gnss_assistance::IGnssAssistanceInterface>*
89*4d7e907cSAndroid Build Coastguard Worker                     iGnssAssistanceInterface) override;
90*4d7e907cSAndroid Build Coastguard Worker 
91*4d7e907cSAndroid Build Coastguard Worker     void reportSvStatus() const;
92*4d7e907cSAndroid Build Coastguard Worker     void setGnssMeasurementEnabled(const bool enabled);
93*4d7e907cSAndroid Build Coastguard Worker     void setGnssMeasurementInterval(const long intervalMs);
94*4d7e907cSAndroid Build Coastguard Worker     std::shared_ptr<GnssLocation> getLastLocation() const;
95*4d7e907cSAndroid Build Coastguard Worker     std::shared_ptr<GnssConfiguration> mGnssConfiguration;
96*4d7e907cSAndroid Build Coastguard Worker     std::shared_ptr<GnssPowerIndication> mGnssPowerIndication;
97*4d7e907cSAndroid Build Coastguard Worker     std::shared_ptr<GnssMeasurementInterface> mGnssMeasurementInterface;
98*4d7e907cSAndroid Build Coastguard Worker 
99*4d7e907cSAndroid Build Coastguard Worker   private:
100*4d7e907cSAndroid Build Coastguard Worker     void reportLocation(const GnssLocation&);
101*4d7e907cSAndroid Build Coastguard Worker     void reportSvStatus(const std::vector<IGnssCallback::GnssSvInfo>& svInfoList) const;
102*4d7e907cSAndroid Build Coastguard Worker     void reportGnssStatusValue(const IGnssCallback::GnssStatusValue gnssStatusValue) const;
103*4d7e907cSAndroid Build Coastguard Worker     void reportNmea() const;
104*4d7e907cSAndroid Build Coastguard Worker     std::vector<IGnssCallback::GnssSvInfo> filterBlocklistedSatellites(
105*4d7e907cSAndroid Build Coastguard Worker             std::vector<IGnssCallback::GnssSvInfo> gnssSvInfoList) const;
106*4d7e907cSAndroid Build Coastguard Worker     std::unique_ptr<GnssLocation> getLocationFromHW();
107*4d7e907cSAndroid Build Coastguard Worker 
108*4d7e907cSAndroid Build Coastguard Worker     static std::shared_ptr<IGnssCallback> sGnssCallback;
109*4d7e907cSAndroid Build Coastguard Worker 
110*4d7e907cSAndroid Build Coastguard Worker     std::atomic<long> mMinIntervalMs;
111*4d7e907cSAndroid Build Coastguard Worker     std::atomic<long> mGnssMeasurementIntervalMs;
112*4d7e907cSAndroid Build Coastguard Worker     std::atomic<bool> mIsActive;
113*4d7e907cSAndroid Build Coastguard Worker     std::atomic<bool> mIsSvStatusActive;
114*4d7e907cSAndroid Build Coastguard Worker     std::atomic<bool> mIsNmeaActive;
115*4d7e907cSAndroid Build Coastguard Worker     std::atomic<bool> mFirstFixReceived;
116*4d7e907cSAndroid Build Coastguard Worker     std::atomic<bool> mGnssMeasurementEnabled;
117*4d7e907cSAndroid Build Coastguard Worker     std::shared_ptr<GnssLocation> mLastLocation;
118*4d7e907cSAndroid Build Coastguard Worker     std::thread mThread;
119*4d7e907cSAndroid Build Coastguard Worker     ::android::hardware::gnss::common::ThreadBlocker mThreadBlocker;
120*4d7e907cSAndroid Build Coastguard Worker 
121*4d7e907cSAndroid Build Coastguard Worker     mutable std::mutex mMutex;
122*4d7e907cSAndroid Build Coastguard Worker };
123*4d7e907cSAndroid Build Coastguard Worker 
124*4d7e907cSAndroid Build Coastguard Worker }  // namespace aidl::android::hardware::gnss
125