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