release-request-946c768b-83eb-4b7b-83e7-5737856fa8ec-for-git_oc-mr1-release-4326576 snap-temp-L80300000101054689

Change-Id: I08c0a26170122a03438d07f1647ee47128c4146c
diff --git a/msm8998/gnss/GnssAdapter.cpp b/msm8998/gnss/GnssAdapter.cpp
index a697391..9809125 100644
--- a/msm8998/gnss/GnssAdapter.cpp
+++ b/msm8998/gnss/GnssAdapter.cpp
@@ -1939,39 +1939,51 @@
 void
 GnssAdapter::reportSv(GnssSvNotification& svNotify)
 {
-    if (mGnssSvIdUsedInPosAvail) {
-        int numSv = svNotify.count;
-        int16_t gnssSvId = 0;
-        uint64_t svUsedIdMask = 0;
-        for (int i=0; i < numSv; i++) {
-            gnssSvId = svNotify.gnssSvs[i].svId;
-            switch(svNotify.gnssSvs[i].type) {
+    int numSv = svNotify.count;
+    int16_t gnssSvId = 0;
+    uint64_t svUsedIdMask = 0;
+    for (int i=0; i < numSv; i++) {
+        svUsedIdMask = 0;
+        gnssSvId = svNotify.gnssSvs[i].svId;
+        switch (svNotify.gnssSvs[i].type) {
             case GNSS_SV_TYPE_GPS:
-                svUsedIdMask = mGnssSvIdUsedInPosition.gps_sv_used_ids_mask;
+                if (mGnssSvIdUsedInPosAvail) {
+                    svUsedIdMask = mGnssSvIdUsedInPosition.gps_sv_used_ids_mask;
+                }
                 break;
             case GNSS_SV_TYPE_GLONASS:
-                svUsedIdMask = mGnssSvIdUsedInPosition.glo_sv_used_ids_mask;
+                if (mGnssSvIdUsedInPosAvail) {
+                    svUsedIdMask = mGnssSvIdUsedInPosition.glo_sv_used_ids_mask;
+                }
                 break;
             case GNSS_SV_TYPE_BEIDOU:
-                svUsedIdMask = mGnssSvIdUsedInPosition.bds_sv_used_ids_mask;
+                if (mGnssSvIdUsedInPosAvail) {
+                    svUsedIdMask = mGnssSvIdUsedInPosition.bds_sv_used_ids_mask;
+                }
                 break;
             case GNSS_SV_TYPE_GALILEO:
-                svUsedIdMask = mGnssSvIdUsedInPosition.gal_sv_used_ids_mask;
+                if (mGnssSvIdUsedInPosAvail) {
+                    svUsedIdMask = mGnssSvIdUsedInPosition.gal_sv_used_ids_mask;
+                }
                 break;
             case GNSS_SV_TYPE_QZSS:
-                svUsedIdMask = mGnssSvIdUsedInPosition.qzss_sv_used_ids_mask;
-                break;
-            case GNSS_SV_TYPE_SBAS:
+                if (mGnssSvIdUsedInPosAvail) {
+                    svUsedIdMask = mGnssSvIdUsedInPosition.qzss_sv_used_ids_mask;
+                }
+                // QZSS SV id's need to reported as it is to framework, since
+                // framework expects it as it is. See GnssStatus.java.
+                // SV id passed to here by LocApi is 1-based.
+                svNotify.gnssSvs[i].svId += (QZSS_SV_PRN_MIN - 1);
                 break;
             default:
+                svUsedIdMask = 0;
                 break;
-            }
+        }
 
-            // If SV ID was used in previous position fix, then set USED_IN_FIX
-            // flag, else clear the USED_IN_FIX flag.
-            if (svUsedIdMask & (1 << (gnssSvId - 1))) {
-                svNotify.gnssSvs[i].gnssSvOptionsMask |= GNSS_SV_OPTIONS_USED_IN_FIX_BIT;
-            }
+        // If SV ID was used in previous position fix, then set USED_IN_FIX
+        // flag, else clear the USED_IN_FIX flag.
+        if (svUsedIdMask & (1 << (gnssSvId - 1))) {
+            svNotify.gnssSvs[i].gnssSvOptionsMask |= GNSS_SV_OPTIONS_USED_IN_FIX_BIT;
         }
     }
 
@@ -2840,5 +2852,4 @@
     LOC_LOGV("getDebugReport - satellite=%lu", r.mSatelliteInfo.size());
 
     return true;
-}
-
+}
\ No newline at end of file