Loading services/core/jni/com_android_server_location_GnssLocationProvider.cpp +38 −33 Original line number Diff line number Diff line Loading @@ -81,13 +81,9 @@ using android::hardware::Return; using android::hardware::Void; using android::hardware::hidl_vec; using android::hardware::hidl_death_recipient; using android::hidl::base::V1_0::IBase; using android::hardware::gnss::V1_0::GnssLocation; using android::hardware::gnss::V1_0::GnssLocationFlags; using IGnss_V1_1 = android::hardware::gnss::V1_1::IGnss; using IGnssMeasurement_V1_0 = android::hardware::gnss::V1_0::IGnssMeasurement; using IGnssMeasurement_V1_1 = android::hardware::gnss::V1_1::IGnssMeasurement; using android::hardware::gnss::V1_0::IGnss; using android::hardware::gnss::V1_0::IAGnss; using android::hardware::gnss::V1_0::IAGnssCallback; using android::hardware::gnss::V1_0::IAGnssCallback; Loading @@ -99,7 +95,6 @@ using android::hardware::gnss::V1_0::IGnssConfiguration; using android::hardware::gnss::V1_0::IGnssDebug; using android::hardware::gnss::V1_0::IGnssGeofenceCallback; using android::hardware::gnss::V1_0::IGnssGeofencing; using IGnssMeasurementCallback_V1_0 = android::hardware::gnss::V1_0::IGnssMeasurementCallback; using android::hardware::gnss::V1_0::IGnssNavigationMessage; using android::hardware::gnss::V1_0::IGnssNavigationMessageCallback; using android::hardware::gnss::V1_0::IGnssNi; Loading @@ -108,7 +103,16 @@ using android::hardware::gnss::V1_0::IGnssXtra; using android::hardware::gnss::V1_0::IGnssXtraCallback; using android::hardware::gnss::V1_1::IGnssCallback; using android::hardware::gnss::V1_1::IGnssMeasurementCallback; using android::hidl::base::V1_0::IBase; using IGnss_V1_0 = android::hardware::gnss::V1_0::IGnss; using IGnss_V1_1 = android::hardware::gnss::V1_1::IGnss; using IGnssMeasurement_V1_0 = android::hardware::gnss::V1_0::IGnssMeasurement; using IGnssMeasurement_V1_1 = android::hardware::gnss::V1_1::IGnssMeasurement; using IGnssMeasurementCallback_V1_0 = android::hardware::gnss::V1_0::IGnssMeasurementCallback; using IGnssMeasurementCallback_V1_1 = android::hardware::gnss::V1_1::IGnssMeasurementCallback; struct GnssDeathRecipient : virtual public hidl_death_recipient { Loading @@ -122,7 +126,7 @@ struct GnssDeathRecipient : virtual public hidl_death_recipient }; sp<GnssDeathRecipient> gnssHalDeathRecipient = nullptr; sp<IGnss> gnssHal = nullptr; sp<IGnss_V1_0> gnssHal = nullptr; sp<IGnss_V1_1> gnssHal_V1_1 = nullptr; sp<IGnssXtra> gnssXtraIface = nullptr; sp<IAGnssRil> agnssRilIface = nullptr; Loading Loading @@ -732,32 +736,33 @@ Return<void> GnssNavigationMessageCallback::gnssNavigationMessageCb( * GnssMeasurementCallback implements the callback methods required for the * GnssMeasurement interface. */ struct GnssMeasurementCallback : public IGnssMeasurementCallback { Return<void> gnssMeasurementCb(const IGnssMeasurementCallback::GnssData& data) override; struct GnssMeasurementCallback : public IGnssMeasurementCallback_V1_1 { Return<void> gnssMeasurementCb(const IGnssMeasurementCallback_V1_1::GnssData& data) override; Return<void> GnssMeasurementCb(const IGnssMeasurementCallback_V1_0::GnssData& data) override; private: void translateGnssMeasurement_V1_0( JNIEnv* env, const IGnssMeasurementCallback_V1_0::GnssMeasurement* measurement, JavaObject object); JavaObject& object); jobjectArray translateGnssMeasurements( JNIEnv* env, const IGnssMeasurementCallback::GnssMeasurement* measurements, const IGnssMeasurementCallback_V1_1::GnssMeasurement* measurements_v1_1, const IGnssMeasurementCallback_V1_0::GnssMeasurement* measurements_v1_0, size_t count); jobject translateGnssClock( JNIEnv* env, const IGnssMeasurementCallback::GnssClock* clock); JNIEnv* env, const IGnssMeasurementCallback_V1_0::GnssClock* clock); void setMeasurementData(JNIEnv* env, jobject clock, jobjectArray measurementArray); }; Return<void> GnssMeasurementCallback::gnssMeasurementCb( const IGnssMeasurementCallback::GnssData& data) { const IGnssMeasurementCallback_V1_1::GnssData& data) { JNIEnv* env = getJniEnv(); jobject clock; jobjectArray measurementArray; clock = translateGnssClock(env, &data.clock); measurementArray = translateGnssMeasurements( env, data.measurements.data(), NULL, data.measurements.size()); setMeasurementData(env, clock, measurementArray); Loading Loading @@ -787,7 +792,7 @@ Return<void> GnssMeasurementCallback::GnssMeasurementCb( // preallocate object as: JavaObject object(env, "android/location/GnssMeasurement"); void GnssMeasurementCallback::translateGnssMeasurement_V1_0( JNIEnv* env, const IGnssMeasurementCallback_V1_0::GnssMeasurement* measurement, JavaObject object) { JavaObject& object) { uint32_t flags = static_cast<uint32_t>(measurement->flags); SET(Svid, static_cast<int32_t>(measurement->svid)); Loading Loading @@ -826,7 +831,7 @@ void GnssMeasurementCallback::translateGnssMeasurement_V1_0( } jobject GnssMeasurementCallback::translateGnssClock( JNIEnv* env, const IGnssMeasurementCallback::GnssClock* clock) { JNIEnv* env, const IGnssMeasurementCallback_V1_0::GnssClock* clock) { JavaObject object(env, "android/location/GnssClock"); uint32_t flags = static_cast<uint32_t>(clock->gnssClockFlags); Loading Loading @@ -865,7 +870,7 @@ jobject GnssMeasurementCallback::translateGnssClock( } jobjectArray GnssMeasurementCallback::translateGnssMeasurements(JNIEnv* env, const IGnssMeasurementCallback::GnssMeasurement* measurements, const IGnssMeasurementCallback_V1_1::GnssMeasurement* measurements_v1_1, const IGnssMeasurementCallback_V1_0::GnssMeasurement* measurements_v1_0, size_t count) { if (count == 0) { Loading @@ -880,12 +885,12 @@ jobjectArray GnssMeasurementCallback::translateGnssMeasurements(JNIEnv* env, for (uint16_t i = 0; i < count; ++i) { JavaObject object(env, "android/location/GnssMeasurement"); if (measurements != NULL) { translateGnssMeasurement_V1_0(env, &(measurements[i].v1_0), object); if (measurements_v1_1 != NULL) { translateGnssMeasurement_V1_0(env, &(measurements_v1_1[i].v1_0), object); // Set the V1_1 flag SET(AccumulatedDeltaRangeState, static_cast<int32_t>(measurements[i].accumulatedDeltaRangeState)); static_cast<int32_t>(measurements_v1_1[i].accumulatedDeltaRangeState)); } else { translateGnssMeasurement_V1_0(env, &(measurements_v1_0[i]), object); } Loading Loading @@ -1169,7 +1174,7 @@ static void android_location_GnssLocationProvider_class_init_native(JNIEnv* env, gnssHal_V1_1 = IGnss_V1_1::getService(); if (gnssHal_V1_1 == nullptr) { ALOGD("gnssHal 1.1 was null, trying 1.0"); gnssHal = IGnss::getService(); gnssHal = IGnss_V1_0::getService(); } else { gnssHal = gnssHal_V1_1; } Loading Loading @@ -1367,15 +1372,15 @@ static jboolean android_location_GnssLocationProvider_set_position_mode(JNIEnv* jint preferred_time, jboolean low_power_mode) { Return<bool> result = false; if (gnssHal_V1_1 != nullptr) { result = gnssHal_V1_1->setPositionMode_1_1(static_cast<IGnss::GnssPositionMode>(mode), static_cast<IGnss::GnssPositionRecurrence>(recurrence), result = gnssHal_V1_1->setPositionMode_1_1(static_cast<IGnss_V1_0::GnssPositionMode>(mode), static_cast<IGnss_V1_0::GnssPositionRecurrence>(recurrence), min_interval, preferred_accuracy, preferred_time, low_power_mode); } else if (gnssHal != nullptr) { result = gnssHal->setPositionMode(static_cast<IGnss::GnssPositionMode>(mode), static_cast<IGnss::GnssPositionRecurrence>(recurrence), result = gnssHal->setPositionMode(static_cast<IGnss_V1_0::GnssPositionMode>(mode), static_cast<IGnss_V1_0::GnssPositionRecurrence>(recurrence), min_interval, preferred_accuracy, preferred_time); Loading Loading @@ -1417,7 +1422,7 @@ static void android_location_GnssLocationProvider_delete_aiding_data(JNIEnv* /* jobject /* obj */, jint flags) { if (gnssHal != nullptr) { auto result = gnssHal->deleteAidingData(static_cast<IGnss::GnssAidingData>(flags)); auto result = gnssHal->deleteAidingData(static_cast<IGnss_V1_0::GnssAidingData>(flags)); if (!result.isOk()) { ALOGE("Error in deleting aiding data"); } Loading Loading
services/core/jni/com_android_server_location_GnssLocationProvider.cpp +38 −33 Original line number Diff line number Diff line Loading @@ -81,13 +81,9 @@ using android::hardware::Return; using android::hardware::Void; using android::hardware::hidl_vec; using android::hardware::hidl_death_recipient; using android::hidl::base::V1_0::IBase; using android::hardware::gnss::V1_0::GnssLocation; using android::hardware::gnss::V1_0::GnssLocationFlags; using IGnss_V1_1 = android::hardware::gnss::V1_1::IGnss; using IGnssMeasurement_V1_0 = android::hardware::gnss::V1_0::IGnssMeasurement; using IGnssMeasurement_V1_1 = android::hardware::gnss::V1_1::IGnssMeasurement; using android::hardware::gnss::V1_0::IGnss; using android::hardware::gnss::V1_0::IAGnss; using android::hardware::gnss::V1_0::IAGnssCallback; using android::hardware::gnss::V1_0::IAGnssCallback; Loading @@ -99,7 +95,6 @@ using android::hardware::gnss::V1_0::IGnssConfiguration; using android::hardware::gnss::V1_0::IGnssDebug; using android::hardware::gnss::V1_0::IGnssGeofenceCallback; using android::hardware::gnss::V1_0::IGnssGeofencing; using IGnssMeasurementCallback_V1_0 = android::hardware::gnss::V1_0::IGnssMeasurementCallback; using android::hardware::gnss::V1_0::IGnssNavigationMessage; using android::hardware::gnss::V1_0::IGnssNavigationMessageCallback; using android::hardware::gnss::V1_0::IGnssNi; Loading @@ -108,7 +103,16 @@ using android::hardware::gnss::V1_0::IGnssXtra; using android::hardware::gnss::V1_0::IGnssXtraCallback; using android::hardware::gnss::V1_1::IGnssCallback; using android::hardware::gnss::V1_1::IGnssMeasurementCallback; using android::hidl::base::V1_0::IBase; using IGnss_V1_0 = android::hardware::gnss::V1_0::IGnss; using IGnss_V1_1 = android::hardware::gnss::V1_1::IGnss; using IGnssMeasurement_V1_0 = android::hardware::gnss::V1_0::IGnssMeasurement; using IGnssMeasurement_V1_1 = android::hardware::gnss::V1_1::IGnssMeasurement; using IGnssMeasurementCallback_V1_0 = android::hardware::gnss::V1_0::IGnssMeasurementCallback; using IGnssMeasurementCallback_V1_1 = android::hardware::gnss::V1_1::IGnssMeasurementCallback; struct GnssDeathRecipient : virtual public hidl_death_recipient { Loading @@ -122,7 +126,7 @@ struct GnssDeathRecipient : virtual public hidl_death_recipient }; sp<GnssDeathRecipient> gnssHalDeathRecipient = nullptr; sp<IGnss> gnssHal = nullptr; sp<IGnss_V1_0> gnssHal = nullptr; sp<IGnss_V1_1> gnssHal_V1_1 = nullptr; sp<IGnssXtra> gnssXtraIface = nullptr; sp<IAGnssRil> agnssRilIface = nullptr; Loading Loading @@ -732,32 +736,33 @@ Return<void> GnssNavigationMessageCallback::gnssNavigationMessageCb( * GnssMeasurementCallback implements the callback methods required for the * GnssMeasurement interface. */ struct GnssMeasurementCallback : public IGnssMeasurementCallback { Return<void> gnssMeasurementCb(const IGnssMeasurementCallback::GnssData& data) override; struct GnssMeasurementCallback : public IGnssMeasurementCallback_V1_1 { Return<void> gnssMeasurementCb(const IGnssMeasurementCallback_V1_1::GnssData& data) override; Return<void> GnssMeasurementCb(const IGnssMeasurementCallback_V1_0::GnssData& data) override; private: void translateGnssMeasurement_V1_0( JNIEnv* env, const IGnssMeasurementCallback_V1_0::GnssMeasurement* measurement, JavaObject object); JavaObject& object); jobjectArray translateGnssMeasurements( JNIEnv* env, const IGnssMeasurementCallback::GnssMeasurement* measurements, const IGnssMeasurementCallback_V1_1::GnssMeasurement* measurements_v1_1, const IGnssMeasurementCallback_V1_0::GnssMeasurement* measurements_v1_0, size_t count); jobject translateGnssClock( JNIEnv* env, const IGnssMeasurementCallback::GnssClock* clock); JNIEnv* env, const IGnssMeasurementCallback_V1_0::GnssClock* clock); void setMeasurementData(JNIEnv* env, jobject clock, jobjectArray measurementArray); }; Return<void> GnssMeasurementCallback::gnssMeasurementCb( const IGnssMeasurementCallback::GnssData& data) { const IGnssMeasurementCallback_V1_1::GnssData& data) { JNIEnv* env = getJniEnv(); jobject clock; jobjectArray measurementArray; clock = translateGnssClock(env, &data.clock); measurementArray = translateGnssMeasurements( env, data.measurements.data(), NULL, data.measurements.size()); setMeasurementData(env, clock, measurementArray); Loading Loading @@ -787,7 +792,7 @@ Return<void> GnssMeasurementCallback::GnssMeasurementCb( // preallocate object as: JavaObject object(env, "android/location/GnssMeasurement"); void GnssMeasurementCallback::translateGnssMeasurement_V1_0( JNIEnv* env, const IGnssMeasurementCallback_V1_0::GnssMeasurement* measurement, JavaObject object) { JavaObject& object) { uint32_t flags = static_cast<uint32_t>(measurement->flags); SET(Svid, static_cast<int32_t>(measurement->svid)); Loading Loading @@ -826,7 +831,7 @@ void GnssMeasurementCallback::translateGnssMeasurement_V1_0( } jobject GnssMeasurementCallback::translateGnssClock( JNIEnv* env, const IGnssMeasurementCallback::GnssClock* clock) { JNIEnv* env, const IGnssMeasurementCallback_V1_0::GnssClock* clock) { JavaObject object(env, "android/location/GnssClock"); uint32_t flags = static_cast<uint32_t>(clock->gnssClockFlags); Loading Loading @@ -865,7 +870,7 @@ jobject GnssMeasurementCallback::translateGnssClock( } jobjectArray GnssMeasurementCallback::translateGnssMeasurements(JNIEnv* env, const IGnssMeasurementCallback::GnssMeasurement* measurements, const IGnssMeasurementCallback_V1_1::GnssMeasurement* measurements_v1_1, const IGnssMeasurementCallback_V1_0::GnssMeasurement* measurements_v1_0, size_t count) { if (count == 0) { Loading @@ -880,12 +885,12 @@ jobjectArray GnssMeasurementCallback::translateGnssMeasurements(JNIEnv* env, for (uint16_t i = 0; i < count; ++i) { JavaObject object(env, "android/location/GnssMeasurement"); if (measurements != NULL) { translateGnssMeasurement_V1_0(env, &(measurements[i].v1_0), object); if (measurements_v1_1 != NULL) { translateGnssMeasurement_V1_0(env, &(measurements_v1_1[i].v1_0), object); // Set the V1_1 flag SET(AccumulatedDeltaRangeState, static_cast<int32_t>(measurements[i].accumulatedDeltaRangeState)); static_cast<int32_t>(measurements_v1_1[i].accumulatedDeltaRangeState)); } else { translateGnssMeasurement_V1_0(env, &(measurements_v1_0[i]), object); } Loading Loading @@ -1169,7 +1174,7 @@ static void android_location_GnssLocationProvider_class_init_native(JNIEnv* env, gnssHal_V1_1 = IGnss_V1_1::getService(); if (gnssHal_V1_1 == nullptr) { ALOGD("gnssHal 1.1 was null, trying 1.0"); gnssHal = IGnss::getService(); gnssHal = IGnss_V1_0::getService(); } else { gnssHal = gnssHal_V1_1; } Loading Loading @@ -1367,15 +1372,15 @@ static jboolean android_location_GnssLocationProvider_set_position_mode(JNIEnv* jint preferred_time, jboolean low_power_mode) { Return<bool> result = false; if (gnssHal_V1_1 != nullptr) { result = gnssHal_V1_1->setPositionMode_1_1(static_cast<IGnss::GnssPositionMode>(mode), static_cast<IGnss::GnssPositionRecurrence>(recurrence), result = gnssHal_V1_1->setPositionMode_1_1(static_cast<IGnss_V1_0::GnssPositionMode>(mode), static_cast<IGnss_V1_0::GnssPositionRecurrence>(recurrence), min_interval, preferred_accuracy, preferred_time, low_power_mode); } else if (gnssHal != nullptr) { result = gnssHal->setPositionMode(static_cast<IGnss::GnssPositionMode>(mode), static_cast<IGnss::GnssPositionRecurrence>(recurrence), result = gnssHal->setPositionMode(static_cast<IGnss_V1_0::GnssPositionMode>(mode), static_cast<IGnss_V1_0::GnssPositionRecurrence>(recurrence), min_interval, preferred_accuracy, preferred_time); Loading Loading @@ -1417,7 +1422,7 @@ static void android_location_GnssLocationProvider_delete_aiding_data(JNIEnv* /* jobject /* obj */, jint flags) { if (gnssHal != nullptr) { auto result = gnssHal->deleteAidingData(static_cast<IGnss::GnssAidingData>(flags)); auto result = gnssHal->deleteAidingData(static_cast<IGnss_V1_0::GnssAidingData>(flags)); if (!result.isOk()) { ALOGE("Error in deleting aiding data"); } Loading