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