Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit dce998ba authored by Wyatt Riley's avatar Wyatt Riley Committed by Android (Google) Code Review
Browse files

Merge "Fix GnssMeasurement JNI for 1.1"

parents edb8dd25 7155f8a9
Loading
Loading
Loading
Loading
+38 −33
Original line number Diff line number Diff line
@@ -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;
@@ -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;
@@ -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
{
@@ -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;
@@ -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);
@@ -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));
@@ -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);
@@ -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) {
@@ -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);
        }
@@ -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;
    }
@@ -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);
@@ -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");
        }