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