1*4d7e907cSAndroid Build Coastguard Worker #ifndef ANDROID_HARDWARE_GNSS_V1_1_GNSSCONFIGURATION_H 2*4d7e907cSAndroid Build Coastguard Worker #define ANDROID_HARDWARE_GNSS_V1_1_GNSSCONFIGURATION_H 3*4d7e907cSAndroid Build Coastguard Worker 4*4d7e907cSAndroid Build Coastguard Worker #include <android/hardware/gnss/1.1/IGnssCallback.h> 5*4d7e907cSAndroid Build Coastguard Worker #include <android/hardware/gnss/1.1/IGnssConfiguration.h> 6*4d7e907cSAndroid Build Coastguard Worker #include <hidl/MQDescriptor.h> 7*4d7e907cSAndroid Build Coastguard Worker #include <hidl/Status.h> 8*4d7e907cSAndroid Build Coastguard Worker #include <mutex> 9*4d7e907cSAndroid Build Coastguard Worker #include <unordered_set> 10*4d7e907cSAndroid Build Coastguard Worker 11*4d7e907cSAndroid Build Coastguard Worker namespace android { 12*4d7e907cSAndroid Build Coastguard Worker namespace hardware { 13*4d7e907cSAndroid Build Coastguard Worker namespace gnss { 14*4d7e907cSAndroid Build Coastguard Worker namespace V1_1 { 15*4d7e907cSAndroid Build Coastguard Worker namespace implementation { 16*4d7e907cSAndroid Build Coastguard Worker 17*4d7e907cSAndroid Build Coastguard Worker using ::android::hardware::hidl_array; 18*4d7e907cSAndroid Build Coastguard Worker using ::android::hardware::hidl_memory; 19*4d7e907cSAndroid Build Coastguard Worker using ::android::hardware::hidl_string; 20*4d7e907cSAndroid Build Coastguard Worker using ::android::hardware::hidl_vec; 21*4d7e907cSAndroid Build Coastguard Worker using ::android::hardware::Return; 22*4d7e907cSAndroid Build Coastguard Worker using ::android::hardware::Void; 23*4d7e907cSAndroid Build Coastguard Worker using ::android::sp; 24*4d7e907cSAndroid Build Coastguard Worker 25*4d7e907cSAndroid Build Coastguard Worker using BlacklistedSource = ::android::hardware::gnss::V1_1::IGnssConfiguration::BlacklistedSource; 26*4d7e907cSAndroid Build Coastguard Worker using GnssConstellationType = V1_0::GnssConstellationType; 27*4d7e907cSAndroid Build Coastguard Worker using GnssSvInfo = V1_0::IGnssCallback::GnssSvInfo; 28*4d7e907cSAndroid Build Coastguard Worker 29*4d7e907cSAndroid Build Coastguard Worker struct BlacklistedSourceHash { operatorBlacklistedSourceHash30*4d7e907cSAndroid Build Coastguard Worker inline int operator()(const BlacklistedSource& source) const { 31*4d7e907cSAndroid Build Coastguard Worker return int(source.constellation) * 1000 + int(source.svid); 32*4d7e907cSAndroid Build Coastguard Worker } 33*4d7e907cSAndroid Build Coastguard Worker }; 34*4d7e907cSAndroid Build Coastguard Worker 35*4d7e907cSAndroid Build Coastguard Worker struct BlacklistedSourceEqual { operatorBlacklistedSourceEqual36*4d7e907cSAndroid Build Coastguard Worker inline bool operator()(const BlacklistedSource& s1, const BlacklistedSource& s2) const { 37*4d7e907cSAndroid Build Coastguard Worker return (s1.constellation == s2.constellation) && (s1.svid == s2.svid); 38*4d7e907cSAndroid Build Coastguard Worker } 39*4d7e907cSAndroid Build Coastguard Worker }; 40*4d7e907cSAndroid Build Coastguard Worker 41*4d7e907cSAndroid Build Coastguard Worker using BlacklistedSourceSet = 42*4d7e907cSAndroid Build Coastguard Worker std::unordered_set<BlacklistedSource, BlacklistedSourceHash, BlacklistedSourceEqual>; 43*4d7e907cSAndroid Build Coastguard Worker using BlacklistedConstellationSet = std::unordered_set<GnssConstellationType>; 44*4d7e907cSAndroid Build Coastguard Worker 45*4d7e907cSAndroid Build Coastguard Worker struct GnssConfiguration : public IGnssConfiguration { 46*4d7e907cSAndroid Build Coastguard Worker // Methods from ::android::hardware::gnss::V1_0::IGnssConfiguration follow. 47*4d7e907cSAndroid Build Coastguard Worker Return<bool> setSuplEs(bool enabled) override; 48*4d7e907cSAndroid Build Coastguard Worker Return<bool> setSuplVersion(uint32_t version) override; 49*4d7e907cSAndroid Build Coastguard Worker Return<bool> setSuplMode(hidl_bitfield<SuplMode> mode) override; 50*4d7e907cSAndroid Build Coastguard Worker Return<bool> setGpsLock(hidl_bitfield<GpsLock> lock) override; 51*4d7e907cSAndroid Build Coastguard Worker Return<bool> setLppProfile(hidl_bitfield<LppProfile> lppProfile) override; 52*4d7e907cSAndroid Build Coastguard Worker Return<bool> setGlonassPositioningProtocol(hidl_bitfield<GlonassPosProtocol> protocol) override; 53*4d7e907cSAndroid Build Coastguard Worker Return<bool> setEmergencySuplPdn(bool enable) override; 54*4d7e907cSAndroid Build Coastguard Worker 55*4d7e907cSAndroid Build Coastguard Worker // Methods from ::android::hardware::gnss::V1_1::IGnssConfiguration follow. 56*4d7e907cSAndroid Build Coastguard Worker Return<bool> setBlacklist(const hidl_vec<BlacklistedSource>& blacklist) override; 57*4d7e907cSAndroid Build Coastguard Worker 58*4d7e907cSAndroid Build Coastguard Worker Return<bool> isBlacklisted(const GnssSvInfo& gnssSvInfo) const; 59*4d7e907cSAndroid Build Coastguard Worker std::recursive_mutex& getMutex() const; 60*4d7e907cSAndroid Build Coastguard Worker 61*4d7e907cSAndroid Build Coastguard Worker private: 62*4d7e907cSAndroid Build Coastguard Worker BlacklistedSourceSet mBlacklistedSourceSet; 63*4d7e907cSAndroid Build Coastguard Worker BlacklistedConstellationSet mBlacklistedConstellationSet; 64*4d7e907cSAndroid Build Coastguard Worker mutable std::recursive_mutex mMutex; 65*4d7e907cSAndroid Build Coastguard Worker }; 66*4d7e907cSAndroid Build Coastguard Worker 67*4d7e907cSAndroid Build Coastguard Worker } // namespace implementation 68*4d7e907cSAndroid Build Coastguard Worker } // namespace V1_1 69*4d7e907cSAndroid Build Coastguard Worker } // namespace gnss 70*4d7e907cSAndroid Build Coastguard Worker } // namespace hardware 71*4d7e907cSAndroid Build Coastguard Worker } // namespace android 72*4d7e907cSAndroid Build Coastguard Worker 73*4d7e907cSAndroid Build Coastguard Worker #endif // ANDROID_HARDWARE_GNSS_V1_1_GNSSCONFIGURATION_H 74