summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Cailean <mcailean@codeaurora.org>2018-06-04 18:02:09 -0700
committerMike Cailean <mcailean@codeaurora.org>2018-06-26 18:31:01 -0700
commitd12b82b4e4647c3dcab0c5593385344461bf9f32 (patch)
treed5b7bfa2d4bf214994f7dc5ca2e0cf7d958531b0
parentf50e02a555cd8320c8e65383030fba166dc4fead (diff)
downloadgps-d12b82b4e4647c3dcab0c5593385344461bf9f32.tar.gz
Added optional MO SUPL SLP
Change-Id: I89c3e697b92dfe04d403c073e779906d21cefd69 CRs-fixed: 2259090
-rw-r--r--core/ContextBase.cpp2
-rw-r--r--core/ContextBase.h2
-rw-r--r--core/LocApiBase.cpp2
-rw-r--r--core/LocApiBase.h5
-rw-r--r--etc/gps.conf6
-rw-r--r--gnss/GnssAdapter.cpp49
-rw-r--r--gnss/GnssAdapter.h5
-rw-r--r--utils/gps_extended_c.h3
8 files changed, 54 insertions, 20 deletions
diff --git a/core/ContextBase.cpp b/core/ContextBase.cpp
index 2c7f04c..c71ca7a 100644
--- a/core/ContextBase.cpp
+++ b/core/ContextBase.cpp
@@ -72,6 +72,8 @@ const loc_param_s_type ContextBase::mGps_conf_table[] =
{"SUPL_HOST", &mGps_conf.SUPL_HOST, NULL, 's'},
{"SUPL_PORT", &mGps_conf.SUPL_PORT, NULL, 'n'},
{"MODEM_TYPE", &mGps_conf.MODEM_TYPE, NULL, 'n' },
+ {"MO_SUPL_HOST", &mGps_conf.MO_SUPL_HOST, NULL, 's' },
+ {"MO_SUPL_PORT", &mGps_conf.MO_SUPL_PORT, NULL, 'n' },
};
const loc_param_s_type ContextBase::mSap_conf_table[] =
diff --git a/core/ContextBase.h b/core/ContextBase.h
index 478283f..7c5ac17 100644
--- a/core/ContextBase.h
+++ b/core/ContextBase.h
@@ -68,6 +68,8 @@ typedef struct loc_gps_cfg_s
char SUPL_HOST[MAX_SUPL_SERVER_URL_LENGTH];
uint32_t SUPL_PORT;
uint32_t MODEM_TYPE;
+ char MO_SUPL_HOST[MAX_SUPL_SERVER_URL_LENGTH];
+ uint32_t MO_SUPL_PORT;
} loc_gps_cfg_s_type;
/* NOTE: the implementaiton of the parser casts number
diff --git a/core/LocApiBase.cpp b/core/LocApiBase.cpp
index 30fecec..ca26b32 100644
--- a/core/LocApiBase.cpp
+++ b/core/LocApiBase.cpp
@@ -495,7 +495,7 @@ void LocApiBase::
DEFAULT_IMPL()
LocationError LocApiBase::
- setServerSync(const char* /*url*/, int /*len*/)
+ setServerSync(const char* /*url*/, int /*len*/, LocServerType /*type*/)
DEFAULT_IMPL(LOCATION_ERROR_SUCCESS)
LocationError LocApiBase::
diff --git a/core/LocApiBase.h b/core/LocApiBase.h
index 8c516fd..fc86eb3 100644
--- a/core/LocApiBase.h
+++ b/core/LocApiBase.h
@@ -191,10 +191,9 @@ public:
virtual void
setPositionMode(const LocPosMode& posMode);
virtual LocationError
- setServerSync(const char* url, int len);
+ setServerSync(const char* url, int len, LocServerType type);
virtual LocationError
- setServerSync(unsigned int ip, int port,
- LocServerType type);
+ setServerSync(unsigned int ip, int port, LocServerType type);
virtual void
informNiResponse(GnssNiResponse userResponse, const void* passThroughData);
virtual LocationError setSUPLVersionSync(GnssConfigSuplVersion version);
diff --git a/etc/gps.conf b/etc/gps.conf
index 3f2ee2f..0a06cb5 100644
--- a/etc/gps.conf
+++ b/etc/gps.conf
@@ -76,6 +76,10 @@ CAPABILITIES=0x37
# SUPL_HOST=supl.host.com or IP
# SUPL_PORT=1234
+# FOR MO SUPL SUPPORT, set the following
+# MO_SUPL_HOST=supl.host.com or IP
+# MO_SUPL_PORT=1234
+
# FOR C2K PDE SUPPORT, set the following
# C2K_HOST=c2k.pde.com or IP
# C2K_PORT=1234
@@ -138,6 +142,8 @@ LPPE_UP_TECHNOLOGY = 0
# SUPL_VER
# SUPL_HOST
# SUPL_PORT
+# MO_SUPL_HOST
+# MO_SUPL_PORT
# C2K_HOST
# C2K_PORT
# LPP_PROFILE
diff --git a/gnss/GnssAdapter.cpp b/gnss/GnssAdapter.cpp
index d6efe56..6f702af 100644
--- a/gnss/GnssAdapter.cpp
+++ b/gnss/GnssAdapter.cpp
@@ -550,7 +550,7 @@ GnssAdapter::readConfigCommand()
}
void
-GnssAdapter::setSuplHostServer(const char* server, int port)
+GnssAdapter::setSuplHostServer(const char* server, int port, LocServerType type)
{
if (ContextBase::mGps_conf.AGPS_CONFIG_INJECT) {
char serverUrl[MAX_URL_LEN] = {};
@@ -564,10 +564,14 @@ GnssAdapter::setSuplHostServer(const char* server, int port)
} else if (port > 0) {
length = snprintf(serverUrl, sizeof(serverUrl), "%s:%u", server, port);
}
-
- if (length >= 0 && strncasecmp(getServerUrl().c_str(),
- serverUrl, sizeof(serverUrl)) != 0) {
- setServerUrl(serverUrl);
+ if (LOC_AGPS_SUPL_SERVER != type && LOC_AGPS_MO_SUPL_SERVER != type) {
+ LOC_LOGe("Invalid type=%d", type);
+ } else {
+ string& url = (LOC_AGPS_SUPL_SERVER == type) ? getServerUrl() : getMoServerUrl();
+ if (length > 0 && strncasecmp(url.c_str(), serverUrl, sizeof(serverUrl)) != 0) {
+ url.assign(serverUrl);
+ LOC_LOGv("serverUrl=%s length=%d type=%d", serverUrl, length, type);
+ }
}
}
}
@@ -597,8 +601,13 @@ GnssAdapter::setConfigCommand()
mAdapter.mNmeaMask= mask;
std::string oldServerUrl = mAdapter.getServerUrl();
+ std::string oldMoServerUrl = mAdapter.getMoServerUrl();
mAdapter.setSuplHostServer(ContextBase::mGps_conf.SUPL_HOST,
- ContextBase::mGps_conf.SUPL_PORT);
+ ContextBase::mGps_conf.SUPL_PORT,
+ LOC_AGPS_SUPL_SERVER);
+ mAdapter.setSuplHostServer(ContextBase::mGps_conf.MO_SUPL_HOST,
+ ContextBase::mGps_conf.MO_SUPL_PORT,
+ LOC_AGPS_MO_SUPL_SERVER);
// inject the configurations into modem
GnssAdapter& adapter = mAdapter;
@@ -606,10 +615,12 @@ GnssAdapter::setConfigCommand()
loc_sap_cfg_s_type sapConf = ContextBase::mSap_conf;
mApi.sendMsg(new LocApiMsg(
- [&adapter, gpsConf, sapConf, oldServerUrl] () {
+ [&adapter, gpsConf, sapConf, oldServerUrl, oldMoServerUrl] () {
std::string serverUrl = adapter.getServerUrl();
+ std::string moServerUrl = adapter.getMoServerUrl();
int serverUrlLen = serverUrl.length();
+ int moServerUrlLen = moServerUrl.length();
if (gpsConf.AGPS_CONFIG_INJECT) {
adapter.mLocApi->setSUPLVersionSync(
@@ -622,10 +633,21 @@ GnssAdapter::setConfigCommand()
if ((serverUrlLen !=0) && (oldServerUrl.compare(serverUrl) != 0)) {
LocationError locErr =
- adapter.mLocApi->setServerSync(serverUrl.c_str(), serverUrlLen);
+ adapter.mLocApi->setServerSync(serverUrl.c_str(), serverUrlLen,
+ LOC_AGPS_SUPL_SERVER);
+ if (locErr != LOCATION_ERROR_SUCCESS) {
+ LOC_LOGe("Error while setting SUPL_HOST server:%s",
+ serverUrl.c_str());
+ }
+ }
+ if ((moServerUrlLen != 0) && (oldMoServerUrl.compare(moServerUrl) != 0)) {
+ LocationError locErr =
+ adapter.mLocApi->setServerSync(moServerUrl.c_str(),
+ moServerUrlLen,
+ LOC_AGPS_MO_SUPL_SERVER);
if (locErr != LOCATION_ERROR_SUCCESS) {
- LOC_LOGE("%s]:Error while setting SUPL_HOST server:%s",
- __func__, serverUrl.c_str());
+ LOC_LOGe("Error while setting MO SUPL_HOST server:%s",
+ moServerUrl.c_str());
}
}
@@ -777,8 +799,9 @@ GnssAdapter::gnssUpdateConfigCommand(GnssConfig config)
index++;
if (GNSS_ASSISTANCE_TYPE_SUPL == mConfig.assistanceServer.type) {
mAdapter.setSuplHostServer(mConfig.assistanceServer.hostName,
- mConfig.assistanceServer.port);
- } else if (GNSS_ASSISTANCE_TYPE_C2K != mConfig.assistanceServer.type) {
+ mConfig.assistanceServer.port,
+ LOC_AGPS_SUPL_SERVER);
+ } else {
LOC_LOGE("%s]: Not a valid gnss assistance type %u",
__func__, mConfig.assistanceServer.type);
errs.at(index) = LOCATION_ERROR_INVALID_PARAMETER;
@@ -892,7 +915,7 @@ GnssAdapter::gnssUpdateConfigCommand(GnssConfig config)
GNSS_ASSISTANCE_TYPE_SUPL) {
if ((serverUrlLen != 0) && (oldServerUrl.compare(serverUrl) !=0)) {
err = adapter.mLocApi->setServerSync(
- serverUrl.c_str(), serverUrlLen);
+ serverUrl.c_str(), serverUrlLen, LOC_AGPS_SUPL_SERVER);
errsList[index] = err;
}
} else if (gnssConfigNeedEngineUpdate.assistanceServer.type ==
diff --git a/gnss/GnssAdapter.h b/gnss/GnssAdapter.h
index 319ea6b..7fbaf9c 100644
--- a/gnss/GnssAdapter.h
+++ b/gnss/GnssAdapter.h
@@ -122,6 +122,7 @@ class GnssAdapter : public LocAdapterBase {
/* === SystemStatus ===================================================================== */
SystemStatus* mSystemStatus;
std::string mServerUrl;
+ std::string mMoServerUrl;
XtraSystemStatusObserver mXtraObserver;
/*==== CONVERSION ===================================================================*/
@@ -160,7 +161,7 @@ public:
LocationCallbacks getClientCallbacks(LocationAPI* client);
LocationCapabilitiesMask getCapabilities();
void broadcastCapabilities(LocationCapabilitiesMask);
- void setSuplHostServer(const char* server, int port);
+ void setSuplHostServer(const char* server, int port, LocServerType type);
/* ==== TRACKING ======================================================================= */
/* ======== COMMANDS ====(Called from Client Thread)==================================== */
@@ -310,7 +311,7 @@ public:
/*==== SYSTEM STATUS ================================================================*/
inline SystemStatus* getSystemStatus(void) { return mSystemStatus; }
std::string& getServerUrl(void) { return mServerUrl; }
- void setServerUrl(const char* server) { mServerUrl.assign(server); }
+ std::string& getMoServerUrl(void) { return mMoServerUrl; }
/*==== CONVERSION ===================================================================*/
static uint32_t convertGpsLock(const GnssConfigGpsLock gpsLock);
diff --git a/utils/gps_extended_c.h b/utils/gps_extended_c.h
index 481889f..142ae15 100644
--- a/utils/gps_extended_c.h
+++ b/utils/gps_extended_c.h
@@ -258,7 +258,8 @@ typedef enum loc_server_type {
LOC_AGPS_CDMA_PDE_SERVER,
LOC_AGPS_CUSTOM_PDE_SERVER,
LOC_AGPS_MPC_SERVER,
- LOC_AGPS_SUPL_SERVER
+ LOC_AGPS_SUPL_SERVER,
+ LOC_AGPS_MO_SUPL_SERVER
} LocServerType;
typedef enum loc_position_mode_type {