aboutsummaryrefslogtreecommitdiff
path: root/gps/core
diff options
context:
space:
mode:
authorDavide Garberi <dade.garberi@gmail.com>2018-10-10 16:48:02 +0200
committerDavide Garberi <dade.garberi@gmail.com>2018-10-19 15:23:07 +0200
commit7656285551870fc982e17ee300e3ba57b7cafe8d (patch)
treef0ed877339b660a2356c478e98affce85fe9a007 /gps/core
parent8000c99271d145d4cb7eeff58ae2afe9b03c8970 (diff)
msm8996-common: gps: Update from LA.UM.7.2.r1-04000-sdm660.0
* The vendor blobs from LA.UM.7.2.r1-04000-sdm660.0 - B2N_sprout:9/PPR1.180610.011/00WW_3_22C * Update gnsspps from CAF's location repo Change-Id: I6afc29a05459bf6d1951cb36b746d8cc781bc48f Signed-off-by: Davide Garberi <dade.garberi@gmail.com>
Diffstat (limited to 'gps/core')
-rw-r--r--gps/core/Android.mk8
-rw-r--r--gps/core/ContextBase.cpp6
-rw-r--r--gps/core/ContextBase.h5
-rw-r--r--gps/core/LocAdapterBase.cpp6
-rw-r--r--gps/core/LocAdapterBase.h1
-rw-r--r--gps/core/LocApiBase.cpp30
-rw-r--r--gps/core/LocApiBase.h5
-rw-r--r--gps/core/LocDualContext.cpp2
-rw-r--r--gps/core/Makefile.am18
-rw-r--r--gps/core/SystemStatus.cpp219
-rw-r--r--gps/core/SystemStatus.h91
-rw-r--r--gps/core/SystemStatusOsObserver.cpp687
-rw-r--r--gps/core/SystemStatusOsObserver.h109
-rw-r--r--gps/core/configure.ac82
-rw-r--r--gps/core/data-items/DataItemConcreteTypesBase.h83
-rw-r--r--gps/core/data-items/DataItemId.h8
-rw-r--r--gps/core/data-items/DataItemsFactoryProxy.cpp5
-rw-r--r--gps/core/data-items/common/ClientIndex.cpp171
-rw-r--r--gps/core/data-items/common/ClientIndex.h70
-rw-r--r--gps/core/data-items/common/DataItemIndex.cpp202
-rw-r--r--gps/core/data-items/common/DataItemIndex.h70
-rw-r--r--gps/core/data-items/common/IClientIndex.h83
-rw-r--r--gps/core/data-items/common/IDataItemIndex.h94
-rw-r--r--gps/core/data-items/common/IndexFactory.cpp64
-rw-r--r--gps/core/data-items/common/IndexFactory.h48
-rw-r--r--gps/core/loc-core.pc.in10
-rw-r--r--gps/core/loc_core_log.cpp23
-rw-r--r--gps/core/observer/IFrameworkActionReq.h18
-rw-r--r--gps/core/observer/IOsObserver.h4
29 files changed, 809 insertions, 1413 deletions
diff --git a/gps/core/Android.mk b/gps/core/Android.mk
index 6e58dc9..1a4f51a 100644
--- a/gps/core/Android.mk
+++ b/gps/core/Android.mk
@@ -7,7 +7,6 @@ include $(CLEAR_VARS)
LOCAL_MODULE := libloc_core
LOCAL_VENDOR_MODULE := true
-LOCAL_MODULE_OWNER := qti
LOCAL_MODULE_TAGS := optional
ifeq ($(TARGET_DEVICE),apq8026_lw)
@@ -22,8 +21,7 @@ LOCAL_SHARED_LIBRARIES := \
libcutils \
libgps.utils \
libdl \
- liblog \
- libloc_pla
+ liblog
LOCAL_SRC_FILES += \
LocApiBase.cpp \
@@ -32,9 +30,6 @@ LOCAL_SRC_FILES += \
LocDualContext.cpp \
loc_core_log.cpp \
data-items/DataItemsFactoryProxy.cpp \
- data-items/common/ClientIndex.cpp \
- data-items/common/DataItemIndex.cpp \
- data-items/common/IndexFactory.cpp \
SystemStatusOsObserver.cpp \
SystemStatus.cpp
@@ -48,6 +43,7 @@ LOCAL_C_INCLUDES:= \
$(LOCAL_PATH)/observer \
LOCAL_HEADER_LIBRARIES := \
+ libutils_headers \
libgps.utils_headers \
libloc_pla_headers \
liblocation_api_headers
diff --git a/gps/core/ContextBase.cpp b/gps/core/ContextBase.cpp
index 8af48fc..35e6585 100644
--- a/gps/core/ContextBase.cpp
+++ b/gps/core/ContextBase.cpp
@@ -35,7 +35,7 @@
#include <ContextBase.h>
#include <msg_q.h>
#include <loc_target.h>
-#include <platform_lib_includes.h>
+#include <loc_pla.h>
#include <loc_log.h>
namespace loc_core {
@@ -65,6 +65,8 @@ const loc_param_s_type ContextBase::mGps_conf_table[] =
{"USE_EMERGENCY_PDN_FOR_EMERGENCY_SUPL", &mGps_conf.USE_EMERGENCY_PDN_FOR_EMERGENCY_SUPL, NULL, 'n'},
{"AGPS_CONFIG_INJECT", &mGps_conf.AGPS_CONFIG_INJECT, NULL, 'n'},
{"EXTERNAL_DR_ENABLED", &mGps_conf.EXTERNAL_DR_ENABLED, NULL, 'n'},
+ {"SUPL_HOST", &mGps_conf.SUPL_HOST, NULL, 's'},
+ {"SUPL_PORT", &mGps_conf.SUPL_PORT, NULL, 'n'},
};
const loc_param_s_type ContextBase::mSap_conf_table[] =
@@ -98,6 +100,8 @@ void ContextBase::readConfig()
mGps_conf.SUPL_VER = 0x10000;
mGps_conf.SUPL_MODE = 0x1;
mGps_conf.SUPL_ES = 0;
+ mGps_conf.SUPL_HOST[0] = 0;
+ mGps_conf.SUPL_PORT = 0;
mGps_conf.CAPABILITIES = 0x7;
/* LTE Positioning Profile configuration is disable by default*/
mGps_conf.LPP_PROFILE = 0;
diff --git a/gps/core/ContextBase.h b/gps/core/ContextBase.h
index 83de999..dc64b6a 100644
--- a/gps/core/ContextBase.h
+++ b/gps/core/ContextBase.h
@@ -36,7 +36,8 @@
#include <LBSProxyBase.h>
#include <loc_cfg.h>
-#define MAX_XTRA_SERVER_URL_LENGTH 256
+#define MAX_XTRA_SERVER_URL_LENGTH (256)
+#define MAX_SUPL_SERVER_URL_LENGTH (256)
/* GPS.conf support */
/* NOTE: the implementaiton of the parser casts number
@@ -64,6 +65,8 @@ typedef struct loc_gps_cfg_s
uint32_t LPPE_CP_TECHNOLOGY;
uint32_t LPPE_UP_TECHNOLOGY;
uint32_t EXTERNAL_DR_ENABLED;
+ char SUPL_HOST[MAX_SUPL_SERVER_URL_LENGTH];
+ uint32_t SUPL_PORT;
} loc_gps_cfg_s_type;
/* NOTE: the implementaiton of the parser casts number
diff --git a/gps/core/LocAdapterBase.cpp b/gps/core/LocAdapterBase.cpp
index 3943819..d0da3da 100644
--- a/gps/core/LocAdapterBase.cpp
+++ b/gps/core/LocAdapterBase.cpp
@@ -32,7 +32,7 @@
#include <dlfcn.h>
#include <LocAdapterBase.h>
#include <loc_target.h>
-#include <platform_lib_log_util.h>
+#include <log_util.h>
#include <LocAdapterProxyBase.h>
namespace loc_core {
@@ -161,4 +161,8 @@ bool LocAdapterBase::
reportWwanZppFix(LocGpsLocation &/*zppLoc*/)
DEFAULT_IMPL(false)
+bool LocAdapterBase::
+ reportOdcpiRequestEvent(OdcpiRequestInfo& /*request*/)
+DEFAULT_IMPL(false)
+
} // namespace loc_core
diff --git a/gps/core/LocAdapterBase.h b/gps/core/LocAdapterBase.h
index e7beca8..35fc48e 100644
--- a/gps/core/LocAdapterBase.h
+++ b/gps/core/LocAdapterBase.h
@@ -153,6 +153,7 @@ public:
virtual void reportGnssMeasurementDataEvent(const GnssMeasurementsNotification& measurements,
int msInWeek);
virtual bool reportWwanZppFix(LocGpsLocation &zppLoc);
+ virtual bool reportOdcpiRequestEvent(OdcpiRequestInfo& request);
};
} // namespace loc_core
diff --git a/gps/core/LocApiBase.cpp b/gps/core/LocApiBase.cpp
index e0845de..426335d 100644
--- a/gps/core/LocApiBase.cpp
+++ b/gps/core/LocApiBase.cpp
@@ -33,7 +33,7 @@
#include <inttypes.h>
#include <LocApiBase.h>
#include <LocAdapterBase.h>
-#include <platform_lib_log_util.h>
+#include <log_util.h>
#include <LocDualContext.h>
namespace loc_core {
@@ -107,19 +107,16 @@ struct LocSsrMsg : public LocMsg {
struct LocOpenMsg : public LocMsg {
LocApiBase* mLocApi;
- LOC_API_ADAPTER_EVENT_MASK_T mMask;
- inline LocOpenMsg(LocApiBase* locApi,
- LOC_API_ADAPTER_EVENT_MASK_T mask) :
- LocMsg(), mLocApi(locApi), mMask(mask)
+ inline LocOpenMsg(LocApiBase* locApi) :
+ LocMsg(), mLocApi(locApi)
{
locallog();
}
inline virtual void proc() const {
- mLocApi->open(mMask);
+ mLocApi->open(mLocApi->getEvtMask());
}
inline void locallog() const {
- LOC_LOGV("%s:%d]: LocOpen Mask: %x\n",
- __func__, __LINE__, mMask);
+ LOC_LOGv("LocOpen Mask: %" PRIx64 "\n", mLocApi->getEvtMask());
}
inline virtual void log() const {
locallog();
@@ -163,8 +160,7 @@ void LocApiBase::addAdapter(LocAdapterBase* adapter)
for (int i = 0; i < MAX_ADAPTERS && mLocAdapters[i] != adapter; i++) {
if (mLocAdapters[i] == NULL) {
mLocAdapters[i] = adapter;
- mMsgTask->sendMsg(new LocOpenMsg(this,
- (adapter->getEvtMask())));
+ mMsgTask->sendMsg(new LocOpenMsg(this));
break;
}
}
@@ -200,7 +196,7 @@ void LocApiBase::removeAdapter(LocAdapterBase* adapter)
close();
} else {
// else we need to remove the bit
- mMsgTask->sendMsg(new LocOpenMsg(this, getEvtMask()));
+ mMsgTask->sendMsg(new LocOpenMsg(this));
}
}
}
@@ -208,7 +204,7 @@ void LocApiBase::removeAdapter(LocAdapterBase* adapter)
void LocApiBase::updateEvtMask()
{
- mMsgTask->sendMsg(new LocOpenMsg(this, getEvtMask()));
+ open(getEvtMask());
}
void LocApiBase::handleEngineUpEvent()
@@ -264,6 +260,12 @@ void LocApiBase::reportWwanZppFix(LocGpsLocation &zppLoc)
TO_1ST_HANDLING_LOCADAPTERS(mLocAdapters[i]->reportWwanZppFix(zppLoc));
}
+void LocApiBase::reportOdcpiRequest(OdcpiRequestInfo& request)
+{
+ // loop through adapters, and deliver to the first handling adapter.
+ TO_1ST_HANDLING_LOCADAPTERS(mLocAdapters[i]->reportOdcpiRequestEvent(request));
+}
+
void LocApiBase::reportSv(GnssSvNotification& svNotify)
{
const char* constellationString[] = { "Unknown", "GPS", "SBAS", "GLONASS",
@@ -441,6 +443,10 @@ enum loc_api_adapter_err LocApiBase::
DEFAULT_IMPL(LOC_API_ADAPTER_ERR_SUCCESS)
enum loc_api_adapter_err LocApiBase::
+ injectPosition(const Location& /*location*/)
+DEFAULT_IMPL(LOC_API_ADAPTER_ERR_SUCCESS)
+
+enum loc_api_adapter_err LocApiBase::
setTime(LocGpsUtcTime /*time*/, int64_t /*timeReference*/, int /*uncertainty*/)
DEFAULT_IMPL(LOC_API_ADAPTER_ERR_SUCCESS)
diff --git a/gps/core/LocApiBase.h b/gps/core/LocApiBase.h
index f66bfe1..6563dea 100644
--- a/gps/core/LocApiBase.h
+++ b/gps/core/LocApiBase.h
@@ -34,7 +34,7 @@
#include <gps_extended.h>
#include <LocationAPI.h>
#include <MsgTask.h>
-#include <platform_lib_log_util.h>
+#include <log_util.h>
namespace loc_core {
class ContextBase;
@@ -134,6 +134,7 @@ public:
void reportGnssMeasurementData(GnssMeasurementsNotification& measurements, int msInWeek);
void saveSupportedFeatureList(uint8_t *featureList);
void reportWwanZppFix(LocGpsLocation &zppLoc);
+ void reportOdcpiRequest(OdcpiRequestInfo& request);
// downward calls
// All below functions are to be defined by adapter specific modules:
@@ -154,6 +155,8 @@ public:
virtual enum loc_api_adapter_err
injectPosition(double latitude, double longitude, float accuracy);
virtual enum loc_api_adapter_err
+ injectPosition(const Location& location);
+ virtual enum loc_api_adapter_err
setTime(LocGpsUtcTime time, int64_t timeReference, int uncertainty);
virtual enum loc_api_adapter_err
setXtraData(char* data, int length);
diff --git a/gps/core/LocDualContext.cpp b/gps/core/LocDualContext.cpp
index fd3450d..180d9dc 100644
--- a/gps/core/LocDualContext.cpp
+++ b/gps/core/LocDualContext.cpp
@@ -33,7 +33,7 @@
#include <unistd.h>
#include <LocDualContext.h>
#include <msg_q.h>
-#include <platform_lib_log_util.h>
+#include <log_util.h>
#include <loc_log.h>
namespace loc_core {
diff --git a/gps/core/Makefile.am b/gps/core/Makefile.am
index c83ccc3..77bc610 100644
--- a/gps/core/Makefile.am
+++ b/gps/core/Makefile.am
@@ -1,8 +1,11 @@
+ACLOCAL_AMFLAGS = -I m4
+
AM_CFLAGS = -I./ \
- -I../utils \
- -I../location \
$(LOCPLA_CFLAGS) \
$(GPSUTILS_CFLAGS) \
+ -I./data-items/ \
+ -I./data-items/common \
+ -I./observer \
-I$(WORKSPACE)/gps-noship/flp \
-D__func__=__PRETTY_FUNCTION__ \
-fno-short-enums \
@@ -34,13 +37,10 @@ libloc_core_la_c_sources = \
LocDualContext.cpp \
loc_core_log.cpp \
data-items/DataItemsFactoryProxy.cpp \
- data-items/common/ClientIndex.cpp \
- data-items/common/DataItemIndex.cpp \
- data-items/common/IndexFactory.cpp \
SystemStatusOsObserver.cpp \
SystemStatus.cpp
-library_includedir = $(pkgincludedir)/core
+library_includedir = $(pkgincludedir)
library_include_HEADERS = $(libloc_core_la_h_sources)
@@ -56,7 +56,11 @@ libloc_core_la_LDFLAGS = -Wl,-z,defs -lpthread -shared -version-info 1:0:0
libloc_core_la_CPPFLAGS = $(AM_CFLAGS) $(AM_CPPFLAGS)
endif
-libloc_core_la_LIBADD = -lstdc++ -ldl $(LOCPLA_LIBS) $(GPSUTILS_LIBS)
+libloc_core_la_LIBADD = -ldl $(GPSUTILS_LIBS)
#Create and Install libraries
lib_LTLIBRARIES = libloc_core.la
+
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = loc-core.pc
+EXTRA_DIST = $(pkgconfig_DATA)
diff --git a/gps/core/SystemStatus.cpp b/gps/core/SystemStatus.cpp
index 92ddeed..f4316ca 100644
--- a/gps/core/SystemStatus.cpp
+++ b/gps/core/SystemStatus.cpp
@@ -34,8 +34,8 @@
#include <string.h>
#include <sys/time.h>
#include <pthread.h>
-#include <platform_lib_log_util.h>
-#include <MsgTask.h>
+#include <loc_pla.h>
+#include <log_util.h>
#include <loc_nmea.h>
#include <DataItemsFactoryProxy.h>
#include <SystemStatus.h>
@@ -120,6 +120,12 @@ public:
double mAgcGal; // x16
int32_t mLeapSeconds;// x17
int32_t mLeapSecUnc; // x18
+ uint32_t mGloBpAmpI; // x19
+ uint32_t mGloBpAmpQ; // x1A
+ uint32_t mBdsBpAmpI; // x1B
+ uint32_t mBdsBpAmpQ; // x1C
+ uint32_t mGalBpAmpI; // x1D
+ uint32_t mGalBpAmpQ; // x1E
};
// parser
@@ -154,6 +160,12 @@ private:
eMax0 = eAgcGal,
eLeapSeconds = 23,
eLeapSecUnc = 24,
+ eGloBpAmpI = 25,
+ eGloBpAmpQ = 26,
+ eBdsBpAmpI = 27,
+ eBdsBpAmpQ = 28,
+ eGalBpAmpI = 29,
+ eGalBpAmpQ = 30,
eMax
};
SystemStatusPQWM1 mM1;
@@ -183,6 +195,12 @@ public:
inline uint32_t getRecErrorRecovery() { return mM1.mRecErrorRecovery; }
inline int32_t getLeapSeconds(){ return mM1.mLeapSeconds; }
inline int32_t getLeapSecUnc() { return mM1.mLeapSecUnc; }
+ inline uint32_t getGloBpAmpI() { return mM1.mGloBpAmpI; }
+ inline uint32_t getGloBpAmpQ() { return mM1.mGloBpAmpQ; }
+ inline uint32_t getBdsBpAmpI() { return mM1.mBdsBpAmpI; }
+ inline uint32_t getBdsBpAmpQ() { return mM1.mBdsBpAmpQ; }
+ inline uint32_t getGalBpAmpI() { return mM1.mGalBpAmpI; }
+ inline uint32_t getGalBpAmpQ() { return mM1.mGalBpAmpQ; }
SystemStatusPQWM1parser(const char *str_in, uint32_t len_in)
: SystemStatusNmeaBase(str_in, len_in)
@@ -219,6 +237,14 @@ public:
mM1.mLeapSeconds = atoi(mField[eLeapSeconds].c_str());
mM1.mLeapSecUnc = atoi(mField[eLeapSecUnc].c_str());
}
+ if (mField.size() > eGalBpAmpQ) {
+ mM1.mGloBpAmpI = atoi(mField[eGloBpAmpI].c_str());
+ mM1.mGloBpAmpQ = atoi(mField[eGloBpAmpQ].c_str());
+ mM1.mBdsBpAmpI = atoi(mField[eBdsBpAmpI].c_str());
+ mM1.mBdsBpAmpQ = atoi(mField[eBdsBpAmpQ].c_str());
+ mM1.mGalBpAmpI = atoi(mField[eGalBpAmpI].c_str());
+ mM1.mGalBpAmpQ = atoi(mField[eGalBpAmpQ].c_str());
+ }
}
inline SystemStatusPQWM1& get() { return mM1;} //getparser
@@ -765,7 +791,13 @@ SystemStatusRfAndParams::SystemStatusRfAndParams(const SystemStatusPQWM1& nmea)
mAgcGps(nmea.mAgcGps),
mAgcGlo(nmea.mAgcGlo),
mAgcBds(nmea.mAgcBds),
- mAgcGal(nmea.mAgcGal)
+ mAgcGal(nmea.mAgcGal),
+ mGloBpAmpI(nmea.mGloBpAmpI),
+ mGloBpAmpQ(nmea.mGloBpAmpQ),
+ mBdsBpAmpI(nmea.mBdsBpAmpI),
+ mBdsBpAmpQ(nmea.mBdsBpAmpQ),
+ mGalBpAmpI(nmea.mGalBpAmpI),
+ mGalBpAmpQ(nmea.mGalBpAmpQ)
{
}
@@ -783,7 +815,13 @@ bool SystemStatusRfAndParams::equals(const SystemStatusRfAndParams& peer)
(mAgcGps != peer.mAgcGps) ||
(mAgcGlo != peer.mAgcGlo) ||
(mAgcBds != peer.mAgcBds) ||
- (mAgcGal != peer.mAgcGal)) {
+ (mAgcGal != peer.mAgcGal) ||
+ (mGloBpAmpI != peer.mGloBpAmpI) ||
+ (mGloBpAmpQ != peer.mGloBpAmpQ) ||
+ (mBdsBpAmpI != peer.mBdsBpAmpI) ||
+ (mBdsBpAmpQ != peer.mBdsBpAmpQ) ||
+ (mGalBpAmpI != peer.mGalBpAmpI) ||
+ (mGalBpAmpQ != peer.mGalBpAmpQ)) {
return false;
}
return true;
@@ -1217,8 +1255,7 @@ IOsObserver* SystemStatus::getOsObserver()
}
SystemStatus::SystemStatus(const MsgTask* msgTask) :
- mSysStatusObsvr(this, msgTask),
- mConnected(false)
+ mSysStatusObsvr(this, msgTask)
{
int result = 0;
ENTRY_LOG ();
@@ -1268,17 +1305,10 @@ SystemStatus::SystemStatus(const MsgTask* msgTask) :
/******************************************************************************
SystemStatus - storing dataitems
******************************************************************************/
-template <typename TYPE_SYSTEMSTATUS_ITEM, typename TYPE_REPORT, typename TYPE_ITEMBASE>
-bool SystemStatus::setItemBaseinReport(TYPE_REPORT& report, const TYPE_ITEMBASE& s)
-{
- TYPE_SYSTEMSTATUS_ITEM sout(s);
- return setIteminReport(report, sout);
-}
-
template <typename TYPE_REPORT, typename TYPE_ITEM>
-bool SystemStatus::setIteminReport(TYPE_REPORT& report, const TYPE_ITEM& s)
+bool SystemStatus::setIteminReport(TYPE_REPORT& report, TYPE_ITEM&& s)
{
- if (!report.empty() && report.back().equals(s)) {
+ if (!report.empty() && report.back().equals(static_cast<TYPE_ITEM&>(s.collate(report.back())))) {
// there is no change - just update reported timestamp
report.back().mUtcReported = s.mUtcReported;
return false;
@@ -1317,11 +1347,10 @@ void SystemStatus::getIteminReport(TYPE_REPORT& reportout, const TYPE_ITEM& c) c
@param[In] data pointer to the NMEA string
@param[In] len length of the NMEA string
-@return true when successfully done
+@return true when the NMEA is consumed by the method.
******************************************************************************/
bool SystemStatus::setNmeaString(const char *data, uint32_t len)
{
- bool ret = false;
if (!loc_nmea_is_debug(data, len)) {
return false;
}
@@ -1332,43 +1361,43 @@ bool SystemStatus::setNmeaString(const char *data, uint32_t len)
pthread_mutex_lock(&mMutexSystemStatus);
// parse the received nmea strings here
- if (0 == strncmp(data, "$PQWM1", SystemStatusNmeaBase::NMEA_MINSIZE)) {
+ if (0 == strncmp(data, "$PQWM1", SystemStatusNmeaBase::NMEA_MINSIZE)) {
SystemStatusPQWM1 s = SystemStatusPQWM1parser(buf, len).get();
- ret |= setIteminReport(mCache.mTimeAndClock, SystemStatusTimeAndClock(s));
- ret |= setIteminReport(mCache.mXoState, SystemStatusXoState(s));
- ret |= setIteminReport(mCache.mRfAndParams, SystemStatusRfAndParams(s));
- ret |= setIteminReport(mCache.mErrRecovery, SystemStatusErrRecovery(s));
+ setIteminReport(mCache.mTimeAndClock, SystemStatusTimeAndClock(s));
+ setIteminReport(mCache.mXoState, SystemStatusXoState(s));
+ setIteminReport(mCache.mRfAndParams, SystemStatusRfAndParams(s));
+ setIteminReport(mCache.mErrRecovery, SystemStatusErrRecovery(s));
}
else if (0 == strncmp(data, "$PQWP1", SystemStatusNmeaBase::NMEA_MINSIZE)) {
- ret = setIteminReport(mCache.mInjectedPosition,
+ setIteminReport(mCache.mInjectedPosition,
SystemStatusInjectedPosition(SystemStatusPQWP1parser(buf, len).get()));
}
else if (0 == strncmp(data, "$PQWP2", SystemStatusNmeaBase::NMEA_MINSIZE)) {
- ret = setIteminReport(mCache.mBestPosition,
+ setIteminReport(mCache.mBestPosition,
SystemStatusBestPosition(SystemStatusPQWP2parser(buf, len).get()));
}
else if (0 == strncmp(data, "$PQWP3", SystemStatusNmeaBase::NMEA_MINSIZE)) {
- ret = setIteminReport(mCache.mXtra,
+ setIteminReport(mCache.mXtra,
SystemStatusXtra(SystemStatusPQWP3parser(buf, len).get()));
}
else if (0 == strncmp(data, "$PQWP4", SystemStatusNmeaBase::NMEA_MINSIZE)) {
- ret = setIteminReport(mCache.mEphemeris,
+ setIteminReport(mCache.mEphemeris,
SystemStatusEphemeris(SystemStatusPQWP4parser(buf, len).get()));
}
else if (0 == strncmp(data, "$PQWP5", SystemStatusNmeaBase::NMEA_MINSIZE)) {
- ret = setIteminReport(mCache.mSvHealth,
+ setIteminReport(mCache.mSvHealth,
SystemStatusSvHealth(SystemStatusPQWP5parser(buf, len).get()));
}
else if (0 == strncmp(data, "$PQWP6", SystemStatusNmeaBase::NMEA_MINSIZE)) {
- ret = setIteminReport(mCache.mPdr,
+ setIteminReport(mCache.mPdr,
SystemStatusPdr(SystemStatusPQWP6parser(buf, len).get()));
}
else if (0 == strncmp(data, "$PQWP7", SystemStatusNmeaBase::NMEA_MINSIZE)) {
- ret = setIteminReport(mCache.mNavData,
+ setIteminReport(mCache.mNavData,
SystemStatusNavData(SystemStatusPQWP7parser(buf, len).get()));
}
else if (0 == strncmp(data, "$PQWS1", SystemStatusNmeaBase::NMEA_MINSIZE)) {
- ret = setIteminReport(mCache.mPositionFailure,
+ setIteminReport(mCache.mPositionFailure,
SystemStatusPositionFailure(SystemStatusPQWS1parser(buf, len).get()));
}
else {
@@ -1376,7 +1405,7 @@ bool SystemStatus::setNmeaString(const char *data, uint32_t len)
}
pthread_mutex_unlock(&mMutexSystemStatus);
- return ret;
+ return true;
}
/******************************************************************************
@@ -1417,94 +1446,92 @@ bool SystemStatus::eventDataItemNotify(IDataItemCore* dataitem)
switch(dataitem->getId())
{
case AIRPLANEMODE_DATA_ITEM_ID:
- ret = setItemBaseinReport<SystemStatusAirplaneMode>(mCache.mAirplaneMode,
- *(static_cast<AirplaneModeDataItemBase*>(dataitem)));
+ ret = setIteminReport(mCache.mAirplaneMode,
+ SystemStatusAirplaneMode(*(static_cast<AirplaneModeDataItemBase*>(dataitem))));
break;
case ENH_DATA_ITEM_ID:
- ret = setItemBaseinReport<SystemStatusENH>(mCache.mENH,
- *(static_cast<ENHDataItemBase*>(dataitem)));
+ ret = setIteminReport(mCache.mENH,
+ SystemStatusENH(*(static_cast<ENHDataItemBase*>(dataitem))));
break;
case GPSSTATE_DATA_ITEM_ID:
- ret = setItemBaseinReport<SystemStatusGpsState>(mCache.mGPSState,
- *(static_cast<GPSStateDataItemBase*>(dataitem)));
+ ret = setIteminReport(mCache.mGPSState,
+ SystemStatusGpsState(*(static_cast<GPSStateDataItemBase*>(dataitem))));
break;
case NLPSTATUS_DATA_ITEM_ID:
- ret = setItemBaseinReport<SystemStatusNLPStatus>(mCache.mNLPStatus,
- *(static_cast<NLPStatusDataItemBase*>(dataitem)));
+ ret = setIteminReport(mCache.mNLPStatus,
+ SystemStatusNLPStatus(*(static_cast<NLPStatusDataItemBase*>(dataitem))));
break;
case WIFIHARDWARESTATE_DATA_ITEM_ID:
- ret = setItemBaseinReport<SystemStatusWifiHardwareState>(mCache.mWifiHardwareState,
- *(static_cast<WifiHardwareStateDataItemBase*>(dataitem)));
+ ret = setIteminReport(mCache.mWifiHardwareState,
+ SystemStatusWifiHardwareState(*(static_cast<WifiHardwareStateDataItemBase*>(dataitem))));
break;
case NETWORKINFO_DATA_ITEM_ID:
- ret = setItemBaseinReport<SystemStatusNetworkInfo>(mCache.mNetworkInfo,
- *(static_cast<NetworkInfoDataItemBase*>(dataitem)));
+ ret = setIteminReport(mCache.mNetworkInfo,
+ SystemStatusNetworkInfo(*(static_cast<NetworkInfoDataItemBase*>(dataitem))));
break;
case RILSERVICEINFO_DATA_ITEM_ID:
- ret = setItemBaseinReport<SystemStatusServiceInfo>(mCache.mRilServiceInfo,
- *(static_cast<RilServiceInfoDataItemBase*>(dataitem)));
+ ret = setIteminReport(mCache.mRilServiceInfo,
+ SystemStatusServiceInfo(*(static_cast<RilServiceInfoDataItemBase*>(dataitem))));
break;
case RILCELLINFO_DATA_ITEM_ID:
- ret = setItemBaseinReport<SystemStatusRilCellInfo>(mCache.mRilCellInfo,
- *(static_cast<RilCellInfoDataItemBase*>(dataitem)));
+ ret = setIteminReport(mCache.mRilCellInfo,
+ SystemStatusRilCellInfo(*(static_cast<RilCellInfoDataItemBase*>(dataitem))));
break;
case SERVICESTATUS_DATA_ITEM_ID:
- ret = setItemBaseinReport<SystemStatusServiceStatus>(mCache.mServiceStatus,
- *(static_cast<ServiceStatusDataItemBase*>(dataitem)));
+ ret = setIteminReport(mCache.mServiceStatus,
+ SystemStatusServiceStatus(*(static_cast<ServiceStatusDataItemBase*>(dataitem))));
break;
case MODEL_DATA_ITEM_ID:
- ret = setItemBaseinReport<SystemStatusModel>(mCache.mModel,
- *(static_cast<ModelDataItemBase*>(dataitem)));
+ ret = setIteminReport(mCache.mModel,
+ SystemStatusModel(*(static_cast<ModelDataItemBase*>(dataitem))));
break;
case MANUFACTURER_DATA_ITEM_ID:
- ret = setItemBaseinReport<SystemStatusManufacturer>(mCache.mManufacturer,
- *(static_cast<ManufacturerDataItemBase*>(dataitem)));
+ ret = setIteminReport(mCache.mManufacturer,
+ SystemStatusManufacturer(*(static_cast<ManufacturerDataItemBase*>(dataitem))));
break;
case ASSISTED_GPS_DATA_ITEM_ID:
- ret = setItemBaseinReport<SystemStatusAssistedGps>(mCache.mAssistedGps,
- *(static_cast<AssistedGpsDataItemBase*>(dataitem)));
+ ret = setIteminReport(mCache.mAssistedGps,
+ SystemStatusAssistedGps(*(static_cast<AssistedGpsDataItemBase*>(dataitem))));
break;
case SCREEN_STATE_DATA_ITEM_ID:
- ret = setItemBaseinReport<SystemStatusScreenState>(mCache.mScreenState,
- *(static_cast<ScreenStateDataItemBase*>(dataitem)));
+ ret = setIteminReport(mCache.mScreenState,
+ SystemStatusScreenState(*(static_cast<ScreenStateDataItemBase*>(dataitem))));
break;
case POWER_CONNECTED_STATE_DATA_ITEM_ID:
- ret = setItemBaseinReport<SystemStatusPowerConnectState>(mCache.mPowerConnectState,
- *(static_cast<PowerConnectStateDataItemBase*>(dataitem)));
+ ret = setIteminReport(mCache.mPowerConnectState,
+ SystemStatusPowerConnectState(*(static_cast<PowerConnectStateDataItemBase*>(dataitem))));
break;
case TIMEZONE_CHANGE_DATA_ITEM_ID:
- ret = setItemBaseinReport<SystemStatusTimeZoneChange>(mCache.mTimeZoneChange,
- *(static_cast<TimeZoneChangeDataItemBase*>(dataitem)));
+ ret = setIteminReport(mCache.mTimeZoneChange,
+ SystemStatusTimeZoneChange(*(static_cast<TimeZoneChangeDataItemBase*>(dataitem))));
break;
case TIME_CHANGE_DATA_ITEM_ID:
- ret = setItemBaseinReport<SystemStatusTimeChange>(mCache.mTimeChange,
- *(static_cast<TimeChangeDataItemBase*>(dataitem)));
+ ret = setIteminReport(mCache.mTimeChange,
+ SystemStatusTimeChange(*(static_cast<TimeChangeDataItemBase*>(dataitem))));
break;
case WIFI_SUPPLICANT_STATUS_DATA_ITEM_ID:
- ret = setItemBaseinReport<SystemStatusWifiSupplicantStatus>(
- mCache.mWifiSupplicantStatus,
- *(static_cast<WifiSupplicantStatusDataItemBase*>(dataitem)));
+ ret = setIteminReport(mCache.mWifiSupplicantStatus,
+ SystemStatusWifiSupplicantStatus(*(static_cast<WifiSupplicantStatusDataItemBase*>(dataitem))));
break;
case SHUTDOWN_STATE_DATA_ITEM_ID:
- ret = setItemBaseinReport<SystemStatusShutdownState>(mCache.mShutdownState,
- *(static_cast<ShutdownStateDataItemBase*>(dataitem)));
+ ret = setIteminReport(mCache.mShutdownState,
+ SystemStatusShutdownState(*(static_cast<ShutdownStateDataItemBase*>(dataitem))));
break;
case TAC_DATA_ITEM_ID:
- ret = setItemBaseinReport<SystemStatusTac>(mCache.mTac,
- *(static_cast<TacDataItemBase*>(dataitem)));
+ ret = setIteminReport(mCache.mTac,
+ SystemStatusTac(*(static_cast<TacDataItemBase*>(dataitem))));
break;
case MCCMNC_DATA_ITEM_ID:
- ret = setItemBaseinReport<SystemStatusMccMnc>(mCache.mMccMnc,
- *(static_cast<MccmncDataItemBase*>(dataitem)));
+ ret = setIteminReport(mCache.mMccMnc,
+ SystemStatusMccMnc(*(static_cast<MccmncDataItemBase*>(dataitem))));
break;
case BTLE_SCAN_DATA_ITEM_ID:
- ret = setItemBaseinReport<SystemStatusBtDeviceScanDetail>(mCache.mBtDeviceScanDetail,
- *(static_cast<BtDeviceScanDetailsDataItemBase*>(dataitem)));
+ ret = setIteminReport(mCache.mBtDeviceScanDetail,
+ SystemStatusBtDeviceScanDetail(*(static_cast<BtDeviceScanDetailsDataItemBase*>(dataitem))));
break;
case BT_SCAN_DATA_ITEM_ID:
- ret = setItemBaseinReport<SystemStatusBtleDeviceScanDetail>(
- mCache.mBtLeDeviceScanDetail,
- *(static_cast<BtLeDeviceScanDetailsDataItemBase*>(dataitem)));
+ ret = setIteminReport(mCache.mBtLeDeviceScanDetail,
+ SystemStatusBtleDeviceScanDetail(*(static_cast<BtLeDeviceScanDetailsDataItemBase*>(dataitem))));
break;
default:
break;
@@ -1623,7 +1650,7 @@ bool SystemStatus::getReport(SystemStatusReports& report, bool isLatestOnly) con
@return true when successfully done
******************************************************************************/
-bool SystemStatus::setDefaultReport(void)
+bool SystemStatus::setDefaultGnssEngineStates(void)
{
pthread_mutex_lock(&mMutexSystemStatus);
@@ -1644,29 +1671,6 @@ bool SystemStatus::setDefaultReport(void)
setDefaultIteminReport(mCache.mPositionFailure, SystemStatusPositionFailure());
- setDefaultIteminReport(mCache.mAirplaneMode, SystemStatusAirplaneMode());
- setDefaultIteminReport(mCache.mENH, SystemStatusENH());
- setDefaultIteminReport(mCache.mGPSState, SystemStatusGpsState());
- setDefaultIteminReport(mCache.mNLPStatus, SystemStatusNLPStatus());
- setDefaultIteminReport(mCache.mWifiHardwareState, SystemStatusWifiHardwareState());
- setDefaultIteminReport(mCache.mNetworkInfo, SystemStatusNetworkInfo());
- setDefaultIteminReport(mCache.mRilServiceInfo, SystemStatusServiceInfo());
- setDefaultIteminReport(mCache.mRilCellInfo, SystemStatusRilCellInfo());
- setDefaultIteminReport(mCache.mServiceStatus, SystemStatusServiceStatus());
- setDefaultIteminReport(mCache.mModel, SystemStatusModel());
- setDefaultIteminReport(mCache.mManufacturer, SystemStatusManufacturer());
- setDefaultIteminReport(mCache.mAssistedGps, SystemStatusAssistedGps());
- setDefaultIteminReport(mCache.mScreenState, SystemStatusScreenState());
- setDefaultIteminReport(mCache.mPowerConnectState, SystemStatusPowerConnectState());
- setDefaultIteminReport(mCache.mTimeZoneChange, SystemStatusTimeZoneChange());
- setDefaultIteminReport(mCache.mTimeChange, SystemStatusTimeChange());
- setDefaultIteminReport(mCache.mWifiSupplicantStatus, SystemStatusWifiSupplicantStatus());
- setDefaultIteminReport(mCache.mShutdownState, SystemStatusShutdownState());
- setDefaultIteminReport(mCache.mTac, SystemStatusTac());
- setDefaultIteminReport(mCache.mMccMnc, SystemStatusMccMnc());
- setDefaultIteminReport(mCache.mBtDeviceScanDetail, SystemStatusBtDeviceScanDetail());
- setDefaultIteminReport(mCache.mBtLeDeviceScanDetail, SystemStatusBtleDeviceScanDetail());
-
pthread_mutex_unlock(&mMutexSystemStatus);
return true;
}
@@ -1678,17 +1682,12 @@ bool SystemStatus::setDefaultReport(void)
@return true when successfully done
******************************************************************************/
-bool SystemStatus::eventConnectionStatus(bool connected, uint8_t type)
+bool SystemStatus::eventConnectionStatus(bool connected, int8_t type)
{
- if (connected != mConnected) {
- mConnected = connected;
+ // send networkinof dataitem to systemstatus observer clients
+ SystemStatusNetworkInfo s(type, "", "", connected);
+ mSysStatusObsvr.notify({&s});
- // send networkinof dataitem to systemstatus observer clients
- SystemStatusNetworkInfo s(type, "", "", false, connected, false);
- list<IDataItemCore*> dl(0);
- dl.push_back(&s);
- mSysStatusObsvr.notify(dl);
- }
return true;
}
diff --git a/gps/core/SystemStatus.h b/gps/core/SystemStatus.h
index 1bcef10..b2f4fb6 100644
--- a/gps/core/SystemStatus.h
+++ b/gps/core/SystemStatus.h
@@ -30,9 +30,10 @@
#define __SYSTEM_STATUS__
#include <stdint.h>
-#include <string>
+#include <sys/time.h>
#include <vector>
-#include <platform_lib_log_util.h>
+#include <loc_pla.h>
+#include <log_util.h>
#include <MsgTask.h>
#include <IDataItemCore.h>
#include <IOsObserver.h>
@@ -70,14 +71,17 @@ public:
static const uint32_t maxItem = 5;
SystemStatusItemBase() {
- timeval tv;
- gettimeofday(&tv, NULL);
+ struct timespec tv;
+ clock_gettime(CLOCK_MONOTONIC, &tv);
mUtcTime.tv_sec = tv.tv_sec;
- mUtcTime.tv_nsec = tv.tv_usec *1000ULL;
+ mUtcTime.tv_nsec = tv.tv_nsec;
mUtcReported = mUtcTime;
};
- virtual ~SystemStatusItemBase() { };
- virtual void dump(void) { };
+ virtual ~SystemStatusItemBase() {};
+ inline virtual SystemStatusItemBase& collate(SystemStatusItemBase&) {
+ return *this;
+ }
+ virtual void dump(void) {};
};
class SystemStatusLocation : public SystemStatusItemBase
@@ -92,7 +96,7 @@ public:
const GpsLocationExtended& locationEx) :
mValid(true),
mLocation(location),
- mLocationEx(locationEx) { }
+ mLocationEx(locationEx) {}
bool equals(const SystemStatusLocation& peer);
void dump(void);
};
@@ -152,6 +156,12 @@ public:
double mAgcGlo;
double mAgcBds;
double mAgcGal;
+ uint32_t mGloBpAmpI;
+ uint32_t mGloBpAmpQ;
+ uint32_t mBdsBpAmpI;
+ uint32_t mBdsBpAmpQ;
+ uint32_t mGalBpAmpI;
+ uint32_t mGalBpAmpQ;
inline SystemStatusRfAndParams() :
mPgaGain(0),
mGpsBpAmpI(0),
@@ -165,7 +175,13 @@ public:
mAgcGps(0),
mAgcGlo(0),
mAgcBds(0),
- mAgcGal(0) {}
+ mAgcGal(0),
+ mGloBpAmpI(0),
+ mGloBpAmpQ(0),
+ mBdsBpAmpI(0),
+ mBdsBpAmpQ(0),
+ mGalBpAmpI(0),
+ mGalBpAmpQ(0) {}
inline SystemStatusRfAndParams(const SystemStatusPQWM1& nmea);
bool equals(const SystemStatusRfAndParams& peer);
void dump(void);
@@ -444,38 +460,49 @@ public:
class SystemStatusNetworkInfo : public SystemStatusItemBase,
public NetworkInfoDataItemBase
{
+ NetworkInfoDataItemBase* mSrcObjPtr;
public:
inline SystemStatusNetworkInfo(
int32_t type=0,
std::string typeName="",
string subTypeName="",
- bool available=false,
bool connected=false,
bool roaming=false) :
NetworkInfoDataItemBase(
+ (NetworkType)type,
type,
typeName,
subTypeName,
- available,
+ connected && (!roaming),
connected,
- roaming) {}
+ roaming),
+ mSrcObjPtr(nullptr) {}
inline SystemStatusNetworkInfo(const NetworkInfoDataItemBase& itemBase) :
- NetworkInfoDataItemBase(itemBase) {
+ NetworkInfoDataItemBase(itemBase),
+ mSrcObjPtr((NetworkInfoDataItemBase*)&itemBase) {
mType = itemBase.getType();
}
inline bool equals(const SystemStatusNetworkInfo& peer) {
- if ((mType == peer.mType) &&
- (mTypeName == peer.mTypeName) &&
- (mSubTypeName == peer.mSubTypeName) &&
- (mAvailable == peer.mAvailable) &&
- (mConnected == peer.mConnected) &&
- (mRoaming == peer.mRoaming)) {
- return true;
+ return (mAllTypes == peer.mAllTypes);
+ }
+ inline virtual SystemStatusItemBase& collate(SystemStatusItemBase& curInfo) {
+ uint64_t allTypes = (static_cast<SystemStatusNetworkInfo&>(curInfo)).mAllTypes;
+ if (mConnected) {
+ mAllTypes |= allTypes;
+ } else if (0 != mAllTypes) {
+ mAllTypes = (allTypes & (~mAllTypes));
+ } // else (mConnected == false && mAllTypes == 0)
+ // we keep mAllTypes as 0, which means no more connections.
+
+ if (nullptr != mSrcObjPtr) {
+ // this is critical, changing mAllTypes of the original obj
+ mSrcObjPtr->mAllTypes = mAllTypes;
}
- return false;
+ return *this;
}
inline void dump(void) override {
- LOC_LOGD("NetworkInfo: type=%u connected=%u", mType, mConnected);
+ LOC_LOGD("NetworkInfo: mAllTypes=%" PRIx64 " connected=%u mType=%x",
+ mAllTypes, mConnected, mType);
}
};
@@ -487,8 +514,9 @@ public:
RilServiceInfoDataItemBase() {}
inline SystemStatusServiceInfo(const RilServiceInfoDataItemBase& itemBase) :
RilServiceInfoDataItemBase(itemBase) {}
- inline bool equals(const SystemStatusServiceInfo& /*peer*/) {
- return true;
+ inline bool equals(const SystemStatusServiceInfo& peer) {
+ return static_cast<const RilServiceInfoDataItemBase&>(peer) ==
+ static_cast<const RilServiceInfoDataItemBase&>(*this);
}
};
@@ -500,8 +528,9 @@ public:
RilCellInfoDataItemBase() {}
inline SystemStatusRilCellInfo(const RilCellInfoDataItemBase& itemBase) :
RilCellInfoDataItemBase(itemBase) {}
- inline bool equals(const SystemStatusRilCellInfo& /*peer*/) {
- return true;
+ inline bool equals(const SystemStatusRilCellInfo& peer) {
+ return static_cast<const RilCellInfoDataItemBase&>(peer) ==
+ static_cast<const RilCellInfoDataItemBase&>(*this);
}
};
@@ -770,13 +799,9 @@ private:
// Data members
static pthread_mutex_t mMutexSystemStatus;
SystemStatusReports mCache;
- bool mConnected;
-
- template <typename TYPE_SYSTEMSTATUS_ITEM, typename TYPE_REPORT, typename TYPE_ITEMBASE>
- bool setItemBaseinReport(TYPE_REPORT& report, const TYPE_ITEMBASE& s);
template <typename TYPE_REPORT, typename TYPE_ITEM>
- bool setIteminReport(TYPE_REPORT& report, const TYPE_ITEM& s);
+ bool setIteminReport(TYPE_REPORT& report, TYPE_ITEM&& s);
// set default dataitem derived item in report cache
template <typename TYPE_REPORT, typename TYPE_ITEM>
@@ -796,8 +821,8 @@ public:
bool eventDataItemNotify(IDataItemCore* dataitem);
bool setNmeaString(const char *data, uint32_t len);
bool getReport(SystemStatusReports& reports, bool isLatestonly = false) const;
- bool setDefaultReport(void);
- bool eventConnectionStatus(bool connected, uint8_t type);
+ bool setDefaultGnssEngineStates(void);
+ bool eventConnectionStatus(bool connected, int8_t type);
};
} // namespace loc_core
diff --git a/gps/core/SystemStatusOsObserver.cpp b/gps/core/SystemStatusOsObserver.cpp
index 541b5fd..0f6d228 100644
--- a/gps/core/SystemStatusOsObserver.cpp
+++ b/gps/core/SystemStatusOsObserver.cpp
@@ -32,25 +32,20 @@
#include <SystemStatus.h>
#include <SystemStatusOsObserver.h>
#include <IDataItemCore.h>
-#include <IClientIndex.h>
-#include <IDataItemIndex.h>
-#include <IndexFactory.h>
#include <DataItemsFactoryProxy.h>
namespace loc_core
{
-SystemStatusOsObserver::SystemStatusOsObserver(
- SystemStatus* systemstatus, const MsgTask* msgTask) :
- mSystemStatus(systemstatus),
- mAddress("SystemStatusOsObserver"),
- mClientIndex(IndexFactory<IDataItemObserver*, DataItemId> :: createClientIndex()),
- mDataItemIndex(IndexFactory<IDataItemObserver*, DataItemId> :: createDataItemIndex())
-{
- mContext.mMsgTask = msgTask;
+template <typename CINT, typename COUT>
+COUT SystemStatusOsObserver::containerTransfer(CINT& inContainer) {
+ COUT outContainer(0);
+ for (auto item : inContainer) {
+ outContainer.insert(outContainer.begin(), item);
+ }
+ return outContainer;
}
-SystemStatusOsObserver::~SystemStatusOsObserver()
-{
+SystemStatusOsObserver::~SystemStatusOsObserver() {
// Close data-item library handle
DataItemsFactoryProxy::closeDataItemLibraryHandle();
@@ -62,290 +57,238 @@ SystemStatusOsObserver::~SystemStatusOsObserver()
}
mDataItemCache.clear();
- delete mClientIndex;
- delete mDataItemIndex;
}
void SystemStatusOsObserver::setSubscriptionObj(IDataItemSubscription* subscriptionObj)
{
- mContext.mSubscriptionObj = subscriptionObj;
-
- LOC_LOGD("Request cache size - Subscribe:%zu RequestData:%zu",
- mSubscribeReqCache.size(), mReqDataCache.size());
-
- // we have received the subscription object. process cached requests
- // process - subscribe request cache
- for (auto each : mSubscribeReqCache) {
- subscribe(each.second, each.first);
- }
- // process - requestData request cache
- for (auto each : mReqDataCache) {
- requestData(each.second, each.first);
- }
-}
-
-// Helper to cache requests subscribe and requestData till subscription obj is obtained
-void SystemStatusOsObserver::cacheObserverRequest(ObserverReqCache& reqCache,
- const list<DataItemId>& l, IDataItemObserver* client)
-{
- ObserverReqCache::iterator dicIter = reqCache.find(client);
- if (dicIter != reqCache.end()) {
- // found
- list<DataItemId> difference(0);
- set_difference(l.begin(), l.end(),
- dicIter->second.begin(), dicIter->second.end(),
- inserter(difference, difference.begin()));
- if (!difference.empty()) {
- difference.sort();
- dicIter->second.merge(difference);
- dicIter->second.unique();
+ struct SetSubsObj : public LocMsg {
+ ObserverContext& mContext;
+ IDataItemSubscription* mSubsObj;
+ inline SetSubsObj(ObserverContext& context, IDataItemSubscription* subscriptionObj) :
+ mContext(context), mSubsObj(subscriptionObj) {}
+ void proc() const {
+ mContext.mSubscriptionObj = mSubsObj;
+
+ if (!mContext.mSSObserver->mDataItemToClients.empty()) {
+ list<DataItemId> dis(
+ containerTransfer<unordered_set<DataItemId>, list<DataItemId>>(
+ mContext.mSSObserver->mDataItemToClients.getKeys()));
+ mContext.mSubscriptionObj->subscribe(dis, mContext.mSSObserver);
+ mContext.mSubscriptionObj->requestData(dis, mContext.mSSObserver);
+ }
}
- }
- else {
- // not found
- reqCache[client] = l;
+ };
+
+ if (nullptr == subscriptionObj) {
+ LOC_LOGw("subscriptionObj is NULL");
+ } else {
+ mContext.mMsgTask->sendMsg(new SetSubsObj(mContext, subscriptionObj));
}
}
/******************************************************************************
IDataItemSubscription Overrides
******************************************************************************/
-void SystemStatusOsObserver::subscribe(
- const list<DataItemId>& l, IDataItemObserver* client)
+void SystemStatusOsObserver::subscribe(const list<DataItemId>& l, IDataItemObserver* client,
+ bool toRequestData)
{
- if (nullptr == mContext.mSubscriptionObj) {
- LOC_LOGD("%s]: Subscription object is NULL. Caching requests", __func__);
- cacheObserverRequest(mSubscribeReqCache, l, client);
- return;
- }
-
struct HandleSubscribeReq : public LocMsg {
- HandleSubscribeReq(SystemStatusOsObserver* parent,
- const list<DataItemId>& l, IDataItemObserver* client) :
- mParent(parent), mClient(client), mDataItemList(l) {}
- virtual ~HandleSubscribeReq() {}
- void proc() const {
+ inline HandleSubscribeReq(SystemStatusOsObserver* parent,
+ list<DataItemId>& l, IDataItemObserver* client, bool requestData) :
+ mParent(parent), mClient(client),
+ mDataItemSet(containerTransfer<list<DataItemId>, unordered_set<DataItemId>>(l)),
+ mToRequestData(requestData) {}
- if (mDataItemList.empty()) {
- LOC_LOGV("mDataItemList is empty. Nothing to do. Exiting");
- return;
- }
-
- // Handle First Response
- list<DataItemId> pendingFirstResponseList(0);
- mParent->mClientIndex->add(mClient, mDataItemList, pendingFirstResponseList);
-
- // Do not send first response for only pendingFirstResponseList,
- // instead send for all the data items (present in the cache) that
- // have been subscribed for each time.
- mParent->sendFirstResponse(mDataItemList, mClient);
+ void proc() const {
+ unordered_set<DataItemId> dataItemsToSubscribe(0);
+ mParent->mDataItemToClients.add(mDataItemSet, {mClient}, &dataItemsToSubscribe);
+ mParent->mClientToDataItems.add(mClient, mDataItemSet);
- list<DataItemId> yetToSubscribeDataItemsList(0);
- mParent->mDataItemIndex->add(mClient, mDataItemList, yetToSubscribeDataItemsList);
+ mParent->sendCachedDataItems(mDataItemSet, mClient);
- // Send subscription list to framework
- if (!yetToSubscribeDataItemsList.empty()) {
- mParent->mContext.mSubscriptionObj->subscribe(yetToSubscribeDataItemsList, mParent);
+ // Send subscription set to framework
+ if (nullptr != mParent->mContext.mSubscriptionObj && !dataItemsToSubscribe.empty()) {
LOC_LOGD("Subscribe Request sent to framework for the following");
- mParent->logMe(yetToSubscribeDataItemsList);
+ mParent->logMe(dataItemsToSubscribe);
+
+ if (mToRequestData) {
+ mParent->mContext.mSubscriptionObj->requestData(
+ containerTransfer<unordered_set<DataItemId>, list<DataItemId>>(
+ std::move(dataItemsToSubscribe)),
+ mParent);
+ } else {
+ mParent->mContext.mSubscriptionObj->subscribe(
+ containerTransfer<unordered_set<DataItemId>, list<DataItemId>>(
+ std::move(dataItemsToSubscribe)),
+ mParent);
+ }
}
}
- SystemStatusOsObserver* mParent;
+ mutable SystemStatusOsObserver* mParent;
IDataItemObserver* mClient;
- const list<DataItemId> mDataItemList;
+ const unordered_set<DataItemId> mDataItemSet;
+ bool mToRequestData;
};
- mContext.mMsgTask->sendMsg(new (nothrow) HandleSubscribeReq(this, l, client));
+
+ if (l.empty() || nullptr == client) {
+ LOC_LOGw("Data item set is empty or client is nullptr");
+ } else {
+ mContext.mMsgTask->sendMsg(
+ new HandleSubscribeReq(this, (list<DataItemId>&)l, client, toRequestData));
+ }
}
void SystemStatusOsObserver::updateSubscription(
const list<DataItemId>& l, IDataItemObserver* client)
{
- if (nullptr == mContext.mSubscriptionObj) {
- LOC_LOGE("%s:%d]: Subscription object is NULL", __func__, __LINE__);
- return;
- }
-
struct HandleUpdateSubscriptionReq : public LocMsg {
HandleUpdateSubscriptionReq(SystemStatusOsObserver* parent,
- const list<DataItemId>& l, IDataItemObserver* client) :
- mParent(parent), mClient(client), mDataItemList(l) {}
- virtual ~HandleUpdateSubscriptionReq() {}
- void proc() const {
- if (mDataItemList.empty()) {
- LOC_LOGV("mDataItemList is empty. Nothing to do. Exiting");
- return;
- }
-
- list<DataItemId> currentlySubscribedList(0);
- mParent->mClientIndex->getSubscribedList(mClient, currentlySubscribedList);
+ list<DataItemId>& l, IDataItemObserver* client) :
+ mParent(parent), mClient(client),
+ mDataItemSet(containerTransfer<list<DataItemId>, unordered_set<DataItemId>>(l)) {}
- list<DataItemId> removeDataItemList(0);
- set_difference(currentlySubscribedList.begin(), currentlySubscribedList.end(),
- mDataItemList.begin(), mDataItemList.end(),
- inserter(removeDataItemList,removeDataItemList.begin()));
-
- // Handle First Response
- list<DataItemId> pendingFirstResponseList(0);
- mParent->mClientIndex->add(mClient, mDataItemList, pendingFirstResponseList);
+ void proc() const {
+ unordered_set<DataItemId> dataItemsToSubscribe(0);
+ unordered_set<DataItemId> dataItemsToUnsubscribe(0);
+ unordered_set<IDataItemObserver*> clients({mClient});
+ // below removes clients from all entries keyed with the return of the
+ // mClientToDataItems.update() call. If leaving an empty set of clients as the
+ // result, the entire entry will be removed. dataItemsToUnsubscribe will be
+ // populated to keep the keys of the removed entries.
+ mParent->mDataItemToClients.trimOrRemove(
+ // this call updates <IDataItemObserver*, DataItemId> map; removes
+ // the DataItemId's that are not new to the clietn from mDataItemSet;
+ // and returns a set of mDataItemSet's that are no longer used by client.
+ // This unused set of mDataItemSet's is passed to trimOrRemove method of
+ // <DataItemId, IDataItemObserver*> map to remove the client from the
+ // corresponding entries, and gets a set of the entries that are
+ // removed from the <DataItemId, IDataItemObserver*> map as a result.
+ mParent->mClientToDataItems.update(mClient,
+ (unordered_set<DataItemId>&)mDataItemSet),
+ clients, &dataItemsToUnsubscribe, nullptr);
+ // below adds mClient to <DataItemId, IDataItemObserver*> map, and populates
+ // new keys added to that map, which are DataItemIds to be subscribed.
+ mParent->mDataItemToClients.add(mDataItemSet, clients, &dataItemsToSubscribe);
// Send First Response
- mParent->sendFirstResponse(pendingFirstResponseList, mClient);
-
- list<DataItemId> yetToSubscribeDataItemsList(0);
- mParent->mDataItemIndex->add(
- mClient, mDataItemList, yetToSubscribeDataItemsList);
-
- // Send subscription list to framework
- if (!yetToSubscribeDataItemsList.empty()) {
- mParent->mContext.mSubscriptionObj->subscribe(
- yetToSubscribeDataItemsList, mParent);
- LOC_LOGD("Subscribe Request sent to framework for the following");
- mParent->logMe(yetToSubscribeDataItemsList);
- }
-
- list<DataItemId> unsubscribeList(0);
- list<DataItemId> unused(0);
- mParent->mClientIndex->remove(mClient, removeDataItemList, unused);
+ mParent->sendCachedDataItems(mDataItemSet, mClient);
+
+ if (nullptr != mParent->mContext.mSubscriptionObj) {
+ // Send subscription set to framework
+ if (!dataItemsToSubscribe.empty()) {
+ LOC_LOGD("Subscribe Request sent to framework for the following");
+ mParent->logMe(dataItemsToSubscribe);
+
+ mParent->mContext.mSubscriptionObj->subscribe(
+ containerTransfer<unordered_set<DataItemId>, list<DataItemId>>(
+ std::move(dataItemsToSubscribe)),
+ mParent);
+ }
- if (!mParent->mClientIndex->isSubscribedClient(mClient)) {
- mParent->mDataItemIndex->remove(
- list<IDataItemObserver*> (1,mClient), unsubscribeList);
- }
- if (!unsubscribeList.empty()) {
// Send unsubscribe to framework
- mParent->mContext.mSubscriptionObj->unsubscribe(unsubscribeList, mParent);
- LOC_LOGD("Unsubscribe Request sent to framework for the following");
- mParent->logMe(unsubscribeList);
+ if (!dataItemsToUnsubscribe.empty()) {
+ LOC_LOGD("Unsubscribe Request sent to framework for the following");
+ mParent->logMe(dataItemsToUnsubscribe);
+
+ mParent->mContext.mSubscriptionObj->unsubscribe(
+ containerTransfer<unordered_set<DataItemId>, list<DataItemId>>(
+ std::move(dataItemsToUnsubscribe)),
+ mParent);
+ }
}
}
SystemStatusOsObserver* mParent;
IDataItemObserver* mClient;
- const list<DataItemId> mDataItemList;
+ unordered_set<DataItemId> mDataItemSet;
};
- mContext.mMsgTask->sendMsg(new (nothrow) HandleUpdateSubscriptionReq(this, l, client));
-}
-void SystemStatusOsObserver::requestData(
- const list<DataItemId>& l, IDataItemObserver* client)
-{
- if (nullptr == mContext.mSubscriptionObj) {
- LOC_LOGD("%s]: Subscription object is NULL. Caching requests", __func__);
- cacheObserverRequest(mReqDataCache, l, client);
- return;
+ if (l.empty() || nullptr == client) {
+ LOC_LOGw("Data item set is empty or client is nullptr");
+ } else {
+ mContext.mMsgTask->sendMsg(
+ new HandleUpdateSubscriptionReq(this, (list<DataItemId>&)l, client));
}
-
- struct HandleRequestData : public LocMsg {
- HandleRequestData(SystemStatusOsObserver* parent,
- const list<DataItemId>& l, IDataItemObserver* client) :
- mParent(parent), mClient(client), mDataItemList(l) {}
- virtual ~HandleRequestData() {}
- void proc() const {
- if (mDataItemList.empty()) {
- LOC_LOGV("mDataItemList is empty. Nothing to do. Exiting");
- return;
- }
-
- list<DataItemId> yetToSubscribeDataItemsList(0);
- mParent->mClientIndex->add(
- mClient, mDataItemList, yetToSubscribeDataItemsList);
- mParent->mDataItemIndex->add(
- mClient, mDataItemList, yetToSubscribeDataItemsList);
-
- // Send subscription list to framework
- if (!mDataItemList.empty()) {
- mParent->mContext.mSubscriptionObj->requestData(mDataItemList, mParent);
- LOC_LOGD("Subscribe Request sent to framework for the following");
- mParent->logMe(yetToSubscribeDataItemsList);
- }
- }
- SystemStatusOsObserver* mParent;
- IDataItemObserver* mClient;
- const list<DataItemId> mDataItemList;
- };
- mContext.mMsgTask->sendMsg(new (nothrow) HandleRequestData(this, l, client));
}
void SystemStatusOsObserver::unsubscribe(
const list<DataItemId>& l, IDataItemObserver* client)
{
- if (nullptr == mContext.mSubscriptionObj) {
- LOC_LOGE("%s:%d]: Subscription object is NULL", __func__, __LINE__);
- return;
- }
struct HandleUnsubscribeReq : public LocMsg {
HandleUnsubscribeReq(SystemStatusOsObserver* parent,
- const list<DataItemId>& l, IDataItemObserver* client) :
- mParent(parent), mClient(client), mDataItemList(l) {}
- virtual ~HandleUnsubscribeReq() {}
- void proc() const {
- if (mDataItemList.empty()) {
- LOC_LOGV("mDataItemList is empty. Nothing to do. Exiting");
- return;
- }
+ list<DataItemId>& l, IDataItemObserver* client) :
+ mParent(parent), mClient(client),
+ mDataItemSet(containerTransfer<list<DataItemId>, unordered_set<DataItemId>>(l)) {}
- list<DataItemId> unsubscribeList(0);
- list<DataItemId> unused(0);
- mParent->mClientIndex->remove(mClient, mDataItemList, unused);
-
- for (auto each : mDataItemList) {
- list<IDataItemObserver*> clientListSubs(0);
- list<IDataItemObserver*> clientListOut(0);
- mParent->mDataItemIndex->remove(
- each, list<IDataItemObserver*> (1,mClient), clientListOut);
- // check if there are any other subscribed client for this data item id
- mParent->mDataItemIndex->getListOfSubscribedClients(each, clientListSubs);
- if (clientListSubs.empty())
- {
- LOC_LOGD("Client list subscribed is empty for dataitem - %d", each);
- unsubscribeList.push_back(each);
- }
- }
+ void proc() const {
+ unordered_set<DataItemId> dataItemsUnusedByClient(0);
+ unordered_set<IDataItemObserver*> clientToRemove(0);
+ mParent->mClientToDataItems.trimOrRemove({mClient}, mDataItemSet, &clientToRemove,
+ &dataItemsUnusedByClient);
+ unordered_set<DataItemId> dataItemsToUnsubscribe(0);
+ mParent->mDataItemToClients.trimOrRemove(dataItemsUnusedByClient, {mClient},
+ &dataItemsToUnsubscribe, nullptr);
+
+ if (nullptr != mParent->mContext.mSubscriptionObj && !dataItemsToUnsubscribe.empty()) {
+ LOC_LOGD("Unsubscribe Request sent to framework for the following data items");
+ mParent->logMe(dataItemsToUnsubscribe);
- if (!unsubscribeList.empty()) {
// Send unsubscribe to framework
- mParent->mContext.mSubscriptionObj->unsubscribe(unsubscribeList, mParent);
- LOC_LOGD("Unsubscribe Request sent to framework for the following data items");
- mParent->logMe(unsubscribeList);
+ mParent->mContext.mSubscriptionObj->unsubscribe(
+ containerTransfer<unordered_set<DataItemId>, list<DataItemId>>(
+ std::move(dataItemsToUnsubscribe)),
+ mParent);
}
}
SystemStatusOsObserver* mParent;
IDataItemObserver* mClient;
- const list<DataItemId> mDataItemList;
+ unordered_set<DataItemId> mDataItemSet;
};
- mContext.mMsgTask->sendMsg(new (nothrow) HandleUnsubscribeReq(this, l, client));
+
+ if (l.empty() || nullptr == client) {
+ LOC_LOGw("Data item set is empty or client is nullptr");
+ } else {
+ mContext.mMsgTask->sendMsg(new HandleUnsubscribeReq(this, (list<DataItemId>&)l, client));
+ }
}
void SystemStatusOsObserver::unsubscribeAll(IDataItemObserver* client)
{
- if (nullptr == mContext.mSubscriptionObj) {
- LOC_LOGE("%s:%d]: Subscription object is NULL", __func__, __LINE__);
- return;
- }
-
struct HandleUnsubscribeAllReq : public LocMsg {
HandleUnsubscribeAllReq(SystemStatusOsObserver* parent,
IDataItemObserver* client) :
mParent(parent), mClient(client) {}
- virtual ~HandleUnsubscribeAllReq() {}
- void proc() const {
- list<IDataItemObserver*> clients(1, mClient);
- list<DataItemId> unsubscribeList(0);
- if(0 == mParent->mClientIndex->remove(mClient)) {
- return;
- }
- mParent->mDataItemIndex->remove(clients, unsubscribeList);
- if (!unsubscribeList.empty()) {
- // Send unsubscribe to framework
- mParent->mContext.mSubscriptionObj->unsubscribe(unsubscribeList, mParent);
- LOC_LOGD("Unsubscribe Request sent to framework for the following data items");
- mParent->logMe(unsubscribeList);
+ void proc() const {
+ unordered_set<DataItemId> diByClient = mParent->mClientToDataItems.getValSet(mClient);
+ if (!diByClient.empty()) {
+ unordered_set<DataItemId> dataItemsToUnsubscribe;
+ mParent->mClientToDataItems.remove(mClient);
+ mParent->mDataItemToClients.trimOrRemove(diByClient, {mClient},
+ &dataItemsToUnsubscribe, nullptr);
+
+ if (!dataItemsToUnsubscribe.empty() &&
+ nullptr != mParent->mContext.mSubscriptionObj) {
+
+ LOC_LOGD("Unsubscribe Request sent to framework for the following data items");
+ mParent->logMe(dataItemsToUnsubscribe);
+
+ // Send unsubscribe to framework
+ mParent->mContext.mSubscriptionObj->unsubscribe(
+ containerTransfer<unordered_set<DataItemId>, list<DataItemId>>(
+ std::move(dataItemsToUnsubscribe)),
+ mParent);
+ }
}
}
SystemStatusOsObserver* mParent;
IDataItemObserver* mClient;
};
- mContext.mMsgTask->sendMsg(new (nothrow) HandleUnsubscribeAllReq(this, client));
+
+ if (nullptr == client) {
+ LOC_LOGw("Data item set is empty or client is nullptr");
+ } else {
+ mContext.mMsgTask->sendMsg(new HandleUnsubscribeAllReq(this, client));
+ }
}
/******************************************************************************
@@ -353,84 +296,78 @@ void SystemStatusOsObserver::unsubscribeAll(IDataItemObserver* client)
******************************************************************************/
void SystemStatusOsObserver::notify(const list<IDataItemCore*>& dlist)
{
- list<IDataItemCore*> dataItemList(0);
-
- for (auto each : dlist) {
- string dv;
- each->stringify(dv);
- LOC_LOGD("notify: DataItem In Value:%s", dv.c_str());
-
- IDataItemCore* di = DataItemsFactoryProxy::createNewDataItem(each->getId());
- if (nullptr == di) {
- LOC_LOGE("Unable to create dataitem:%d", each->getId());
- return;
- }
-
- // Copy contents into the newly created data item
- di->copy(each);
-
- // Request systemstatus to record this dataitem in its cache
- if (mSystemStatus->eventDataItemNotify(di)) {
- // add this dataitem if updated from last one
- dataItemList.push_back(di);
- }
- }
-
struct HandleNotify : public LocMsg {
- HandleNotify(SystemStatusOsObserver* parent, const list<IDataItemCore*>& l) :
- mParent(parent), mDList(l) {}
- virtual ~HandleNotify() {
- for (auto each : mDList) {
- delete each;
+ HandleNotify(SystemStatusOsObserver* parent, vector<IDataItemCore*>& v) :
+ mParent(parent), mDiVec(std::move(v)) {}
+
+ inline virtual ~HandleNotify() {
+ for (auto item : mDiVec) {
+ delete item;
}
}
+
void proc() const {
// Update Cache with received data items and prepare
// list of data items to be sent.
- list<DataItemId> dataItemIdsToBeSent(0);
- for (auto item : mDList) {
- bool dataItemUpdated = false;
- mParent->updateCache(item, dataItemUpdated);
- if (dataItemUpdated) {
- dataItemIdsToBeSent.push_back(item->getId());
+ unordered_set<DataItemId> dataItemIdsToBeSent(0);
+ for (auto item : mDiVec) {
+ if (mParent->updateCache(item)) {
+ dataItemIdsToBeSent.insert(item->getId());
}
}
// Send data item to all subscribed clients
- list<IDataItemObserver*> clientList(0);
+ unordered_set<IDataItemObserver*> clientSet(0);
for (auto each : dataItemIdsToBeSent) {
- list<IDataItemObserver*> clients(0);
- mParent->mDataItemIndex->getListOfSubscribedClients(each, clients);
- for (auto each_cient: clients) {
- clientList.push_back(each_cient);
+ auto clients = mParent->mDataItemToClients.getValSetPtr(each);
+ if (nullptr != clients) {
+ clientSet.insert(clients->begin(), clients->end());
}
}
- clientList.unique();
-
- for (auto client : clientList) {
- list<DataItemId> dataItemIdsSubscribedByThisClient(0);
- list<DataItemId> dataItemIdsToBeSentForThisClient(0);
- mParent->mClientIndex->getSubscribedList(
- client, dataItemIdsSubscribedByThisClient);
- dataItemIdsSubscribedByThisClient.sort();
- dataItemIdsToBeSent.sort();
-
- set_intersection(dataItemIdsToBeSent.begin(),
- dataItemIdsToBeSent.end(),
- dataItemIdsSubscribedByThisClient.begin(),
- dataItemIdsSubscribedByThisClient.end(),
- inserter(dataItemIdsToBeSentForThisClient,
- dataItemIdsToBeSentForThisClient.begin()));
-
- mParent->sendCachedDataItems(dataItemIdsToBeSentForThisClient, client);
- dataItemIdsSubscribedByThisClient.clear();
- dataItemIdsToBeSentForThisClient.clear();
+
+ for (auto client : clientSet) {
+ unordered_set<DataItemId> dataItemIdsForThisClient(
+ mParent->mClientToDataItems.getValSet(client));
+ for (auto id : dataItemIdsForThisClient) {
+ if (dataItemIdsToBeSent.find(id) == dataItemIdsToBeSent.end()) {
+ dataItemIdsForThisClient.erase(id);
+ }
+ }
+
+ mParent->sendCachedDataItems(dataItemIdsForThisClient, client);
}
}
SystemStatusOsObserver* mParent;
- const list<IDataItemCore*> mDList;
+ const vector<IDataItemCore*> mDiVec;
};
- mContext.mMsgTask->sendMsg(new (nothrow) HandleNotify(this, dataItemList));
+
+ if (!dlist.empty()) {
+ vector<IDataItemCore*> dataItemVec(dlist.size());
+
+ for (auto each : dlist) {
+ IF_LOC_LOGD {
+ string dv;
+ each->stringify(dv);
+ LOC_LOGD("notify: DataItem In Value:%s", dv.c_str());
+ }
+
+ IDataItemCore* di = DataItemsFactoryProxy::createNewDataItem(each->getId());
+ if (nullptr == di) {
+ LOC_LOGw("Unable to create dataitem:%d", each->getId());
+ continue;
+ }
+
+ // Copy contents into the newly created data item
+ di->copy(each);
+
+ // add this dataitem if updated from last one
+ dataItemVec.push_back(di);
+ }
+
+ if (!dataItemVec.empty()) {
+ mContext.mMsgTask->sendMsg(new HandleNotify(this, dataItemVec));
+ }
+ }
}
/******************************************************************************
@@ -444,7 +381,7 @@ void SystemStatusOsObserver::turnOn(DataItemId dit, int timeOut)
}
// Check if data item exists in mActiveRequestCount
- map<DataItemId, int>::iterator citer = mActiveRequestCount.find(dit);
+ DataItemIdToInt::iterator citer = mActiveRequestCount.find(dit);
if (citer == mActiveRequestCount.end()) {
// Data item not found in map
// Add reference count as 1 and add dataitem to map
@@ -482,7 +419,7 @@ void SystemStatusOsObserver::turnOff(DataItemId dit)
}
// Check if data item exists in mActiveRequestCount
- map<DataItemId, int>::iterator citer = mActiveRequestCount.find(dit);
+ DataItemIdToInt::iterator citer = mActiveRequestCount.find(dit);
if (citer != mActiveRequestCount.end()) {
// found
citer->second--;
@@ -508,87 +445,127 @@ void SystemStatusOsObserver::turnOff(DataItemId dit)
}
}
-/******************************************************************************
- Helpers
-******************************************************************************/
-void SystemStatusOsObserver::sendFirstResponse(
- const list<DataItemId>& l, IDataItemObserver* to)
+#ifdef USE_GLIB
+bool SystemStatusOsObserver::connectBackhaul()
{
- if (l.empty()) {
- LOC_LOGV("list is empty. Nothing to do. Exiting");
- return;
- }
+ bool result = false;
- string clientName;
- to->getName(clientName);
- list<IDataItemCore*> dataItems(0);
-
- for (auto each : l) {
- map<DataItemId, IDataItemCore*>::const_iterator citer = mDataItemCache.find(each);
- if (citer != mDataItemCache.end()) {
- string dv;
- citer->second->stringify(dv);
- LOC_LOGI("DataItem: %s >> %s", dv.c_str(), clientName.c_str());
- dataItems.push_back(citer->second);
- }
+ if (mContext.mFrameworkActionReqObj != NULL) {
+ struct HandleConnectBackhaul : public LocMsg {
+ HandleConnectBackhaul(IFrameworkActionReq* fwkActReq) :
+ mFwkActionReqObj(fwkActReq) {}
+ virtual ~HandleConnectBackhaul() {}
+ void proc() const {
+ LOC_LOGD("HandleConnectBackhaul");
+ mFwkActionReqObj->connectBackhaul();
+ }
+ IFrameworkActionReq* mFwkActionReqObj;
+ };
+ mContext.mMsgTask->sendMsg(
+ new (nothrow) HandleConnectBackhaul(mContext.mFrameworkActionReqObj));
+ result = true;
}
- if (dataItems.empty()) {
- LOC_LOGV("No items to notify. Nothing to do. Exiting");
- return;
+ else {
+ ++mBackHaulConnectReqCount;
+ LOC_LOGE("Framework action request object is NULL.Caching connect request: %d",
+ mBackHaulConnectReqCount);
+ result = false;
}
- to->notify(dataItems);
+ return result;
+
}
-void SystemStatusOsObserver::sendCachedDataItems(
- const list<DataItemId>& l, IDataItemObserver* to)
+bool SystemStatusOsObserver::disconnectBackhaul()
{
- string clientName;
- to->getName(clientName);
- list<IDataItemCore*> dataItems(0);
-
- for (auto each : l) {
- string dv;
- IDataItemCore* di = mDataItemCache[each];
- di->stringify(dv);
- LOC_LOGI("DataItem: %s >> %s", dv.c_str(), clientName.c_str());
- dataItems.push_back(di);
+ bool result = false;
+
+ if (mContext.mFrameworkActionReqObj != NULL) {
+ struct HandleDisconnectBackhaul : public LocMsg {
+ HandleDisconnectBackhaul(IFrameworkActionReq* fwkActReq) :
+ mFwkActionReqObj(fwkActReq) {}
+ virtual ~HandleDisconnectBackhaul() {}
+ void proc() const {
+ LOC_LOGD("HandleDisconnectBackhaul");
+ mFwkActionReqObj->disconnectBackhaul();
+ }
+ IFrameworkActionReq* mFwkActionReqObj;
+ };
+ mContext.mMsgTask->sendMsg(
+ new (nothrow) HandleDisconnectBackhaul(mContext.mFrameworkActionReqObj));
+ }
+ else {
+ if (mBackHaulConnectReqCount > 0) {
+ --mBackHaulConnectReqCount;
+ }
+ LOC_LOGE("Framework action request object is NULL.Caching disconnect request: %d",
+ mBackHaulConnectReqCount);
+ result = false;
}
- to->notify(dataItems);
+ return result;
}
-
-void SystemStatusOsObserver::updateCache(IDataItemCore* d, bool& dataItemUpdated)
+#endif
+/******************************************************************************
+ Helpers
+******************************************************************************/
+void SystemStatusOsObserver::sendCachedDataItems(
+ const unordered_set<DataItemId>& s, IDataItemObserver* to)
{
- if (nullptr == d) {
- return;
+ if (nullptr == to) {
+ LOC_LOGv("client pointer is NULL.");
+ } else {
+ string clientName;
+ to->getName(clientName);
+ list<IDataItemCore*> dataItems(0);
+
+ for (auto each : s) {
+ auto citer = mDataItemCache.find(each);
+ if (citer != mDataItemCache.end()) {
+ string dv;
+ citer->second->stringify(dv);
+ LOC_LOGI("DataItem: %s >> %s", dv.c_str(), clientName.c_str());
+ dataItems.push_front(citer->second);
+ }
+ }
+
+ if (dataItems.empty()) {
+ LOC_LOGv("No items to notify.");
+ } else {
+ to->notify(dataItems);
+ }
}
+}
- // Check if data item exists in cache
- map<DataItemId, IDataItemCore*>::iterator citer =
- mDataItemCache.find(d->getId());
- if (citer == mDataItemCache.end()) {
- // New data item; not found in cache
- IDataItemCore* dataitem = DataItemsFactoryProxy::createNewDataItem(d->getId());
- if (nullptr == dataitem) {
- return;
+bool SystemStatusOsObserver::updateCache(IDataItemCore* d)
+{
+ bool dataItemUpdated = false;
+
+ // Request systemstatus to record this dataitem in its cache
+ // if the return is false, it means that SystemStatus is not
+ // handling it, so SystemStatusOsObserver also doesn't.
+ // So it has to be true to proceed.
+ if (nullptr != d && mSystemStatus->eventDataItemNotify(d)) {
+ auto citer = mDataItemCache.find(d->getId());
+ if (citer == mDataItemCache.end()) {
+ // New data item; not found in cache
+ IDataItemCore* dataitem = DataItemsFactoryProxy::createNewDataItem(d->getId());
+ if (nullptr != dataitem) {
+ // Copy the contents of the data item
+ dataitem->copy(d);
+ // Insert in mDataItemCache
+ mDataItemCache.insert(std::make_pair(d->getId(), dataitem));
+ dataItemUpdated = true;
+ }
+ } else {
+ // Found in cache; Update cache if necessary
+ citer->second->copy(d, &dataItemUpdated);
}
- // Copy the contents of the data item
- dataitem->copy(d);
- pair<DataItemId, IDataItemCore*> cpair(d->getId(), dataitem);
- // Insert in mDataItemCache
- mDataItemCache.insert(cpair);
- dataItemUpdated = true;
- }
- else {
- // Found in cache; Update cache if necessary
- if(0 == citer->second->copy(d, &dataItemUpdated)) {
- return;
+ if (dataItemUpdated) {
+ LOC_LOGV("DataItem:%d updated:%d", d->getId(), dataItemUpdated);
}
}
- if (dataItemUpdated) {
- LOC_LOGV("DataItem:%d updated:%d", d->getId(), dataItemUpdated);
- }
+ return dataItemUpdated;
}
} // namespace loc_core
diff --git a/gps/core/SystemStatusOsObserver.h b/gps/core/SystemStatusOsObserver.h
index fa114ee..fd60606 100644
--- a/gps/core/SystemStatusOsObserver.h
+++ b/gps/core/SystemStatusOsObserver.h
@@ -39,7 +39,9 @@
#include <MsgTask.h>
#include <DataItemId.h>
#include <IOsObserver.h>
-#include <platform_lib_log_util.h>
+#include <loc_pla.h>
+#include <log_util.h>
+#include <LocUnorderedSetMap.h>
namespace loc_core
{
@@ -47,86 +49,123 @@ namespace loc_core
SystemStatusOsObserver
******************************************************************************/
using namespace std;
+using namespace loc_util;
// Forward Declarations
class IDataItemCore;
-template<typename CT, typename DIT> class IClientIndex;
-template<typename CT, typename DIT> class IDataItemIndex;
+class SystemStatus;
+class SystemStatusOsObserver;
+typedef map<IDataItemObserver*, list<DataItemId>> ObserverReqCache;
+typedef LocUnorderedSetMap<IDataItemObserver*, DataItemId> ClientToDataItems;
+typedef LocUnorderedSetMap<DataItemId, IDataItemObserver*> DataItemToClients;
+typedef unordered_map<DataItemId, IDataItemCore*> DataItemIdToCore;
+typedef unordered_map<DataItemId, int> DataItemIdToInt;
-struct SystemContext {
+struct ObserverContext {
IDataItemSubscription* mSubscriptionObj;
IFrameworkActionReq* mFrameworkActionReqObj;
const MsgTask* mMsgTask;
+ SystemStatusOsObserver* mSSObserver;
- inline SystemContext() :
- mSubscriptionObj(NULL),
- mFrameworkActionReqObj(NULL),
- mMsgTask(NULL) {}
+ inline ObserverContext(const MsgTask* msgTask, SystemStatusOsObserver* observer) :
+ mSubscriptionObj(NULL), mFrameworkActionReqObj(NULL),
+ mMsgTask(msgTask), mSSObserver(observer) {}
};
-typedef map<IDataItemObserver*, list<DataItemId>> ObserverReqCache;
-
// Clients wanting to get data from OS/Framework would need to
// subscribe with OSObserver using IDataItemSubscription interface.
// Such clients would need to implement IDataItemObserver interface
// to receive data when it becomes available.
-class SystemStatus;
class SystemStatusOsObserver : public IOsObserver {
public:
// ctor
- SystemStatusOsObserver(
- SystemStatus* systemstatus, const MsgTask* msgTask);
+ inline SystemStatusOsObserver(SystemStatus* systemstatus, const MsgTask* msgTask) :
+ mSystemStatus(systemstatus), mContext(msgTask, this),
+ mAddress("SystemStatusOsObserver"),
+ mClientToDataItems(MAX_DATA_ITEM_ID), mDataItemToClients(MAX_DATA_ITEM_ID)
+#ifdef USE_GLIB
+ , mBackHaulConnectReqCount(0)
+#endif
+ {
+ }
+
// dtor
~SystemStatusOsObserver();
+ template <typename CINT, typename COUT>
+ static COUT containerTransfer(CINT& s);
+ template <typename CINT, typename COUT>
+ inline static COUT containerTransfer(CINT&& s) {
+ return containerTransfer<CINT, COUT>(s);
+ }
+
// To set the subscription object
virtual void setSubscriptionObj(IDataItemSubscription* subscriptionObj);
// To set the framework action request object
inline void setFrameworkActionReqObj(IFrameworkActionReq* frameworkActionReqObj) {
mContext.mFrameworkActionReqObj = frameworkActionReqObj;
+#ifdef USE_GLIB
+ if (mBackHaulConnectReqCount > 0) {
+ connectBackhaul();
+ mBackHaulConnectReqCount = 0;
+ }
+#endif
}
// IDataItemSubscription Overrides
- virtual void subscribe(const list<DataItemId>& l, IDataItemObserver* client);
- virtual void updateSubscription(const list<DataItemId>& l, IDataItemObserver* client);
- virtual void requestData(const list<DataItemId>& l, IDataItemObserver* client);
- virtual void unsubscribe(const list<DataItemId>& l, IDataItemObserver* client);
- virtual void unsubscribeAll(IDataItemObserver* client);
+ inline virtual void subscribe(const list<DataItemId>& l, IDataItemObserver* client) override {
+ subscribe(l, client, false);
+ }
+ virtual void updateSubscription(const list<DataItemId>& l, IDataItemObserver* client) override;
+ inline virtual void requestData(const list<DataItemId>& l, IDataItemObserver* client) override {
+ subscribe(l, client, true);
+ }
+ virtual void unsubscribe(const list<DataItemId>& l, IDataItemObserver* client) override;
+ virtual void unsubscribeAll(IDataItemObserver* client) override;
// IDataItemObserver Overrides
- virtual void notify(const list<IDataItemCore*>& dlist);
- inline virtual void getName(string& name) {
+ virtual void notify(const list<IDataItemCore*>& dlist) override;
+ inline virtual void getName(string& name) override {
name = mAddress;
}
// IFrameworkActionReq Overrides
- virtual void turnOn(DataItemId dit, int timeOut = 0);
- virtual void turnOff(DataItemId dit);
+ virtual void turnOn(DataItemId dit, int timeOut = 0) override;
+ virtual void turnOff(DataItemId dit) override;
+#ifdef USE_GLIB
+ virtual bool connectBackhaul() override;
+ virtual bool disconnectBackhaul();
+#endif
private:
SystemStatus* mSystemStatus;
- SystemContext mContext;
+ ObserverContext mContext;
const string mAddress;
- IClientIndex<IDataItemObserver*, DataItemId>* mClientIndex;
- IDataItemIndex<IDataItemObserver*, DataItemId>* mDataItemIndex;
- map<DataItemId, IDataItemCore*> mDataItemCache;
- map<DataItemId, int> mActiveRequestCount;
+ ClientToDataItems mClientToDataItems;
+ DataItemToClients mDataItemToClients;
+ DataItemIdToCore mDataItemCache;
+ DataItemIdToInt mActiveRequestCount;
// Cache the subscribe and requestData till subscription obj is obtained
- ObserverReqCache mSubscribeReqCache;
- ObserverReqCache mReqDataCache;
void cacheObserverRequest(ObserverReqCache& reqCache,
const list<DataItemId>& l, IDataItemObserver* client);
+#ifdef USE_GLIB
+ // Cache the framework action request for connect/disconnect
+ int mBackHaulConnectReqCount;
+#endif
+
+ void subscribe(const list<DataItemId>& l, IDataItemObserver* client, bool toRequestData);
// Helpers
- void sendFirstResponse(const list<DataItemId>& l, IDataItemObserver* to);
- void sendCachedDataItems(const list<DataItemId>& l, IDataItemObserver* to);
- void updateCache(IDataItemCore* d, bool& dataItemUpdated);
- inline void logMe(const list<DataItemId>& l) {
- for (auto id : l) {
- LOC_LOGD("DataItem %d", id);
+ void sendCachedDataItems(const unordered_set<DataItemId>& s, IDataItemObserver* to);
+ bool updateCache(IDataItemCore* d);
+ inline void logMe(const unordered_set<DataItemId>& l) {
+ IF_LOC_LOGD {
+ for (auto id : l) {
+ LOC_LOGD("DataItem %d", id);
+ }
}
}
};
diff --git a/gps/core/configure.ac b/gps/core/configure.ac
new file mode 100644
index 0000000..ea0a128
--- /dev/null
+++ b/gps/core/configure.ac
@@ -0,0 +1,82 @@
+# configure.ac -- Autoconf script for gps loc-core
+#
+# Process this file with autoconf to produce a configure script
+
+# Requires autoconf tool later than 2.61
+AC_PREREQ(2.61)
+# Initialize the gps loc-hal package version 1.0.0
+AC_INIT([loc-core],1.0.0)
+# Does not strictly follow GNU Coding standards
+AM_INIT_AUTOMAKE([foreign])
+# Disables auto rebuilding of configure, Makefile.ins
+AM_MAINTAINER_MODE
+# Verifies the --srcdir is correct by checking for the path
+AC_CONFIG_SRCDIR([loc-core.pc.in])
+# defines some macros variable to be included by source
+AC_CONFIG_HEADERS([config.h])
+AC_CONFIG_MACRO_DIR([m4])
+
+# Checks for programs.
+AC_PROG_LIBTOOL
+AC_PROG_CXX
+AC_PROG_CC
+AM_PROG_CC_C_O
+AC_PROG_AWK
+AC_PROG_CPP
+AC_PROG_INSTALL
+AC_PROG_LN_S
+AC_PROG_MAKE_SET
+PKG_PROG_PKG_CONFIG
+
+# Checks for libraries.
+PKG_CHECK_MODULES([GPSUTILS], [gps-utils])
+AC_SUBST([GPSUTILS_CFLAGS])
+AC_SUBST([GPSUTILS_LIBS])
+
+AC_ARG_WITH([core_includes],
+ AC_HELP_STRING([--with-core-includes=@<:@dir@:>@],
+ [Specify the location of the core headers]),
+ [core_incdir=$withval],
+ with_core_includes=no)
+
+if test "x$with_core_includes" != "xno"; then
+ CPPFLAGS="${CPPFLAGS} -I${core_incdir}"
+fi
+
+AC_ARG_WITH([locpla_includes],
+ AC_HELP_STRING([--with-locpla-includes=@<:@dir@:>@],
+ [specify the path to locpla-includes in loc-pla_git.bb]),
+ [locpla_incdir=$withval],
+ with_locpla_includes=no)
+
+if test "x$with_locpla_includes" != "xno"; then
+ AC_SUBST(LOCPLA_CFLAGS, "-I${locpla_incdir}")
+fi
+
+AC_SUBST([CPPFLAGS])
+
+AC_ARG_WITH([glib],
+ AC_HELP_STRING([--with-glib],
+ [enable glib, building HLOS systems which use glib]))
+
+if (test "x${with_glib}" = "xyes"); then
+ AC_DEFINE(ENABLE_USEGLIB, 1, [Define if HLOS systems uses glib])
+ PKG_CHECK_MODULES(GTHREAD, gthread-2.0 >= 2.16, dummy=yes,
+ AC_MSG_ERROR(GThread >= 2.16 is required))
+ PKG_CHECK_MODULES(GLIB, glib-2.0 >= 2.16, dummy=yes,
+ AC_MSG_ERROR(GLib >= 2.16 is required))
+ GLIB_CFLAGS="$GLIB_CFLAGS $GTHREAD_CFLAGS"
+ GLIB_LIBS="$GLIB_LIBS $GTHREAD_LIBS"
+
+ AC_SUBST(GLIB_CFLAGS)
+ AC_SUBST(GLIB_LIBS)
+fi
+
+AM_CONDITIONAL(USE_GLIB, test "x${with_glib}" = "xyes")
+
+AC_CONFIG_FILES([ \
+ Makefile \
+ loc-core.pc \
+ ])
+
+AC_OUTPUT
diff --git a/gps/core/data-items/DataItemConcreteTypesBase.h b/gps/core/data-items/DataItemConcreteTypesBase.h
index df3bf9a..bcb8d72 100644
--- a/gps/core/data-items/DataItemConcreteTypesBase.h
+++ b/gps/core/data-items/DataItemConcreteTypesBase.h
@@ -221,9 +221,22 @@ protected:
class NetworkInfoDataItemBase : public IDataItemCore {
public:
+ enum NetworkType {
+ TYPE_MOBILE,
+ TYPE_WIFI,
+ TYPE_ETHERNET,
+ TYPE_BLUETOOTH,
+ TYPE_MMS,
+ TYPE_SUPL,
+ TYPE_DUN,
+ TYPE_HIPRI,
+ TYPE_WIMAX,
+ TYPE_UNKNOWN,
+ };
NetworkInfoDataItemBase(
- int32_t type, string typeName, string subTypeName,
+ NetworkType initialType, int32_t type, string typeName, string subTypeName,
bool available, bool connected, bool roaming ):
+ mAllTypes(typeToAllTypes(initialType)),
mType(type),
mTypeName(typeName),
mSubTypeName(subTypeName),
@@ -235,22 +248,12 @@ public:
inline virtual DataItemId getId() { return mId; }
virtual void stringify(string& /*valueStr*/) {}
virtual int32_t copy(IDataItemCore* /*src*/, bool* /*dataItemCopied = NULL*/) {return 1;}
- enum NetworkType {
- TYPE_UNKNOWN,
- TYPE_MOBILE,
- TYPE_WIFI,
- TYPE_ETHERNET,
- TYPE_BLUETOOTH,
- TYPE_MMS,
- TYPE_SUPL,
- TYPE_DUN,
- TYPE_HIPRI,
- TYPE_WIMAX
- };
inline virtual NetworkType getType(void) const {
return (NetworkType)mType;
}
-// Data members
+ inline uint64_t getAllTypes() { return mAllTypes; }
+ // Data members
+ uint64_t mAllTypes;
int32_t mType;
string mTypeName;
string mSubTypeName;
@@ -259,7 +262,9 @@ public:
bool mRoaming;
protected:
DataItemId mId;
-
+ inline uint64_t typeToAllTypes(NetworkType type) {
+ return (type >= TYPE_UNKNOWN || type < TYPE_MOBILE) ? 0 : (1<<type);
+ }
};
class ServiceStatusDataItemBase : public IDataItemCore {
@@ -309,24 +314,42 @@ protected:
class RilServiceInfoDataItemBase : public IDataItemCore {
public:
- RilServiceInfoDataItemBase() :
- mId(RILSERVICEINFO_DATA_ITEM_ID) {}
- virtual ~RilServiceInfoDataItemBase() {}
+ inline RilServiceInfoDataItemBase() :
+ mData(nullptr), mId(RILSERVICEINFO_DATA_ITEM_ID) {}
+ inline virtual ~RilServiceInfoDataItemBase() { if (nullptr != mData) free(mData); }
inline virtual DataItemId getId() { return mId; }
virtual void stringify(string& /*valueStr*/) {}
virtual int32_t copy(IDataItemCore* /*src*/, bool* /*dataItemCopied = NULL*/) {return 1;}
+ inline RilServiceInfoDataItemBase(const RilServiceInfoDataItemBase& peer) :
+ RilServiceInfoDataItemBase() {
+ peer.setPeerData(*this);
+ }
+ inline virtual bool operator==(const RilServiceInfoDataItemBase& other) const {
+ return other.mData == mData;
+ }
+ inline virtual void setPeerData(RilServiceInfoDataItemBase& /*peer*/) const {}
+ void* mData;
protected:
DataItemId mId;
};
class RilCellInfoDataItemBase : public IDataItemCore {
public:
- RilCellInfoDataItemBase() :
- mId(RILCELLINFO_DATA_ITEM_ID) {}
- virtual ~RilCellInfoDataItemBase() {}
+ inline RilCellInfoDataItemBase() :
+ mData(nullptr), mId(RILCELLINFO_DATA_ITEM_ID) {}
+ inline virtual ~RilCellInfoDataItemBase() { if (nullptr != mData) free(mData); }
inline virtual DataItemId getId() { return mId; }
virtual void stringify(string& /*valueStr*/) {}
virtual int32_t copy(IDataItemCore* /*src*/, bool* /*dataItemCopied = NULL*/) {return 1;}
+ inline RilCellInfoDataItemBase(const RilCellInfoDataItemBase& peer) :
+ RilCellInfoDataItemBase() {
+ peer.setPeerData(*this);
+ }
+ inline virtual bool operator==(const RilCellInfoDataItemBase& other) const {
+ return other.mData == mData;
+ }
+ inline virtual void setPeerData(RilCellInfoDataItemBase& /*peer*/) const {}
+ void* mData;
protected:
DataItemId mId;
};
@@ -393,7 +416,7 @@ protected:
class MccmncDataItemBase : public IDataItemCore {
public:
MccmncDataItemBase(const string & name) :
- mValue (name),
+ mValue(name),
mId(MCCMNC_DATA_ITEM_ID) {}
virtual ~MccmncDataItemBase() {}
inline virtual DataItemId getId() { return mId; }
@@ -407,7 +430,7 @@ protected:
class SrnDeviceScanDetailsDataItemBase : public IDataItemCore {
public:
- SrnDeviceScanDetailsDataItemBase (DataItemId Id) :
+ SrnDeviceScanDetailsDataItemBase(DataItemId Id) :
mValidSrnData(false),
mApSrnRssi(-1),
mApSrnTimestamp(0),
@@ -415,7 +438,7 @@ public:
mReceiveTimestamp(0),
mErrorCause(-1),
mId(Id) {}
- virtual ~SrnDeviceScanDetailsDataItemBase () {}
+ virtual ~SrnDeviceScanDetailsDataItemBase() {}
inline virtual DataItemId getId() { return mId; }
// Data members common to all SRN tech types
/* Represents info on whether SRN data is valid (no error)*/
@@ -456,6 +479,18 @@ public:
virtual int32_t copy(IDataItemCore* /*src*/, bool* /*dataItemCopied = NULL*/) {return 1;}
};
+class BatteryLevelDataItemBase : public IDataItemCore {
+public:
+ inline BatteryLevelDataItemBase(uint8_t batteryPct) :
+ mBatteryPct(batteryPct), mId(BATTERY_LEVEL_DATA_ITEM_ID) {}
+ inline ~BatteryLevelDataItemBase() {}
+ inline virtual DataItemId getId() { return mId; }
+// Data members
+ uint8_t mBatteryPct;
+protected:
+ DataItemId mId;
+};
+
} // namespace loc_core
#endif //__DATAITEMCONCRETEBASETYPES__
diff --git a/gps/core/data-items/DataItemId.h b/gps/core/data-items/DataItemId.h
index 1bf132a..1661be6 100644
--- a/gps/core/data-items/DataItemId.h
+++ b/gps/core/data-items/DataItemId.h
@@ -67,7 +67,13 @@ typedef enum e_DataItemId {
BTLE_SCAN_DATA_ITEM_ID,
BT_SCAN_DATA_ITEM_ID,
OEM_GTP_UPLOAD_TRIGGER_READY_ITEM_ID,
- MAX_DATA_ITEM_ID
+
+ MAX_DATA_ITEM_ID,
+
+ // 26 -
+ BATTERY_LEVEL_DATA_ITEM_ID,
+
+ MAX_DATA_ITEM_ID_1_1,
} DataItemId;
#endif // #ifndef __DATAITEMID_H__
diff --git a/gps/core/data-items/DataItemsFactoryProxy.cpp b/gps/core/data-items/DataItemsFactoryProxy.cpp
index 130eecf..f8a5e03 100644
--- a/gps/core/data-items/DataItemsFactoryProxy.cpp
+++ b/gps/core/data-items/DataItemsFactoryProxy.cpp
@@ -32,7 +32,8 @@
#include <DataItemId.h>
#include <IDataItemCore.h>
#include <DataItemsFactoryProxy.h>
-#include <platform_lib_log_util.h>
+#include <loc_pla.h>
+#include <log_util.h>
namespace loc_core
{
@@ -68,7 +69,7 @@ IDataItemCore* DataItemsFactoryProxy::createNewDataItem(DataItemId id)
getConcreteDIFunc = (get_concrete_data_item_fn * )
dlsym(dataItemLibHandle, DATA_ITEMS_GET_CONCRETE_DI);
if (NULL != getConcreteDIFunc) {
- LOC_LOGD("Loaded function %s : %x",DATA_ITEMS_GET_CONCRETE_DI,getConcreteDIFunc);
+ LOC_LOGD("Loaded function %s : %p",DATA_ITEMS_GET_CONCRETE_DI,getConcreteDIFunc);
mydi = (*getConcreteDIFunc)(id);
}
else {
diff --git a/gps/core/data-items/common/ClientIndex.cpp b/gps/core/data-items/common/ClientIndex.cpp
deleted file mode 100644
index ffb5e1d..0000000
--- a/gps/core/data-items/common/ClientIndex.cpp
+++ /dev/null
@@ -1,171 +0,0 @@
-/* Copyright (c) 2015, 2017 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
- * met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following
- * disclaimer in the documentation and/or other materials provided
- * with the distribution.
- * * Neither the name of The Linux Foundation, nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
- * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
- * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-#include <algorithm>
-#include <iterator>
-#include <string>
-#include <platform_lib_log_util.h>
-#include <ClientIndex.h>
-#include <IDataItemObserver.h>
-#include <DataItemId.h>
-
-using namespace std;
-using namespace loc_core;
-
-template <typename CT, typename DIT>
-inline ClientIndex <CT,DIT> :: ClientIndex () {}
-
-template <typename CT, typename DIT>
-inline ClientIndex <CT,DIT> :: ~ClientIndex () {}
-
-template <typename CT, typename DIT>
-bool ClientIndex <CT,DIT> :: isSubscribedClient (CT client) {
- bool result = false;
- ENTRY_LOG ();
- typename map < CT, list <DIT> > :: iterator it =
- mDataItemsPerClientMap.find (client);
- if (it != mDataItemsPerClientMap.end ()) {
- result = true;
- }
- EXIT_LOG_WITH_ERROR ("%d",result);
- return result;
-}
-
-template <typename CT, typename DIT>
-void ClientIndex <CT,DIT> :: getSubscribedList (CT client, list <DIT> & out) {
- ENTRY_LOG ();
- typename map < CT, list <DIT> > :: iterator it =
- mDataItemsPerClientMap.find (client);
- if (it != mDataItemsPerClientMap.end ()) {
- out = it->second;
- }
- EXIT_LOG_WITH_ERROR ("%d",0);
-}
-
-template <typename CT, typename DIT>
-int ClientIndex <CT,DIT> :: remove (CT client) {
- int result = 0;
- ENTRY_LOG ();
- mDataItemsPerClientMap.erase (client);
- EXIT_LOG_WITH_ERROR ("%d",result);
- return result;
-}
-
-template <typename CT, typename DIT>
-void ClientIndex <CT,DIT> :: remove (const list <DIT> & r, list <CT> & out) {
- ENTRY_LOG ();
- typename map < CT, list <DIT> > :: iterator dicIter =
- mDataItemsPerClientMap.begin ();
- while (dicIter != mDataItemsPerClientMap.end()) {
- typename list <DIT> :: const_iterator it = r.begin ();
- for (; it != r.end (); ++it) {
- typename list <DIT> :: iterator iter =
- find (dicIter->second.begin (), dicIter->second.end (), *it);
- if (iter != dicIter->second.end ()) {
- dicIter->second.erase (iter);
- }
- }
- if (dicIter->second.empty ()) {
- out.push_back (dicIter->first);
- // Post-increment operator increases the iterator but returns the
- // prevous one that will be invalidated by erase()
- mDataItemsPerClientMap.erase (dicIter++);
- } else {
- ++dicIter;
- }
- }
- EXIT_LOG_WITH_ERROR ("%d",0);
-}
-
-template <typename CT, typename DIT>
-void ClientIndex <CT,DIT> :: remove
-(
- CT client,
- const list <DIT> & r,
- list <DIT> & out
-)
-{
- ENTRY_LOG ();
- typename map < CT, list <DIT> > :: iterator dicIter =
- mDataItemsPerClientMap.find (client);
- if (dicIter != mDataItemsPerClientMap.end ()) {
- set_intersection (dicIter->second.begin (), dicIter->second.end (),
- r.begin (), r.end (),
- inserter (out,out.begin ()));
- if (!out.empty ()) {
- typename list <DIT> :: iterator it = out.begin ();
- for (; it != out.end (); ++it) {
- dicIter->second.erase (find (dicIter->second.begin (),
- dicIter->second.end (),
- *it));
- }
- }
- if (dicIter->second.empty ()) {
- mDataItemsPerClientMap.erase (dicIter);
- EXIT_LOG_WITH_ERROR ("%d",0);
- }
- }
- EXIT_LOG_WITH_ERROR ("%d",0);
-}
-
-template <typename CT, typename DIT>
-void ClientIndex <CT,DIT> :: add
-(
- CT client,
- const list <DIT> & l,
- list <DIT> & out
-)
-{
- ENTRY_LOG ();
- list <DIT> difference;
- typename map < CT, list <DIT> > :: iterator dicIter =
- mDataItemsPerClientMap.find (client);
- if (dicIter != mDataItemsPerClientMap.end ()) {
- set_difference (l.begin (), l.end (),
- dicIter->second.begin (), dicIter->second.end (),
- inserter (difference,difference.begin ()));
- if (!difference.empty ()) {
- difference.sort ();
- out = difference;
- dicIter->second.merge (difference);
- dicIter->second.unique ();
- }
- } else {
- out = l;
- pair < CT, list <DIT> > dicnpair (client, out);
- mDataItemsPerClientMap.insert (dicnpair);
- }
- EXIT_LOG_WITH_ERROR ("%d",0);
-}
-
-// Explicit instantiation must occur in same namespace where class is defined
-namespace loc_core
-{
- template class ClientIndex <IDataItemObserver *, DataItemId>;
- template class ClientIndex <string, DataItemId>;
-}
diff --git a/gps/core/data-items/common/ClientIndex.h b/gps/core/data-items/common/ClientIndex.h
deleted file mode 100644
index feccb05..0000000
--- a/gps/core/data-items/common/ClientIndex.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/* Copyright (c) 2015, 2017 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
- * met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following
- * disclaimer in the documentation and/or other materials provided
- * with the distribution.
- * * Neither the name of The Linux Foundation, nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
- * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
- * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-#ifndef __CLIENTINDEX_H__
-#define __CLIENTINDEX_H__
-
-#include <list>
-#include <map>
-#include <IClientIndex.h>
-
-using loc_core::IClientIndex;
-
-namespace loc_core
-{
-
-template <typename CT, typename DIT>
-
-class ClientIndex : public IClientIndex <CT, DIT> {
-
-public:
-
- ClientIndex ();
-
- ~ClientIndex ();
-
- bool isSubscribedClient (CT client);
-
- void getSubscribedList (CT client, std :: list <DIT> & out);
-
- int remove (CT client);
-
- void remove (const std :: list <DIT> & r, std :: list <CT> & out);
-
- void remove (CT client, const std :: list <DIT> & r, std :: list <DIT> & out);
-
- void add (CT client, const std :: list <DIT> & l, std :: list <DIT> & out);
-
-private:
- //Data members
- std :: map < CT , std :: list <DIT> > mDataItemsPerClientMap;
-};
-
-} // namespace loc_core
-
-#endif // #ifndef __CLIENTINDEX_H__
diff --git a/gps/core/data-items/common/DataItemIndex.cpp b/gps/core/data-items/common/DataItemIndex.cpp
deleted file mode 100644
index 7869b43..0000000
--- a/gps/core/data-items/common/DataItemIndex.cpp
+++ /dev/null
@@ -1,202 +0,0 @@
-/* Copyright (c) 2015, 2017 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
- * met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following
- * disclaimer in the documentation and/or other materials provided
- * with the distribution.
- * * Neither the name of The Linux Foundation, nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
- * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
- * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-
-#include <string>
-#include <algorithm>
-#include <iterator>
-#include <DataItemIndex.h>
-#include <platform_lib_log_util.h>
-#include <IDataItemObserver.h>
-#include <DataItemId.h>
-
-using namespace std;
-using namespace loc_core;
-
-template <typename CT, typename DIT>
-inline DataItemIndex <CT,DIT> :: DataItemIndex () {}
-
-template <typename CT, typename DIT>
-inline DataItemIndex <CT,DIT> :: ~DataItemIndex () {}
-
-template <typename CT, typename DIT>
-void DataItemIndex <CT,DIT> :: getListOfSubscribedClients
- (
- DIT id,
- list <CT> & out
-)
-{
- typename map < DIT, list <CT> > :: iterator cdiIter =
- mClientsPerDataItemMap.find (id);
- if (cdiIter != mClientsPerDataItemMap.end ()) {
- out = cdiIter->second;
- }
-}
-
-
-template <typename CT, typename DIT>
-int DataItemIndex <CT,DIT> :: remove (DIT id) {
- int result = 0;
- ENTRY_LOG ();
- mClientsPerDataItemMap.erase (id);
- EXIT_LOG_WITH_ERROR ("%d",result);
- return result;
-}
-
-template <typename CT, typename DIT>
-void DataItemIndex <CT,DIT> :: remove (const list <CT> & r, list <DIT> & out) {
- ENTRY_LOG ();
- typename map < DIT, list <CT> > :: iterator cdiIter =
- mClientsPerDataItemMap.begin ();
- while (cdiIter != mClientsPerDataItemMap.end()) {
- typename list <CT> :: const_iterator it = r.begin ();
- for (; it != r.end (); ++it) {
- typename list <CT> :: iterator iter =
- find
- (
- cdiIter->second.begin (),
- cdiIter->second.end (),
- *it
- );
- if (iter != cdiIter->second.end ()) {
- cdiIter->second.erase (iter);
- }
- }
-
- if (cdiIter->second.empty ()) {
- out.push_back (cdiIter->first);
- // Post-increment operator increases the iterator but returns the
- // prevous one that will be invalidated by erase()
- mClientsPerDataItemMap.erase (cdiIter++);
- } else {
- ++cdiIter;
- }
- }
- EXIT_LOG_WITH_ERROR ("%d",0);
-}
-
-template <typename CT, typename DIT>
-void DataItemIndex <CT,DIT> :: remove
-(
- DIT id,
- const list <CT> & r,
- list <CT> & out
-)
-{
- ENTRY_LOG ();
-
- typename map < DIT, list <CT> > :: iterator cdiIter =
- mClientsPerDataItemMap.find (id);
- if (cdiIter != mClientsPerDataItemMap.end ()) {
- set_intersection (cdiIter->second.begin (), cdiIter->second.end (),
- r.begin (), r.end (),
- inserter (out, out.begin ()));
- if (!out.empty ()) {
- typename list <CT> :: iterator it = out.begin ();
- for (; it != out.end (); ++it) {
- cdiIter->second.erase (find (cdiIter->second.begin (),
- cdiIter->second.end (),
- *it));
- }
- }
- if (cdiIter->second.empty ()) {
- mClientsPerDataItemMap.erase (cdiIter);
- EXIT_LOG_WITH_ERROR ("%d",0);
- }
- }
- EXIT_LOG_WITH_ERROR ("%d",0);
-}
-
-template <typename CT, typename DIT>
-void DataItemIndex <CT,DIT> :: add
-(
- DIT id,
- const list <CT> & l,
- list <CT> & out
-)
-{
- ENTRY_LOG ();
- list <CT> difference;
- typename map < DIT, list <CT> > :: iterator cdiIter =
- mClientsPerDataItemMap.find (id);
- if (cdiIter != mClientsPerDataItemMap.end ()) {
- set_difference (l.begin (), l.end (),
- cdiIter->second.begin (), cdiIter->second.end (),
- inserter (difference, difference.begin ()));
- if (!difference.empty ()) {
- difference.sort ();
- out = difference;
- cdiIter->second.merge (difference);
- }
- } else {
- out = l;
- pair < DIT, list <CT> > cndipair (id, out);
- mClientsPerDataItemMap.insert (cndipair);
- }
- EXIT_LOG_WITH_ERROR ("%d",0);
-}
-
-template <typename CT, typename DIT>
-void DataItemIndex <CT,DIT> :: add
-(
- CT client,
- const list <DIT> & l,
- list <DIT> & out
-)
-{
- ENTRY_LOG ();
- typename map < DIT, list <CT> > :: iterator cdiIter;
- typename list <DIT> :: const_iterator it = l.begin ();
- for (; it != l.end (); ++it) {
- cdiIter = mClientsPerDataItemMap.find (*it);
- if (cdiIter == mClientsPerDataItemMap.end ()) {
- out.push_back (*it);
- pair < DIT, list <CT> > cndiPair (*it, list <CT> (1, client));
- mClientsPerDataItemMap.insert (cndiPair);
- } else {
- typename list<CT> :: iterator clientIter =
- find
- (
- cdiIter->second.begin (),
- cdiIter->second.end (),
- client
- );
- if (clientIter == cdiIter->second.end()) {
- cdiIter->second.push_back (client);
- }
- }
- }
- EXIT_LOG_WITH_ERROR ("%d",0);
-}
-
-// Explicit instantiation must occur in same namespace where class is defined
-namespace loc_core
-{
- template class DataItemIndex <IDataItemObserver *, DataItemId>;
- template class DataItemIndex <string, DataItemId>;
-}
diff --git a/gps/core/data-items/common/DataItemIndex.h b/gps/core/data-items/common/DataItemIndex.h
deleted file mode 100644
index d72e89e..0000000
--- a/gps/core/data-items/common/DataItemIndex.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/* Copyright (c) 2015, 2017 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
- * met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following
- * disclaimer in the documentation and/or other materials provided
- * with the distribution.
- * * Neither the name of The Linux Foundation, nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
- * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
- * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-
-#ifndef __DATAITEMINDEX_H__
-#define __DATAITEMINDEX_H__
-
-#include <list>
-#include <map>
-#include <IDataItemIndex.h>
-
-using loc_core::IDataItemIndex;
-
-namespace loc_core
-{
-
-template <typename CT, typename DIT>
-
-class DataItemIndex : public IDataItemIndex <CT, DIT> {
-
-public:
-
- DataItemIndex ();
-
- ~DataItemIndex ();
-
- void getListOfSubscribedClients (DIT id, std :: list <CT> & out);
-
- int remove (DIT id);
-
- void remove (const std :: list <CT> & r, std :: list <DIT> & out);
-
- void remove (DIT id, const std :: list <CT> & r, std :: list <CT> & out);
-
- void add (DIT id, const std :: list <CT> & l, std :: list <CT> & out);
-
- void add (CT client, const std :: list <DIT> & l, std :: list <DIT> & out);
-
-private:
- std :: map < DIT, std :: list <CT> > mClientsPerDataItemMap;
-};
-
-} // namespace loc_core
-
-#endif // #ifndef __DATAITEMINDEX_H__
diff --git a/gps/core/data-items/common/IClientIndex.h b/gps/core/data-items/common/IClientIndex.h
deleted file mode 100644
index 0272e7b..0000000
--- a/gps/core/data-items/common/IClientIndex.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/* Copyright (c) 2015, 2017 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
- * met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following
- * disclaimer in the documentation and/or other materials provided
- * with the distribution.
- * * Neither the name of The Linux Foundation, nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
- * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
- * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-
-#ifndef __ICLIENTINDEX_H__
-#define __ICLIENTINDEX_H__
-
-#include <list>
-
-namespace loc_core
-{
-
-template <typename CT, typename DIT>
-
-class IClientIndex {
-public:
-
- // Checks if client is subscribed
- virtual bool isSubscribedClient (CT client) = 0;
-
- // gets subscription list
- virtual void getSubscribedList (CT client, std :: list <DIT> & out) = 0;
-
- // removes an entry
- virtual int remove (CT client) = 0;
-
- // removes std :: list of data items and returns a list of clients
- // removed if any.
- virtual void remove
- (
- const std :: list <DIT> & r,
- std :: list <CT> & out
- ) = 0;
-
- // removes list of data items indexed by client and returns list
- // of data items removed if any.
- virtual void remove
- (
- CT client,
- const std :: list <DIT> & r,
- std :: list <DIT> & out
- ) = 0;
-
- // adds/modifies entry in map and returns new data items added.
- virtual void add
- (
- CT client,
- const std :: list <DIT> & l,
- std :: list <DIT> & out
- ) = 0;
-
- // dtor
- virtual ~IClientIndex () {}
-};
-
-} // namespace loc_core
-
-#endif // #ifndef __ICLIENTINDEX_H__
diff --git a/gps/core/data-items/common/IDataItemIndex.h b/gps/core/data-items/common/IDataItemIndex.h
deleted file mode 100644
index 9185582..0000000
--- a/gps/core/data-items/common/IDataItemIndex.h
+++ /dev/null
@@ -1,94 +0,0 @@
-/* Copyright (c) 2015, 2017 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
- * met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following
- * disclaimer in the documentation and/or other materials provided
- * with the distribution.
- * * Neither the name of The Linux Foundation, nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
- * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
- * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-
-#ifndef __IDATAITEMINDEX_H__
-#define __IDATAITEMINDEX_H__
-
-#include <list>
-
-namespace loc_core
-{
-
-template <typename CT, typename DIT>
-
-class IDataItemIndex {
-
-public:
-
- // gets std :: list of subscribed clients
- virtual void getListOfSubscribedClients
- (
- DIT id,
- std :: list <CT> & out
- ) = 0;
-
- // removes an entry from
- virtual int remove (DIT id) = 0;
-
- // removes list of clients and returns a list of data items
- // removed if any.
- virtual void remove
- (
- const std :: list <CT> & r,
- std :: list <DIT> & out
- ) = 0;
-
- // removes list of clients indexed by data item and returns list of
- // clients removed if any.
- virtual void remove
- (
- DIT id,
- const std :: list <CT> & r,
- std :: list <CT> & out
- ) = 0;
-
- // adds/modifies entry and returns new clients added
- virtual void add
- (
- DIT id,
- const std :: list <CT> & l,
- std :: list <CT> & out
- ) = 0;
-
- // adds/modifies entry and returns yet to subscribe list of data items
- virtual void add
- (
- CT client,
- const std :: list <DIT> & l,
- std :: list <DIT> & out
- ) = 0;
-
- // dtor
- virtual ~IDataItemIndex () {}
-};
-
-} // namespace loc_core
-
-#endif // #ifndef __IDATAITEMINDEX_H__
-
diff --git a/gps/core/data-items/common/IndexFactory.cpp b/gps/core/data-items/common/IndexFactory.cpp
deleted file mode 100644
index cf49475..0000000
--- a/gps/core/data-items/common/IndexFactory.cpp
+++ /dev/null
@@ -1,64 +0,0 @@
-/* Copyright (c) 2015, 2017 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
- * met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following
- * disclaimer in the documentation and/or other materials provided
- * with the distribution.
- * * Neither the name of The Linux Foundation, nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
- * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
- * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-
-#include <string>
-#include <IndexFactory.h>
-#include <IClientIndex.h>
-#include <ClientIndex.h>
-#include <IDataItemIndex.h>
-#include <DataItemIndex.h>
-#include <IDataItemObserver.h>
-#include <DataItemId.h>
-
-using namespace std;
-using loc_core::IClientIndex;
-using loc_core::IDataItemIndex;
-using loc_core::IDataItemObserver;
-using namespace loc_core;
-
-template <typename CT, typename DIT>
-inline IClientIndex <CT, DIT> * IndexFactory <CT, DIT> :: createClientIndex
-()
-{
- return new (nothrow) ClientIndex <CT, DIT> ();
-}
-
-template <typename CT, typename DIT>
-inline IDataItemIndex <CT, DIT> * IndexFactory <CT, DIT> :: createDataItemIndex
-()
-{
- return new (nothrow) DataItemIndex <CT, DIT> ();
-}
-
-// Explicit instantiation must occur in same namespace where class is defined
-namespace loc_core
-{
- template class IndexFactory <IDataItemObserver *, DataItemId>;
- template class IndexFactory <string, DataItemId>;
-}
diff --git a/gps/core/data-items/common/IndexFactory.h b/gps/core/data-items/common/IndexFactory.h
deleted file mode 100644
index 9a2070e..0000000
--- a/gps/core/data-items/common/IndexFactory.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/* Copyright (c) 2015, 2017 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
- * met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following
- * disclaimer in the documentation and/or other materials provided
- * with the distribution.
- * * Neither the name of The Linux Foundation, nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
- * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
- * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-
-#ifndef __INDEXFACTORY_H__
-#define __INDEXFACTORY_H__
-
-#include <IClientIndex.h>
-#include <IDataItemIndex.h>
-
-namespace loc_core
-{
-template <typename CT, typename DIT>
-class IndexFactory {
-
-public:
- static IClientIndex <CT, DIT> * createClientIndex ();
- static IDataItemIndex <CT, DIT> * createDataItemIndex ();
-};
-
-} // namespace loc_core
-
-#endif // #ifndef __INDEXFACTORY_H__
diff --git a/gps/core/loc-core.pc.in b/gps/core/loc-core.pc.in
new file mode 100644
index 0000000..76b514c
--- /dev/null
+++ b/gps/core/loc-core.pc.in
@@ -0,0 +1,10 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: loc-core
+Description: QTI GPS Loc Core
+Version: @VERSION@
+Libs: -L${libdir} -lloc_core
+Cflags: -I${includedir}/loc-core
diff --git a/gps/core/loc_core_log.cpp b/gps/core/loc_core_log.cpp
index 5a627dd..67d68f0 100644
--- a/gps/core/loc_core_log.cpp
+++ b/gps/core/loc_core_log.cpp
@@ -30,9 +30,10 @@
#define LOG_NDEBUG 0
#define LOG_TAG "LocSvc_core_log"
+#include <log_util.h>
#include <loc_log.h>
#include <loc_core_log.h>
-#include <platform_lib_includes.h>
+#include <loc_pla.h>
void LocPosMode::logv() const
{
@@ -100,26 +101,6 @@ const char* loc_get_position_recurrence_name(LocGpsPositionRecurrence recur)
return loc_get_name_from_val(loc_eng_position_recurrences, loc_eng_position_recurrence_num, (long) recur);
}
-
-
-static const loc_name_val_s_type loc_eng_aiding_data_bits[] =
-{
- NAME_VAL( LOC_GPS_DELETE_EPHEMERIS ),
- NAME_VAL( LOC_GPS_DELETE_ALMANAC ),
- NAME_VAL( LOC_GPS_DELETE_POSITION ),
- NAME_VAL( LOC_GPS_DELETE_TIME ),
- NAME_VAL( LOC_GPS_DELETE_IONO ),
- NAME_VAL( LOC_GPS_DELETE_UTC ),
- NAME_VAL( LOC_GPS_DELETE_HEALTH ),
- NAME_VAL( LOC_GPS_DELETE_SVDIR ),
- NAME_VAL( LOC_GPS_DELETE_SVSTEER ),
- NAME_VAL( LOC_GPS_DELETE_SADATA ),
- NAME_VAL( LOC_GPS_DELETE_RTI ),
- NAME_VAL( LOC_GPS_DELETE_CELLDB_INFO ),
- NAME_VAL( LOC_GPS_DELETE_ALL)
-};
-static const int loc_eng_aiding_data_bit_num = sizeof(loc_eng_aiding_data_bits) / sizeof(loc_name_val_s_type);
-
const char* loc_get_aiding_data_mask_names(LocGpsAidingData /*data*/)
{
return NULL;
diff --git a/gps/core/observer/IFrameworkActionReq.h b/gps/core/observer/IFrameworkActionReq.h
index c7b3ebd..4be947f 100644
--- a/gps/core/observer/IFrameworkActionReq.h
+++ b/gps/core/observer/IFrameworkActionReq.h
@@ -70,6 +70,24 @@ public:
*/
virtual void turnOff (DataItemId dit) = 0;
+#ifdef USE_GLIB
+ /**
+ * @brief Setup WWAN backhaul
+ * @details Setup WWAN backhaul
+ *
+ * @param None
+ */
+ virtual bool connectBackhaul() = 0;
+
+ /**
+ * @brief Disconnects the WWANbackhaul
+ * @details Disconnects the WWANbackhaul, only if it was setup by us
+ *
+ * @param None
+ */
+ virtual bool disconnectBackhaul() = 0;
+#endif
+
/**
* @brief Destructor
* @details Destructor
diff --git a/gps/core/observer/IOsObserver.h b/gps/core/observer/IOsObserver.h
index 3db8a85..40d7671 100644
--- a/gps/core/observer/IOsObserver.h
+++ b/gps/core/observer/IOsObserver.h
@@ -90,6 +90,10 @@ public:
// IFrameworkActionReq Overrides
inline virtual void turnOn (DataItemId /*dit*/, int /*timeOut*/){}
inline virtual void turnOff (DataItemId /*dit*/) {}
+#ifdef USE_GLIB
+ inline virtual bool connectBackhaul() {}
+ inline virtual bool disconnectBackhaul() {}
+#endif
/**
* @brief Destructor