Loading services/core/jni/com_android_server_location_GnssLocationProvider.cpp +12 −2 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ #include <android/hardware/gnss/2.1/IGnssMeasurement.h> #include <android/hardware/gnss/3.0/IGnssPsds.h> #include <android/hardware/gnss/BnGnss.h> #include <android/hardware/gnss/BnGnssMeasurementCallback.h> #include <android/hardware/gnss/BnGnssPowerIndicationCallback.h> #include <android/hardware/gnss/BnGnssPsdsCallback.h> #include <android/hardware/gnss/measurement_corrections/1.0/IMeasurementCorrections.h> Loading Loading @@ -1754,7 +1755,15 @@ static void android_location_GnssNative_init_once(JNIEnv* env, jobject obj, // 1.1@IGnss can be paired {1.0, 1.1}@IGnssMeasurement // 1.0@IGnss is paired with 1.0@IGnssMeasurement gnssMeasurementIface = nullptr; if (gnssHal_V2_1 != nullptr) { if (gnssHalAidl != nullptr) { sp<hardware::gnss::IGnssMeasurementInterface> gnssMeasurement; auto status = gnssHalAidl->getExtensionGnssMeasurement(&gnssMeasurement); if (checkAidlStatus(status, "Unable to get a handle to GnssMeasurement AIDL interface.")) { gnssMeasurementIface = std::make_unique<android::gnss::GnssMeasurement>(gnssMeasurement); } } if (gnssHal_V2_1 != nullptr && gnssMeasurementIface == nullptr) { auto gnssMeasurement = gnssHal_V2_1->getExtensionGnssMeasurement_2_1(); if (checkHidlReturn(gnssMeasurement, "Unable to get a handle to GnssMeasurement_V2_1")) { gnssMeasurementIface = Loading Loading @@ -2696,7 +2705,8 @@ static jboolean android_location_GnssMeasurementsProvider_start_measurement_coll return JNI_FALSE; } return gnssMeasurementIface->setCallback(sp<gnss::GnssMeasurementCallback>::make(mCallbacksObj), return gnssMeasurementIface->setCallback(std::make_unique<gnss::GnssMeasurementCallback>( mCallbacksObj), enableFullTracking); } Loading services/core/jni/gnss/GnssMeasurement.cpp +25 −8 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ using android::hardware::hidl_vec; using android::hardware::Return; using IGnssMeasurementInterface = android::hardware::gnss::IGnssMeasurementInterface; using IGnssMeasurement_V1_0 = android::hardware::gnss::V1_0::IGnssMeasurement; using IGnssMeasurement_V1_1 = android::hardware::gnss::V1_1::IGnssMeasurement; using IGnssMeasurement_V2_0 = android::hardware::gnss::V2_0::IGnssMeasurement; Loading @@ -43,17 +44,33 @@ jboolean checkGnssMeasurementStatus(const IGnssMeasurement_V1_0::GnssMeasurement namespace android::gnss { // Implementation of GnssMeasurement GnssMeasurement::GnssMeasurement(const sp<IGnssMeasurementInterface>& iGnssMeasurement) : mIGnssMeasurement(iGnssMeasurement) {} jboolean GnssMeasurement::setCallback(const std::unique_ptr<GnssMeasurementCallback>& callback, bool enableFullTracking) { auto status = mIGnssMeasurement->setCallback(callback->getAidl(), enableFullTracking); return checkAidlStatus(status, "IGnssMeasurement setCallback() failed."); } jboolean GnssMeasurement::close() { auto status = mIGnssMeasurement->close(); return checkAidlStatus(status, "IGnssMeasurement close() failed."); } // Implementation of GnssMeasurement_V1_0 GnssMeasurement_V1_0::GnssMeasurement_V1_0(const sp<IGnssMeasurement_V1_0>& iGnssMeasurement) : mIGnssMeasurement_V1_0(iGnssMeasurement) {} jboolean GnssMeasurement_V1_0::setCallback(const sp<GnssMeasurementCallback>& callback, jboolean GnssMeasurement_V1_0::setCallback(const std::unique_ptr<GnssMeasurementCallback>& callback, bool enableFullTracking) { if (enableFullTracking == true) { ALOGW("Full tracking is mode not supported in 1.0 GNSS HAL."); } auto status = mIGnssMeasurement_V1_0->setCallback(callback); auto status = mIGnssMeasurement_V1_0->setCallback(callback->getHidl()); if (!checkHidlReturn(status, "IGnssMeasurement setCallback() failed.")) { return JNI_FALSE; } Loading @@ -71,9 +88,9 @@ jboolean GnssMeasurement_V1_0::close() { GnssMeasurement_V1_1::GnssMeasurement_V1_1(const sp<IGnssMeasurement_V1_1>& iGnssMeasurement) : GnssMeasurement_V1_0{iGnssMeasurement}, mIGnssMeasurement_V1_1(iGnssMeasurement) {} jboolean GnssMeasurement_V1_1::setCallback(const sp<GnssMeasurementCallback>& callback, jboolean GnssMeasurement_V1_1::setCallback(const std::unique_ptr<GnssMeasurementCallback>& callback, bool enableFullTracking) { auto status = mIGnssMeasurement_V1_1->setCallback_1_1(callback, enableFullTracking); auto status = mIGnssMeasurement_V1_1->setCallback_1_1(callback->getHidl(), enableFullTracking); if (!checkHidlReturn(status, "IGnssMeasurement setCallback_V1_1() failed.")) { return JNI_FALSE; } Loading @@ -86,9 +103,9 @@ jboolean GnssMeasurement_V1_1::setCallback(const sp<GnssMeasurementCallback>& ca GnssMeasurement_V2_0::GnssMeasurement_V2_0(const sp<IGnssMeasurement_V2_0>& iGnssMeasurement) : GnssMeasurement_V1_1{iGnssMeasurement}, mIGnssMeasurement_V2_0(iGnssMeasurement) {} jboolean GnssMeasurement_V2_0::setCallback(const sp<GnssMeasurementCallback>& callback, jboolean GnssMeasurement_V2_0::setCallback(const std::unique_ptr<GnssMeasurementCallback>& callback, bool enableFullTracking) { auto status = mIGnssMeasurement_V2_0->setCallback_2_0(callback, enableFullTracking); auto status = mIGnssMeasurement_V2_0->setCallback_2_0(callback->getHidl(), enableFullTracking); if (!checkHidlReturn(status, "IGnssMeasurement setCallback_2_0() failed.")) { return JNI_FALSE; } Loading @@ -101,9 +118,9 @@ jboolean GnssMeasurement_V2_0::setCallback(const sp<GnssMeasurementCallback>& ca GnssMeasurement_V2_1::GnssMeasurement_V2_1(const sp<IGnssMeasurement_V2_1>& iGnssMeasurement) : GnssMeasurement_V2_0{iGnssMeasurement}, mIGnssMeasurement_V2_1(iGnssMeasurement) {} jboolean GnssMeasurement_V2_1::setCallback(const sp<GnssMeasurementCallback>& callback, jboolean GnssMeasurement_V2_1::setCallback(const std::unique_ptr<GnssMeasurementCallback>& callback, bool enableFullTracking) { auto status = mIGnssMeasurement_V2_1->setCallback_2_1(callback, enableFullTracking); auto status = mIGnssMeasurement_V2_1->setCallback_2_1(callback->getHidl(), enableFullTracking); if (!checkHidlReturn(status, "IGnssMeasurement setCallback_2_1() failed.")) { return JNI_FALSE; } Loading services/core/jni/gnss/GnssMeasurement.h +17 −5 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ #include <android/hardware/gnss/1.1/IGnssMeasurement.h> #include <android/hardware/gnss/2.0/IGnssMeasurement.h> #include <android/hardware/gnss/2.1/IGnssMeasurement.h> #include <android/hardware/gnss/BnGnssMeasurementInterface.h> #include <log/log.h> #include "GnssMeasurementCallback.h" #include "jni.h" Loading @@ -36,16 +37,27 @@ namespace android::gnss { class GnssMeasurementInterface { public: virtual ~GnssMeasurementInterface() {} virtual jboolean setCallback(const sp<GnssMeasurementCallback>& callback, virtual jboolean setCallback(const std::unique_ptr<GnssMeasurementCallback>& callback, bool enableFullTracking) = 0; virtual jboolean close() = 0; }; class GnssMeasurement : public GnssMeasurementInterface { public: GnssMeasurement(const sp<android::hardware::gnss::IGnssMeasurementInterface>& iGnssMeasurement); jboolean setCallback(const std::unique_ptr<GnssMeasurementCallback>& callback, bool enableFullTracking) override; jboolean close() override; private: const sp<android::hardware::gnss::IGnssMeasurementInterface> mIGnssMeasurement; }; class GnssMeasurement_V1_0 : public GnssMeasurementInterface { public: GnssMeasurement_V1_0( const sp<android::hardware::gnss::V1_0::IGnssMeasurement>& iGnssMeasurement); jboolean setCallback(const sp<GnssMeasurementCallback>& callback, jboolean setCallback(const std::unique_ptr<GnssMeasurementCallback>& callback, bool enableFullTracking) override; jboolean close() override; Loading @@ -57,7 +69,7 @@ class GnssMeasurement_V1_1 : public GnssMeasurement_V1_0 { public: GnssMeasurement_V1_1( const sp<android::hardware::gnss::V1_1::IGnssMeasurement>& iGnssMeasurement); jboolean setCallback(const sp<GnssMeasurementCallback>& callback, jboolean setCallback(const std::unique_ptr<GnssMeasurementCallback>& callback, bool enableFullTracking) override; private: Loading @@ -68,7 +80,7 @@ class GnssMeasurement_V2_0 : public GnssMeasurement_V1_1 { public: GnssMeasurement_V2_0( const sp<android::hardware::gnss::V2_0::IGnssMeasurement>& iGnssMeasurement); jboolean setCallback(const sp<GnssMeasurementCallback>& callback, jboolean setCallback(const std::unique_ptr<GnssMeasurementCallback>& callback, bool enableFullTracking) override; private: Loading @@ -79,7 +91,7 @@ class GnssMeasurement_V2_1 : public GnssMeasurement_V2_0 { public: GnssMeasurement_V2_1( const sp<android::hardware::gnss::V2_1::IGnssMeasurement>& iGnssMeasurement); jboolean setCallback(const sp<GnssMeasurementCallback>& callback, jboolean setCallback(const std::unique_ptr<GnssMeasurementCallback>& callback, bool enableFullTracking) override; private: Loading Loading
services/core/jni/com_android_server_location_GnssLocationProvider.cpp +12 −2 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ #include <android/hardware/gnss/2.1/IGnssMeasurement.h> #include <android/hardware/gnss/3.0/IGnssPsds.h> #include <android/hardware/gnss/BnGnss.h> #include <android/hardware/gnss/BnGnssMeasurementCallback.h> #include <android/hardware/gnss/BnGnssPowerIndicationCallback.h> #include <android/hardware/gnss/BnGnssPsdsCallback.h> #include <android/hardware/gnss/measurement_corrections/1.0/IMeasurementCorrections.h> Loading Loading @@ -1754,7 +1755,15 @@ static void android_location_GnssNative_init_once(JNIEnv* env, jobject obj, // 1.1@IGnss can be paired {1.0, 1.1}@IGnssMeasurement // 1.0@IGnss is paired with 1.0@IGnssMeasurement gnssMeasurementIface = nullptr; if (gnssHal_V2_1 != nullptr) { if (gnssHalAidl != nullptr) { sp<hardware::gnss::IGnssMeasurementInterface> gnssMeasurement; auto status = gnssHalAidl->getExtensionGnssMeasurement(&gnssMeasurement); if (checkAidlStatus(status, "Unable to get a handle to GnssMeasurement AIDL interface.")) { gnssMeasurementIface = std::make_unique<android::gnss::GnssMeasurement>(gnssMeasurement); } } if (gnssHal_V2_1 != nullptr && gnssMeasurementIface == nullptr) { auto gnssMeasurement = gnssHal_V2_1->getExtensionGnssMeasurement_2_1(); if (checkHidlReturn(gnssMeasurement, "Unable to get a handle to GnssMeasurement_V2_1")) { gnssMeasurementIface = Loading Loading @@ -2696,7 +2705,8 @@ static jboolean android_location_GnssMeasurementsProvider_start_measurement_coll return JNI_FALSE; } return gnssMeasurementIface->setCallback(sp<gnss::GnssMeasurementCallback>::make(mCallbacksObj), return gnssMeasurementIface->setCallback(std::make_unique<gnss::GnssMeasurementCallback>( mCallbacksObj), enableFullTracking); } Loading
services/core/jni/gnss/GnssMeasurement.cpp +25 −8 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ using android::hardware::hidl_vec; using android::hardware::Return; using IGnssMeasurementInterface = android::hardware::gnss::IGnssMeasurementInterface; using IGnssMeasurement_V1_0 = android::hardware::gnss::V1_0::IGnssMeasurement; using IGnssMeasurement_V1_1 = android::hardware::gnss::V1_1::IGnssMeasurement; using IGnssMeasurement_V2_0 = android::hardware::gnss::V2_0::IGnssMeasurement; Loading @@ -43,17 +44,33 @@ jboolean checkGnssMeasurementStatus(const IGnssMeasurement_V1_0::GnssMeasurement namespace android::gnss { // Implementation of GnssMeasurement GnssMeasurement::GnssMeasurement(const sp<IGnssMeasurementInterface>& iGnssMeasurement) : mIGnssMeasurement(iGnssMeasurement) {} jboolean GnssMeasurement::setCallback(const std::unique_ptr<GnssMeasurementCallback>& callback, bool enableFullTracking) { auto status = mIGnssMeasurement->setCallback(callback->getAidl(), enableFullTracking); return checkAidlStatus(status, "IGnssMeasurement setCallback() failed."); } jboolean GnssMeasurement::close() { auto status = mIGnssMeasurement->close(); return checkAidlStatus(status, "IGnssMeasurement close() failed."); } // Implementation of GnssMeasurement_V1_0 GnssMeasurement_V1_0::GnssMeasurement_V1_0(const sp<IGnssMeasurement_V1_0>& iGnssMeasurement) : mIGnssMeasurement_V1_0(iGnssMeasurement) {} jboolean GnssMeasurement_V1_0::setCallback(const sp<GnssMeasurementCallback>& callback, jboolean GnssMeasurement_V1_0::setCallback(const std::unique_ptr<GnssMeasurementCallback>& callback, bool enableFullTracking) { if (enableFullTracking == true) { ALOGW("Full tracking is mode not supported in 1.0 GNSS HAL."); } auto status = mIGnssMeasurement_V1_0->setCallback(callback); auto status = mIGnssMeasurement_V1_0->setCallback(callback->getHidl()); if (!checkHidlReturn(status, "IGnssMeasurement setCallback() failed.")) { return JNI_FALSE; } Loading @@ -71,9 +88,9 @@ jboolean GnssMeasurement_V1_0::close() { GnssMeasurement_V1_1::GnssMeasurement_V1_1(const sp<IGnssMeasurement_V1_1>& iGnssMeasurement) : GnssMeasurement_V1_0{iGnssMeasurement}, mIGnssMeasurement_V1_1(iGnssMeasurement) {} jboolean GnssMeasurement_V1_1::setCallback(const sp<GnssMeasurementCallback>& callback, jboolean GnssMeasurement_V1_1::setCallback(const std::unique_ptr<GnssMeasurementCallback>& callback, bool enableFullTracking) { auto status = mIGnssMeasurement_V1_1->setCallback_1_1(callback, enableFullTracking); auto status = mIGnssMeasurement_V1_1->setCallback_1_1(callback->getHidl(), enableFullTracking); if (!checkHidlReturn(status, "IGnssMeasurement setCallback_V1_1() failed.")) { return JNI_FALSE; } Loading @@ -86,9 +103,9 @@ jboolean GnssMeasurement_V1_1::setCallback(const sp<GnssMeasurementCallback>& ca GnssMeasurement_V2_0::GnssMeasurement_V2_0(const sp<IGnssMeasurement_V2_0>& iGnssMeasurement) : GnssMeasurement_V1_1{iGnssMeasurement}, mIGnssMeasurement_V2_0(iGnssMeasurement) {} jboolean GnssMeasurement_V2_0::setCallback(const sp<GnssMeasurementCallback>& callback, jboolean GnssMeasurement_V2_0::setCallback(const std::unique_ptr<GnssMeasurementCallback>& callback, bool enableFullTracking) { auto status = mIGnssMeasurement_V2_0->setCallback_2_0(callback, enableFullTracking); auto status = mIGnssMeasurement_V2_0->setCallback_2_0(callback->getHidl(), enableFullTracking); if (!checkHidlReturn(status, "IGnssMeasurement setCallback_2_0() failed.")) { return JNI_FALSE; } Loading @@ -101,9 +118,9 @@ jboolean GnssMeasurement_V2_0::setCallback(const sp<GnssMeasurementCallback>& ca GnssMeasurement_V2_1::GnssMeasurement_V2_1(const sp<IGnssMeasurement_V2_1>& iGnssMeasurement) : GnssMeasurement_V2_0{iGnssMeasurement}, mIGnssMeasurement_V2_1(iGnssMeasurement) {} jboolean GnssMeasurement_V2_1::setCallback(const sp<GnssMeasurementCallback>& callback, jboolean GnssMeasurement_V2_1::setCallback(const std::unique_ptr<GnssMeasurementCallback>& callback, bool enableFullTracking) { auto status = mIGnssMeasurement_V2_1->setCallback_2_1(callback, enableFullTracking); auto status = mIGnssMeasurement_V2_1->setCallback_2_1(callback->getHidl(), enableFullTracking); if (!checkHidlReturn(status, "IGnssMeasurement setCallback_2_1() failed.")) { return JNI_FALSE; } Loading
services/core/jni/gnss/GnssMeasurement.h +17 −5 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ #include <android/hardware/gnss/1.1/IGnssMeasurement.h> #include <android/hardware/gnss/2.0/IGnssMeasurement.h> #include <android/hardware/gnss/2.1/IGnssMeasurement.h> #include <android/hardware/gnss/BnGnssMeasurementInterface.h> #include <log/log.h> #include "GnssMeasurementCallback.h" #include "jni.h" Loading @@ -36,16 +37,27 @@ namespace android::gnss { class GnssMeasurementInterface { public: virtual ~GnssMeasurementInterface() {} virtual jboolean setCallback(const sp<GnssMeasurementCallback>& callback, virtual jboolean setCallback(const std::unique_ptr<GnssMeasurementCallback>& callback, bool enableFullTracking) = 0; virtual jboolean close() = 0; }; class GnssMeasurement : public GnssMeasurementInterface { public: GnssMeasurement(const sp<android::hardware::gnss::IGnssMeasurementInterface>& iGnssMeasurement); jboolean setCallback(const std::unique_ptr<GnssMeasurementCallback>& callback, bool enableFullTracking) override; jboolean close() override; private: const sp<android::hardware::gnss::IGnssMeasurementInterface> mIGnssMeasurement; }; class GnssMeasurement_V1_0 : public GnssMeasurementInterface { public: GnssMeasurement_V1_0( const sp<android::hardware::gnss::V1_0::IGnssMeasurement>& iGnssMeasurement); jboolean setCallback(const sp<GnssMeasurementCallback>& callback, jboolean setCallback(const std::unique_ptr<GnssMeasurementCallback>& callback, bool enableFullTracking) override; jboolean close() override; Loading @@ -57,7 +69,7 @@ class GnssMeasurement_V1_1 : public GnssMeasurement_V1_0 { public: GnssMeasurement_V1_1( const sp<android::hardware::gnss::V1_1::IGnssMeasurement>& iGnssMeasurement); jboolean setCallback(const sp<GnssMeasurementCallback>& callback, jboolean setCallback(const std::unique_ptr<GnssMeasurementCallback>& callback, bool enableFullTracking) override; private: Loading @@ -68,7 +80,7 @@ class GnssMeasurement_V2_0 : public GnssMeasurement_V1_1 { public: GnssMeasurement_V2_0( const sp<android::hardware::gnss::V2_0::IGnssMeasurement>& iGnssMeasurement); jboolean setCallback(const sp<GnssMeasurementCallback>& callback, jboolean setCallback(const std::unique_ptr<GnssMeasurementCallback>& callback, bool enableFullTracking) override; private: Loading @@ -79,7 +91,7 @@ class GnssMeasurement_V2_1 : public GnssMeasurement_V2_0 { public: GnssMeasurement_V2_1( const sp<android::hardware::gnss::V2_1::IGnssMeasurement>& iGnssMeasurement); jboolean setCallback(const sp<GnssMeasurementCallback>& callback, jboolean setCallback(const std::unique_ptr<GnssMeasurementCallback>& callback, bool enableFullTracking) override; private: Loading