summaryrefslogtreecommitdiff
path: root/gnss
diff options
context:
space:
mode:
authorWei Chen <weic@codeaurora.org>2019-04-30 15:02:43 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2019-04-30 15:13:26 -0700
commit81f47db3f25e00ca7f2571c9211ce47d273d6f97 (patch)
treed762775c15f3fc0d7696bf7ca78b9282bdebaf30 /gnss
parent9b1ce8887233de61c476bff6d114be9b4ac9aa68 (diff)
downloadgps-81f47db3f25e00ca7f2571c9211ce47d273d6f97.tar.gz
GPS: add numSVUsedInFix in location api
Add a count in location API for number of SV used in fix Change-Id: I3b396170948fa6c93a88d0fdcf17e28eff5ed5dc CRs-fixed: 2425599
Diffstat (limited to 'gnss')
-rw-r--r--gnss/GnssAdapter.cpp39
-rw-r--r--gnss/GnssAdapter.h2
2 files changed, 40 insertions, 1 deletions
diff --git a/gnss/GnssAdapter.cpp b/gnss/GnssAdapter.cpp
index 2039465..a886495 100644
--- a/gnss/GnssAdapter.cpp
+++ b/gnss/GnssAdapter.cpp
@@ -225,6 +225,31 @@ GnssAdapter::convertLocation(Location& out, const UlpLocation& ulpLocation,
}
}
+/* This is utility routine that computes number of SV used
+ in the fix from the svUsedIdsMask.
+ */
+#define MAX_SV_CNT_SUPPORTED_IN_ONE_CONSTELLATION 64
+uint16_t GnssAdapter::getNumSvUsed(uint64_t svUsedIdsMask,
+ int totalSvCntInThisConstellation)
+{
+ if (totalSvCntInThisConstellation > MAX_SV_CNT_SUPPORTED_IN_ONE_CONSTELLATION) {
+ LOC_LOGe ("error: total SV count in this constellation %d exceeded limit of %d",
+ totalSvCntInThisConstellation, MAX_SV_CNT_SUPPORTED_IN_ONE_CONSTELLATION);
+ return 0;
+ }
+
+ uint16_t numSvUsed = 0;
+ uint64_t mask = 0x1;
+ for (int i = 0; i < totalSvCntInThisConstellation; i++) {
+ if (svUsedIdsMask & mask) {
+ numSvUsed++;
+ }
+ mask <<= 1;
+ }
+
+ return numSvUsed;
+}
+
void
GnssAdapter::convertLocationInfo(GnssLocationInfoNotification& out,
const GpsLocationExtended& locationExtended)
@@ -345,8 +370,20 @@ GnssAdapter::convertLocationInfo(GnssLocationInfoNotification& out,
locationExtended.gnss_sv_used_ids.bds_sv_used_ids_mask;
out.svUsedInPosition.qzssSvUsedIdsMask =
locationExtended.gnss_sv_used_ids.qzss_sv_used_ids_mask;
- out.numOfMeasReceived = locationExtended.numOfMeasReceived;
+ out.flags |= GNSS_LOCATION_INFO_NUM_SV_USED_IN_POSITION_BIT;
+ out.numSvUsedInPosition = getNumSvUsed(out.svUsedInPosition.gpsSvUsedIdsMask,
+ GPS_SV_PRN_MAX - GPS_SV_PRN_MIN + 1);
+ out.numSvUsedInPosition += getNumSvUsed(out.svUsedInPosition.gloSvUsedIdsMask,
+ GLO_SV_PRN_MAX - GLO_SV_PRN_MIN + 1);
+ out.numSvUsedInPosition += getNumSvUsed(out.svUsedInPosition.qzssSvUsedIdsMask,
+ QZSS_SV_PRN_MAX - QZSS_SV_PRN_MIN + 1);
+ out.numSvUsedInPosition += getNumSvUsed(out.svUsedInPosition.bdsSvUsedIdsMask,
+ BDS_SV_PRN_MAX - BDS_SV_PRN_MIN + 1);
+ out.numSvUsedInPosition += getNumSvUsed(out.svUsedInPosition.galSvUsedIdsMask,
+ GAL_SV_PRN_MAX - GAL_SV_PRN_MIN + 1);
+
+ out.numOfMeasReceived = locationExtended.numOfMeasReceived;
for (int idx =0; idx < locationExtended.numOfMeasReceived; idx++) {
out.measUsageInfo[idx].gnssSignalType =
locationExtended.measUsageInfo[idx].gnssSignalType;
diff --git a/gnss/GnssAdapter.h b/gnss/GnssAdapter.h
index 9720ba4..eb5a7e4 100644
--- a/gnss/GnssAdapter.h
+++ b/gnss/GnssAdapter.h
@@ -200,6 +200,8 @@ class GnssAdapter : public LocAdapterBase {
const LocPosTechMask techMask);
static void convertLocationInfo(GnssLocationInfoNotification& out,
const GpsLocationExtended& locationExtended);
+ static uint16_t getNumSvUsed(uint64_t svUsedIdsMask,
+ int totalSvCntInThisConstellation);
/* ======== UTILITIES ================================================================== */
inline void initOdcpi(const OdcpiRequestCallback& callback);