From 96635bd0561172e7fd711bcb191a21205c6ce43e Mon Sep 17 00:00:00 2001 From: Mike Cailean Date: Thu, 24 Mar 2016 19:34:16 -0700 Subject: [PATCH] Fixed bugs when deliver GnssMeasurement from N-HAL There're two major problems that prevents GnssMeasurement from N-HAL from delivering to Java-side correct: 1. The size check of HAL-provided GnssData is wrong. So native code rejects all valid GnssData. 2. The svid's data type is different between HAL-side and Java-side. Therefore an explicit type casting is required. This CL fixes those problems, together with a few typo fixes. Bug: 28169973 Change-Id: Id0c2cc120387970564b840cfcbdcb6f329c7e543 --- .../jni/com_android_server_location_GnssLocationProvider.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/services/core/jni/com_android_server_location_GnssLocationProvider.cpp b/services/core/jni/com_android_server_location_GnssLocationProvider.cpp index 93eb82fd9794..058b631dfe3c 100644 --- a/services/core/jni/com_android_server_location_GnssLocationProvider.cpp +++ b/services/core/jni/com_android_server_location_GnssLocationProvider.cpp @@ -1165,7 +1165,7 @@ static jobject translate_gps_clock(JNIEnv* env, GpsClock* clock) { static jobject translate_gnss_clock(JNIEnv* env, GnssClock* clock) { JavaObject object(env, "android/location/GnssClock"); - GpsClockFlags flags = clock->flags; + GnssClockFlags flags = clock->flags; SET_IF(GNSS_CLOCK_HAS_LEAP_SECOND, LeapSecond, @@ -1237,9 +1237,10 @@ static jobject translate_gps_measurement(JNIEnv* env, static jobject translate_gnss_measurement(JNIEnv* env, GnssMeasurement* measurement) { JavaObject object(env, "android/location/GnssMeasurement"); - GpsMeasurementFlags flags = measurement->flags; - SET(Svid, measurement->svid); + GnssMeasurementFlags flags = measurement->flags; + + SET(Svid, static_cast(measurement->svid)); SET(ConstellationType, static_cast(measurement->constellation)); SET(TimeOffsetNanos, measurement->time_offset_ns); SET(State, static_cast(measurement->state)); @@ -1379,8 +1380,8 @@ static void gnss_measurement_callback(GnssData* data) { ALOGE("Invalid data provided to gps_measurement_callback"); return; } - if (data->size != sizeof(GpsData)) { - ALOGE("Invalid GpsData size found in gps_measurement_callback, " + if (data->size != sizeof(GnssData)) { + ALOGE("Invalid GnssData size found in gnss_measurement_callback, " "size=%zd", data->size); return; -- 2.11.0