Loading services/core/jni/com_android_server_location_GnssLocationProvider.cpp +50 −27 Original line number Diff line number Diff line Loading @@ -99,14 +99,16 @@ 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 android::hardware::gnss::V1_0::IGnssMeasurementCallback; 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; using android::hardware::gnss::V1_0::IGnssNiCallback; 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; struct GnssDeathRecipient : virtual public hidl_death_recipient { Loading Loading @@ -699,21 +701,24 @@ Return<void> GnssNavigationMessageCallback::gnssNavigationMessageCb( * GnssMeasurement interface. */ struct GnssMeasurementCallback : public IGnssMeasurementCallback { Return<void> GnssMeasurementCb(const IGnssMeasurementCallback::GnssData& data); Return<void> gnssMeasurementCb(const IGnssMeasurementCallback::GnssData& data) override; Return<void> GnssMeasurementCb(const IGnssMeasurementCallback_V1_0::GnssData& data) override; private: jobject translateGnssMeasurement( JNIEnv* env, const IGnssMeasurementCallback::GnssMeasurement* measurement); jobject translateGnssClock( JNIEnv* env, const IGnssMeasurementCallback::GnssClock* clock); void translateGnssMeasurement_V1_0( JNIEnv* env, const IGnssMeasurementCallback_V1_0::GnssMeasurement* measurement, JavaObject object); jobjectArray translateGnssMeasurements( JNIEnv* env, const IGnssMeasurementCallback::GnssMeasurement* measurements, const IGnssMeasurementCallback_V1_0::GnssMeasurement* measurements_v1_0, size_t count); jobject translateGnssClock( JNIEnv* env, const IGnssMeasurementCallback::GnssClock* clock); void setMeasurementData(JNIEnv* env, jobject clock, jobjectArray measurementArray); }; Return<void> GnssMeasurementCallback::GnssMeasurementCb( Return<void> GnssMeasurementCallback::gnssMeasurementCb( const IGnssMeasurementCallback::GnssData& data) { JNIEnv* env = getJniEnv(); Loading @@ -722,7 +727,7 @@ Return<void> GnssMeasurementCallback::GnssMeasurementCb( clock = translateGnssClock(env, &data.clock); measurementArray = translateGnssMeasurements( env, data.measurements.data(), data.measurementCount); env, data.measurements.data(), NULL, data.measurements.size()); setMeasurementData(env, clock, measurementArray); env->DeleteLocalRef(clock); Loading @@ -730,10 +735,27 @@ Return<void> GnssMeasurementCallback::GnssMeasurementCb( return Void(); } jobject GnssMeasurementCallback::translateGnssMeasurement( JNIEnv* env, const IGnssMeasurementCallback::GnssMeasurement* measurement) { JavaObject object(env, "android/location/GnssMeasurement"); Return<void> GnssMeasurementCallback::GnssMeasurementCb( const IGnssMeasurementCallback_V1_0::GnssData& data) { JNIEnv* env = getJniEnv(); jobject clock; jobjectArray measurementArray; clock = translateGnssClock(env, &data.clock); measurementArray = translateGnssMeasurements( env, NULL, data.measurements.data(), data.measurementCount); setMeasurementData(env, clock, measurementArray); env->DeleteLocalRef(clock); env->DeleteLocalRef(measurementArray); return Void(); } // preallocate object as: JavaObject object(env, "android/location/GnssMeasurement"); void GnssMeasurementCallback::translateGnssMeasurement_V1_0( JNIEnv* env, const IGnssMeasurementCallback_V1_0::GnssMeasurement* measurement, JavaObject object) { uint32_t flags = static_cast<uint32_t>(measurement->flags); SET(Svid, static_cast<int32_t>(measurement->svid)); Loading @@ -757,13 +779,8 @@ jobject GnssMeasurementCallback::translateGnssMeasurement( SET(CarrierFrequencyHz, measurement->carrierFrequencyHz); } if (flags & static_cast<uint32_t>(GnssMeasurementFlags::HAS_CARRIER_PHASE)) { SET(CarrierPhase, measurement->carrierPhase); } if (flags & static_cast<uint32_t>(GnssMeasurementFlags::HAS_CARRIER_PHASE_UNCERTAINTY)) { SET(CarrierPhaseUncertainty, measurement->carrierPhaseUncertainty); } // Intentionally not copying deprecated fields of carrierCycles, // carrierPhase, carrierPhaseUncertainty SET(MultipathIndicator, static_cast<int32_t>(measurement->multipathIndicator)); Loading @@ -774,8 +791,6 @@ jobject GnssMeasurementCallback::translateGnssMeasurement( if (flags & static_cast<uint32_t>(GnssMeasurementFlags::HAS_AUTOMATIC_GAIN_CONTROL)) { SET(AutomaticGainControlLevelInDb, measurement->agcLevelDb); } return object.get(); } jobject GnssMeasurementCallback::translateGnssClock( Loading Loading @@ -818,8 +833,9 @@ jobject GnssMeasurementCallback::translateGnssClock( } jobjectArray GnssMeasurementCallback::translateGnssMeasurements(JNIEnv* env, const IGnssMeasurementCallback::GnssMeasurement* measurements, size_t count) { const IGnssMeasurementCallback::GnssMeasurement* measurements, const IGnssMeasurementCallback_V1_0::GnssMeasurement* measurements_v1_0, size_t count) { if (count == 0) { return NULL; } Loading @@ -831,11 +847,18 @@ jobjectArray GnssMeasurementCallback::translateGnssMeasurements(JNIEnv* env, NULL /* initialElement */); for (uint16_t i = 0; i < count; ++i) { jobject gnssMeasurement = translateGnssMeasurement( env, &measurements[i]); env->SetObjectArrayElement(gnssMeasurementArray, i, gnssMeasurement); env->DeleteLocalRef(gnssMeasurement); JavaObject object(env, "android/location/GnssMeasurement"); if (measurements != NULL) { translateGnssMeasurement_V1_0(env, &(measurements[i].v1_0), object); // Set the V1_1 flag SET(AccumulatedDeltaRangeState, static_cast<int32_t>(measurements[i].accumulatedDeltaRangeState)); } else { translateGnssMeasurement_V1_0(env, &(measurements_v1_0[i]), object); } env->SetObjectArrayElement(gnssMeasurementArray, i, object.get()); } env->DeleteLocalRef(gnssMeasurementClass); Loading Loading
services/core/jni/com_android_server_location_GnssLocationProvider.cpp +50 −27 Original line number Diff line number Diff line Loading @@ -99,14 +99,16 @@ 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 android::hardware::gnss::V1_0::IGnssMeasurementCallback; 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; using android::hardware::gnss::V1_0::IGnssNiCallback; 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; struct GnssDeathRecipient : virtual public hidl_death_recipient { Loading Loading @@ -699,21 +701,24 @@ Return<void> GnssNavigationMessageCallback::gnssNavigationMessageCb( * GnssMeasurement interface. */ struct GnssMeasurementCallback : public IGnssMeasurementCallback { Return<void> GnssMeasurementCb(const IGnssMeasurementCallback::GnssData& data); Return<void> gnssMeasurementCb(const IGnssMeasurementCallback::GnssData& data) override; Return<void> GnssMeasurementCb(const IGnssMeasurementCallback_V1_0::GnssData& data) override; private: jobject translateGnssMeasurement( JNIEnv* env, const IGnssMeasurementCallback::GnssMeasurement* measurement); jobject translateGnssClock( JNIEnv* env, const IGnssMeasurementCallback::GnssClock* clock); void translateGnssMeasurement_V1_0( JNIEnv* env, const IGnssMeasurementCallback_V1_0::GnssMeasurement* measurement, JavaObject object); jobjectArray translateGnssMeasurements( JNIEnv* env, const IGnssMeasurementCallback::GnssMeasurement* measurements, const IGnssMeasurementCallback_V1_0::GnssMeasurement* measurements_v1_0, size_t count); jobject translateGnssClock( JNIEnv* env, const IGnssMeasurementCallback::GnssClock* clock); void setMeasurementData(JNIEnv* env, jobject clock, jobjectArray measurementArray); }; Return<void> GnssMeasurementCallback::GnssMeasurementCb( Return<void> GnssMeasurementCallback::gnssMeasurementCb( const IGnssMeasurementCallback::GnssData& data) { JNIEnv* env = getJniEnv(); Loading @@ -722,7 +727,7 @@ Return<void> GnssMeasurementCallback::GnssMeasurementCb( clock = translateGnssClock(env, &data.clock); measurementArray = translateGnssMeasurements( env, data.measurements.data(), data.measurementCount); env, data.measurements.data(), NULL, data.measurements.size()); setMeasurementData(env, clock, measurementArray); env->DeleteLocalRef(clock); Loading @@ -730,10 +735,27 @@ Return<void> GnssMeasurementCallback::GnssMeasurementCb( return Void(); } jobject GnssMeasurementCallback::translateGnssMeasurement( JNIEnv* env, const IGnssMeasurementCallback::GnssMeasurement* measurement) { JavaObject object(env, "android/location/GnssMeasurement"); Return<void> GnssMeasurementCallback::GnssMeasurementCb( const IGnssMeasurementCallback_V1_0::GnssData& data) { JNIEnv* env = getJniEnv(); jobject clock; jobjectArray measurementArray; clock = translateGnssClock(env, &data.clock); measurementArray = translateGnssMeasurements( env, NULL, data.measurements.data(), data.measurementCount); setMeasurementData(env, clock, measurementArray); env->DeleteLocalRef(clock); env->DeleteLocalRef(measurementArray); return Void(); } // preallocate object as: JavaObject object(env, "android/location/GnssMeasurement"); void GnssMeasurementCallback::translateGnssMeasurement_V1_0( JNIEnv* env, const IGnssMeasurementCallback_V1_0::GnssMeasurement* measurement, JavaObject object) { uint32_t flags = static_cast<uint32_t>(measurement->flags); SET(Svid, static_cast<int32_t>(measurement->svid)); Loading @@ -757,13 +779,8 @@ jobject GnssMeasurementCallback::translateGnssMeasurement( SET(CarrierFrequencyHz, measurement->carrierFrequencyHz); } if (flags & static_cast<uint32_t>(GnssMeasurementFlags::HAS_CARRIER_PHASE)) { SET(CarrierPhase, measurement->carrierPhase); } if (flags & static_cast<uint32_t>(GnssMeasurementFlags::HAS_CARRIER_PHASE_UNCERTAINTY)) { SET(CarrierPhaseUncertainty, measurement->carrierPhaseUncertainty); } // Intentionally not copying deprecated fields of carrierCycles, // carrierPhase, carrierPhaseUncertainty SET(MultipathIndicator, static_cast<int32_t>(measurement->multipathIndicator)); Loading @@ -774,8 +791,6 @@ jobject GnssMeasurementCallback::translateGnssMeasurement( if (flags & static_cast<uint32_t>(GnssMeasurementFlags::HAS_AUTOMATIC_GAIN_CONTROL)) { SET(AutomaticGainControlLevelInDb, measurement->agcLevelDb); } return object.get(); } jobject GnssMeasurementCallback::translateGnssClock( Loading Loading @@ -818,8 +833,9 @@ jobject GnssMeasurementCallback::translateGnssClock( } jobjectArray GnssMeasurementCallback::translateGnssMeasurements(JNIEnv* env, const IGnssMeasurementCallback::GnssMeasurement* measurements, size_t count) { const IGnssMeasurementCallback::GnssMeasurement* measurements, const IGnssMeasurementCallback_V1_0::GnssMeasurement* measurements_v1_0, size_t count) { if (count == 0) { return NULL; } Loading @@ -831,11 +847,18 @@ jobjectArray GnssMeasurementCallback::translateGnssMeasurements(JNIEnv* env, NULL /* initialElement */); for (uint16_t i = 0; i < count; ++i) { jobject gnssMeasurement = translateGnssMeasurement( env, &measurements[i]); env->SetObjectArrayElement(gnssMeasurementArray, i, gnssMeasurement); env->DeleteLocalRef(gnssMeasurement); JavaObject object(env, "android/location/GnssMeasurement"); if (measurements != NULL) { translateGnssMeasurement_V1_0(env, &(measurements[i].v1_0), object); // Set the V1_1 flag SET(AccumulatedDeltaRangeState, static_cast<int32_t>(measurements[i].accumulatedDeltaRangeState)); } else { translateGnssMeasurement_V1_0(env, &(measurements_v1_0[i]), object); } env->SetObjectArrayElement(gnssMeasurementArray, i, object.get()); } env->DeleteLocalRef(gnssMeasurementClass); Loading