OSDN Git Service

Fix the RIL-to-HIDL conversion for Cell Lat and Long
authorNathan Harold <nharold@google.com>
Sat, 8 Jul 2017 00:12:04 +0000 (17:12 -0700)
committerpkanwar <pkanwar@google.com>
Mon, 10 Jul 2017 18:56:31 +0000 (11:56 -0700)
The legacy RIL interface received Lat and Long in that order.
The HIDL interface structure uses Long and Lat. This fixes
a swaparoo in the compatibility layer.

 * RIL_REQUEST_VOICE_REGISTRATION_STATE
 *
 * ... skipping a bunch of stuff
 *
 * ((const char **)response)[5] is Base Station latitude if registered on a
 *                              CDMA system or NULL if not. Base Station
 *                              latitude is a decimal number as specified in
 *                              3GPP2 C.S0005-A v6.0. It is represented in
 *                              units of 0.25 seconds and ranges from -1296000
 *                              to 1296000, both values inclusive (corresponding
 *                              to a range of -90 to +90 degrees).
 * ((const char **)response)[6] is Base Station longitude if registered on a
 *                              CDMA system or NULL if not. Base Station
 *                              longitude is a decimal number as specified in
 *                              3GPP2 C.S0005-A v6.0. It is represented in
 *                              units of 0.25 seconds and ranges from -2592000
 *                              to 2592000, both values inclusive (corresponding
 *                              to a range of -180 to +180 degrees).

Bug: 63274800
Test: manual
Change-Id: If2de7f5d0e0d0f470f824aa4f2329de4ad98eb6c

libril/ril_service.cpp

index 308955a..bd21ba5 100644 (file)
@@ -3631,9 +3631,10 @@ void fillCellIdentityFromVoiceRegStateResponseString(CellIdentity &cellIdentity,
         case RIL_CELL_INFO_TYPE_CDMA:{
             rilCellIdentity.cellIdentityCdma.basestationId =
                     convertResponseStringEntryToInt(response, 4, numStrings);
-            rilCellIdentity.cellIdentityCdma.longitude =
-                    convertResponseStringEntryToInt(response, 5, numStrings);
+            /* Order of Lat. and Long. swapped between RIL and HIDL interface versions. */
             rilCellIdentity.cellIdentityCdma.latitude =
+                    convertResponseStringEntryToInt(response, 5, numStrings);
+            rilCellIdentity.cellIdentityCdma.longitude =
                     convertResponseStringEntryToInt(response, 6, numStrings);
             rilCellIdentity.cellIdentityCdma.systemId =
                     convertResponseStringEntryToInt(response, 8, numStrings);