aboutsummaryrefslogtreecommitdiff
path: root/gps/loc_api/libloc_api_50001
diff options
context:
space:
mode:
Diffstat (limited to 'gps/loc_api/libloc_api_50001')
-rw-r--r--gps/loc_api/libloc_api_50001/Android.mk18
-rw-r--r--gps/loc_api/libloc_api_50001/LocEngAdapter.cpp42
-rw-r--r--gps/loc_api/libloc_api_50001/LocEngAdapter.h30
-rw-r--r--gps/loc_api/libloc_api_50001/Makefile.am154
-rw-r--r--gps/loc_api/libloc_api_50001/loc.cpp63
-rw-r--r--gps/loc_api/libloc_api_50001/loc.h3
-rw-r--r--gps/loc_api/libloc_api_50001/loc_eng.cpp440
-rw-r--r--gps/loc_api/libloc_api_50001/loc_eng.h12
-rw-r--r--gps/loc_api/libloc_api_50001/loc_eng_agps.cpp3
-rw-r--r--gps/loc_api/libloc_api_50001/loc_eng_agps.h8
-rw-r--r--gps/loc_api/libloc_api_50001/loc_eng_dmn_conn.cpp5
-rw-r--r--gps/loc_api/libloc_api_50001/loc_eng_dmn_conn_glue_msg.c5
-rw-r--r--gps/loc_api/libloc_api_50001/loc_eng_dmn_conn_glue_pipe.c11
-rw-r--r--gps/loc_api/libloc_api_50001/loc_eng_dmn_conn_handler.cpp5
-rw-r--r--gps/loc_api/libloc_api_50001/loc_eng_dmn_conn_thread_helper.c5
-rw-r--r--gps/loc_api/libloc_api_50001/loc_eng_msg.h14
-rw-r--r--gps/loc_api/libloc_api_50001/loc_eng_ni.cpp5
-rw-r--r--gps/loc_api/libloc_api_50001/loc_eng_nmea.cpp182
-rw-r--r--gps/loc_api/libloc_api_50001/loc_eng_xtra.cpp12
19 files changed, 629 insertions, 388 deletions
diff --git a/gps/loc_api/libloc_api_50001/Android.mk b/gps/loc_api/libloc_api_50001/Android.mk
index 0c6d22d..c8ee6c2 100644
--- a/gps/loc_api/libloc_api_50001/Android.mk
+++ b/gps/loc_api/libloc_api_50001/Android.mk
@@ -16,7 +16,8 @@ LOCAL_SHARED_LIBRARIES := \
libdl \
liblog \
libloc_core \
- libgps.utils
+ libgps.utils \
+ libloc_pla
LOCAL_SRC_FILES += \
loc_eng.cpp \
@@ -41,8 +42,9 @@ LOCAL_CFLAGS += \
LOCAL_C_INCLUDES:= \
$(TARGET_OUT_HEADERS)/gps.utils \
$(TARGET_OUT_HEADERS)/libloc_core \
- $(LOCAL_PATH) \
- $(TARGET_OUT_HEADERS)/libflp
+ $(call project-path-for,qcom-gps) \
+ $(TARGET_OUT_HEADERS)/libflp \
+ $(TARGET_OUT_HEADERS)/libloc_pla
LOCAL_COPY_HEADERS_TO:= libloc_eng/
LOCAL_COPY_HEADERS:= \
@@ -75,7 +77,8 @@ LOCAL_SHARED_LIBRARIES := \
libloc_eng \
libloc_core \
libgps.utils \
- libdl
+ libdl \
+ libloc_pla
LOCAL_SRC_FILES += \
loc.cpp \
@@ -85,6 +88,10 @@ LOCAL_CFLAGS += \
-fno-short-enums \
-D_ANDROID_ \
+ifeq ($(TARGET_BUILD_VARIANT),user)
+ LOCAL_CFLAGS += -DTARGET_BUILD_VARIANT_USER
+endif
+
ifeq ($(TARGET_USES_QCOM_BSP), true)
LOCAL_CFLAGS += -DTARGET_USES_QCOM_BSP
endif
@@ -93,7 +100,8 @@ endif
LOCAL_C_INCLUDES:= \
$(TARGET_OUT_HEADERS)/gps.utils \
$(TARGET_OUT_HEADERS)/libloc_core \
- $(TARGET_OUT_HEADERS)/libflp
+ $(TARGET_OUT_HEADERS)/libflp \
+ $(TARGET_OUT_HEADERS)/libloc_pla
LOCAL_PRELINK_MODULE := false
LOCAL_MODULE_RELATIVE_PATH := hw
diff --git a/gps/loc_api/libloc_api_50001/LocEngAdapter.cpp b/gps/loc_api/libloc_api_50001/LocEngAdapter.cpp
index e0f21ec..3af4fb7 100644
--- a/gps/loc_api/libloc_api_50001/LocEngAdapter.cpp
+++ b/gps/loc_api/libloc_api_50001/LocEngAdapter.cpp
@@ -397,6 +397,23 @@ void LocEngAdapter::reportSv(GnssSvStatus &svStatus,
}
}
+
+void LocEngAdapter::reportSvMeasurement(GnssSvMeasurementSet &svMeasurementSet)
+{
+ // We send SvMeasurementSet to AmtProxy/ULPProxy to be forwarded as necessary.
+ if (! mUlp->reportSvMeasurement(svMeasurementSet)) {
+ //Send to Internal Adapter later if needed by LA
+ }
+}
+
+void LocEngAdapter::reportSvPolynomial(GnssSvPolynomial &svPolynomial)
+{
+ // We send SvMeasurementSet to AmtProxy/ULPProxy to be forwarded as necessary.
+ if (! mUlp->reportSvPolynomial(svPolynomial)) {
+ //Send to Internal Adapter later if needed by LA
+ }
+}
+
void LocEngAdapter::setInSession(bool inSession)
{
mNavigating = inSession;
@@ -534,9 +551,8 @@ enum loc_api_adapter_err LocEngAdapter::setTime(GpsUtcTime time,
if (mSupportsTimeInjection) {
LOC_LOGD("%s:%d]: Injecting time", __func__, __LINE__);
result = mLocApi->setTime(time, timeReference, uncertainty);
- } else {
- mSupportsTimeInjection = true;
}
+
return result;
}
@@ -566,26 +582,10 @@ enum loc_api_adapter_err LocEngAdapter::setXtraVersionCheck(int check)
return ret;
}
-void LocEngAdapter::reportGpsMeasurementData(GpsData &gpsMeasurementData)
-{
- sendMsg(new LocEngReportGpsMeasurement(mOwner,
- gpsMeasurementData));
-}
-
-/*
- Update Registration Mask
- */
-void LocEngAdapter::updateRegistrationMask(LOC_API_ADAPTER_EVENT_MASK_T event,
- loc_registration_mask_status isEnabled)
+void LocEngAdapter::reportGnssMeasurementData(GnssData &gnssMeasurementData)
{
- LOC_LOGD("entering %s", __func__);
- int result = LOC_API_ADAPTER_ERR_FAILURE;
- result = mLocApi->updateRegistrationMask(event, isEnabled);
- if (result == LOC_API_ADAPTER_ERR_SUCCESS) {
- LOC_LOGD("%s] update registration mask succeed.", __func__);
- } else {
- LOC_LOGE("%s] update registration mask failed.", __func__);
- }
+ sendMsg(new LocEngReportGnssMeasurement(mOwner,
+ gnssMeasurementData));
}
/*
diff --git a/gps/loc_api/libloc_api_50001/LocEngAdapter.h b/gps/loc_api/libloc_api_50001/LocEngAdapter.h
index a193e81..416e4b7 100644
--- a/gps/loc_api/libloc_api_50001/LocEngAdapter.h
+++ b/gps/loc_api/libloc_api_50001/LocEngAdapter.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2011-2015, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2011-2016, The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -33,7 +33,6 @@
#include <hardware/gps.h>
#include <loc.h>
#include <loc_eng_log.h>
-#include <log_util.h>
#include <LocAdapterBase.h>
#include <LocDualContext.h>
#include <UlpProxyBase.h>
@@ -85,6 +84,7 @@ public:
bool mSupportsAgpsRequests;
bool mSupportsPositionInjection;
bool mSupportsTimeInjection;
+ GnssSystemInfo mGnssInfo;
LocEngAdapter(LOC_API_ADAPTER_EVENT_MASK_T mask,
void* owner, ContextBase* context,
@@ -105,6 +105,9 @@ public:
inline bool hasCPIExtendedCapabilities() {
return mContext->hasCPIExtendedCapabilities();
}
+ inline bool hasNativeXtraClient() {
+ return mContext->hasNativeXtraClient();
+ }
inline const MsgTask* getMsgTask() { return mMsgTask; }
inline enum loc_api_adapter_err
@@ -187,6 +190,11 @@ public:
return mLocApi->setSUPLVersion(version);
}
inline enum loc_api_adapter_err
+ setNMEATypes (uint32_t typesMask)
+ {
+ return mLocApi->setNMEATypes(typesMask);
+ }
+ inline enum loc_api_adapter_err
setLPPConfig(uint32_t profile)
{
return mLocApi->setLPPConfig(profile);
@@ -222,14 +230,14 @@ public:
algorithmConfig);
}
inline virtual enum loc_api_adapter_err
- setExtPowerConfig(int isBatteryCharging)
+ setAGLONASSProtocol(unsigned long aGlonassProtocol)
{
- return mLocApi->setExtPowerConfig(isBatteryCharging);
+ return mLocApi->setAGLONASSProtocol(aGlonassProtocol);
}
inline virtual enum loc_api_adapter_err
- setAGLONASSProtocol(unsigned long aGlonassProtocol)
+ setLPPeProtocol(unsigned long lppeCP, unsigned long lppeUP)
{
- return mLocApi->setAGLONASSProtocol(aGlonassProtocol);
+ return mLocApi->setLPPeProtocol(lppeCP, lppeUP);
}
inline virtual int initDataServiceClient()
{
@@ -272,6 +280,8 @@ public:
virtual void reportSv(GnssSvStatus &svStatus,
GpsLocationExtended &locationExtended,
void* svExt);
+ virtual void reportSvMeasurement(GnssSvMeasurementSet &svMeasurementSet);
+ virtual void reportSvPolynomial(GnssSvPolynomial &svPolynomial);
virtual void reportStatus(GpsStatusValue status);
virtual void reportNmea(const char* nmea, int length);
virtual bool reportXtraServer(const char* url1, const char* url2,
@@ -284,7 +294,7 @@ public:
virtual bool requestSuplES(int connHandle);
virtual bool reportDataCallOpened();
virtual bool reportDataCallClosed();
- virtual void reportGpsMeasurementData(GpsData &gpsMeasurementData);
+ virtual void reportGnssMeasurementData(GnssData &gnssMeasurementData);
inline const LocPosMode& getPositionMode() const
{return mFixCriteria;}
@@ -337,12 +347,6 @@ public:
}
/*
- Update Registration Mask
- */
- void updateRegistrationMask(LOC_API_ADAPTER_EVENT_MASK_T event,
- loc_registration_mask_status isEnabled);
-
- /*
Set Gnss Constellation Config
*/
bool gnssConstellationConfig();
diff --git a/gps/loc_api/libloc_api_50001/Makefile.am b/gps/loc_api/libloc_api_50001/Makefile.am
index 2374357..c762427 100644
--- a/gps/loc_api/libloc_api_50001/Makefile.am
+++ b/gps/loc_api/libloc_api_50001/Makefile.am
@@ -1,76 +1,78 @@
-AM_CFLAGS = \
- -I../../utils \
- -I../../platform_lib_abstractions \
- -fno-short-enums \
- -DFEATURE_GNSS_BIT_API
-
-libloc_adapter_so_la_SOURCES = loc_eng_log.cpp LocEngAdapter.cpp
-
-if USE_GLIB
-libloc_adapter_so_la_CFLAGS = -DUSE_GLIB $(AM_CFLAGS) @GLIB_CFLAGS@
-libloc_adapter_so_la_LDFLAGS = -lstdc++ -lpthread @GLIB_LIBS@ -shared -version-info 1:0:0
-libloc_adapter_so_la_CPPFLAGS = -DUSE_GLIB $(AM_CFLAGS) $(AM_CPPFLAGS) @GLIB_CFLAGS@
-else
-libloc_adapter_so_la_CFLAGS = $(AM_CFLAGS)
-libloc_adapter_so_la_LDFLAGS = -lpthread -shared -version-info 1:0:0
-libloc_adapter_so_la_CPPFLAGS = $(AM_CFLAGS) $(AM_CPPFLAGS)
-endif
-libloc_adapter_so_la_LIBADD = -lstdc++ -lcutils ../../utils/libgps_utils_so.la
-
-
-libloc_eng_so_la_SOURCES = \
- loc_eng.cpp \
- loc_eng_agps.cpp \
- loc_eng_xtra.cpp \
- loc_eng_ni.cpp \
- loc_eng_log.cpp \
- loc_eng_dmn_conn.cpp \
- loc_eng_dmn_conn_handler.cpp \
- loc_eng_dmn_conn_thread_helper.c \
- loc_eng_dmn_conn_glue_msg.c \
- loc_eng_dmn_conn_glue_pipe.c
-
-
-if USE_GLIB
-libloc_eng_so_la_CFLAGS = -DUSE_GLIB $(AM_CFLAGS) @GLIB_CFLAGS@
-libloc_eng_so_la_LDFLAGS = -lstdc++ -lpthread @GLIB_LIBS@ -shared -version-info 1:0:0
-libloc_eng_so_la_CPPFLAGS = -DUSE_GLIB $(AM_CFLAGS) $(AM_CPPFLAGS) @GLIB_CFLAGS@
-else
-libloc_eng_so_la_CFLAGS = $(AM_CFLAGS)
-libloc_eng_so_la_LDFLAGS = -lpthread -shared -version-info 1:0:0
-libloc_eng_so_la_CPPFLAGS = $(AM_CFLAGS) $(AM_CPPFLAGS)
-endif
-
-libloc_eng_so_la_LIBADD = -lstdc++ -lcutils -ldl ../../utils/libgps_utils_so.la libloc_adapter_so.la
-
-
-libgps_default_so_la_SOURCES = \
- loc.cpp \
- gps.c
-
-if USE_GLIB
-libgps_default_so_la_CFLAGS = -DUSE_GLIB $(AM_CFLAGS) @GLIB_CFLAGS@
-libgps_default_so_la_LDFLAGS = -lstdc++ -lpthread @GLIB_LIBS@ -shared -version-info 1:0:0
-libgps_default_so_la_CPPFLAGS = -DUSE_GLIB $(AM_CFLAGS) $(AM_CPPFLAGS) @GLIB_CFLAGS@
-else
-libgps_default_so_la_CFLAGS = $(AM_CFLAGS)
-libgps_default_so_la_LDFLAGS = -lpthread -shared -version-info 1:0:0
-libgps_default_so_la_CPPFLAGS = $(AM_CFLAGS) $(AM_CPPFLAGS)
-endif
-
-libgps_default_so_la_LIBADD = -lstdc++ -lcutils ../../utils/libgps_utils_so.la -ldl libloc_eng_so.la
-
-library_include_HEADERS = \
- LocEngAdapter.h \
- loc.h \
- loc_eng.h \
- loc_eng_xtra.h \
- loc_eng_ni.h \
- loc_eng_agps.h \
- loc_eng_msg.h \
- loc_eng_log.h
-
-library_includedir = $(pkgincludedir)/libloc_api_50001
-
-#Create and Install libraries
-lib_LTLIBRARIES = libloc_adapter_so.la libloc_eng_so.la libgps_default_so.la
+AM_CFLAGS = \
+ -I../../utils \
+ -I../../platform_lib_abstractions \
+ -I$(WORKSPACE)/gps-noship/flp \
+ -fno-short-enums \
+ -D__func__=__PRETTY_FUNCTION__ \
+ -DFEATURE_GNSS_BIT_API
+
+libloc_adapter_so_la_SOURCES = loc_eng_log.cpp LocEngAdapter.cpp
+
+if USE_GLIB
+libloc_adapter_so_la_CFLAGS = -DUSE_GLIB $(AM_CFLAGS) @GLIB_CFLAGS@
+libloc_adapter_so_la_LDFLAGS = -lstdc++ -lpthread @GLIB_LIBS@ -shared -version-info 1:0:0
+libloc_adapter_so_la_CPPFLAGS = -DUSE_GLIB $(AM_CFLAGS) $(AM_CPPFLAGS) @GLIB_CFLAGS@
+else
+libloc_adapter_so_la_CFLAGS = $(AM_CFLAGS)
+libloc_adapter_so_la_LDFLAGS = -lpthread -shared -version-info 1:0:0
+libloc_adapter_so_la_CPPFLAGS = $(AM_CFLAGS) $(AM_CPPFLAGS)
+endif
+libloc_adapter_so_la_LIBADD = -lstdc++ -lcutils ../../utils/libgps_utils_so.la
+
+
+libloc_eng_so_la_SOURCES = \
+ loc_eng.cpp \
+ loc_eng_agps.cpp \
+ loc_eng_xtra.cpp \
+ loc_eng_ni.cpp \
+ loc_eng_log.cpp \
+ loc_eng_dmn_conn.cpp \
+ loc_eng_dmn_conn_handler.cpp \
+ loc_eng_dmn_conn_thread_helper.c \
+ loc_eng_dmn_conn_glue_msg.c \
+ loc_eng_dmn_conn_glue_pipe.c
+
+
+if USE_GLIB
+libloc_eng_so_la_CFLAGS = -DUSE_GLIB $(AM_CFLAGS) @GLIB_CFLAGS@
+libloc_eng_so_la_LDFLAGS = -lstdc++ -lpthread @GLIB_LIBS@ -shared -version-info 1:0:0
+libloc_eng_so_la_CPPFLAGS = -DUSE_GLIB $(AM_CFLAGS) $(AM_CPPFLAGS) @GLIB_CFLAGS@
+else
+libloc_eng_so_la_CFLAGS = $(AM_CFLAGS)
+libloc_eng_so_la_LDFLAGS = -lpthread -shared -version-info 1:0:0
+libloc_eng_so_la_CPPFLAGS = $(AM_CFLAGS) $(AM_CPPFLAGS)
+endif
+
+libloc_eng_so_la_LIBADD = -lstdc++ -lcutils -ldl ../../utils/libgps_utils_so.la libloc_adapter_so.la
+
+
+libgps_default_so_la_SOURCES = \
+ loc.cpp \
+ gps.c
+
+if USE_GLIB
+libgps_default_so_la_CFLAGS = -DUSE_GLIB $(AM_CFLAGS) @GLIB_CFLAGS@
+libgps_default_so_la_LDFLAGS = -lstdc++ -lpthread @GLIB_LIBS@ -shared -version-info 1:0:0
+libgps_default_so_la_CPPFLAGS = -DUSE_GLIB $(AM_CFLAGS) $(AM_CPPFLAGS) @GLIB_CFLAGS@
+else
+libgps_default_so_la_CFLAGS = $(AM_CFLAGS)
+libgps_default_so_la_LDFLAGS = -lpthread -shared -version-info 1:0:0
+libgps_default_so_la_CPPFLAGS = $(AM_CFLAGS) $(AM_CPPFLAGS)
+endif
+
+libgps_default_so_la_LIBADD = -lstdc++ -lcutils ../../utils/libgps_utils_so.la -ldl libloc_eng_so.la
+
+library_include_HEADERS = \
+ LocEngAdapter.h \
+ loc.h \
+ loc_eng.h \
+ loc_eng_xtra.h \
+ loc_eng_ni.h \
+ loc_eng_agps.h \
+ loc_eng_msg.h \
+ loc_eng_log.h
+
+library_includedir = $(pkgincludedir)/libloc_api_50001
+
+#Create and Install libraries
+lib_LTLIBRARIES = libloc_adapter_so.la libloc_eng_so.la libgps_default_so.la
diff --git a/gps/loc_api/libloc_api_50001/loc.cpp b/gps/loc_api/libloc_api_50001/loc.cpp
index d322a72..222d5da 100644
--- a/gps/loc_api/libloc_api_50001/loc.cpp
+++ b/gps/loc_api/libloc_api_50001/loc.cpp
@@ -1,4 +1,4 @@
-/* Copyright (c) 2011-2015, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2011-2016, The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -43,6 +43,7 @@
#include <fcntl.h>
#include <errno.h>
#include <LocDualContext.h>
+#include <platform_lib_includes.h>
#include <cutils/properties.h>
using namespace loc_core;
@@ -52,9 +53,15 @@ using namespace loc_core;
//Globals defns
static gps_location_callback gps_loc_cb = NULL;
static gps_sv_status_callback gps_sv_cb = NULL;
+static gps_ni_notify_callback gps_ni_cb = NULL;
static void local_loc_cb(UlpLocation* location, void* locExt);
static void local_sv_cb(GpsSvStatus* sv_status, void* svExt);
+static void local_ni_cb(GpsNiNotification *notification, bool esEnalbed);
+
+GpsNiExtCallbacks sGpsNiExtCallbacks = {
+ local_ni_cb
+};
static const GpsGeofencingInterface* get_geofence_interface(void);
@@ -192,17 +199,18 @@ SIDE EFFECTS
N/A
===========================================================================*/
-const GpsInterface* gps_get_hardware_interface ()
+extern "C" const GpsInterface* gps_get_hardware_interface ()
{
ENTRY_LOG_CALLFLOW();
const GpsInterface* ret_val;
char propBuf[PROPERTY_VALUE_MAX];
+ memset(propBuf, 0, sizeof(propBuf));
loc_eng_read_config();
// check to see if GPS should be disabled
- property_get("gps.disable", propBuf, "");
+ platform_lib_abstraction_property_get("gps.disable", propBuf, "");
if (propBuf[0] == '1')
{
LOC_LOGD("gps_get_interface returning NULL because gps.disable=1\n");
@@ -275,6 +283,7 @@ SIDE EFFECTS
static int loc_init(GpsCallbacks* callbacks)
{
int retVal = -1;
+ unsigned int target = (unsigned int) -1;
ENTRY_LOG();
LOC_API_ADAPTER_EVENT_MASK_T event;
@@ -285,6 +294,7 @@ static int loc_init(GpsCallbacks* callbacks)
}
event = LOC_API_ADAPTER_BIT_PARSED_POSITION_REPORT |
+ LOC_API_ADAPTER_BIT_GNSS_MEASUREMENT |
LOC_API_ADAPTER_BIT_SATELLITE_REPORT |
LOC_API_ADAPTER_BIT_LOCATION_SERVER_REQUEST |
LOC_API_ADAPTER_BIT_ASSISTANCE_DATA_REQUEST |
@@ -293,6 +303,17 @@ static int loc_init(GpsCallbacks* callbacks)
LOC_API_ADAPTER_BIT_NMEA_1HZ_REPORT |
LOC_API_ADAPTER_BIT_NI_NOTIFY_VERIFY_REQUEST;
+ target = loc_get_target();
+
+ /* If platform is "auto" and external dr enabled then enable
+ ** Measurement report and SV Polynomial report
+ */
+ if((1 == gps_conf.EXTERNAL_DR_ENABLED))
+ {
+ event |= LOC_API_ADAPTER_BIT_GNSS_MEASUREMENT_REPORT |
+ LOC_API_ADAPTER_BIT_GNSS_SV_POLYNOMIAL_REPORT;
+ }
+
LocCallbacks clientCallbacks = {local_loc_cb, /* location_cb */
callbacks->status_cb, /* status_cb */
local_sv_cb, /* sv_status_cb */
@@ -304,6 +325,8 @@ static int loc_init(GpsCallbacks* callbacks)
NULL, /* location_ext_parser */
NULL, /* sv_ext_parser */
callbacks->request_utc_time_cb, /* request_utc_time_cb */
+ callbacks->set_system_info_cb, /* set_system_info_cb */
+ callbacks->gnss_sv_status_cb, /* gnss_sv_status_cb */
};
gps_loc_cb = callbacks->location_cb;
@@ -312,7 +335,8 @@ static int loc_init(GpsCallbacks* callbacks)
retVal = loc_eng_init(loc_afw_data, &clientCallbacks, event, NULL);
loc_afw_data.adapter->mSupportsAgpsRequests = !loc_afw_data.adapter->hasAgpsExtendedCapabilities();
loc_afw_data.adapter->mSupportsPositionInjection = !loc_afw_data.adapter->hasCPIExtendedCapabilities();
- loc_afw_data.adapter->mSupportsTimeInjection = !loc_afw_data.adapter->hasCPIExtendedCapabilities();
+ loc_afw_data.adapter->mSupportsTimeInjection = !loc_afw_data.adapter->hasCPIExtendedCapabilities()
+ && !loc_afw_data.adapter->hasNativeXtraClient();
loc_afw_data.adapter->setGpsLockMsg(0);
loc_afw_data.adapter->requestUlp(ContextBase::getCarrierCapabilities());
loc_afw_data.adapter->setXtraUserAgent();
@@ -450,8 +474,12 @@ static int loc_set_position_mode(GpsPositionMode mode,
break;
}
+ // set position sharing option to true
+ bool sharePosition = true;
+
LocPosMode params(locMode, recurrence, min_interval,
- preferred_accuracy, preferred_time, NULL, NULL);
+ preferred_accuracy, preferred_time,
+ sharePosition, NULL, NULL);
ret_val = loc_eng_set_position_mode(loc_afw_data, params);
EXIT_LOG(%d, ret_val);
@@ -538,7 +566,10 @@ SIDE EFFECTS
static void loc_delete_aiding_data(GpsAidingData f)
{
ENTRY_LOG();
+
+#ifndef TARGET_BUILD_VARIANT_USER
loc_eng_delete_aiding_data(loc_afw_data, f);
+#endif
EXIT_LOG(%s, VOID_RET);
}
@@ -565,10 +596,14 @@ const GpsGeofencingInterface* get_geofence_interface(void)
}
dlerror(); /* Clear any existing error */
get_gps_geofence_interface = (get_gps_geofence_interface_function)dlsym(handle, "gps_geofence_get_interface");
- if ((error = dlerror()) != NULL || NULL == get_gps_geofence_interface) {
+ if ((error = dlerror()) != NULL) {
LOC_LOGE ("%s, dlsym for get_gps_geofence_interface failed, error = %s\n", __func__, error);
goto exit;
- }
+ }
+ if (NULL == get_gps_geofence_interface) {
+ LOC_LOGE ("%s, get_gps_geofence_interface is NULL\n", __func__);
+ goto exit;
+ }
geofence_interface = get_gps_geofence_interface();
@@ -613,7 +648,7 @@ const void* loc_get_extension(const char* name)
else if (strcmp(name, AGPS_RIL_INTERFACE) == 0)
{
char baseband[PROPERTY_VALUE_MAX];
- property_get("ro.baseband", baseband, "msm");
+ platform_lib_abstraction_property_get("ro.baseband", baseband, "msm");
if (strcmp(baseband, "csfb") == 0)
{
ret_val = &sLocEngAGpsRilInterface;
@@ -730,7 +765,7 @@ static int loc_agps_open_with_apniptype(const char* apn, ApnIpType apnIpType)
bearerType = AGPS_APN_BEARER_IPV4V6;
break;
default:
- bearerType = AGPS_APN_BEARER_INVALID;
+ bearerType = AGPS_APN_BEARER_IPV4;
break;
}
@@ -960,7 +995,8 @@ SIDE EFFECTS
void loc_ni_init(GpsNiCallbacks *callbacks)
{
ENTRY_LOG();
- loc_eng_ni_init(loc_afw_data,(GpsNiExtCallbacks*) callbacks);
+ gps_ni_cb = callbacks->notify_cb;
+ loc_eng_ni_init(loc_afw_data, &sGpsNiExtCallbacks);
EXIT_LOG(%s, VOID_RET);
}
@@ -1075,3 +1111,10 @@ static void local_sv_cb(GpsSvStatus* sv_status, void* svExt)
EXIT_LOG(%s, VOID_RET);
}
+static void local_ni_cb(GpsNiNotification *notification, bool esEnalbed)
+{
+ if (NULL != gps_ni_cb) {
+ gps_ni_cb(notification);
+ }
+}
+
diff --git a/gps/loc_api/libloc_api_50001/loc.h b/gps/loc_api/libloc_api_50001/loc.h
index e56fdcf..8cf77fc 100644
--- a/gps/loc_api/libloc_api_50001/loc.h
+++ b/gps/loc_api/libloc_api_50001/loc.h
@@ -35,7 +35,6 @@ extern "C" {
#endif /* __cplusplus */
#include <ctype.h>
-#include <cutils/properties.h>
#include <hardware/gps.h>
#include <gps_extended.h>
@@ -57,6 +56,8 @@ typedef struct {
loc_ext_parser location_ext_parser;
loc_ext_parser sv_ext_parser;
gps_request_utc_time request_utc_time_cb;
+ gnss_set_system_info set_system_info_cb;
+ gnss_sv_status_callback gnss_sv_status_cb;
} LocCallbacks;
#ifdef __cplusplus
diff --git a/gps/loc_api/libloc_api_50001/loc_eng.cpp b/gps/loc_api/libloc_api_50001/loc_eng.cpp
index c06206b..c1cc640 100644
--- a/gps/loc_api/libloc_api_50001/loc_eng.cpp
+++ b/gps/loc_api/libloc_api_50001/loc_eng.cpp
@@ -1,4 +1,4 @@
-/* Copyright (c) 2009-2015, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2009-2016, The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -47,19 +47,8 @@
#include <new>
#include <LocEngAdapter.h>
-#include <cutils/sched_policy.h>
-#ifndef USE_GLIB
-#include <utils/SystemClock.h>
-#include <utils/Log.h>
-#endif /* USE_GLIB */
-
-#ifdef USE_GLIB
-#include <glib.h>
-#include <sys/syscall.h>
-#endif /* USE_GLIB */
#include <string.h>
-
#include <loc_eng.h>
#include <loc_eng_ni.h>
#include <loc_eng_dmn_conn.h>
@@ -68,8 +57,7 @@
#include <loc_eng_nmea.h>
#include <msg_q.h>
#include <loc.h>
-#include "log_util.h"
-#include "platform_lib_includes.h"
+#include <platform_lib_includes.h>
#include "loc_core_log.h"
#include "loc_eng_log.h"
@@ -98,8 +86,11 @@ static const loc_param_s_type gps_conf_table[] =
{"SUPL_VER", &gps_conf.SUPL_VER, NULL, 'n'},
{"LPP_PROFILE", &gps_conf.LPP_PROFILE, NULL, 'n'},
{"A_GLONASS_POS_PROTOCOL_SELECT", &gps_conf.A_GLONASS_POS_PROTOCOL_SELECT, NULL, 'n'},
+ {"LPPE_CP_TECHNOLOGY", &gps_conf.LPPE_CP_TECHNOLOGY, NULL, 'n'},
+ {"LPPE_UP_TECHNOLOGY", &gps_conf.LPPE_UP_TECHNOLOGY, NULL, 'n'},
{"AGPS_CERT_WRITABLE_MASK", &gps_conf.AGPS_CERT_WRITABLE_MASK, NULL, 'n'},
{"SUPL_MODE", &gps_conf.SUPL_MODE, NULL, 'n'},
+ {"SUPL_ES", &gps_conf.SUPL_ES, NULL, 'n'},
{"INTERMEDIATE_POS", &gps_conf.INTERMEDIATE_POS, NULL, 'n'},
{"ACCURACY_THRES", &gps_conf.ACCURACY_THRES, NULL, 'n'},
{"NMEA_PROVIDER", &gps_conf.NMEA_PROVIDER, NULL, 'n'},
@@ -109,6 +100,8 @@ static const loc_param_s_type gps_conf_table[] =
{"XTRA_SERVER_2", &gps_conf.XTRA_SERVER_2, NULL, 's'},
{"XTRA_SERVER_3", &gps_conf.XTRA_SERVER_3, NULL, 's'},
{"USE_EMERGENCY_PDN_FOR_EMERGENCY_SUPL", &gps_conf.USE_EMERGENCY_PDN_FOR_EMERGENCY_SUPL, NULL, 'n'},
+ {"AGPS_CONFIG_INJECT", &gps_conf.AGPS_CONFIG_INJECT, NULL, 'n'},
+ {"EXTERNAL_DR_ENABLED", &gps_conf.EXTERNAL_DR_ENABLED, NULL, 'n'},
};
static const loc_param_s_type sap_conf_table[] =
@@ -141,6 +134,7 @@ static void loc_default_parameters(void)
gps_conf.GPS_LOCK = 0;
gps_conf.SUPL_VER = 0x10000;
gps_conf.SUPL_MODE = 0x3;
+ gps_conf.SUPL_ES = 0;
gps_conf.CAPABILITIES = 0x7;
/* LTE Positioning Profile configuration is disable by default*/
gps_conf.LPP_PROFILE = 0;
@@ -150,6 +144,10 @@ static void loc_default_parameters(void)
gps_conf.XTRA_VERSION_CHECK=0;
/*Use emergency PDN by default*/
gps_conf.USE_EMERGENCY_PDN_FOR_EMERGENCY_SUPL = 1;
+ /* By default no LPPe CP technology is enabled*/
+ gps_conf.LPPE_CP_TECHNOLOGY = 0;
+ /* By default no LPPe UP technology is enabled*/
+ gps_conf.LPPE_UP_TECHNOLOGY = 0;
/*Defaults for sap.conf*/
sap_conf.GYRO_BIAS_RANDOM_WALK = 0;
@@ -180,6 +178,9 @@ static void loc_default_parameters(void)
/* None of the 10 slots for agps certificates are writable by default */
gps_conf.AGPS_CERT_WRITABLE_MASK = 0;
+
+ /* inject supl config to modem with config values from config.xml or gps.conf, default 1 */
+ gps_conf.AGPS_CONFIG_INJECT = 1;
}
// 2nd half of init(), singled out for
@@ -206,6 +207,7 @@ static int loc_eng_get_zpp_handler(loc_eng_data_s_type &loc_eng_data);
static void deleteAidingData(loc_eng_data_s_type &logEng);
static AgpsStateMachine*
getAgpsStateMachine(loc_eng_data_s_type& logEng, AGpsExtType agpsType);
+static void createAgnssNifs(loc_eng_data_s_type& locEng);
static int dataCallCb(void *cb_data);
static void update_aiding_data_for_deletion(loc_eng_data_s_type& loc_eng_data) {
if (loc_eng_data.engine_status != GPS_STATUS_ENGINE_ON &&
@@ -406,7 +408,9 @@ struct LocEngSetServerIpv4 : public LocMsg {
locallog();
}
inline virtual void proc() const {
- mAdapter->setServer(mNlAddr, mPort, mServerType);
+ if (gps_conf.AGPS_CONFIG_INJECT) {
+ mAdapter->setServer(mNlAddr, mPort, mServerType);
+ }
}
inline void locallog() const {
LOC_LOGV("LocEngSetServerIpv4 - addr: %x, port: %d, type: %s",
@@ -437,7 +441,9 @@ struct LocEngSetServerUrl : public LocMsg {
delete[] mUrl;
}
inline virtual void proc() const {
- mAdapter->setServer(mUrl, mLen);
+ if (gps_conf.AGPS_CONFIG_INJECT) {
+ mAdapter->setServer(mUrl, mLen);
+ }
}
inline void locallog() const {
LOC_LOGV("LocEngSetServerUrl - url: %s", mUrl);
@@ -458,7 +464,9 @@ struct LocEngAGlonassProtocol : public LocMsg {
locallog();
}
inline virtual void proc() const {
- mAdapter->setAGLONASSProtocol(mAGlonassProtocl);
+ if (gps_conf.AGPS_CONFIG_INJECT) {
+ mAdapter->setAGLONASSProtocol(mAGlonassProtocl);
+ }
}
inline void locallog() const {
LOC_LOGV("A-GLONASS protocol: 0x%lx", mAGlonassProtocl);
@@ -468,6 +476,29 @@ struct LocEngAGlonassProtocol : public LocMsg {
}
};
+
+struct LocEngLPPeProtocol : public LocMsg {
+ LocEngAdapter* mAdapter;
+ const unsigned long mLPPeCP;
+ const unsigned long mLPPeUP;
+ inline LocEngLPPeProtocol(LocEngAdapter* adapter,
+ unsigned long lppeCP, unsigned long lppeUP) :
+ LocMsg(), mAdapter(adapter), mLPPeCP(lppeCP), mLPPeUP(lppeUP)
+ {
+ locallog();
+ }
+ inline virtual void proc() const {
+ mAdapter->setLPPeProtocol(mLPPeCP, mLPPeUP);
+ }
+ inline void locallog() const {
+ LOC_LOGV("LPPe CP: 0x%lx LPPe UP: 0x%1x", mLPPeCP, mLPPeUP);
+ }
+ inline virtual void log() const {
+ locallog();
+ }
+};
+
+
// case LOC_ENG_MSG_SUPL_VERSION:
struct LocEngSuplVer : public LocMsg {
LocEngAdapter* mAdapter;
@@ -479,7 +510,9 @@ struct LocEngSuplVer : public LocMsg {
locallog();
}
inline virtual void proc() const {
- mAdapter->setSUPLVersion(mSuplVer);
+ if (gps_conf.AGPS_CONFIG_INJECT) {
+ mAdapter->setSUPLVersion(mSuplVer);
+ }
}
inline void locallog() const {
LOC_LOGV("SUPL Version: %d", mSuplVer);
@@ -507,6 +540,31 @@ struct LocEngSuplMode : public LocMsg {
}
};
+// case LOC_ENG_MSG_SET_NMEA_TYPE:
+struct LocEngSetNmeaTypes : public LocMsg {
+ LocEngAdapter* mAdapter;
+ uint32_t nmeaTypesMask;
+ inline LocEngSetNmeaTypes(LocEngAdapter* adapter,
+ uint32_t typesMask) :
+ LocMsg(), mAdapter(adapter), nmeaTypesMask(typesMask)
+ {
+ locallog();
+ }
+ inline virtual void proc() const {
+ // set the nmea types
+ mAdapter->setNMEATypes(nmeaTypesMask);
+ }
+ inline void locallog() const
+ {
+ LOC_LOGV("LocEngSetNmeaTypes %u\n",nmeaTypesMask);
+ }
+ inline virtual void log() const
+ {
+ locallog();
+ }
+};
+
+
// case LOC_ENG_MSG_LPP_CONFIG:
struct LocEngLppConfig : public LocMsg {
LocEngAdapter* mAdapter;
@@ -518,7 +576,9 @@ struct LocEngLppConfig : public LocMsg {
locallog();
}
inline virtual void proc() const {
- mAdapter->setLPPConfig(mLppConfig);
+ if (gps_conf.AGPS_CONFIG_INJECT) {
+ mAdapter->setLPPConfig(mLppConfig);
+ }
}
inline void locallog() const {
LOC_LOGV("LocEngLppConfig - profile: %d", mLppConfig);
@@ -697,29 +757,6 @@ struct LocEngSensorPerfControlConfig : public LocMsg {
}
};
-// case LOC_ENG_MSG_EXT_POWER_CONFIG:
-struct LocEngExtPowerConfig : public LocMsg {
- LocEngAdapter* mAdapter;
- const int mIsBatteryCharging;
- inline LocEngExtPowerConfig(LocEngAdapter* adapter,
- int isBatteryCharging) :
- LocMsg(), mAdapter(adapter),
- mIsBatteryCharging(isBatteryCharging)
- {
- locallog();
- }
- inline virtual void proc() const {
- mAdapter->setExtPowerConfig(mIsBatteryCharging);
- }
- inline void locallog() const {
- LOC_LOGV("LocEngExtPowerConfig - isBatteryCharging: %d",
- mIsBatteryCharging);
- }
- inline virtual void log() const {
- locallog();
- }
-};
-
// case LOC_ENG_MSG_REPORT_POSITION:
LocEngReportPosition::LocEngReportPosition(LocAdapterBase* adapter,
UlpLocation &loc,
@@ -843,9 +880,9 @@ void LocEngReportSv::proc() const {
if (locEng->mute_session_state != LOC_MUTE_SESS_IN_SESSION)
{
- if (locEng->sv_status_cb != NULL) {
- locEng->sv_status_cb((GpsSvStatus*)&(mSvStatus),
- (void*)mSvExt);
+ if (locEng->gnss_sv_status_cb != NULL) {
+ LOC_LOGE("Calling gnss_sv_status_cb");
+ locEng->gnss_sv_status_cb((GnssSvStatus*)&(mSvStatus));
}
if (locEng->generateNmea)
@@ -900,7 +937,6 @@ void LocEngReportNmea::proc() const {
struct timeval tv;
gettimeofday(&tv, (struct timezone *) NULL);
int64_t now = tv.tv_sec * 1000LL + tv.tv_usec / 1000;
- CALLBACK_LOG_CALLFLOW("nmea_cb", %d, mLen);
if (locEng->nmea_cb != NULL)
locEng->nmea_cb(now, mNmea, mLen);
@@ -1088,7 +1124,7 @@ LocEngRequestSuplEs::LocEngRequestSuplEs(void* locEng, int id) :
}
void LocEngRequestSuplEs::proc() const {
loc_eng_data_s_type* locEng = (loc_eng_data_s_type*)mLocEng;
- if (locEng->ds_nif) {
+ if (locEng->ds_nif && gps_conf.USE_EMERGENCY_PDN_FOR_EMERGENCY_SUPL) {
AgpsStateMachine* sm = locEng->ds_nif;
DSSubscriber s(sm, mID);
sm->subscribeRsrc((Subscriber*)&s);
@@ -1375,6 +1411,32 @@ struct LocEngSetCapabilities : public LocMsg {
}
};
+struct LocEngSetSystemInfo : public LocMsg {
+ loc_eng_data_s_type* mLocEng;
+ inline LocEngSetSystemInfo(loc_eng_data_s_type* locEng) :
+ LocMsg(), mLocEng(locEng)
+ {
+ locallog();
+ }
+ inline virtual void proc() const {
+ if (NULL != mLocEng->set_system_info_cb) {
+ LOC_LOGV("calling set_system_info_cb 0x%x",
+ mLocEng->adapter->mGnssInfo.year_of_hw);
+ mLocEng->set_system_info_cb(&(mLocEng->adapter->mGnssInfo));
+ }
+ else {
+ LOC_LOGV("set_system_info_cb is NULL.\n");
+ }
+ }
+ inline void locallog() const
+ {
+ LOC_LOGV("LocEngSetSystemInfo");
+ }
+ inline virtual void log() const
+ {
+ locallog();
+ }
+};
// case LOC_ENG_MSG_LOC_INIT:
struct LocEngInit : public LocMsg {
loc_eng_data_s_type* mLocEng;
@@ -1387,6 +1449,7 @@ struct LocEngInit : public LocMsg {
loc_eng_reinit(*mLocEng);
// set the capabilities
mLocEng->adapter->sendMsg(new LocEngSetCapabilities(mLocEng));
+ mLocEng->adapter->sendMsg(new LocEngSetSystemInfo(mLocEng));
}
inline void locallog() const
{
@@ -1403,16 +1466,18 @@ struct LocEngInit : public LocMsg {
// case LOC_ENG_MSG_ATL_OPEN_SUCCESS:
struct LocEngAtlOpenSuccess : public LocMsg {
- AgpsStateMachine* mStateMachine;
+ loc_eng_data_s_type* mLocEng;
+ const AGpsExtType mAgpsType;
const int mLen;
char* mAPN;
const AGpsBearerType mBearerType;
- inline LocEngAtlOpenSuccess(AgpsStateMachine* statemachine,
+ inline LocEngAtlOpenSuccess(loc_eng_data_s_type* locEng,
+ const AGpsExtType agpsType,
const char* name,
int len,
AGpsBearerType btype) :
LocMsg(),
- mStateMachine(statemachine), mLen(len),
+ mLocEng(locEng), mAgpsType(agpsType), mLen(len),
mAPN(new char[len+1]), mBearerType(btype)
{
memcpy((void*)mAPN, (void*)name, len);
@@ -1424,14 +1489,15 @@ struct LocEngAtlOpenSuccess : public LocMsg {
delete[] mAPN;
}
inline virtual void proc() const {
- mStateMachine->setBearer(mBearerType);
- mStateMachine->setAPN(mAPN, mLen);
- mStateMachine->onRsrcEvent(RSRC_GRANTED);
+ AgpsStateMachine* sm = getAgpsStateMachine(*mLocEng, mAgpsType);
+ sm->setBearer(mBearerType);
+ sm->setAPN(mAPN, mLen);
+ sm->onRsrcEvent(RSRC_GRANTED);
}
inline void locallog() const {
LOC_LOGV("LocEngAtlOpenSuccess agps type: %s\n apn: %s\n"
" bearer type: %s",
- loc_get_agps_type_name(mStateMachine->getType()),
+ loc_get_agps_type_name(mAgpsType),
mAPN,
loc_get_agps_bear_name(mBearerType));
}
@@ -1442,13 +1508,16 @@ struct LocEngAtlOpenSuccess : public LocMsg {
// case LOC_ENG_MSG_ATL_CLOSED:
struct LocEngAtlClosed : public LocMsg {
- AgpsStateMachine* mStateMachine;
- inline LocEngAtlClosed(AgpsStateMachine* statemachine) :
- LocMsg(), mStateMachine(statemachine) {
+ loc_eng_data_s_type* mLocEng;
+ const AGpsExtType mAgpsType;
+ inline LocEngAtlClosed(loc_eng_data_s_type* locEng,
+ const AGpsExtType agpsType) :
+ LocMsg(), mLocEng(locEng), mAgpsType(agpsType) {
locallog();
}
inline virtual void proc() const {
- mStateMachine->onRsrcEvent(RSRC_RELEASED);
+ AgpsStateMachine* sm = getAgpsStateMachine(*mLocEng, mAgpsType);
+ sm->onRsrcEvent(RSRC_RELEASED);
}
inline void locallog() const {
LOC_LOGV("LocEngAtlClosed");
@@ -1460,13 +1529,16 @@ struct LocEngAtlClosed : public LocMsg {
// case LOC_ENG_MSG_ATL_OPEN_FAILED:
struct LocEngAtlOpenFailed : public LocMsg {
- AgpsStateMachine* mStateMachine;
- inline LocEngAtlOpenFailed(AgpsStateMachine* statemachine) :
- LocMsg(), mStateMachine(statemachine) {
+ loc_eng_data_s_type* mLocEng;
+ const AGpsExtType mAgpsType;
+ inline LocEngAtlOpenFailed(loc_eng_data_s_type* locEng,
+ const AGpsExtType agpsType) :
+ LocMsg(), mLocEng(locEng), mAgpsType(agpsType) {
locallog();
}
inline virtual void proc() const {
- mStateMachine->onRsrcEvent(RSRC_DENIED);
+ AgpsStateMachine* sm = getAgpsStateMachine(*mLocEng, mAgpsType);
+ sm->onRsrcEvent(RSRC_DENIED);
}
inline void locallog() const {
LOC_LOGV("LocEngAtlOpenFailed");
@@ -1508,22 +1580,17 @@ inline void LocEngUp::log() const {
locallog();
}
-struct LocEngDataClientInit : public LocMsg {
+struct LocEngAgnssNifInit : public LocMsg {
loc_eng_data_s_type* mLocEng;
- inline LocEngDataClientInit(loc_eng_data_s_type* locEng) :
+ inline LocEngAgnssNifInit(loc_eng_data_s_type* locEng) :
LocMsg(), mLocEng(locEng) {
locallog();
}
virtual void proc() const {
- loc_eng_data_s_type *locEng = (loc_eng_data_s_type *)mLocEng;
- if(!locEng->adapter->initDataServiceClient()) {
- locEng->ds_nif = new DSStateMachine(servicerTypeExt,
- (void *)dataCallCb,
- locEng->adapter);
- }
+ createAgnssNifs(*mLocEng);
}
void locallog() const {
- LOC_LOGV("LocEngDataClientInit\n");
+ LOC_LOGV("LocEngAgnssNifInit\n");
}
virtual void log() const {
locallog();
@@ -1576,29 +1643,6 @@ struct LocEngInstallAGpsCert : public LocMsg {
}
};
-struct LocEngUpdateRegistrationMask : public LocMsg {
- loc_eng_data_s_type* mLocEng;
- LOC_API_ADAPTER_EVENT_MASK_T mMask;
- loc_registration_mask_status mIsEnabled;
- inline LocEngUpdateRegistrationMask(loc_eng_data_s_type* locEng,
- LOC_API_ADAPTER_EVENT_MASK_T mask,
- loc_registration_mask_status isEnabled) :
- LocMsg(), mLocEng(locEng), mMask(mask), mIsEnabled(isEnabled) {
- locallog();
- }
- inline virtual void proc() const {
- loc_eng_data_s_type *locEng = (loc_eng_data_s_type *)mLocEng;
- locEng->adapter->updateRegistrationMask(mMask,
- mIsEnabled);
- }
- void locallog() const {
- LOC_LOGV("LocEngUpdateRegistrationMask\n");
- }
- virtual void log() const {
- locallog();
- }
-};
-
struct LocEngGnssConstellationConfig : public LocMsg {
LocEngAdapter* mAdapter;
inline LocEngGnssConstellationConfig(LocEngAdapter* adapter) :
@@ -1606,10 +1650,13 @@ struct LocEngGnssConstellationConfig : public LocMsg {
locallog();
}
inline virtual void proc() const {
+ mAdapter->mGnssInfo.size = sizeof(GnssSystemInfo);
if (mAdapter->gnssConstellationConfig()) {
LOC_LOGV("Modem supports GNSS measurements\n");
gps_conf.CAPABILITIES |= GPS_CAPABILITY_MEASUREMENTS;
+ mAdapter->mGnssInfo.year_of_hw = 2016;
} else {
+ mAdapter->mGnssInfo.year_of_hw = 2015;
LOC_LOGV("Modem does not support GNSS measurements\n");
}
}
@@ -1622,50 +1669,59 @@ struct LocEngGnssConstellationConfig : public LocMsg {
};
// case LOC_ENG_MSG_REPORT_GNSS_MEASUREMENT:
-LocEngReportGpsMeasurement::LocEngReportGpsMeasurement(void* locEng,
- GpsData &gpsData) :
- LocMsg(), mLocEng(locEng), mGpsData(gpsData)
+LocEngReportGnssMeasurement::LocEngReportGnssMeasurement(void* locEng,
+ GnssData &gnssData) :
+ LocMsg(), mLocEng(locEng), mGnssData(gnssData)
{
locallog();
}
-void LocEngReportGpsMeasurement::proc() const {
+void LocEngReportGnssMeasurement::proc() const {
loc_eng_data_s_type* locEng = (loc_eng_data_s_type*) mLocEng;
if (locEng->mute_session_state != LOC_MUTE_SESS_IN_SESSION)
{
- if (locEng->gps_measurement_cb != NULL) {
- locEng->gps_measurement_cb((GpsData*)&(mGpsData));
+ if (locEng->gnss_measurement_cb != NULL) {
+ LOC_LOGV("Calling gnss_measurement_cb");
+ locEng->gnss_measurement_cb((GnssData*)&(mGnssData));
}
}
}
-void LocEngReportGpsMeasurement::locallog() const {
+void LocEngReportGnssMeasurement::locallog() const {
IF_LOC_LOGV {
LOC_LOGV("%s:%d]: Received in GPS HAL."
"GNSS Measurements count: %d \n",
- __func__, __LINE__, mGpsData.measurement_count);
- for (int i =0; i< mGpsData.measurement_count && i < GPS_MAX_SVS; i++) {
+ __func__, __LINE__, mGnssData.measurement_count);
+ for (int i =0; i< mGnssData.measurement_count && i < GNSS_MAX_SVS; i++) {
LOC_LOGV(" GNSS measurement data in GPS HAL: \n"
- " GPS_HAL => Measurement ID | prn | time_offset_ns | state |"
- " received_gps_tow_ns| c_n0_dbhz | pseudorange_rate_mps |"
+ " GPS_HAL => Measurement ID | svid | time_offset_ns | state |"
+ " c_n0_dbhz | pseudorange_rate_mps |"
" pseudorange_rate_uncertainty_mps |"
" accumulated_delta_range_state | flags \n"
- " GPS_HAL => %d | %d | %f | %d | %lld | %f | %f | %f | %d | %d \n",
+ " GPS_HAL => %d | %d | %f | %d | %f | %f | %f | %d | %d \n",
i,
- mGpsData.measurements[i].prn,
- mGpsData.measurements[i].time_offset_ns,
- mGpsData.measurements[i].state,
- mGpsData.measurements[i].received_gps_tow_ns,
- mGpsData.measurements[i].c_n0_dbhz,
- mGpsData.measurements[i].pseudorange_rate_mps,
- mGpsData.measurements[i].pseudorange_rate_uncertainty_mps,
- mGpsData.measurements[i].accumulated_delta_range_state,
- mGpsData.measurements[i].flags);
+ mGnssData.measurements[i].svid,
+ mGnssData.measurements[i].time_offset_ns,
+ mGnssData.measurements[i].state,
+ mGnssData.measurements[i].c_n0_dbhz,
+ mGnssData.measurements[i].pseudorange_rate_mps,
+ mGnssData.measurements[i].pseudorange_rate_uncertainty_mps,
+ mGnssData.measurements[i].accumulated_delta_range_state,
+ mGnssData.measurements[i].flags);
}
- LOC_LOGV(" GPS_HAL => Clocks Info: type | time_ns \n"
- " GPS_HAL => Clocks Info: %d | %lld", mGpsData.clock.type,
- mGpsData.clock.time_ns);
- }
-}
-inline void LocEngReportGpsMeasurement::log() const {
+ LOC_LOGV(" GPS_HAL => Clocks Info: \n"
+ " time_ns | full_bias_ns | bias_ns | bias_uncertainty_ns | "
+ " drift_nsps | drift_uncertainty_nsps | hw_clock_discontinuity_count | flags"
+ " GPS_HAL => Clocks Info: %lld | %lld | %g | %g | %g | %g | %d | 0x%04x\n",
+ mGnssData.clock.time_ns,
+ mGnssData.clock.full_bias_ns,
+ mGnssData.clock.bias_ns,
+ mGnssData.clock.bias_uncertainty_ns,
+ mGnssData.clock.drift_nsps,
+ mGnssData.clock.drift_uncertainty_nsps,
+ mGnssData.clock.hw_clock_discontinuity_count,
+ mGnssData.clock.flags);
+ }
+}
+inline void LocEngReportGnssMeasurement::log() const {
locallog();
}
@@ -1727,6 +1783,8 @@ int loc_eng_init(loc_eng_data_s_type &loc_eng_data, LocCallbacks* callbacks,
loc_eng_data.acquire_wakelock_cb = callbacks->acquire_wakelock_cb;
loc_eng_data.release_wakelock_cb = callbacks->release_wakelock_cb;
loc_eng_data.request_utc_time_cb = callbacks->request_utc_time_cb;
+ loc_eng_data.set_system_info_cb = callbacks->set_system_info_cb;
+ loc_eng_data.gnss_sv_status_cb = callbacks->gnss_sv_status_cb;
loc_eng_data.location_ext_parser = callbacks->location_ext_parser ?
callbacks->location_ext_parser : noProc;
loc_eng_data.sv_ext_parser = callbacks->sv_ext_parser ?
@@ -1742,7 +1800,7 @@ int loc_eng_init(loc_eng_data_s_type &loc_eng_data, LocCallbacks* callbacks,
event = event ^ LOC_API_ADAPTER_BIT_NMEA_1HZ_REPORT; // unregister for modem NMEA report
loc_eng_data.generateNmea = true;
}
- else
+ else if (gps_conf.NMEA_PROVIDER == NMEA_PROVIDER_MP)
{
loc_eng_data.generateNmea = false;
}
@@ -1751,6 +1809,8 @@ int loc_eng_init(loc_eng_data_s_type &loc_eng_data, LocCallbacks* callbacks,
new LocEngAdapter(event, &loc_eng_data, context,
(LocThread::tCreate)callbacks->create_thread_cb);
+ loc_eng_data.adapter->mGnssInfo.size = sizeof(GnssSystemInfo);
+ loc_eng_data.adapter->mGnssInfo.year_of_hw = 2015;
LOC_LOGD("loc_eng_init created client, id = %p\n",
loc_eng_data.adapter);
loc_eng_data.adapter->sendMsg(new LocEngInit(&loc_eng_data));
@@ -1771,6 +1831,15 @@ static int loc_eng_reinit(loc_eng_data_s_type &loc_eng_data)
adapter->sendMsg(new LocEngSensorControlConfig(adapter, sap_conf.SENSOR_USAGE,
sap_conf.SENSOR_PROVIDER));
adapter->sendMsg(new LocEngAGlonassProtocol(adapter, gps_conf.A_GLONASS_POS_PROTOCOL_SELECT));
+ adapter->sendMsg(new LocEngLPPeProtocol(adapter, gps_conf.LPPE_CP_TECHNOLOGY,
+ gps_conf.LPPE_UP_TECHNOLOGY));
+
+ if (!loc_eng_data.generateNmea)
+ {
+ NmeaSentenceTypesMask typesMask = LOC_NMEA_ALL_SUPPORTED_MASK;
+ LOC_LOGD("loc_eng_init setting nmea types, mask = %u\n",typesMask);
+ adapter->sendMsg(new LocEngSetNmeaTypes(adapter,typesMask));
+ }
/* Make sure at least one of the sensor property is specified by the user in the gps.conf file. */
if( sap_conf.GYRO_BIAS_RANDOM_WALK_VALID ||
@@ -2116,6 +2185,9 @@ void loc_eng_delete_aiding_data(loc_eng_data_s_type &loc_eng_data, GpsAidingData
ENTRY_LOG_CALLFLOW();
INIT_CHECK(loc_eng_data.adapter, return);
+ //report delete aiding data to ULP to send to DRPlugin
+ loc_eng_data.adapter->getUlpProxy()->reportDeleteAidingData(f);
+
loc_eng_data.adapter->sendMsg(new LocEngDelAidData(&loc_eng_data, f));
EXIT_LOG(%s, VOID_RET);
@@ -2274,31 +2346,14 @@ void loc_eng_agps_init(loc_eng_data_s_type &loc_eng_data, AGpsExtCallbacks* call
EXIT_LOG(%s, VOID_RET);
return;
}
+ bool agpsCapable = ((gps_conf.CAPABILITIES & GPS_CAPABILITY_MSA) ||
+ (gps_conf.CAPABILITIES & GPS_CAPABILITY_MSB));
LocEngAdapter* adapter = loc_eng_data.adapter;
loc_eng_data.agps_status_cb = callbacks->status_cb;
- loc_eng_data.internet_nif = new AgpsStateMachine(servicerTypeAgps,
- (void *)loc_eng_data.agps_status_cb,
- AGPS_TYPE_WWAN_ANY,
- false);
- loc_eng_data.wifi_nif = new AgpsStateMachine(servicerTypeAgps,
- (void *)loc_eng_data.agps_status_cb,
- AGPS_TYPE_WIFI,
- true);
-
- if ((gps_conf.CAPABILITIES & GPS_CAPABILITY_MSA) ||
- (gps_conf.CAPABILITIES & GPS_CAPABILITY_MSB)) {
- loc_eng_data.agnss_nif = new AgpsStateMachine(servicerTypeAgps,
- (void *)loc_eng_data.agps_status_cb,
- AGPS_TYPE_SUPL,
- false);
-
+ if (agpsCapable && NULL != adapter) {
if (adapter->mSupportsAgpsRequests) {
- if(gps_conf.USE_EMERGENCY_PDN_FOR_EMERGENCY_SUPL) {
- loc_eng_data.adapter->sendMsg(new LocEngDataClientInit(&loc_eng_data));
- }
- loc_eng_dmn_conn_loc_api_server_launch(callbacks->create_thread_cb,
- NULL, NULL, &loc_eng_data);
+ adapter->sendMsg(new LocEngAgnssNifInit(&loc_eng_data));
}
loc_eng_agps_reinit(loc_eng_data);
}
@@ -2314,6 +2369,35 @@ static void deleteAidingData(loc_eng_data_s_type &logEng) {
}
}
+// must be called under msg handler context
+static void createAgnssNifs(loc_eng_data_s_type& locEng) {
+ bool agpsCapable = ((gps_conf.CAPABILITIES & GPS_CAPABILITY_MSA) ||
+ (gps_conf.CAPABILITIES & GPS_CAPABILITY_MSB));
+ LocEngAdapter* adapter = locEng.adapter;
+ if (agpsCapable && NULL != adapter && adapter->mSupportsAgpsRequests) {
+ if (NULL == locEng.internet_nif) {
+ locEng.internet_nif= new AgpsStateMachine(servicerTypeAgps,
+ (void *)locEng.agps_status_cb,
+ AGPS_TYPE_WWAN_ANY,
+ false);
+ }
+ if (NULL == locEng.agnss_nif) {
+ locEng.agnss_nif = new AgpsStateMachine(servicerTypeAgps,
+ (void *)locEng.agps_status_cb,
+ AGPS_TYPE_SUPL,
+ false);
+ }
+ if (NULL == locEng.ds_nif &&
+ gps_conf.USE_EMERGENCY_PDN_FOR_EMERGENCY_SUPL &&
+ 0 == adapter->initDataServiceClient()) {
+ locEng.ds_nif = new DSStateMachine(servicerTypeExt,
+ (void *)dataCallCb,
+ locEng.adapter);
+ }
+ }
+}
+
+// must be called under msg handler context
static AgpsStateMachine*
getAgpsStateMachine(loc_eng_data_s_type &locEng, AGpsExtType agpsType) {
AgpsStateMachine* stateMachine;
@@ -2328,9 +2412,14 @@ getAgpsStateMachine(loc_eng_data_s_type &locEng, AGpsExtType agpsType) {
break;
}
case AGPS_TYPE_SUPL_ES: {
- locEng.ds_nif ?
- stateMachine = locEng.ds_nif:
+ if (gps_conf.USE_EMERGENCY_PDN_FOR_EMERGENCY_SUPL) {
+ if (NULL == locEng.ds_nif) {
+ createAgnssNifs(locEng);
+ }
+ stateMachine = locEng.ds_nif;
+ } else {
stateMachine = locEng.agnss_nif;
+ }
break;
}
default:
@@ -2372,10 +2461,9 @@ int loc_eng_agps_open(loc_eng_data_s_type &loc_eng_data, AGpsExtType agpsType,
LOC_LOGD("loc_eng_agps_open APN name = [%s]", apn);
int apn_len = smaller_of(strlen (apn), MAX_APN_LEN);
- AgpsStateMachine* sm = getAgpsStateMachine(loc_eng_data, agpsType);
-
loc_eng_data.adapter->sendMsg(
- new LocEngAtlOpenSuccess(sm, apn, apn_len, bearerType));
+ new LocEngAtlOpenSuccess(&loc_eng_data, agpsType,
+ apn, apn_len, bearerType));
EXIT_LOG(%d, 0);
return 0;
@@ -2404,8 +2492,8 @@ int loc_eng_agps_closed(loc_eng_data_s_type &loc_eng_data, AGpsExtType agpsType)
INIT_CHECK(loc_eng_data.adapter && loc_eng_data.agps_status_cb,
return -1);
- AgpsStateMachine* sm = getAgpsStateMachine(loc_eng_data, agpsType);
- loc_eng_data.adapter->sendMsg(new LocEngAtlClosed(sm));
+ loc_eng_data.adapter->sendMsg(new LocEngAtlClosed(&loc_eng_data,
+ agpsType));
EXIT_LOG(%d, 0);
return 0;
@@ -2434,8 +2522,8 @@ int loc_eng_agps_open_failed(loc_eng_data_s_type &loc_eng_data, AGpsExtType agps
INIT_CHECK(loc_eng_data.adapter && loc_eng_data.agps_status_cb,
return -1);
- AgpsStateMachine* sm = getAgpsStateMachine(loc_eng_data, agpsType);
- loc_eng_data.adapter->sendMsg(new LocEngAtlOpenFailed(sm));
+ loc_eng_data.adapter->sendMsg(new LocEngAtlOpenFailed(&loc_eng_data,
+ agpsType));
EXIT_LOG(%d, 0);
return 0;
@@ -2711,13 +2799,20 @@ void loc_eng_configuration_update (loc_eng_data_s_type &loc_eng_data,
if (gps_conf_tmp.SUPL_MODE != gps_conf.SUPL_MODE) {
adapter->sendMsg(new LocEngSuplMode(adapter->getUlpProxy()));
}
+ // we always update lock mask, this is because if this is dsds device, we would not
+ // know if modem has switched dds, if so, lock mask may also need to be updated.
+ // if we have power vote, HAL is on, lock mask 0; else gps_conf.GPS_LOCK.
+ adapter->setGpsLockMsg(adapter->getPowerVote() ? 0 : gps_conf.GPS_LOCK);
}
gps_conf_tmp.SUPL_VER = gps_conf.SUPL_VER;
gps_conf_tmp.LPP_PROFILE = gps_conf.LPP_PROFILE;
gps_conf_tmp.A_GLONASS_POS_PROTOCOL_SELECT = gps_conf.A_GLONASS_POS_PROTOCOL_SELECT;
gps_conf_tmp.SUPL_MODE = gps_conf.SUPL_MODE;
+ gps_conf_tmp.SUPL_ES = gps_conf.SUPL_ES;
gps_conf_tmp.GPS_LOCK = gps_conf.GPS_LOCK;
+ gps_conf_tmp.USE_EMERGENCY_PDN_FOR_EMERGENCY_SUPL =
+ gps_conf.USE_EMERGENCY_PDN_FOR_EMERGENCY_SUPL;
gps_conf = gps_conf_tmp;
}
@@ -2843,29 +2938,6 @@ void loc_eng_handle_engine_up(loc_eng_data_s_type &loc_eng_data)
EXIT_LOG(%s, VOID_RET);
}
-#ifdef USE_GLIB
-/*===========================================================================
-FUNCTION set_sched_policy
-
-DESCRIPTION
- Local copy of this function which bypasses android set_sched_policy
-
-DEPENDENCIES
- None
-
-RETURN VALUE
- 0
-
-SIDE EFFECTS
- N/A
-
-===========================================================================*/
-static int set_sched_policy(int tid, SchedPolicy policy)
-{
- return 0;
-}
-#endif /* USE_GLIB */
-
/*===========================================================================
FUNCTION loc_eng_read_config
@@ -2923,8 +2995,8 @@ int loc_eng_gps_measurement_init(loc_eng_data_s_type &loc_eng_data,
{
ENTRY_LOG_CALLFLOW();
- STATE_CHECK((NULL == loc_eng_data.gps_measurement_cb),
- "gps measurement already initialized",
+ STATE_CHECK((NULL == loc_eng_data.gnss_measurement_cb),
+ "gnss measurement already initialized",
return GPS_MEASUREMENT_ERROR_ALREADY_INIT);
STATE_CHECK((callbacks != NULL),
"callbacks can not be NULL",
@@ -2935,12 +3007,9 @@ int loc_eng_gps_measurement_init(loc_eng_data_s_type &loc_eng_data,
// updated the mask
LOC_API_ADAPTER_EVENT_MASK_T event = LOC_API_ADAPTER_BIT_GNSS_MEASUREMENT;
- loc_eng_data.adapter->sendMsg(new LocEngUpdateRegistrationMask(
- &loc_eng_data,
- event,
- LOC_REGISTRATION_MASK_ENABLED));
+ loc_eng_data.adapter->updateEvtMask(event, LOC_REGISTRATION_MASK_ENABLED);
// set up the callback
- loc_eng_data.gps_measurement_cb = callbacks->measurement_callback;
+ loc_eng_data.gnss_measurement_cb = callbacks->gnss_measurement_callback;
LOC_LOGD ("%s, event masks updated successfully", __func__);
return GPS_MEASUREMENT_OPERATION_SUCCESS;
@@ -2970,11 +3039,8 @@ void loc_eng_gps_measurement_close(loc_eng_data_s_type &loc_eng_data)
// updated the mask
LOC_API_ADAPTER_EVENT_MASK_T event = LOC_API_ADAPTER_BIT_GNSS_MEASUREMENT;
- loc_eng_data.adapter->sendMsg(new LocEngUpdateRegistrationMask(
- &loc_eng_data,
- event,
- LOC_REGISTRATION_MASK_DISABLED));
+ loc_eng_data.adapter->updateEvtMask(event, LOC_REGISTRATION_MASK_DISABLED);
// set up the callback
- loc_eng_data.gps_measurement_cb = NULL;
+ loc_eng_data.gnss_measurement_cb = NULL;
EXIT_LOG(%d, 0);
}
diff --git a/gps/loc_api/libloc_api_50001/loc_eng.h b/gps/loc_api/libloc_api_50001/loc_eng.h
index 6f90b23..1ff391a 100644
--- a/gps/loc_api/libloc_api_50001/loc_eng.h
+++ b/gps/loc_api/libloc_api_50001/loc_eng.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2009-2014, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2009-2014, 2016 The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -54,7 +54,6 @@ typedef unsigned char boolean;
#include <loc_eng_agps.h>
#include <loc_cfg.h>
#include <loc_log.h>
-#include <log_util.h>
#include <loc_eng_agps.h>
#include <LocEngAdapter.h>
@@ -90,12 +89,14 @@ typedef struct loc_eng_data_s
loc_sv_status_cb_ext sv_status_cb;
agps_status_extended agps_status_cb;
gps_nmea_callback nmea_cb;
- gps_ni_notify_callback ni_notify_cb;
+ loc_ni_notify_callback ni_notify_cb;
gps_set_capabilities set_capabilities_cb;
gps_acquire_wakelock acquire_wakelock_cb;
gps_release_wakelock release_wakelock_cb;
gps_request_utc_time request_utc_time_cb;
- gps_measurement_callback gps_measurement_cb;
+ gnss_set_system_info set_system_info_cb;
+ gnss_sv_status_callback gnss_sv_status_cb;
+ gnss_measurement_callback gnss_measurement_cb;
boolean intermediateFix;
AGpsStatusValue agps_status;
loc_eng_xtra_data_s_type xtra_module_data;
@@ -120,7 +121,8 @@ typedef struct loc_eng_data_s
// For nmea generation
boolean generateNmea;
- uint32_t sv_used_mask;
+ uint32_t gps_used_mask;
+ uint32_t glo_used_mask;
float hdop;
float pdop;
float vdop;
diff --git a/gps/loc_api/libloc_api_50001/loc_eng_agps.cpp b/gps/loc_api/libloc_api_50001/loc_eng_agps.cpp
index 5016b5c..43af70f 100644
--- a/gps/loc_api/libloc_api_50001/loc_eng_agps.cpp
+++ b/gps/loc_api/libloc_api_50001/loc_eng_agps.cpp
@@ -1,4 +1,4 @@
-/* Copyright (c) 2011-2013, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2011-2014, The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -32,7 +32,6 @@
#include <loc_eng_agps.h>
#include <loc_eng_log.h>
-#include <log_util.h>
#include <platform_lib_includes.h>
#include <loc_eng_dmn_conn_handler.h>
#include <loc_eng_dmn_conn.h>
diff --git a/gps/loc_api/libloc_api_50001/loc_eng_agps.h b/gps/loc_api/libloc_api_50001/loc_eng_agps.h
index 2d689ce..58ce084 100644
--- a/gps/loc_api/libloc_api_50001/loc_eng_agps.h
+++ b/gps/loc_api/libloc_api_50001/loc_eng_agps.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2011-2013, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2011-2014, The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -40,10 +40,14 @@
#include <linked_list.h>
#include <loc_timer.h>
#include <LocEngAdapter.h>
+#include <platform_lib_includes.h>
+#if defined(USE_GLIB) && !defined(OFF_TARGET)
+#include <glib.h>
+#endif /* USE_GLIB */
// forward declaration
class AgpsStateMachine;
-class Subscriber;
+struct Subscriber;
// NIF resource events
typedef enum {
diff --git a/gps/loc_api/libloc_api_50001/loc_eng_dmn_conn.cpp b/gps/loc_api/libloc_api_50001/loc_eng_dmn_conn.cpp
index c257dff..5510fc5 100644
--- a/gps/loc_api/libloc_api_50001/loc_eng_dmn_conn.cpp
+++ b/gps/loc_api/libloc_api_50001/loc_eng_dmn_conn.cpp
@@ -1,4 +1,4 @@
-/* Copyright (c) 2011-2012, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2011-2012,2014 The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -37,8 +37,7 @@
#include <grp.h>
#include <sys/stat.h>
-#include "log_util.h"
-#include "platform_lib_includes.h"
+#include <platform_lib_includes.h>
#include "loc_eng_dmn_conn_glue_msg.h"
#include "loc_eng_dmn_conn_handler.h"
#include "loc_eng_dmn_conn.h"
diff --git a/gps/loc_api/libloc_api_50001/loc_eng_dmn_conn_glue_msg.c b/gps/loc_api/libloc_api_50001/loc_eng_dmn_conn_glue_msg.c
index a1076ff..e947fa1 100644
--- a/gps/loc_api/libloc_api_50001/loc_eng_dmn_conn_glue_msg.c
+++ b/gps/loc_api/libloc_api_50001/loc_eng_dmn_conn_glue_msg.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2011, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2011,2014 The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -31,8 +31,7 @@
#include <linux/types.h>
-#include "log_util.h"
-#include "platform_lib_includes.h"
+#include <platform_lib_includes.h>
#include "loc_eng_dmn_conn_glue_msg.h"
#include "loc_eng_dmn_conn_handler.h"
diff --git a/gps/loc_api/libloc_api_50001/loc_eng_dmn_conn_glue_pipe.c b/gps/loc_api/libloc_api_50001/loc_eng_dmn_conn_glue_pipe.c
index dffcad0..cbc4ea6 100644
--- a/gps/loc_api/libloc_api_50001/loc_eng_dmn_conn_glue_pipe.c
+++ b/gps/loc_api/libloc_api_50001/loc_eng_dmn_conn_glue_pipe.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2011-2012, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2011-2012,2014 The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -37,8 +37,7 @@
#include <sys/stat.h>
#include "loc_eng_dmn_conn_glue_pipe.h"
-#include "log_util.h"
-#include "platform_lib_includes.h"
+#include <platform_lib_includes.h>
/*===========================================================================
FUNCTION loc_eng_dmn_conn_glue_pipeget
@@ -110,8 +109,10 @@ SIDE EFFECTS
int loc_eng_dmn_conn_glue_piperemove(const char * pipe_name, int fd)
{
close(fd);
- if (pipe_name) unlink(pipe_name);
- LOC_LOGD("fd = %d, %s\n", fd, pipe_name);
+ if (pipe_name != NULL) {
+ unlink(pipe_name);
+ LOC_LOGD("fd = %d, %s\n", fd, pipe_name);
+ }
return 0;
}
diff --git a/gps/loc_api/libloc_api_50001/loc_eng_dmn_conn_handler.cpp b/gps/loc_api/libloc_api_50001/loc_eng_dmn_conn_handler.cpp
index edd53f2..137f686 100644
--- a/gps/loc_api/libloc_api_50001/loc_eng_dmn_conn_handler.cpp
+++ b/gps/loc_api/libloc_api_50001/loc_eng_dmn_conn_handler.cpp
@@ -1,4 +1,4 @@
-/* Copyright (c) 2011-2012, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2011-2012,2014 The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -31,8 +31,7 @@
#include <string.h>
#include <unistd.h>
-#include "log_util.h"
-#include "platform_lib_includes.h"
+#include <platform_lib_includes.h>
#include "loc_eng_msg.h"
#include "loc_eng_dmn_conn.h"
#include "loc_eng_dmn_conn_handler.h"
diff --git a/gps/loc_api/libloc_api_50001/loc_eng_dmn_conn_thread_helper.c b/gps/loc_api/libloc_api_50001/loc_eng_dmn_conn_thread_helper.c
index 9fed9d4..b30f6d7 100644
--- a/gps/loc_api/libloc_api_50001/loc_eng_dmn_conn_thread_helper.c
+++ b/gps/loc_api/libloc_api_50001/loc_eng_dmn_conn_thread_helper.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2011, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2011,2014 The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -28,8 +28,7 @@
*/
#include <stdio.h>
-#include "log_util.h"
-#include "platform_lib_includes.h"
+#include <platform_lib_includes.h>
#include "loc_eng_dmn_conn_thread_helper.h"
/*===========================================================================
diff --git a/gps/loc_api/libloc_api_50001/loc_eng_msg.h b/gps/loc_api/libloc_api_50001/loc_eng_msg.h
index 9c7b9bc..2fa9b42 100644
--- a/gps/loc_api/libloc_api_50001/loc_eng_msg.h
+++ b/gps/loc_api/libloc_api_50001/loc_eng_msg.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2011-2013, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2011-2014, The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -34,16 +34,16 @@
#include <gps_extended.h>
#include <stdlib.h>
#include <string.h>
-#include <log_util.h>
#include <loc_eng_log.h>
#include <loc_eng.h>
#include <MsgTask.h>
#include <LocEngAdapter.h>
+#include <platform_lib_includes.h>
#ifndef SSID_BUF_SIZE
#define SSID_BUF_SIZE (32+1)
#endif
-#ifdef USE_GLIB
+#if defined(USE_GLIB) && !defined(OFF_TARGET)
#include <glib.h>
@@ -289,11 +289,11 @@ struct LocEngGetZpp : public LocMsg {
void send() const;
};
-struct LocEngReportGpsMeasurement : public LocMsg {
+struct LocEngReportGnssMeasurement : public LocMsg {
void* mLocEng;
- const GpsData mGpsData;
- LocEngReportGpsMeasurement(void* locEng,
- GpsData &gpsData);
+ const GnssData mGnssData;
+ LocEngReportGnssMeasurement(void* locEng,
+ GnssData &gnssData);
virtual void proc() const;
void locallog() const;
virtual void log() const;
diff --git a/gps/loc_api/libloc_api_50001/loc_eng_ni.cpp b/gps/loc_api/libloc_api_50001/loc_eng_ni.cpp
index 4597b98..9b454c6 100644
--- a/gps/loc_api/libloc_api_50001/loc_eng_ni.cpp
+++ b/gps/loc_api/libloc_api_50001/loc_eng_ni.cpp
@@ -43,8 +43,7 @@
#include <loc_eng.h>
-#include "log_util.h"
-#include "platform_lib_includes.h"
+#include <platform_lib_includes.h>
using namespace loc_core;
@@ -189,7 +188,7 @@ void loc_eng_ni_request_handler(loc_eng_data_s_type &loc_eng_data,
}
CALLBACK_LOG_CALLFLOW("ni_notify_cb - id", %d, notif->notification_id);
- loc_eng_data.ni_notify_cb((GpsNiNotification*)notif);
+ loc_eng_data.ni_notify_cb((GpsNiNotification*)notif, gps_conf.SUPL_ES != 0);
}
EXIT_LOG(%s, VOID_RET);
}
diff --git a/gps/loc_api/libloc_api_50001/loc_eng_nmea.cpp b/gps/loc_api/libloc_api_50001/loc_eng_nmea.cpp
index 126a97f..3d2336f 100644
--- a/gps/loc_api/libloc_api_50001/loc_eng_nmea.cpp
+++ b/gps/loc_api/libloc_api_50001/loc_eng_nmea.cpp
@@ -1,4 +1,4 @@
-/* Copyright (c) 2012, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2012, 2016, The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -29,14 +29,10 @@
#define LOG_NDDEBUG 0
#define LOG_TAG "LocSvc_eng_nmea"
-#define GPS_PRN_START 1
-#define GPS_PRN_END 32
-#define GLONASS_PRN_START 65
-#define GLONASS_PRN_END 96
#include <loc_eng.h>
#include <loc_eng_nmea.h>
#include <math.h>
-#include "log_util.h"
+#include <platform_lib_includes.h>
/*===========================================================================
FUNCTION loc_eng_nmea_send
@@ -59,7 +55,6 @@ void loc_eng_nmea_send(char *pNmea, int length, loc_eng_data_s_type *loc_eng_dat
struct timeval tv;
gettimeofday(&tv, (struct timezone *) NULL);
int64_t now = tv.tv_sec * 1000LL + tv.tv_usec / 1000;
- CALLBACK_LOG_CALLFLOW("nmea_cb", %p, pNmea);
if (loc_eng_data_p->nmea_cb != NULL)
loc_eng_data_p->nmea_cb(now, pNmea, length);
LOC_LOGD("NMEA <%s", pNmea);
@@ -93,8 +88,12 @@ int loc_eng_nmea_put_checksum(char *pNmea, int maxSize)
length++;
}
+ // length now contains nmea sentence string length not including $ sign.
int checksumLength = snprintf(pNmea,(maxSize-length-1),"*%02X\r\n", checksum);
- return (length + checksumLength);
+
+ // total length of nmea sentence is length of nmea sentence inc $ sign plus
+ // length of checksum (+1 is to cover the $ character in the length).
+ return (length + checksumLength + 1);
}
/*===========================================================================
@@ -102,6 +101,12 @@ FUNCTION loc_eng_nmea_generate_pos
DESCRIPTION
Generate NMEA sentences generated based on position report
+ Currently below sentences are generated within this function:
+ - $GPGSA : GPS DOP and active SVs
+ - $GNGSA : GLONASS DOP and active SVs
+ - $GPVTG : Track made good and ground speed
+ - $GPRMC : Recommended minimum navigation information
+ - $GPGGA : Time, position and fix related data
DEPENDENCIES
NONE
@@ -136,6 +141,7 @@ void loc_eng_nmea_generate_pos(loc_eng_data_s_type *loc_eng_data_p,
int utcHours = pTm->tm_hour;
int utcMinutes = pTm->tm_min;
int utcSeconds = pTm->tm_sec;
+ int utcMSeconds = (location.gpsLocation.timestamp)%1000;
if (generate_nmea) {
// ------------------
@@ -144,7 +150,7 @@ void loc_eng_nmea_generate_pos(loc_eng_data_s_type *loc_eng_data_p,
uint32_t svUsedCount = 0;
uint32_t svUsedList[32] = {0};
- uint32_t mask = loc_eng_data_p->sv_used_mask;
+ uint32_t mask = loc_eng_data_p->gps_used_mask;
for (uint8_t i = 1; mask > 0 && svUsedCount < 32; i++)
{
if (mask & 1)
@@ -152,7 +158,7 @@ void loc_eng_nmea_generate_pos(loc_eng_data_s_type *loc_eng_data_p,
mask = mask >> 1;
}
// clear the cache so they can't be used again
- loc_eng_data_p->sv_used_mask = 0;
+ loc_eng_data_p->gps_used_mask = 0;
char fixType;
if (svUsedCount == 0)
@@ -211,6 +217,99 @@ void loc_eng_nmea_generate_pos(loc_eng_data_s_type *loc_eng_data_p,
loc_eng_nmea_send(sentence, length, loc_eng_data_p);
// ------------------
+ // ------$GNGSA------
+ // ------------------
+ uint32_t gloUsedCount = 0;
+ uint32_t gloUsedList[32] = {0};
+
+ // Reset locals for GNGSA sentence generation
+ pMarker = sentence;
+ lengthRemaining = sizeof(sentence);
+ mask = loc_eng_data_p->glo_used_mask;
+ fixType = '\0';
+
+ // Parse the glonass sv mask, and fetch glo sv ids
+ // Mask corresponds to the offset.
+ // GLONASS SV ids are from 65-96
+ const int GLONASS_SV_ID_OFFSET = 64;
+ for (uint8_t i = 1; mask > 0 && gloUsedCount < 32; i++)
+ {
+ if (mask & 1)
+ gloUsedList[gloUsedCount++] = i + GLONASS_SV_ID_OFFSET;
+ mask = mask >> 1;
+ }
+ // clear the cache so they can't be used again
+ loc_eng_data_p->glo_used_mask = 0;
+
+ if (gloUsedCount == 0)
+ fixType = '1'; // no fix
+ else if (gloUsedCount <= 3)
+ fixType = '2'; // 2D fix
+ else
+ fixType = '3'; // 3D fix
+
+ // Start printing the sentence
+ // Format: $--GSA,a,x,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,xx,p.p,h.h,v.v*cc
+ // GNGSA : for glonass SVs
+ // a : Mode : A : Automatic, allowed to automatically switch 2D/3D
+ // x : Fixtype : 1 (no fix), 2 (2D fix), 3 (3D fix)
+ // xx : 12 SV ID
+ // p.p : Position DOP (Dilution of Precision)
+ // h.h : Horizontal DOP
+ // v.v : Vertical DOP
+ // cc : Checksum value
+ length = snprintf(pMarker, lengthRemaining, "$GNGSA,A,%c,", fixType);
+
+ if (length < 0 || length >= lengthRemaining)
+ {
+ LOC_LOGE("NMEA Error in string formatting");
+ return;
+ }
+ pMarker += length;
+ lengthRemaining -= length;
+
+ // Add first 12 GLONASS satellite IDs
+ for (uint8_t i = 0; i < 12; i++)
+ {
+ if (i < gloUsedCount)
+ length = snprintf(pMarker, lengthRemaining, "%02d,", gloUsedList[i]);
+ else
+ length = snprintf(pMarker, lengthRemaining, ",");
+
+ if (length < 0 || length >= lengthRemaining)
+ {
+ LOC_LOGE("NMEA Error in string formatting");
+ return;
+ }
+ pMarker += length;
+ lengthRemaining -= length;
+ }
+
+ // Add the position/horizontal/vertical DOP values
+ if (locationExtended.flags & GPS_LOCATION_EXTENDED_HAS_DOP)
+ { // dop is in locationExtended, (QMI)
+ length = snprintf(pMarker, lengthRemaining, "%.1f,%.1f,%.1f",
+ locationExtended.pdop,
+ locationExtended.hdop,
+ locationExtended.vdop);
+ }
+ else if (loc_eng_data_p->pdop > 0 && loc_eng_data_p->hdop > 0 && loc_eng_data_p->vdop > 0)
+ { // dop was cached from sv report (RPC)
+ length = snprintf(pMarker, lengthRemaining, "%.1f,%.1f,%.1f",
+ loc_eng_data_p->pdop,
+ loc_eng_data_p->hdop,
+ loc_eng_data_p->vdop);
+ }
+ else
+ { // no dop
+ length = snprintf(pMarker, lengthRemaining, ",,");
+ }
+
+ /* Sentence is ready, add checksum and broadcast */
+ length = loc_eng_nmea_put_checksum(sentence, sizeof(sentence));
+ loc_eng_nmea_send(sentence, length, loc_eng_data_p);
+
+ // ------------------
// ------$GPVTG------
// ------------------
@@ -281,8 +380,8 @@ void loc_eng_nmea_generate_pos(loc_eng_data_s_type *loc_eng_data_p,
pMarker = sentence;
lengthRemaining = sizeof(sentence);
- length = snprintf(pMarker, lengthRemaining, "$GPRMC,%02d%02d%02d,A," ,
- utcHours, utcMinutes, utcSeconds);
+ length = snprintf(pMarker, lengthRemaining, "$GPRMC,%02d%02d%02d.%02d,A," ,
+ utcHours, utcMinutes, utcSeconds,utcMSeconds/10);
if (length < 0 || length >= lengthRemaining)
{
@@ -434,8 +533,8 @@ void loc_eng_nmea_generate_pos(loc_eng_data_s_type *loc_eng_data_p,
pMarker = sentence;
lengthRemaining = sizeof(sentence);
- length = snprintf(pMarker, lengthRemaining, "$GPGGA,%02d%02d%02d," ,
- utcHours, utcMinutes, utcSeconds);
+ length = snprintf(pMarker, lengthRemaining, "$GPGGA,%02d%02d%02d.%02d," ,
+ utcHours, utcMinutes, utcSeconds, utcMSeconds/10);
if (length < 0 || length >= lengthRemaining)
{
@@ -565,6 +664,10 @@ void loc_eng_nmea_generate_pos(loc_eng_data_s_type *loc_eng_data_p,
length = loc_eng_nmea_put_checksum(sentence, sizeof(sentence));
loc_eng_nmea_send(sentence, length, loc_eng_data_p);
+ strlcpy(sentence, "$GNGSA,A,1,,,,,,,,,,,,,,,", sizeof(sentence));
+ length = loc_eng_nmea_put_checksum(sentence, sizeof(sentence));
+ loc_eng_nmea_send(sentence, length, loc_eng_data_p);
+
strlcpy(sentence, "$GPVTG,,T,,M,,N,,K,N", sizeof(sentence));
length = loc_eng_nmea_put_checksum(sentence, sizeof(sentence));
loc_eng_nmea_send(sentence, length, loc_eng_data_p);
@@ -621,15 +724,27 @@ void loc_eng_nmea_generate_sv(loc_eng_data_s_type *loc_eng_data_p,
//Count GPS SVs for saparating GPS from GLONASS and throw others
+ loc_eng_data_p->gps_used_mask = 0;
+ loc_eng_data_p->glo_used_mask = 0;
for(svNumber=1; svNumber <= svCount; svNumber++) {
- if( (svStatus.sv_list[svNumber-1].prn >= GPS_PRN_START)&&
- (svStatus.sv_list[svNumber-1].prn <= GPS_PRN_END) )
+ if (GNSS_CONSTELLATION_GPS == svStatus.gnss_sv_list[svNumber - 1].constellation)
{
+ // cache the used in fix mask, as it will be needed to send $GPGSA
+ // during the position report
+ if (GNSS_SV_FLAGS_USED_IN_FIX == (svStatus.gnss_sv_list[svNumber - 1].flags & GNSS_SV_FLAGS_USED_IN_FIX))
+ {
+ loc_eng_data_p->gps_used_mask |= (1 << (svStatus.gnss_sv_list[svNumber - 1].svid - 1));
+ }
gpsCount++;
}
- else if( (svStatus.sv_list[svNumber-1].prn >= GLONASS_PRN_START) &&
- (svStatus.sv_list[svNumber-1].prn <= GLONASS_PRN_END) )
+ else if (GNSS_CONSTELLATION_GLONASS == svStatus.gnss_sv_list[svNumber - 1].constellation)
{
+ // cache the used in fix mask, as it will be needed to send $GNGSA
+ // during the position report
+ if (GNSS_SV_FLAGS_USED_IN_FIX == (svStatus.gnss_sv_list[svNumber - 1].flags & GNSS_SV_FLAGS_USED_IN_FIX))
+ {
+ loc_eng_data_p->glo_used_mask |= (1 << (svStatus.gnss_sv_list[svNumber - 1].svid - 1));
+ }
glnCount++;
}
}
@@ -669,13 +784,12 @@ void loc_eng_nmea_generate_sv(loc_eng_data_s_type *loc_eng_data_p,
for (int i=0; (svNumber <= svCount) && (i < 4); svNumber++)
{
- if( (svStatus.sv_list[svNumber-1].prn >= GPS_PRN_START) &&
- (svStatus.sv_list[svNumber-1].prn <= GPS_PRN_END) )
+ if (GNSS_CONSTELLATION_GPS == svStatus.gnss_sv_list[svNumber - 1].constellation)
{
length = snprintf(pMarker, lengthRemaining,",%02d,%02d,%03d,",
- svStatus.sv_list[svNumber-1].prn,
- (int)(0.5 + svStatus.sv_list[svNumber-1].elevation), //float to int
- (int)(0.5 + svStatus.sv_list[svNumber-1].azimuth)); //float to int
+ svStatus.gnss_sv_list[svNumber-1].svid,
+ (int)(0.5 + svStatus.gnss_sv_list[svNumber-1].elevation), //float to int
+ (int)(0.5 + svStatus.gnss_sv_list[svNumber-1].azimuth)); //float to int
if (length < 0 || length >= lengthRemaining)
{
@@ -685,10 +799,10 @@ void loc_eng_nmea_generate_sv(loc_eng_data_s_type *loc_eng_data_p,
pMarker += length;
lengthRemaining -= length;
- if (svStatus.sv_list[svNumber-1].snr > 0)
+ if (svStatus.gnss_sv_list[svNumber-1].c_n0_dbhz > 0)
{
length = snprintf(pMarker, lengthRemaining,"%02d",
- (int)(0.5 + svStatus.sv_list[svNumber-1].snr)); //float to int
+ (int)(0.5 + svStatus.gnss_sv_list[svNumber-1].c_n0_dbhz)); //float to int
if (length < 0 || length >= lengthRemaining)
{
@@ -747,13 +861,13 @@ void loc_eng_nmea_generate_sv(loc_eng_data_s_type *loc_eng_data_p,
for (int i=0; (svNumber <= svCount) && (i < 4); svNumber++)
{
- if( (svStatus.sv_list[svNumber-1].prn >= GLONASS_PRN_START) &&
- (svStatus.sv_list[svNumber-1].prn <= GLONASS_PRN_END) ) {
+ if (GNSS_CONSTELLATION_GLONASS == svStatus.gnss_sv_list[svNumber - 1].constellation)
+ {
length = snprintf(pMarker, lengthRemaining,",%02d,%02d,%03d,",
- svStatus.sv_list[svNumber-1].prn,
- (int)(0.5 + svStatus.sv_list[svNumber-1].elevation), //float to int
- (int)(0.5 + svStatus.sv_list[svNumber-1].azimuth)); //float to int
+ svStatus.gnss_sv_list[svNumber - 1].svid,
+ (int)(0.5 + svStatus.gnss_sv_list[svNumber - 1].elevation), //float to int
+ (int)(0.5 + svStatus.gnss_sv_list[svNumber - 1].azimuth)); //float to int
if (length < 0 || length >= lengthRemaining)
{
@@ -763,10 +877,10 @@ void loc_eng_nmea_generate_sv(loc_eng_data_s_type *loc_eng_data_p,
pMarker += length;
lengthRemaining -= length;
- if (svStatus.sv_list[svNumber-1].snr > 0)
+ if (svStatus.gnss_sv_list[svNumber - 1].c_n0_dbhz > 0)
{
length = snprintf(pMarker, lengthRemaining,"%02d",
- (int)(0.5 + svStatus.sv_list[svNumber-1].snr)); //float to int
+ (int)(0.5 + svStatus.gnss_sv_list[svNumber - 1].c_n0_dbhz)); //float to int
if (length < 0 || length >= lengthRemaining)
{
@@ -790,10 +904,6 @@ void loc_eng_nmea_generate_sv(loc_eng_data_s_type *loc_eng_data_p,
}//if
- // cache the used in fix mask, as it will be needed to send $GPGSA
- // during the position report
- loc_eng_data_p->sv_used_mask = svStatus.gps_used_in_fix_mask;
-
// For RPC, the DOP are sent during sv report, so cache them
// now to be sent during position report.
// For QMI, the DOP will be in position report.
diff --git a/gps/loc_api/libloc_api_50001/loc_eng_xtra.cpp b/gps/loc_api/libloc_api_50001/loc_eng_xtra.cpp
index 7bb8083..b5bf4e7 100644
--- a/gps/loc_api/libloc_api_50001/loc_eng_xtra.cpp
+++ b/gps/loc_api/libloc_api_50001/loc_eng_xtra.cpp
@@ -1,4 +1,4 @@
-/* Copyright (c) 2009-2013, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2009-2014, The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -32,8 +32,7 @@
#include <loc_eng.h>
#include <MsgTask.h>
-#include "log_util.h"
-#include "platform_lib_includes.h"
+#include <platform_lib_includes.h>
using namespace loc_core;
@@ -124,6 +123,13 @@ int loc_eng_xtra_init (loc_eng_data_s_type &loc_eng_data,
loc_eng_xtra_data_s_type *xtra_module_data_ptr;
ENTRY_LOG();
+ if(!loc_eng_data.adapter->mSupportsTimeInjection
+ || loc_eng_data.adapter->hasNativeXtraClient()) {
+ LOC_LOGD("XTRA is already supported. disable it here.\n");
+ EXIT_LOG(%d, 1); // return 1 denote failure
+ return 1;
+ }
+
if(callbacks == NULL) {
LOC_LOGE("loc_eng_xtra_init: failed, cb is NULL");
} else {