summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@quicinc.com>2017-09-04 00:28:59 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2017-09-04 00:28:59 -0700
commit6ef3b747143c590d40e50299529f40cde8c15e2a (patch)
tree07f1fa6487d1944c8dbaa58233359b78c13d1665
parentf45fb60bd61dc79bbd406ea2eb0d3b14f54e3ca4 (diff)
parentcd3027e3a646612e77d0d0026393e38404f53deb (diff)
downloadgps-6ef3b747143c590d40e50299529f40cde8c15e2a.tar.gz
Merge "Filter the configs sent to modem on change basis"
-rw-r--r--gnss/GnssAdapter.cpp40
-rw-r--r--gnss/GnssAdapter.h7
2 files changed, 31 insertions, 16 deletions
diff --git a/gnss/GnssAdapter.cpp b/gnss/GnssAdapter.cpp
index edbb093..d4ffcb2 100644
--- a/gnss/GnssAdapter.cpp
+++ b/gnss/GnssAdapter.cpp
@@ -44,9 +44,7 @@
#include <Agps.h>
#include <SystemStatus.h>
-#include <loc_nmea.h>
#include <vector>
-#include <string>
#define RAD2DEG (180.0 / M_PI)
@@ -68,7 +66,8 @@ GnssAdapter::GnssAdapter() :
mNiData(),
mAgpsManager(),
mAgpsCbInfo(),
- mSystemStatus(SystemStatus::getInstance(mMsgTask))
+ mSystemStatus(SystemStatus::getInstance(mMsgTask)),
+ mServerUrl("")
{
LOC_LOGD("%s]: Constructor %p", __func__, this);
mUlpPositionMode.mode = LOC_POSITION_MODE_INVALID;
@@ -636,8 +635,6 @@ GnssAdapter::gnssUpdateConfigCommand(GnssConfig config)
delete[] mIds;
}
inline virtual void proc() const {
- //const size_t MAX_BITS_COUNT = 10;
- //LocationError errs[MAX_BITS_COUNT] = {};
LocationError* errs = new LocationError[mCount];
LocationError err = LOCATION_ERROR_SUCCESS;
uint32_t index = 0;
@@ -669,30 +666,33 @@ GnssAdapter::gnssUpdateConfigCommand(GnssConfig config)
if (GNSS_ASSISTANCE_TYPE_SUPL == mConfig.assistanceServer.type) {
if (ContextBase::mGps_conf.AGPS_CONFIG_INJECT) {
char serverUrl[MAX_URL_LEN] = {};
- uint32_t length = 0;
+ int32_t length = 0;
const char noHost[] = "NONE";
if (NULL == mConfig.assistanceServer.hostName ||
strncasecmp(noHost,
mConfig.assistanceServer.hostName,
sizeof(noHost)) == 0) {
+ err = LOCATION_ERROR_INVALID_PARAMETER;
} else {
length = snprintf(serverUrl, sizeof(serverUrl), "%s:%u",
mConfig.assistanceServer.hostName,
mConfig.assistanceServer.port);
}
- if (sizeof(serverUrl) > length) {
+ if (length > 0 && strncasecmp(mAdapter.getServerUrl().c_str(),
+ serverUrl, sizeof(serverUrl)) != 0) {
+ mAdapter.setServerUrl(serverUrl);
err = mApi.setServer(serverUrl, length);
- } else {
- err = LOCATION_ERROR_INVALID_PARAMETER;
}
+
} else {
err = LOCATION_ERROR_SUCCESS;
}
} else if (GNSS_ASSISTANCE_TYPE_C2K == mConfig.assistanceServer.type) {
if (ContextBase::mGps_conf.AGPS_CONFIG_INJECT) {
struct in_addr addr;
- if (!mAdapter.resolveInAddress(mConfig.assistanceServer.hostName, &addr)) {
+ if (!mAdapter.resolveInAddress(mConfig.assistanceServer.hostName,
+ &addr)) {
LOC_LOGE("%s]: hostName %s cannot be resolved",
__func__, mConfig.assistanceServer.hostName);
err = LOCATION_ERROR_INVALID_PARAMETER;
@@ -1246,6 +1246,15 @@ GnssAdapter::eraseTrackingSession(LocationAPI* client, uint32_t sessionId)
}
+bool GnssAdapter::setUlpPositionMode(const LocPosMode& mode) {
+ if (!mUlpPositionMode.equals(mode)) {
+ mUlpPositionMode = mode;
+ return true;
+ } else {
+ return false;
+ }
+}
+
void
GnssAdapter::reportResponse(LocationAPI* client, LocationError err, uint32_t sessionId)
{
@@ -1411,8 +1420,9 @@ GnssAdapter::setPositionModeCommand(LocPosMode& locPosMode)
mLocPosMode(locPosMode) {}
inline virtual void proc() const {
// saves the mode in adapter to be used when startTrackingCommand is called from ULP
- mAdapter.setUlpPositionMode(mLocPosMode);
- mApi.setPositionMode(mLocPosMode);
+ if (mAdapter.setUlpPositionMode(mLocPosMode)) {
+ mApi.setPositionMode(mLocPosMode);
+ }
}
};
@@ -1435,8 +1445,10 @@ GnssAdapter::startTrackingCommand()
inline virtual void proc() const {
// we get this call from ULP, so just call LocApi without multiplexing because
// ulp would be doing the multiplexing for us if it is present
- LocPosMode& ulpPositionMode = mAdapter.getUlpPositionMode();
- mApi.startFix(ulpPositionMode);
+ if (!mAdapter.isInSession()) {
+ LocPosMode& ulpPositionMode = mAdapter.getUlpPositionMode();
+ mApi.startFix(ulpPositionMode);
+ }
}
};
diff --git a/gnss/GnssAdapter.h b/gnss/GnssAdapter.h
index 46ba34f..3cb2c64 100644
--- a/gnss/GnssAdapter.h
+++ b/gnss/GnssAdapter.h
@@ -110,6 +110,7 @@ class GnssAdapter : public LocAdapterBase {
/* === SystemStatus ===================================================================== */
SystemStatus* mSystemStatus;
+ std::string mServerUrl;
/*==== CONVERSION ===================================================================*/
static void convertOptions(LocPosMode& out, const LocationOptions& options);
@@ -170,7 +171,7 @@ public:
void saveTrackingSession(LocationAPI* client, uint32_t sessionId,
const LocationOptions& options);
void eraseTrackingSession(LocationAPI* client, uint32_t sessionId);
- void setUlpPositionMode(const LocPosMode& mode) { mUlpPositionMode = mode; }
+ bool setUlpPositionMode(const LocPosMode& mode);
LocPosMode& getUlpPositionMode() { return mUlpPositionMode; }
LocationError startTrackingMultiplex(const LocationOptions& options);
LocationError startTracking(const LocationOptions& options);
@@ -215,7 +216,7 @@ public:
void setPowerVoteId(uint32_t id) { mPowerVoteId = id; }
uint32_t getPowerVoteId() { return mPowerVoteId; }
bool resolveInAddress(const char* hostAddress, struct in_addr* inAddress);
-
+ virtual bool isInSession() { return !mTrackingSessions.empty(); }
/* ==== REPORTS ======================================================================== */
/* ======== EVENTS ====(Called from QMI/ULP Thread)===================================== */
virtual void reportPositionEvent(const UlpLocation& ulpLocation,
@@ -254,6 +255,8 @@ public:
/*==== SYSTEM STATUS ================================================================*/
inline SystemStatus* getSystemStatus(void) { return mSystemStatus; }
+ std::string& getServerUrl(void) { return mServerUrl; }
+ void setServerUrl(const char* server) { mServerUrl.assign(server); }
/*==== CONVERSION ===================================================================*/
static uint32_t convertGpsLock(const GnssConfigGpsLock gpsLock);