OSDN Git Service

Fixed bugs when deliver GnssMeasurement from N-HAL
authorMike Cailean <mcailean@codeaurora.org>
Fri, 25 Mar 2016 02:34:16 +0000 (19:34 -0700)
committerLifu Tang <lifu@google.com>
Wed, 13 Apr 2016 18:47:21 +0000 (11:47 -0700)
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

services/core/jni/com_android_server_location_GnssLocationProvider.cpp

index 93eb82f..058b631 100644 (file)
@@ -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<int32_t>(measurement->svid));
     SET(ConstellationType, static_cast<int32_t>(measurement->constellation));
     SET(TimeOffsetNanos, measurement->time_offset_ns);
     SET(State, static_cast<int32_t>(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;