1 #ifndef ANDROID_HARDWARE_GNSS_V1_1_GNSS_H 2 #define ANDROID_HARDWARE_GNSS_V1_1_GNSS_H 3 4 #include <android/hardware/gnss/1.1/IGnss.h> 5 #include <hidl/MQDescriptor.h> 6 #include <hidl/Status.h> 7 #include <atomic> 8 #include <mutex> 9 #include <thread> 10 #include "GnssConfiguration.h" 11 #include "gps.h" 12 13 namespace android { 14 namespace hardware { 15 namespace gnss { 16 namespace V1_1 { 17 namespace implementation { 18 19 using ::android::hardware::hidl_array; 20 using ::android::hardware::hidl_memory; 21 using ::android::hardware::hidl_string; 22 using ::android::hardware::hidl_vec; 23 using ::android::hardware::Return; 24 using ::android::hardware::Void; 25 using ::android::sp; 26 27 using GnssConstellationType = V1_0::GnssConstellationType; 28 using GnssLocation = V1_0::GnssLocation; 29 using GnssSvInfo = V1_0::IGnssCallback::GnssSvInfo; 30 using GnssSvStatus = V1_0::IGnssCallback::GnssSvStatus; 31 32 /** 33 * Unlike the gnss/1.0/default implementation, which is a shim layer to the legacy gps.h, this 34 * default implementation serves as a mock implementation for emulators 35 */ 36 struct Gnss : public IGnss { 37 Gnss(); 38 ~Gnss(); 39 // Methods from ::android::hardware::gnss::V1_0::IGnss follow. 40 Return<bool> setCallback( 41 const sp<::android::hardware::gnss::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( 50 ::android::hardware::gnss::V1_0::IGnss::GnssAidingData aidingDataFlags) override; 51 Return<bool> setPositionMode( 52 ::android::hardware::gnss::V1_0::IGnss::GnssPositionMode mode, 53 ::android::hardware::gnss::V1_0::IGnss::GnssPositionRecurrence recurrence, 54 uint32_t minIntervalMs, uint32_t preferredAccuracyMeters, 55 uint32_t preferredTimeMs) override; 56 Return<sp<::android::hardware::gnss::V1_0::IAGnssRil>> getExtensionAGnssRil() override; 57 Return<sp<::android::hardware::gnss::V1_0::IGnssGeofencing>> getExtensionGnssGeofencing() 58 override; 59 Return<sp<::android::hardware::gnss::V1_0::IAGnss>> getExtensionAGnss() override; 60 Return<sp<::android::hardware::gnss::V1_0::IGnssNi>> getExtensionGnssNi() override; 61 Return<sp<::android::hardware::gnss::V1_0::IGnssMeasurement>> getExtensionGnssMeasurement() 62 override; 63 Return<sp<::android::hardware::gnss::V1_0::IGnssNavigationMessage>> 64 getExtensionGnssNavigationMessage() override; 65 Return<sp<::android::hardware::gnss::V1_0::IGnssXtra>> getExtensionXtra() override; 66 Return<sp<::android::hardware::gnss::V1_0::IGnssConfiguration>> getExtensionGnssConfiguration() 67 override; 68 Return<sp<::android::hardware::gnss::V1_0::IGnssDebug>> getExtensionGnssDebug() override; 69 Return<sp<::android::hardware::gnss::V1_0::IGnssBatching>> getExtensionGnssBatching() override; 70 71 // Methods from ::android::hardware::gnss::V1_1::IGnss follow. 72 Return<bool> setCallback_1_1( 73 const sp<::android::hardware::gnss::V1_1::IGnssCallback>& callback) override; 74 Return<bool> setPositionMode_1_1( 75 ::android::hardware::gnss::V1_0::IGnss::GnssPositionMode mode, 76 ::android::hardware::gnss::V1_0::IGnss::GnssPositionRecurrence recurrence, 77 uint32_t minIntervalMs, uint32_t preferredAccuracyMeters, uint32_t preferredTimeMs, 78 bool lowPowerMode) override; 79 Return<sp<::android::hardware::gnss::V1_1::IGnssConfiguration>> 80 getExtensionGnssConfiguration_1_1() override; 81 Return<sp<::android::hardware::gnss::V1_1::IGnssMeasurement>> getExtensionGnssMeasurement_1_1() 82 override; 83 Return<bool> injectBestLocation( 84 const ::android::hardware::gnss::V1_0::GnssLocation& location) override; 85 86 // Methods from ::android::hidl::base::V1_0::IBase follow. 87 private: 88 Return<GnssSvInfo> getSvInfo(int16_t svid, GnssConstellationType type, float cN0DbHz, 89 float elevationDegress, float azimuthDegress, int16_t used) const; 90 Return<void> reportLocation(const GnssLocation&) const; 91 Return<void> reportSvStatus(const GnssSvStatus&) const; 92 93 static sp<IGnssCallback> sGnssCallback; 94 std::atomic<long> mMinIntervalMs; 95 sp<GnssConfiguration> mGnssConfiguration; 96 std::atomic<bool> mIsActive; 97 std::thread mThread; 98 mutable std::mutex mMutex; 99 }; 100 101 } // namespace implementation 102 } // namespace V1_1 103 } // namespace gnss 104 } // namespace hardware 105 } // namespace android 106 107 #endif // ANDROID_HARDWARE_GNSS_V1_1_GNSS_H 108