sm6225-common: Update GPS HAL to LA.UM.9.15.r1-07400-KAMORTA.QSSI13.0

Change-Id: I8f0f477db0fdeed28fc4ba1c997bfe38b1c7268f
This commit is contained in:
Michael Bestas 2023-11-27 18:21:56 +02:00
parent e0ed33f86c
commit 58e72f4794
No known key found for this signature in database
GPG key ID: CC95044519BE6669
18 changed files with 2033 additions and 1112 deletions

View file

@ -29,7 +29,7 @@
#include <string> #include <string>
#include "Gnss.h" #include "Gnss.h"
#include "AGnssRil.h" #include "AGnssRil.h"
#include <DataItemConcreteTypesBase.h> #include <DataItemConcreteTypes.h>
typedef void* (getLocationInterface)(); typedef void* (getLocationInterface)();
@ -58,29 +58,29 @@ Return<bool> AGnssRil::updateNetworkState(bool connected, NetworkType type, bool
// for XTRA // for XTRA
if (nullptr != mGnss && ( nullptr != mGnss->getGnssInterface() )) { if (nullptr != mGnss && ( nullptr != mGnss->getGnssInterface() )) {
int8_t typeout = loc_core::NetworkInfoDataItemBase::TYPE_UNKNOWN; int8_t typeout = loc_core::TYPE_UNKNOWN;
switch(type) switch(type)
{ {
case IAGnssRil::NetworkType::MOBILE: case IAGnssRil::NetworkType::MOBILE:
typeout = loc_core::NetworkInfoDataItemBase::TYPE_MOBILE; typeout = loc_core::TYPE_MOBILE;
break; break;
case IAGnssRil::NetworkType::WIFI: case IAGnssRil::NetworkType::WIFI:
typeout = loc_core::NetworkInfoDataItemBase::TYPE_WIFI; typeout = loc_core::TYPE_WIFI;
break; break;
case IAGnssRil::NetworkType::MMS: case IAGnssRil::NetworkType::MMS:
typeout = loc_core::NetworkInfoDataItemBase::TYPE_MMS; typeout = loc_core::TYPE_MMS;
break; break;
case IAGnssRil::NetworkType::SUPL: case IAGnssRil::NetworkType::SUPL:
typeout = loc_core::NetworkInfoDataItemBase::TYPE_SUPL; typeout = loc_core::TYPE_SUPL;
break; break;
case IAGnssRil::NetworkType::DUN: case IAGnssRil::NetworkType::DUN:
typeout = loc_core::NetworkInfoDataItemBase::TYPE_DUN; typeout = loc_core::TYPE_DUN;
break; break;
case IAGnssRil::NetworkType::HIPRI: case IAGnssRil::NetworkType::HIPRI:
typeout = loc_core::NetworkInfoDataItemBase::TYPE_HIPRI; typeout = loc_core::TYPE_HIPRI;
break; break;
case IAGnssRil::NetworkType::WIMAX: case IAGnssRil::NetworkType::WIMAX:
typeout = loc_core::NetworkInfoDataItemBase::TYPE_WIMAX; typeout = loc_core::TYPE_WIMAX;
break; break;
default: default:
{ {
@ -89,16 +89,16 @@ Return<bool> AGnssRil::updateNetworkState(bool connected, NetworkType type, bool
switch(networkType) switch(networkType)
{ {
case NetworkType_BLUETOOTH: case NetworkType_BLUETOOTH:
typeout = loc_core::NetworkInfoDataItemBase::TYPE_BLUETOOTH; typeout = loc_core::TYPE_BLUETOOTH;
break; break;
case NetworkType_ETHERNET: case NetworkType_ETHERNET:
typeout = loc_core::NetworkInfoDataItemBase::TYPE_ETHERNET; typeout = loc_core::TYPE_ETHERNET;
break; break;
case NetworkType_PROXY: case NetworkType_PROXY:
typeout = loc_core::NetworkInfoDataItemBase::TYPE_PROXY; typeout = loc_core::TYPE_PROXY;
break; break;
default: default:
typeout = loc_core::NetworkInfoDataItemBase::TYPE_UNKNOWN; typeout = loc_core::TYPE_UNKNOWN;
} }
} }
break; break;

View file

@ -29,7 +29,7 @@
#include <string> #include <string>
#include "Gnss.h" #include "Gnss.h"
#include "AGnssRil.h" #include "AGnssRil.h"
#include <DataItemConcreteTypesBase.h> #include <DataItemConcreteTypes.h>
typedef void* (getLocationInterface)(); typedef void* (getLocationInterface)();
@ -58,29 +58,29 @@ Return<bool> AGnssRil::updateNetworkState(bool connected, NetworkType type, bool
// for XTRA // for XTRA
if (nullptr != mGnss && ( nullptr != mGnss->getGnssInterface() )) { if (nullptr != mGnss && ( nullptr != mGnss->getGnssInterface() )) {
int8_t typeout = loc_core::NetworkInfoDataItemBase::TYPE_UNKNOWN; int8_t typeout = loc_core::TYPE_UNKNOWN;
switch(type) switch(type)
{ {
case IAGnssRil::NetworkType::MOBILE: case IAGnssRil::NetworkType::MOBILE:
typeout = loc_core::NetworkInfoDataItemBase::TYPE_MOBILE; typeout = loc_core::TYPE_MOBILE;
break; break;
case IAGnssRil::NetworkType::WIFI: case IAGnssRil::NetworkType::WIFI:
typeout = loc_core::NetworkInfoDataItemBase::TYPE_WIFI; typeout = loc_core::TYPE_WIFI;
break; break;
case IAGnssRil::NetworkType::MMS: case IAGnssRil::NetworkType::MMS:
typeout = loc_core::NetworkInfoDataItemBase::TYPE_MMS; typeout = loc_core::TYPE_MMS;
break; break;
case IAGnssRil::NetworkType::SUPL: case IAGnssRil::NetworkType::SUPL:
typeout = loc_core::NetworkInfoDataItemBase::TYPE_SUPL; typeout = loc_core::TYPE_SUPL;
break; break;
case IAGnssRil::NetworkType::DUN: case IAGnssRil::NetworkType::DUN:
typeout = loc_core::NetworkInfoDataItemBase::TYPE_DUN; typeout = loc_core::TYPE_DUN;
break; break;
case IAGnssRil::NetworkType::HIPRI: case IAGnssRil::NetworkType::HIPRI:
typeout = loc_core::NetworkInfoDataItemBase::TYPE_HIPRI; typeout = loc_core::TYPE_HIPRI;
break; break;
case IAGnssRil::NetworkType::WIMAX: case IAGnssRil::NetworkType::WIMAX:
typeout = loc_core::NetworkInfoDataItemBase::TYPE_WIMAX; typeout = loc_core::TYPE_WIMAX;
break; break;
default: default:
{ {
@ -89,16 +89,16 @@ Return<bool> AGnssRil::updateNetworkState(bool connected, NetworkType type, bool
switch(networkType) switch(networkType)
{ {
case NetworkType_BLUETOOTH: case NetworkType_BLUETOOTH:
typeout = loc_core::NetworkInfoDataItemBase::TYPE_BLUETOOTH; typeout = loc_core::TYPE_BLUETOOTH;
break; break;
case NetworkType_ETHERNET: case NetworkType_ETHERNET:
typeout = loc_core::NetworkInfoDataItemBase::TYPE_ETHERNET; typeout = loc_core::TYPE_ETHERNET;
break; break;
case NetworkType_PROXY: case NetworkType_PROXY:
typeout = loc_core::NetworkInfoDataItemBase::TYPE_PROXY; typeout = loc_core::TYPE_PROXY;
break; break;
default: default:
typeout = loc_core::NetworkInfoDataItemBase::TYPE_UNKNOWN; typeout = loc_core::TYPE_UNKNOWN;
} }
} }
break; break;

View file

@ -29,7 +29,7 @@
#include <string> #include <string>
#include "Gnss.h" #include "Gnss.h"
#include "AGnssRil.h" #include "AGnssRil.h"
#include <DataItemConcreteTypesBase.h> #include <DataItemConcreteTypes.h>
typedef void* (getLocationInterface)(); typedef void* (getLocationInterface)();

View file

@ -29,7 +29,7 @@
#include <string> #include <string>
#include "Gnss.h" #include "Gnss.h"
#include "AGnssRil.h" #include "AGnssRil.h"
#include <DataItemConcreteTypesBase.h> #include <DataItemConcreteTypes.h>
typedef void* (getLocationInterface)(); typedef void* (getLocationInterface)();

View file

@ -22,6 +22,7 @@ cc_library_shared {
"LocContext.cpp", "LocContext.cpp",
"loc_core_log.cpp", "loc_core_log.cpp",
"data-items/DataItemsFactoryProxy.cpp", "data-items/DataItemsFactoryProxy.cpp",
"data-items/DataItemConcreteTypes.cpp",
"SystemStatusOsObserver.cpp", "SystemStatusOsObserver.cpp",
"SystemStatus.cpp", "SystemStatus.cpp",
], ],

View file

@ -22,7 +22,8 @@ libloc_core_la_h_sources = \
EngineHubProxyBase.h \ EngineHubProxyBase.h \
data-items/DataItemId.h \ data-items/DataItemId.h \
data-items/IDataItemCore.h \ data-items/IDataItemCore.h \
data-items/DataItemConcreteTypesBase.h \ data-items/DataItemConcreteTypes.h \
data-items/DataItemsFactoryProxy.h \
observer/IDataItemObserver.h \ observer/IDataItemObserver.h \
observer/IDataItemSubscription.h \ observer/IDataItemSubscription.h \
observer/IFrameworkActionReq.h \ observer/IFrameworkActionReq.h \
@ -37,6 +38,7 @@ libloc_core_la_c_sources = \
LocContext.cpp \ LocContext.cpp \
loc_core_log.cpp \ loc_core_log.cpp \
data-items/DataItemsFactoryProxy.cpp \ data-items/DataItemsFactoryProxy.cpp \
data-items/DataItemConcreteTypes.cpp \
SystemStatusOsObserver.cpp \ SystemStatusOsObserver.cpp \
SystemStatus.cpp SystemStatus.cpp

View file

@ -40,7 +40,7 @@
#include <DataItemsFactoryProxy.h> #include <DataItemsFactoryProxy.h>
#include <SystemStatus.h> #include <SystemStatus.h>
#include <SystemStatusOsObserver.h> #include <SystemStatusOsObserver.h>
#include <DataItemConcreteTypesBase.h> #include <DataItemConcreteTypes.h>
namespace loc_core namespace loc_core
{ {
@ -748,18 +748,17 @@ SystemStatusTimeAndClock::SystemStatusTimeAndClock(const SystemStatusPQWM1& nmea
{ {
} }
bool SystemStatusTimeAndClock::equals(const SystemStatusTimeAndClock& peer) bool SystemStatusTimeAndClock::equals(const SystemStatusItemBase& peer) {
{ if ((mGpsWeek != ((const SystemStatusTimeAndClock&)peer).mGpsWeek) ||
if ((mGpsWeek != peer.mGpsWeek) || (mGpsTowMs != ((const SystemStatusTimeAndClock&)peer).mGpsTowMs) ||
(mGpsTowMs != peer.mGpsTowMs) || (mTimeValid != ((const SystemStatusTimeAndClock&)peer).mTimeValid) ||
(mTimeValid != peer.mTimeValid) || (mTimeSource != ((const SystemStatusTimeAndClock&)peer).mTimeSource) ||
(mTimeSource != peer.mTimeSource) || (mTimeUnc != ((const SystemStatusTimeAndClock&)peer).mTimeUnc) ||
(mTimeUnc != peer.mTimeUnc) || (mClockFreqBias != ((const SystemStatusTimeAndClock&)peer).mClockFreqBias) ||
(mClockFreqBias != peer.mClockFreqBias) || (mClockFreqBiasUnc != ((const SystemStatusTimeAndClock&)peer).mClockFreqBiasUnc) ||
(mClockFreqBiasUnc != peer.mClockFreqBiasUnc) || (mLeapSeconds != ((const SystemStatusTimeAndClock&)peer).mLeapSeconds) ||
(mLeapSeconds != peer.mLeapSeconds) || (mLeapSecUnc != ((const SystemStatusTimeAndClock&)peer).mLeapSecUnc) ||
(mLeapSecUnc != peer.mLeapSecUnc) || (mTimeUncNs != ((const SystemStatusTimeAndClock&)peer).mTimeUncNs)) {
(mTimeUncNs != peer.mTimeUncNs)) {
return false; return false;
} }
return true; return true;
@ -790,9 +789,8 @@ SystemStatusXoState::SystemStatusXoState(const SystemStatusPQWM1& nmea) :
{ {
} }
bool SystemStatusXoState::equals(const SystemStatusXoState& peer) bool SystemStatusXoState::equals(const SystemStatusItemBase& peer) {
{ if (mXoState != ((const SystemStatusXoState&)peer).mXoState) {
if (mXoState != peer.mXoState) {
return false; return false;
} }
return true; return true;
@ -832,27 +830,26 @@ SystemStatusRfAndParams::SystemStatusRfAndParams(const SystemStatusPQWM1& nmea)
{ {
} }
bool SystemStatusRfAndParams::equals(const SystemStatusRfAndParams& peer) bool SystemStatusRfAndParams::equals(const SystemStatusItemBase& peer) {
{ if ((mPgaGain != ((const SystemStatusRfAndParams&)peer).mPgaGain) ||
if ((mPgaGain != peer.mPgaGain) || (mGpsBpAmpI != ((const SystemStatusRfAndParams&)peer).mGpsBpAmpI) ||
(mGpsBpAmpI != peer.mGpsBpAmpI) || (mGpsBpAmpQ != ((const SystemStatusRfAndParams&)peer).mGpsBpAmpQ) ||
(mGpsBpAmpQ != peer.mGpsBpAmpQ) || (mAdcI != ((const SystemStatusRfAndParams&)peer).mAdcI) ||
(mAdcI != peer.mAdcI) || (mAdcQ != ((const SystemStatusRfAndParams&)peer).mAdcQ) ||
(mAdcQ != peer.mAdcQ) || (mJammerGps != ((const SystemStatusRfAndParams&)peer).mJammerGps) ||
(mJammerGps != peer.mJammerGps) || (mJammerGlo != ((const SystemStatusRfAndParams&)peer).mJammerGlo) ||
(mJammerGlo != peer.mJammerGlo) || (mJammerBds != ((const SystemStatusRfAndParams&)peer).mJammerBds) ||
(mJammerBds != peer.mJammerBds) || (mJammerGal != ((const SystemStatusRfAndParams&)peer).mJammerGal) ||
(mJammerGal != peer.mJammerGal) || (mAgcGps != ((const SystemStatusRfAndParams&)peer).mAgcGps) ||
(mAgcGps != peer.mAgcGps) || (mAgcGlo != ((const SystemStatusRfAndParams&)peer).mAgcGlo) ||
(mAgcGlo != peer.mAgcGlo) || (mAgcBds != ((const SystemStatusRfAndParams&)peer).mAgcBds) ||
(mAgcBds != peer.mAgcBds) || (mAgcGal != ((const SystemStatusRfAndParams&)peer).mAgcGal) ||
(mAgcGal != peer.mAgcGal) || (mGloBpAmpI != ((const SystemStatusRfAndParams&)peer).mGloBpAmpI) ||
(mGloBpAmpI != peer.mGloBpAmpI) || (mGloBpAmpQ != ((const SystemStatusRfAndParams&)peer).mGloBpAmpQ) ||
(mGloBpAmpQ != peer.mGloBpAmpQ) || (mBdsBpAmpI != ((const SystemStatusRfAndParams&)peer).mBdsBpAmpI) ||
(mBdsBpAmpI != peer.mBdsBpAmpI) || (mBdsBpAmpQ != ((const SystemStatusRfAndParams&)peer).mBdsBpAmpQ) ||
(mBdsBpAmpQ != peer.mBdsBpAmpQ) || (mGalBpAmpI != ((const SystemStatusRfAndParams&)peer).mGalBpAmpI) ||
(mGalBpAmpI != peer.mGalBpAmpI) || (mGalBpAmpQ != ((const SystemStatusRfAndParams&)peer).mGalBpAmpQ)) {
(mGalBpAmpQ != peer.mGalBpAmpQ)) {
return false; return false;
} }
return true; return true;
@ -888,9 +885,8 @@ SystemStatusErrRecovery::SystemStatusErrRecovery(const SystemStatusPQWM1& nmea)
{ {
} }
bool SystemStatusErrRecovery::equals(const SystemStatusErrRecovery& peer) bool SystemStatusErrRecovery::equals(const SystemStatusItemBase& peer) {
{ if (mRecErrorRecovery != ((const SystemStatusErrRecovery&)peer).mRecErrorRecovery) {
if (mRecErrorRecovery != peer.mRecErrorRecovery) {
return false; return false;
} }
return true; return true;
@ -918,15 +914,14 @@ SystemStatusInjectedPosition::SystemStatusInjectedPosition(const SystemStatusPQW
{ {
} }
bool SystemStatusInjectedPosition::equals(const SystemStatusInjectedPosition& peer) bool SystemStatusInjectedPosition::equals(const SystemStatusItemBase& peer) {
{ if ((mEpiValidity != ((const SystemStatusInjectedPosition&)peer).mEpiValidity) ||
if ((mEpiValidity != peer.mEpiValidity) || (mEpiLat != ((const SystemStatusInjectedPosition&)peer).mEpiLat) ||
(mEpiLat != peer.mEpiLat) || (mEpiLon != ((const SystemStatusInjectedPosition&)peer).mEpiLon) ||
(mEpiLon != peer.mEpiLon) || (mEpiAlt != ((const SystemStatusInjectedPosition&)peer).mEpiAlt) ||
(mEpiAlt != peer.mEpiAlt) || (mEpiHepe != ((const SystemStatusInjectedPosition&)peer).mEpiHepe) ||
(mEpiHepe != peer.mEpiHepe) || (mEpiAltUnc != ((const SystemStatusInjectedPosition&)peer).mEpiAltUnc) ||
(mEpiAltUnc != peer.mEpiAltUnc) || (mEpiSrc != ((const SystemStatusInjectedPosition&)peer).mEpiSrc)) {
(mEpiSrc != peer.mEpiSrc)) {
return false; return false;
} }
return true; return true;
@ -959,13 +954,12 @@ SystemStatusBestPosition::SystemStatusBestPosition(const SystemStatusPQWP2& nmea
{ {
} }
bool SystemStatusBestPosition::equals(const SystemStatusBestPosition& peer) bool SystemStatusBestPosition::equals(const SystemStatusItemBase& peer) {
{ if ((mBestLat != ((const SystemStatusBestPosition&)peer).mBestLat) ||
if ((mBestLat != peer.mBestLat) || (mBestLon != ((const SystemStatusBestPosition&)peer).mBestLon) ||
(mBestLon != peer.mBestLon) || (mBestAlt != ((const SystemStatusBestPosition&)peer).mBestAlt) ||
(mBestAlt != peer.mBestAlt) || (mBestHepe != ((const SystemStatusBestPosition&)peer).mBestHepe) ||
(mBestHepe != peer.mBestHepe) || (mBestAltUnc != ((const SystemStatusBestPosition&)peer).mBestAltUnc)) {
(mBestAltUnc != peer.mBestAltUnc)) {
return false; return false;
} }
return true; return true;
@ -1003,21 +997,20 @@ SystemStatusXtra::SystemStatusXtra(const SystemStatusPQWP3& nmea) :
{ {
} }
bool SystemStatusXtra::equals(const SystemStatusXtra& peer) bool SystemStatusXtra::equals(const SystemStatusItemBase& peer) {
{ if ((mXtraValidMask != ((const SystemStatusXtra&)peer).mXtraValidMask) ||
if ((mXtraValidMask != peer.mXtraValidMask) || (mGpsXtraAge != ((const SystemStatusXtra&)peer).mGpsXtraAge) ||
(mGpsXtraAge != peer.mGpsXtraAge) || (mGloXtraAge != ((const SystemStatusXtra&)peer).mGloXtraAge) ||
(mGloXtraAge != peer.mGloXtraAge) || (mBdsXtraAge != ((const SystemStatusXtra&)peer).mBdsXtraAge) ||
(mBdsXtraAge != peer.mBdsXtraAge) || (mGalXtraAge != ((const SystemStatusXtra&)peer).mGalXtraAge) ||
(mGalXtraAge != peer.mGalXtraAge) || (mQzssXtraAge != ((const SystemStatusXtra&)peer).mQzssXtraAge) ||
(mQzssXtraAge != peer.mQzssXtraAge) || (mNavicXtraAge != ((const SystemStatusXtra&)peer).mNavicXtraAge) ||
(mNavicXtraAge != peer.mNavicXtraAge) || (mGpsXtraValid != ((const SystemStatusXtra&)peer).mGpsXtraValid) ||
(mGpsXtraValid != peer.mGpsXtraValid) || (mGloXtraValid != ((const SystemStatusXtra&)peer).mGloXtraValid) ||
(mGloXtraValid != peer.mGloXtraValid) || (mBdsXtraValid != ((const SystemStatusXtra&)peer).mBdsXtraValid) ||
(mBdsXtraValid != peer.mBdsXtraValid) || (mGalXtraValid != ((const SystemStatusXtra&)peer).mGalXtraValid) ||
(mGalXtraValid != peer.mGalXtraValid) || (mQzssXtraValid != ((const SystemStatusXtra&)peer).mQzssXtraValid) ||
(mQzssXtraValid != peer.mQzssXtraValid) || (mNavicXtraValid != ((const SystemStatusXtra&)peer).mNavicXtraValid)) {
(mNavicXtraValid != peer.mNavicXtraValid)) {
return false; return false;
} }
return true; return true;
@ -1053,13 +1046,12 @@ SystemStatusEphemeris::SystemStatusEphemeris(const SystemStatusPQWP4& nmea) :
{ {
} }
bool SystemStatusEphemeris::equals(const SystemStatusEphemeris& peer) bool SystemStatusEphemeris::equals(const SystemStatusItemBase& peer) {
{ if ((mGpsEpheValid != ((const SystemStatusEphemeris&)peer).mGpsEpheValid) ||
if ((mGpsEpheValid != peer.mGpsEpheValid) || (mGloEpheValid != ((const SystemStatusEphemeris&)peer).mGloEpheValid) ||
(mGloEpheValid != peer.mGloEpheValid) || (mBdsEpheValid != ((const SystemStatusEphemeris&)peer).mBdsEpheValid) ||
(mBdsEpheValid != peer.mBdsEpheValid) || (mGalEpheValid != ((const SystemStatusEphemeris&)peer).mGalEpheValid) ||
(mGalEpheValid != peer.mGalEpheValid) || (mQzssEpheValid != ((const SystemStatusEphemeris&)peer).mQzssEpheValid)) {
(mQzssEpheValid != peer.mQzssEpheValid)) {
return false; return false;
} }
return true; return true;
@ -1102,23 +1094,22 @@ SystemStatusSvHealth::SystemStatusSvHealth(const SystemStatusPQWP5& nmea) :
{ {
} }
bool SystemStatusSvHealth::equals(const SystemStatusSvHealth& peer) bool SystemStatusSvHealth::equals(const SystemStatusItemBase& peer) {
{ if ((mGpsUnknownMask != ((const SystemStatusSvHealth&)peer).mGpsUnknownMask) ||
if ((mGpsUnknownMask != peer.mGpsUnknownMask) || (mGloUnknownMask != ((const SystemStatusSvHealth&)peer).mGloUnknownMask) ||
(mGloUnknownMask != peer.mGloUnknownMask) || (mBdsUnknownMask != ((const SystemStatusSvHealth&)peer).mBdsUnknownMask) ||
(mBdsUnknownMask != peer.mBdsUnknownMask) || (mGalUnknownMask != ((const SystemStatusSvHealth&)peer).mGalUnknownMask) ||
(mGalUnknownMask != peer.mGalUnknownMask) || (mQzssUnknownMask != ((const SystemStatusSvHealth&)peer).mQzssUnknownMask) ||
(mQzssUnknownMask != peer.mQzssUnknownMask) || (mGpsGoodMask != ((const SystemStatusSvHealth&)peer).mGpsGoodMask) ||
(mGpsGoodMask != peer.mGpsGoodMask) || (mGloGoodMask != ((const SystemStatusSvHealth&)peer).mGloGoodMask) ||
(mGloGoodMask != peer.mGloGoodMask) || (mBdsGoodMask != ((const SystemStatusSvHealth&)peer).mBdsGoodMask) ||
(mBdsGoodMask != peer.mBdsGoodMask) || (mGalGoodMask != ((const SystemStatusSvHealth&)peer).mGalGoodMask) ||
(mGalGoodMask != peer.mGalGoodMask) || (mQzssGoodMask != ((const SystemStatusSvHealth&)peer).mQzssGoodMask) ||
(mQzssGoodMask != peer.mQzssGoodMask) || (mGpsBadMask != ((const SystemStatusSvHealth&)peer).mGpsBadMask) ||
(mGpsBadMask != peer.mGpsBadMask) || (mGloBadMask != ((const SystemStatusSvHealth&)peer).mGloBadMask) ||
(mGloBadMask != peer.mGloBadMask) || (mBdsBadMask != ((const SystemStatusSvHealth&)peer).mBdsBadMask) ||
(mBdsBadMask != peer.mBdsBadMask) || (mGalBadMask != ((const SystemStatusSvHealth&)peer).mGalBadMask) ||
(mGalBadMask != peer.mGalBadMask) || (mQzssBadMask != ((const SystemStatusSvHealth&)peer).mQzssBadMask)) {
(mQzssBadMask != peer.mQzssBadMask)) {
return false; return false;
} }
return true; return true;
@ -1157,9 +1148,8 @@ SystemStatusPdr::SystemStatusPdr(const SystemStatusPQWP6& nmea) :
{ {
} }
bool SystemStatusPdr::equals(const SystemStatusPdr& peer) bool SystemStatusPdr::equals(const SystemStatusItemBase& peer) {
{ if (mFixInfoMask != ((const SystemStatusPdr&)peer).mFixInfoMask) {
if (mFixInfoMask != peer.mFixInfoMask) {
return false; return false;
} }
return true; return true;
@ -1183,12 +1173,11 @@ SystemStatusNavData::SystemStatusNavData(const SystemStatusPQWP7& nmea)
} }
} }
bool SystemStatusNavData::equals(const SystemStatusNavData& peer) bool SystemStatusNavData::equals(const SystemStatusItemBase& peer) {
{
for (uint32_t i=0; i<SV_ALL_NUM; i++) { for (uint32_t i=0; i<SV_ALL_NUM; i++) {
if ((mNav[i].mType != peer.mNav[i].mType) || if ((mNav[i].mType != ((const SystemStatusNavData&)peer).mNav[i].mType) ||
(mNav[i].mSource != peer.mNav[i].mSource) || (mNav[i].mSource != ((const SystemStatusNavData&)peer).mNav[i].mSource) ||
(mNav[i].mAgeSec != peer.mNav[i].mAgeSec)) { (mNav[i].mAgeSec != ((const SystemStatusNavData&)peer).mNav[i].mAgeSec)) {
return false; return false;
} }
} }
@ -1215,10 +1204,9 @@ SystemStatusPositionFailure::SystemStatusPositionFailure(const SystemStatusPQWS1
{ {
} }
bool SystemStatusPositionFailure::equals(const SystemStatusPositionFailure& peer) bool SystemStatusPositionFailure::equals(const SystemStatusItemBase& peer) {
{ if ((mFixInfoMask != ((const SystemStatusPositionFailure&)peer).mFixInfoMask) ||
if ((mFixInfoMask != peer.mFixInfoMask) || (mHepeLimit != ((const SystemStatusPositionFailure&)peer).mHepeLimit)) {
(mHepeLimit != peer.mHepeLimit)) {
return false; return false;
} }
return true; return true;
@ -1236,11 +1224,13 @@ void SystemStatusPositionFailure::dump()
/****************************************************************************** /******************************************************************************
SystemStatusLocation SystemStatusLocation
******************************************************************************/ ******************************************************************************/
bool SystemStatusLocation::equals(const SystemStatusLocation& peer) bool SystemStatusLocation::equals(const SystemStatusItemBase& peer) {
{ if ((mLocation.gpsLocation.latitude !=
if ((mLocation.gpsLocation.latitude != peer.mLocation.gpsLocation.latitude) || ((const SystemStatusLocation&)peer).mLocation.gpsLocation.latitude) ||
(mLocation.gpsLocation.longitude != peer.mLocation.gpsLocation.longitude) || (mLocation.gpsLocation.longitude !=
(mLocation.gpsLocation.altitude != peer.mLocation.gpsLocation.altitude)) { ((const SystemStatusLocation&)peer).mLocation.gpsLocation.longitude) ||
(mLocation.gpsLocation.altitude !=
((const SystemStatusLocation&)peer).mLocation.gpsLocation.altitude)) {
return false; return false;
} }
return true; return true;
@ -1290,8 +1280,10 @@ void SystemStatus::destroyInstance()
void SystemStatus::resetNetworkInfo() { void SystemStatus::resetNetworkInfo() {
for (int i=0; i<mCache.mNetworkInfo.size(); ++i) { for (int i=0; i<mCache.mNetworkInfo.size(); ++i) {
// Reset all the cached NetworkInfo Items as disconnected // Reset all the cached NetworkInfo Items as disconnected
eventConnectionStatus(false, mCache.mNetworkInfo[i].mType, mCache.mNetworkInfo[i].mRoaming, eventConnectionStatus(false, mCache.mNetworkInfo[i].mDataItem.mType,
mCache.mNetworkInfo[i].mNetworkHandle, mCache.mNetworkInfo[i].mApn); mCache.mNetworkInfo[i].mDataItem.mRoaming,
mCache.mNetworkInfo[i].mDataItem.mNetworkHandle,
mCache.mNetworkInfo[i].mDataItem.mApn);
} }
} }
@ -1496,91 +1488,99 @@ bool SystemStatus::eventDataItemNotify(IDataItemCore* dataitem)
{ {
case AIRPLANEMODE_DATA_ITEM_ID: case AIRPLANEMODE_DATA_ITEM_ID:
ret = setIteminReport(mCache.mAirplaneMode, ret = setIteminReport(mCache.mAirplaneMode,
SystemStatusAirplaneMode(*(static_cast<AirplaneModeDataItemBase*>(dataitem)))); SystemStatusAirplaneMode(*(static_cast<AirplaneModeDataItem*>(dataitem))));
break; break;
case ENH_DATA_ITEM_ID: case ENH_DATA_ITEM_ID:
ret = setIteminReport(mCache.mENH, ret = setIteminReport(mCache.mENH,
SystemStatusENH(*(static_cast<ENHDataItemBase*>(dataitem)))); SystemStatusENH(*(static_cast<ENHDataItem*>(dataitem))));
break; break;
case GPSSTATE_DATA_ITEM_ID: case GPSSTATE_DATA_ITEM_ID:
ret = setIteminReport(mCache.mGPSState, ret = setIteminReport(mCache.mGPSState,
SystemStatusGpsState(*(static_cast<GPSStateDataItemBase*>(dataitem)))); SystemStatusGpsState(*(static_cast<GPSStateDataItem*>(dataitem))));
break; break;
case NLPSTATUS_DATA_ITEM_ID: case NLPSTATUS_DATA_ITEM_ID:
ret = setIteminReport(mCache.mNLPStatus, ret = setIteminReport(mCache.mNLPStatus,
SystemStatusNLPStatus(*(static_cast<NLPStatusDataItemBase*>(dataitem)))); SystemStatusNLPStatus(*(static_cast<NLPStatusDataItem*>(dataitem))));
break; break;
case WIFIHARDWARESTATE_DATA_ITEM_ID: case WIFIHARDWARESTATE_DATA_ITEM_ID:
ret = setIteminReport(mCache.mWifiHardwareState, ret = setIteminReport(mCache.mWifiHardwareState, SystemStatusWifiHardwareState(
SystemStatusWifiHardwareState(*(static_cast<WifiHardwareStateDataItemBase*>(dataitem)))); *(static_cast<WifiHardwareStateDataItem*>(dataitem))));
break; break;
case NETWORKINFO_DATA_ITEM_ID: case NETWORKINFO_DATA_ITEM_ID:
ret = setIteminReport(mCache.mNetworkInfo, ret = setIteminReport(mCache.mNetworkInfo,
SystemStatusNetworkInfo(*(static_cast<NetworkInfoDataItemBase*>(dataitem)))); SystemStatusNetworkInfo(*(static_cast<NetworkInfoDataItem*>(dataitem))));
// Update latest mAllTypes/mAllNetworkHandles of original obj to notify clients
if (ret) {
(static_cast<NetworkInfoDataItem*>(dataitem))->mAllTypes =
mCache.mNetworkInfo.back().mDataItem.mAllTypes;
memcpy((static_cast<NetworkInfoDataItem*>(dataitem))->mAllNetworkHandles,
mCache.mNetworkInfo.back().mDataItem.mAllNetworkHandles, sizeof((
static_cast<NetworkInfoDataItem*>(dataitem))->mAllNetworkHandles));
}
break; break;
case RILSERVICEINFO_DATA_ITEM_ID: case RILSERVICEINFO_DATA_ITEM_ID:
ret = setIteminReport(mCache.mRilServiceInfo, ret = setIteminReport(mCache.mRilServiceInfo,
SystemStatusServiceInfo(*(static_cast<RilServiceInfoDataItemBase*>(dataitem)))); SystemStatusServiceInfo(*(static_cast<RilServiceInfoDataItem*>(dataitem))));
break; break;
case RILCELLINFO_DATA_ITEM_ID: case RILCELLINFO_DATA_ITEM_ID:
ret = setIteminReport(mCache.mRilCellInfo, ret = setIteminReport(mCache.mRilCellInfo,
SystemStatusRilCellInfo(*(static_cast<RilCellInfoDataItemBase*>(dataitem)))); SystemStatusRilCellInfo(*(static_cast<RilCellInfoDataItem*>(dataitem))));
break; break;
case SERVICESTATUS_DATA_ITEM_ID: case SERVICESTATUS_DATA_ITEM_ID:
ret = setIteminReport(mCache.mServiceStatus, ret = setIteminReport(mCache.mServiceStatus,
SystemStatusServiceStatus(*(static_cast<ServiceStatusDataItemBase*>(dataitem)))); SystemStatusServiceStatus(*(static_cast<ServiceStatusDataItem*>(dataitem))));
break; break;
case MODEL_DATA_ITEM_ID: case MODEL_DATA_ITEM_ID:
ret = setIteminReport(mCache.mModel, ret = setIteminReport(mCache.mModel,
SystemStatusModel(*(static_cast<ModelDataItemBase*>(dataitem)))); SystemStatusModel(*(static_cast<ModelDataItem*>(dataitem))));
break; break;
case MANUFACTURER_DATA_ITEM_ID: case MANUFACTURER_DATA_ITEM_ID:
ret = setIteminReport(mCache.mManufacturer, ret = setIteminReport(mCache.mManufacturer,
SystemStatusManufacturer(*(static_cast<ManufacturerDataItemBase*>(dataitem)))); SystemStatusManufacturer(*(static_cast<ManufacturerDataItem*>(dataitem))));
break; break;
case ASSISTED_GPS_DATA_ITEM_ID: case ASSISTED_GPS_DATA_ITEM_ID:
ret = setIteminReport(mCache.mAssistedGps, ret = setIteminReport(mCache.mAssistedGps,
SystemStatusAssistedGps(*(static_cast<AssistedGpsDataItemBase*>(dataitem)))); SystemStatusAssistedGps(*(static_cast<AssistedGpsDataItem*>(dataitem))));
break; break;
case SCREEN_STATE_DATA_ITEM_ID: case SCREEN_STATE_DATA_ITEM_ID:
ret = setIteminReport(mCache.mScreenState, ret = setIteminReport(mCache.mScreenState,
SystemStatusScreenState(*(static_cast<ScreenStateDataItemBase*>(dataitem)))); SystemStatusScreenState(*(static_cast<ScreenStateDataItem*>(dataitem))));
break; break;
case POWER_CONNECTED_STATE_DATA_ITEM_ID: case POWER_CONNECTED_STATE_DATA_ITEM_ID:
ret = setIteminReport(mCache.mPowerConnectState, ret = setIteminReport(mCache.mPowerConnectState, SystemStatusPowerConnectState(
SystemStatusPowerConnectState(*(static_cast<PowerConnectStateDataItemBase*>(dataitem)))); *(static_cast<PowerConnectStateDataItem*>(dataitem))));
break; break;
case TIMEZONE_CHANGE_DATA_ITEM_ID: case TIMEZONE_CHANGE_DATA_ITEM_ID:
ret = setIteminReport(mCache.mTimeZoneChange, ret = setIteminReport(mCache.mTimeZoneChange,
SystemStatusTimeZoneChange(*(static_cast<TimeZoneChangeDataItemBase*>(dataitem)))); SystemStatusTimeZoneChange(*(static_cast<TimeZoneChangeDataItem*>(dataitem))));
break; break;
case TIME_CHANGE_DATA_ITEM_ID: case TIME_CHANGE_DATA_ITEM_ID:
ret = setIteminReport(mCache.mTimeChange, ret = setIteminReport(mCache.mTimeChange,
SystemStatusTimeChange(*(static_cast<TimeChangeDataItemBase*>(dataitem)))); SystemStatusTimeChange(*(static_cast<TimeChangeDataItem*>(dataitem))));
break; break;
case WIFI_SUPPLICANT_STATUS_DATA_ITEM_ID: case WIFI_SUPPLICANT_STATUS_DATA_ITEM_ID:
ret = setIteminReport(mCache.mWifiSupplicantStatus, ret = setIteminReport(mCache.mWifiSupplicantStatus, SystemStatusWifiSupplicantStatus(
SystemStatusWifiSupplicantStatus(*(static_cast<WifiSupplicantStatusDataItemBase*>(dataitem)))); *(static_cast<WifiSupplicantStatusDataItem*>(dataitem))));
break; break;
case SHUTDOWN_STATE_DATA_ITEM_ID: case SHUTDOWN_STATE_DATA_ITEM_ID:
ret = setIteminReport(mCache.mShutdownState, ret = setIteminReport(mCache.mShutdownState,
SystemStatusShutdownState(*(static_cast<ShutdownStateDataItemBase*>(dataitem)))); SystemStatusShutdownState(*(static_cast<ShutdownStateDataItem*>(dataitem))));
break; break;
case TAC_DATA_ITEM_ID: case TAC_DATA_ITEM_ID:
ret = setIteminReport(mCache.mTac, ret = setIteminReport(mCache.mTac,
SystemStatusTac(*(static_cast<TacDataItemBase*>(dataitem)))); SystemStatusTac(*(static_cast<TacDataItem*>(dataitem))));
break; break;
case MCCMNC_DATA_ITEM_ID: case MCCMNC_DATA_ITEM_ID:
ret = setIteminReport(mCache.mMccMnc, ret = setIteminReport(mCache.mMccMnc,
SystemStatusMccMnc(*(static_cast<MccmncDataItemBase*>(dataitem)))); SystemStatusMccMnc(*(static_cast<MccmncDataItem*>(dataitem))));
break; break;
case BTLE_SCAN_DATA_ITEM_ID: case BTLE_SCAN_DATA_ITEM_ID:
ret = setIteminReport(mCache.mBtDeviceScanDetail, ret = setIteminReport(mCache.mBtDeviceScanDetail, SystemStatusBtDeviceScanDetail(
SystemStatusBtDeviceScanDetail(*(static_cast<BtDeviceScanDetailsDataItemBase*>(dataitem)))); *(static_cast<BtDeviceScanDetailsDataItem*>(dataitem))));
break; break;
case BT_SCAN_DATA_ITEM_ID: case BT_SCAN_DATA_ITEM_ID:
ret = setIteminReport(mCache.mBtLeDeviceScanDetail, ret = setIteminReport(mCache.mBtLeDeviceScanDetail, SystemStatusBtleDeviceScanDetail(
SystemStatusBtleDeviceScanDetail(*(static_cast<BtLeDeviceScanDetailsDataItemBase*>(dataitem)))); *(static_cast<BtLeDeviceScanDetailsDataItem*>(dataitem))));
break; break;
default: default:
break; break;
@ -1739,7 +1739,7 @@ bool SystemStatus::eventConnectionStatus(bool connected, int8_t type,
// send networkinof dataitem to systemstatus observer clients // send networkinof dataitem to systemstatus observer clients
SystemStatusNetworkInfo s(type, "", "", connected, roaming, SystemStatusNetworkInfo s(type, "", "", connected, roaming,
(uint64_t) networkHandle, apn); (uint64_t) networkHandle, apn);
mSysStatusObsvr.notify({&s}); mSysStatusObsvr.notify({&s.mDataItem});
return true; return true;
} }
@ -1754,7 +1754,7 @@ bool SystemStatus::eventConnectionStatus(bool connected, int8_t type,
bool SystemStatus::updatePowerConnectState(bool charging) bool SystemStatus::updatePowerConnectState(bool charging)
{ {
SystemStatusPowerConnectState s(charging); SystemStatusPowerConnectState s(charging);
mSysStatusObsvr.notify({&s}); mSysStatusObsvr.notify({&s.mDataItem});
return true; return true;
} }
} // namespace loc_core } // namespace loc_core

View file

@ -39,7 +39,7 @@
#include <MsgTask.h> #include <MsgTask.h>
#include <IDataItemCore.h> #include <IDataItemCore.h>
#include <IOsObserver.h> #include <IOsObserver.h>
#include <DataItemConcreteTypesBase.h> #include <DataItemConcreteTypes.h>
#include <SystemStatusOsObserver.h> #include <SystemStatusOsObserver.h>
#include <gps_extended_c.h> #include <gps_extended_c.h>
@ -88,6 +88,7 @@ public:
} }
virtual void dump(void) {}; virtual void dump(void) {};
inline virtual bool ignore() { return false; }; inline virtual bool ignore() { return false; };
virtual bool equals(const SystemStatusItemBase& peer) { return false; }
}; };
class SystemStatusLocation : public SystemStatusItemBase class SystemStatusLocation : public SystemStatusItemBase
@ -103,7 +104,7 @@ public:
mValid(true), mValid(true),
mLocation(location), mLocation(location),
mLocationEx(locationEx) {} mLocationEx(locationEx) {}
bool equals(const SystemStatusLocation& peer); bool equals(const SystemStatusItemBase& peer) override;
void dump(void) override; void dump(void) override;
}; };
@ -133,7 +134,7 @@ public:
mLeapSecUnc(0), mLeapSecUnc(0),
mTimeUncNs(0ULL) {} mTimeUncNs(0ULL) {}
inline SystemStatusTimeAndClock(const SystemStatusPQWM1& nmea); inline SystemStatusTimeAndClock(const SystemStatusPQWM1& nmea);
bool equals(const SystemStatusTimeAndClock& peer); bool equals(const SystemStatusItemBase& peer) override;
void dump(void) override; void dump(void) override;
}; };
@ -144,7 +145,7 @@ public:
inline SystemStatusXoState() : inline SystemStatusXoState() :
mXoState(0) {} mXoState(0) {}
inline SystemStatusXoState(const SystemStatusPQWM1& nmea); inline SystemStatusXoState(const SystemStatusPQWM1& nmea);
bool equals(const SystemStatusXoState& peer); bool equals(const SystemStatusItemBase& peer) override;
void dump(void) override; void dump(void) override;
}; };
@ -191,7 +192,7 @@ public:
mGalBpAmpI(0), mGalBpAmpI(0),
mGalBpAmpQ(0) {} mGalBpAmpQ(0) {}
inline SystemStatusRfAndParams(const SystemStatusPQWM1& nmea); inline SystemStatusRfAndParams(const SystemStatusPQWM1& nmea);
bool equals(const SystemStatusRfAndParams& peer); bool equals(const SystemStatusItemBase& peer) override;
void dump(void) override; void dump(void) override;
}; };
@ -202,7 +203,7 @@ public:
inline SystemStatusErrRecovery() : inline SystemStatusErrRecovery() :
mRecErrorRecovery(0) {}; mRecErrorRecovery(0) {};
inline SystemStatusErrRecovery(const SystemStatusPQWM1& nmea); inline SystemStatusErrRecovery(const SystemStatusPQWM1& nmea);
bool equals(const SystemStatusErrRecovery& peer); bool equals(const SystemStatusItemBase& peer) override;
inline bool ignore() override { return 0 == mRecErrorRecovery; }; inline bool ignore() override { return 0 == mRecErrorRecovery; };
void dump(void) override; void dump(void) override;
}; };
@ -227,7 +228,7 @@ public:
mEpiAltUnc(0), mEpiAltUnc(0),
mEpiSrc(0) {} mEpiSrc(0) {}
inline SystemStatusInjectedPosition(const SystemStatusPQWP1& nmea); inline SystemStatusInjectedPosition(const SystemStatusPQWP1& nmea);
bool equals(const SystemStatusInjectedPosition& peer); bool equals(const SystemStatusItemBase& peer) override;
void dump(void) override; void dump(void) override;
}; };
@ -249,7 +250,7 @@ public:
mBestHepe(0), mBestHepe(0),
mBestAltUnc(0) {} mBestAltUnc(0) {}
inline SystemStatusBestPosition(const SystemStatusPQWP2& nmea); inline SystemStatusBestPosition(const SystemStatusPQWP2& nmea);
bool equals(const SystemStatusBestPosition& peer); bool equals(const SystemStatusItemBase& peer) override;
void dump(void) override; void dump(void) override;
}; };
@ -285,7 +286,7 @@ public:
mQzssXtraValid(0), mQzssXtraValid(0),
mNavicXtraValid(0) {} mNavicXtraValid(0) {}
inline SystemStatusXtra(const SystemStatusPQWP3& nmea); inline SystemStatusXtra(const SystemStatusPQWP3& nmea);
bool equals(const SystemStatusXtra& peer); bool equals(const SystemStatusItemBase& peer) override;
void dump(void) override; void dump(void) override;
}; };
@ -305,7 +306,7 @@ public:
mGalEpheValid(0ULL), mGalEpheValid(0ULL),
mQzssEpheValid(0) {} mQzssEpheValid(0) {}
inline SystemStatusEphemeris(const SystemStatusPQWP4& nmea); inline SystemStatusEphemeris(const SystemStatusPQWP4& nmea);
bool equals(const SystemStatusEphemeris& peer); bool equals(const SystemStatusItemBase& peer) override;
void dump(void) override; void dump(void) override;
}; };
@ -351,7 +352,7 @@ public:
mQzssBadMask(0), mQzssBadMask(0),
mNavicBadMask(0) {} mNavicBadMask(0) {}
inline SystemStatusSvHealth(const SystemStatusPQWP5& nmea); inline SystemStatusSvHealth(const SystemStatusPQWP5& nmea);
bool equals(const SystemStatusSvHealth& peer); bool equals(const SystemStatusItemBase& peer) override;
void dump(void) override; void dump(void) override;
}; };
@ -363,7 +364,7 @@ public:
inline SystemStatusPdr() : inline SystemStatusPdr() :
mFixInfoMask(0) {} mFixInfoMask(0) {}
inline SystemStatusPdr(const SystemStatusPQWP6& nmea); inline SystemStatusPdr(const SystemStatusPQWP6& nmea);
bool equals(const SystemStatusPdr& peer); bool equals(const SystemStatusItemBase& peer) override;
void dump(void) override; void dump(void) override;
}; };
@ -387,7 +388,7 @@ public:
} }
} }
inline SystemStatusNavData(const SystemStatusPQWP7& nmea); inline SystemStatusNavData(const SystemStatusPQWP7& nmea);
bool equals(const SystemStatusNavData& peer); bool equals(const SystemStatusItemBase& peer) override;
void dump(void) override; void dump(void) override;
}; };
@ -401,153 +402,131 @@ public:
mFixInfoMask(0), mFixInfoMask(0),
mHepeLimit(0) {} mHepeLimit(0) {}
inline SystemStatusPositionFailure(const SystemStatusPQWS1& nmea); inline SystemStatusPositionFailure(const SystemStatusPQWS1& nmea);
bool equals(const SystemStatusPositionFailure& peer); bool equals(const SystemStatusItemBase& peer) override;
void dump(void) override; void dump(void) override;
}; };
/****************************************************************************** /******************************************************************************
SystemStatus report data structure - from DataItem observer SystemStatus report data structure - from DataItem observer
******************************************************************************/ ******************************************************************************/
class SystemStatusAirplaneMode : public SystemStatusItemBase, class SystemStatusAirplaneMode : public SystemStatusItemBase {
public AirplaneModeDataItemBase
{
public: public:
inline SystemStatusAirplaneMode(bool mode=false) : AirplaneModeDataItem mDataItem;
AirplaneModeDataItemBase(mode) {} inline SystemStatusAirplaneMode(bool mode=false): mDataItem(mode) {}
inline SystemStatusAirplaneMode(const AirplaneModeDataItemBase& itemBase) : inline SystemStatusAirplaneMode(const AirplaneModeDataItem& itemBase):
AirplaneModeDataItemBase(itemBase) {} mDataItem(itemBase) {}
inline bool equals(const SystemStatusAirplaneMode& peer) { inline bool equals(const SystemStatusItemBase& peer) override {
return (mMode == peer.mMode); return mDataItem.mMode == ((const SystemStatusAirplaneMode&)peer).mDataItem.mMode;
} }
}; };
class SystemStatusENH : public SystemStatusItemBase, class SystemStatusENH : public SystemStatusItemBase {
public ENHDataItemBase
{
public: public:
inline SystemStatusENH(bool enabled=false) : ENHDataItem mDataItem;
ENHDataItemBase(enabled) {} inline SystemStatusENH(bool enabled=false): mDataItem(enabled) {}
inline SystemStatusENH(const ENHDataItemBase& itemBase) : inline SystemStatusENH(const ENHDataItem& itemBase): mDataItem(itemBase) {}
ENHDataItemBase(itemBase) {} inline bool equals(const SystemStatusItemBase& peer) override {
inline bool equals(const SystemStatusENH& peer) { return mDataItem.mEnabled == ((const SystemStatusENH&)peer).mDataItem.mEnabled;
return (mEnabled == peer.mEnabled);
} }
}; };
class SystemStatusGpsState : public SystemStatusItemBase, class SystemStatusGpsState : public SystemStatusItemBase {
public GPSStateDataItemBase
{
public: public:
inline SystemStatusGpsState(bool enabled=false) : GPSStateDataItem mDataItem;
GPSStateDataItemBase(enabled) {} inline SystemStatusGpsState(bool enabled=false): mDataItem(enabled) {}
inline SystemStatusGpsState(const GPSStateDataItemBase& itemBase) : inline SystemStatusGpsState(const GPSStateDataItem& itemBase): mDataItem(itemBase) {}
GPSStateDataItemBase(itemBase) {} inline bool equals(const SystemStatusItemBase& peer) override {
inline bool equals(const SystemStatusGpsState& peer) { return mDataItem.mEnabled == ((const SystemStatusGpsState&)peer).mDataItem.mEnabled;
return (mEnabled == peer.mEnabled);
} }
inline void dump(void) override { inline void dump(void) override {
LOC_LOGD("GpsState: state=%u", mEnabled); LOC_LOGD("GpsState: state=%u", mDataItem.mEnabled);
} }
}; };
class SystemStatusNLPStatus : public SystemStatusItemBase, class SystemStatusNLPStatus : public SystemStatusItemBase {
public NLPStatusDataItemBase
{
public: public:
inline SystemStatusNLPStatus(bool enabled=false) : NLPStatusDataItem mDataItem;
NLPStatusDataItemBase(enabled) {} inline SystemStatusNLPStatus(bool enabled=false): mDataItem(enabled) {}
inline SystemStatusNLPStatus(const NLPStatusDataItemBase& itemBase) : inline SystemStatusNLPStatus(const NLPStatusDataItem& itemBase): mDataItem(itemBase) {}
NLPStatusDataItemBase(itemBase) {} inline bool equals(const SystemStatusItemBase& peer) override {
inline bool equals(const SystemStatusNLPStatus& peer) { return mDataItem.mEnabled == ((const SystemStatusNLPStatus&)peer).mDataItem.mEnabled;
return (mEnabled == peer.mEnabled);
} }
}; };
class SystemStatusWifiHardwareState : public SystemStatusItemBase, class SystemStatusWifiHardwareState : public SystemStatusItemBase {
public WifiHardwareStateDataItemBase
{
public: public:
inline SystemStatusWifiHardwareState(bool enabled=false) : WifiHardwareStateDataItem mDataItem;
WifiHardwareStateDataItemBase(enabled) {} inline SystemStatusWifiHardwareState(bool enabled=false): mDataItem(enabled) {}
inline SystemStatusWifiHardwareState(const WifiHardwareStateDataItemBase& itemBase) : inline SystemStatusWifiHardwareState(const WifiHardwareStateDataItem& itemBase):
WifiHardwareStateDataItemBase(itemBase) {} mDataItem(itemBase) {}
inline bool equals(const SystemStatusWifiHardwareState& peer) { inline bool equals(const SystemStatusItemBase& peer) override {
return (mEnabled == peer.mEnabled); return mDataItem.mEnabled == ((const SystemStatusWifiHardwareState&)peer).mDataItem.mEnabled;
} }
}; };
class SystemStatusNetworkInfo : public SystemStatusItemBase, class SystemStatusNetworkInfo : public SystemStatusItemBase {
public NetworkInfoDataItemBase
{
NetworkInfoDataItemBase* mSrcObjPtr;
public: public:
inline SystemStatusNetworkInfo( NetworkInfoDataItem mDataItem;
int32_t type = 0, inline SystemStatusNetworkInfo(int32_t type=0, std::string typeName="", string subTypeName="",
std::string typeName = "", bool connected=false, bool roaming=false,
string subTypeName = "", uint64_t networkHandle=NETWORK_HANDLE_UNKNOWN, string apn = "") :
bool connected = false, mDataItem((NetworkType)type, type, typeName,
bool roaming = false, subTypeName, connected && (!roaming), connected, roaming, networkHandle,
uint64_t networkHandle = NETWORK_HANDLE_UNKNOWN, apn) {}
string apn = "") : inline SystemStatusNetworkInfo(const NetworkInfoDataItem& itemBase): mDataItem(itemBase) {}
NetworkInfoDataItemBase( inline bool equals(const SystemStatusItemBase& peer) override {
(NetworkType)type, const NetworkInfoDataItem peerDI = ((const SystemStatusNetworkInfo&)peer).mDataItem;
type, bool rtv = (mDataItem.mAllTypes == peerDI.mAllTypes) &&
typeName, (mDataItem.mConnected == peerDI.mConnected);
subTypeName,
connected && (!roaming),
connected,
roaming,
networkHandle, apn),
mSrcObjPtr(nullptr) {}
inline SystemStatusNetworkInfo(const NetworkInfoDataItemBase& itemBase) :
NetworkInfoDataItemBase(itemBase),
mSrcObjPtr((NetworkInfoDataItemBase*)&itemBase) {
mType = (int32_t)itemBase.getType();
}
inline bool equals(const SystemStatusNetworkInfo& peer) {
bool rtv = (peer.mConnected == mConnected);
for (uint8_t i = 0; rtv && i < MAX_NETWORK_HANDLES; ++i) { for (uint8_t i = 0; rtv && i < MAX_NETWORK_HANDLES; ++i) {
rtv &= (mAllNetworkHandles[i] == peer.mAllNetworkHandles[i]); rtv &= (mDataItem.mAllNetworkHandles[i] == peerDI.mAllNetworkHandles[i]);
} }
return rtv && !peer.mApn.compare(mApn); return rtv & peerDI.mApn.compare(mDataItem.mApn);
} }
inline virtual SystemStatusItemBase& collate(SystemStatusItemBase& curInfo) { inline virtual SystemStatusItemBase& collate(SystemStatusItemBase& curInfo) {
LOC_LOGv("NetworkInfo: mAllTypes=%" PRIx64 " connected=%u mType=%x mApn=%s", LOC_LOGv("NetworkInfo: mAllTypes=%" PRIx64 " connected=%u mType=%x mApn=%s",
mAllTypes, mConnected, mType, mApn.c_str()); mDataItem.mAllTypes, mDataItem.mConnected, mDataItem.mType,
uint64_t allTypes = (static_cast<SystemStatusNetworkInfo&>(curInfo)).mAllTypes; mDataItem.mApn.c_str());
string& apn = (static_cast<SystemStatusNetworkInfo&>(curInfo)).mApn; uint64_t allTypes = (static_cast<SystemStatusNetworkInfo&>(curInfo)).mDataItem.mAllTypes;
string& apn = (static_cast<SystemStatusNetworkInfo&>(curInfo)).mDataItem.mApn;
// Replace current with cached table for now and then update // Replace current with cached table for now and then update
memcpy(mAllNetworkHandles, memcpy(mDataItem.mAllNetworkHandles,
(static_cast<SystemStatusNetworkInfo&>(curInfo)).getNetworkHandle(), static_cast<SystemStatusNetworkInfo&>(curInfo).mDataItem.getNetworkHandle(),
sizeof(mAllNetworkHandles)); sizeof(mDataItem.mAllNetworkHandles));
// Update the apn for non-mobile type connections. // Update the apn for non-mobile type connections.
if (TYPE_MOBILE != mType && apn.compare("") != 0) { if (TYPE_MOBILE != mDataItem.mType && apn.compare("") != 0) {
mApn = apn; mDataItem.mApn = apn;
} }
if (mConnected) { if (mDataItem.mConnected) {
mAllTypes |= allTypes; mDataItem.mAllTypes |= allTypes;
for (uint8_t i = 0; i < MAX_NETWORK_HANDLES; ++i) { for (uint8_t i = 0; i < MAX_NETWORK_HANDLES; ++i) {
if (mNetworkHandle == mAllNetworkHandles[i].networkHandle) { if (mDataItem.mNetworkHandle ==
mDataItem.mAllNetworkHandles[i].networkHandle) {
LOC_LOGD("collate duplicate detected, not updating"); LOC_LOGD("collate duplicate detected, not updating");
break; break;
} }
if (NETWORK_HANDLE_UNKNOWN == mAllNetworkHandles[i].networkHandle) { if (NETWORK_HANDLE_UNKNOWN ==
mAllNetworkHandles[i].networkHandle = mNetworkHandle; mDataItem.mAllNetworkHandles[i].networkHandle) {
mAllNetworkHandles[i].networkType = (loc_core::NetworkType) mType; mDataItem.mAllNetworkHandles[i].networkHandle =
mDataItem.mNetworkHandle;
mDataItem.mAllNetworkHandles[i].networkType =
(loc_core::NetworkType) mDataItem.mType;
break; break;
} }
} }
} else if (0 != mAllTypes) { } else if (0 != mDataItem.mAllTypes) {
uint8_t deletedIndex = MAX_NETWORK_HANDLES; uint8_t deletedIndex = MAX_NETWORK_HANDLES;
uint8_t lastValidIndex = 0; uint8_t lastValidIndex = 0;
uint8_t typeCount = 0; uint8_t typeCount = 0;
for (; lastValidIndex < MAX_NETWORK_HANDLES && for (; lastValidIndex < MAX_NETWORK_HANDLES && NETWORK_HANDLE_UNKNOWN !=
NETWORK_HANDLE_UNKNOWN != mAllNetworkHandles[lastValidIndex].networkHandle; mDataItem.mAllNetworkHandles[lastValidIndex].networkHandle;
++lastValidIndex) { ++lastValidIndex) {
// Maintain count for number of network handles still // Maintain count for number of network handles still
// connected for given type // connected for given type
if (mType == (int32_t)mAllNetworkHandles[lastValidIndex].networkType) { if (mDataItem.mType ==
if (mNetworkHandle == mAllNetworkHandles[lastValidIndex].networkHandle) { mDataItem.mAllNetworkHandles[lastValidIndex].networkType) {
if (mDataItem.mNetworkHandle ==
mDataItem.mAllNetworkHandles[lastValidIndex].networkHandle) {
deletedIndex = lastValidIndex; deletedIndex = lastValidIndex;
} else { } else {
typeCount++; typeCount++;
@ -562,264 +541,241 @@ public:
if (MAX_NETWORK_HANDLES != deletedIndex) { if (MAX_NETWORK_HANDLES != deletedIndex) {
LOC_LOGd("deletedIndex:%u, lastValidIndex:%u, typeCount:%u", LOC_LOGd("deletedIndex:%u, lastValidIndex:%u, typeCount:%u",
deletedIndex, lastValidIndex, typeCount); deletedIndex, lastValidIndex, typeCount);
mAllNetworkHandles[deletedIndex] = mAllNetworkHandles[lastValidIndex]; mDataItem.mAllNetworkHandles[deletedIndex] =
mAllNetworkHandles[lastValidIndex].networkHandle = NETWORK_HANDLE_UNKNOWN; mDataItem.mAllNetworkHandles[lastValidIndex];
mAllNetworkHandles[lastValidIndex].networkType = TYPE_UNKNOWN; mDataItem.mAllNetworkHandles[lastValidIndex].networkHandle =
NETWORK_HANDLE_UNKNOWN;
mDataItem.mAllNetworkHandles[lastValidIndex].networkType = TYPE_UNKNOWN;
} }
// If no more handles of given type, set bitmask // If no more handles of given type, set bitmask
if (0 == typeCount) { if (0 == typeCount) {
mAllTypes = (allTypes & (~mAllTypes)); mDataItem.mAllTypes = (allTypes & (~mDataItem.mAllTypes));
LOC_LOGD("mAllTypes:%" PRIx64, mAllTypes); LOC_LOGD("mAllTypes:%" PRIx64, mDataItem.mAllTypes);
} }
} // else (mConnected == false && mAllTypes == 0) } // else (mDataItem.mConnected == false && mDataItem.mAllTypes == 0)
// we keep mAllTypes as 0, which means no more connections. // we keep mDataItem->mAllTypes as 0, which means no more connections.
if (nullptr != mSrcObjPtr) {
// this is critical, changing mAllTypes of the original obj
mSrcObjPtr->mAllTypes = mAllTypes;
memcpy(mSrcObjPtr->mAllNetworkHandles,
mAllNetworkHandles,
sizeof(mSrcObjPtr->mAllNetworkHandles));
}
return *this; return *this;
} }
inline void dump(void) override { inline void dump(void) override {
LOC_LOGD("NetworkInfo: mAllTypes=%" PRIx64 " connected=%u mType=%x mApn=%s", LOC_LOGD("NetworkInfo: mAllTypes=%" PRIx64 " connected=%u mType=%x mApn=%s",
mAllTypes, mConnected, mType, mApn.c_str()); mDataItem.mAllTypes, mDataItem.mConnected, mDataItem.mType, mDataItem.mApn.c_str());
} }
}; };
class SystemStatusServiceInfo : public SystemStatusItemBase, class SystemStatusServiceInfo : public SystemStatusItemBase {
public RilServiceInfoDataItemBase
{
public: public:
inline SystemStatusServiceInfo() : RilServiceInfoDataItem mDataItem;
RilServiceInfoDataItemBase() {} inline SystemStatusServiceInfo(): mDataItem() {}
inline SystemStatusServiceInfo(const RilServiceInfoDataItemBase& itemBase) : inline SystemStatusServiceInfo(const RilServiceInfoDataItem& itemBase):
RilServiceInfoDataItemBase(itemBase) {} mDataItem(itemBase) {}
inline bool equals(const SystemStatusServiceInfo& peer) { inline bool equals(const SystemStatusItemBase& peer) override {
return static_cast<const RilServiceInfoDataItemBase&>(peer) == return ((const SystemStatusServiceInfo&)peer).mDataItem == mDataItem;
static_cast<const RilServiceInfoDataItemBase&>(*this);
} }
}; };
class SystemStatusRilCellInfo : public SystemStatusItemBase, class SystemStatusRilCellInfo : public SystemStatusItemBase {
public RilCellInfoDataItemBase
{
public: public:
inline SystemStatusRilCellInfo() : RilCellInfoDataItem mDataItem;
RilCellInfoDataItemBase() {} inline SystemStatusRilCellInfo(): mDataItem() {}
inline SystemStatusRilCellInfo(const RilCellInfoDataItemBase& itemBase) : inline SystemStatusRilCellInfo(const RilCellInfoDataItem& itemBase): mDataItem(itemBase) {}
RilCellInfoDataItemBase(itemBase) {} inline bool equals(const SystemStatusItemBase& peer) override {
inline bool equals(const SystemStatusRilCellInfo& peer) { return ((const SystemStatusRilCellInfo&)peer).mDataItem == mDataItem;
return static_cast<const RilCellInfoDataItemBase&>(peer) ==
static_cast<const RilCellInfoDataItemBase&>(*this);
} }
}; };
class SystemStatusServiceStatus : public SystemStatusItemBase, class SystemStatusServiceStatus : public SystemStatusItemBase {
public ServiceStatusDataItemBase
{
public: public:
inline SystemStatusServiceStatus(int32_t mServiceState=0) : ServiceStatusDataItem mDataItem;
ServiceStatusDataItemBase(mServiceState) {} inline SystemStatusServiceStatus(int32_t mServiceState=0): mDataItem(mServiceState) {}
inline SystemStatusServiceStatus(const ServiceStatusDataItemBase& itemBase) : inline SystemStatusServiceStatus(const ServiceStatusDataItem& itemBase):
ServiceStatusDataItemBase(itemBase) {} mDataItem(itemBase) {}
inline bool equals(const SystemStatusServiceStatus& peer) { inline bool equals(const SystemStatusItemBase& peer) override {
return (mServiceState == peer.mServiceState); return mDataItem.mServiceState ==
((const SystemStatusServiceStatus&)peer).mDataItem.mServiceState;
} }
}; };
class SystemStatusModel : public SystemStatusItemBase, class SystemStatusModel : public SystemStatusItemBase {
public ModelDataItemBase
{
public: public:
inline SystemStatusModel(string name="") : ModelDataItem mDataItem;
ModelDataItemBase(name) {} inline SystemStatusModel(string name=""): mDataItem(name) {}
inline SystemStatusModel(const ModelDataItemBase& itemBase) : inline SystemStatusModel(const ModelDataItem& itemBase): mDataItem(itemBase) {}
ModelDataItemBase(itemBase) {} inline bool equals(const SystemStatusItemBase& peer) override {
inline bool equals(const SystemStatusModel& peer) { return mDataItem.mModel == ((const SystemStatusModel&)peer).mDataItem.mModel;
return (mModel == peer.mModel);
}
};
class SystemStatusManufacturer : public SystemStatusItemBase,
public ManufacturerDataItemBase
{
public:
inline SystemStatusManufacturer(string name="") :
ManufacturerDataItemBase(name) {}
inline SystemStatusManufacturer(const ManufacturerDataItemBase& itemBase) :
ManufacturerDataItemBase(itemBase) {}
inline bool equals(const SystemStatusManufacturer& peer) {
return (mManufacturer == peer.mManufacturer);
} }
}; };
class SystemStatusAssistedGps : public SystemStatusItemBase, class SystemStatusManufacturer : public SystemStatusItemBase {
public AssistedGpsDataItemBase
{
public: public:
inline SystemStatusAssistedGps(bool enabled=false) : ManufacturerDataItem mDataItem;
AssistedGpsDataItemBase(enabled) {} inline SystemStatusManufacturer(string name=""): mDataItem(name) {}
inline SystemStatusAssistedGps(const AssistedGpsDataItemBase& itemBase) : inline SystemStatusManufacturer(const ManufacturerDataItem& itemBase): mDataItem(itemBase) {}
AssistedGpsDataItemBase(itemBase) {} inline bool equals(const SystemStatusItemBase& peer) override {
inline bool equals(const SystemStatusAssistedGps& peer) { return mDataItem.mManufacturer ==
return (mEnabled == peer.mEnabled); ((const SystemStatusManufacturer&)peer).mDataItem.mManufacturer;
} }
}; };
class SystemStatusScreenState : public SystemStatusItemBase, class SystemStatusAssistedGps : public SystemStatusItemBase {
public ScreenStateDataItemBase
{
public: public:
inline SystemStatusScreenState(bool state=false) : AssistedGpsDataItem mDataItem;
ScreenStateDataItemBase(state) {} inline SystemStatusAssistedGps(bool enabled=false): mDataItem(enabled) {}
inline SystemStatusScreenState(const ScreenStateDataItemBase& itemBase) : inline SystemStatusAssistedGps(const AssistedGpsDataItem& itemBase): mDataItem(itemBase) {}
ScreenStateDataItemBase(itemBase) {} inline bool equals(const SystemStatusItemBase& peer) override {
inline bool equals(const SystemStatusScreenState& peer) { return mDataItem.mEnabled == ((const SystemStatusAssistedGps&)peer).mDataItem.mEnabled;
return (mState == peer.mState);
} }
}; };
class SystemStatusPowerConnectState : public SystemStatusItemBase, class SystemStatusScreenState : public SystemStatusItemBase {
public PowerConnectStateDataItemBase
{
public: public:
inline SystemStatusPowerConnectState(bool state=false) : ScreenStateDataItem mDataItem;
PowerConnectStateDataItemBase(state) {} inline SystemStatusScreenState(bool state=false): mDataItem(state) {}
inline SystemStatusPowerConnectState(const PowerConnectStateDataItemBase& itemBase) : inline SystemStatusScreenState(const ScreenStateDataItem& itemBase): mDataItem(itemBase) {}
PowerConnectStateDataItemBase(itemBase) {} inline bool equals(const SystemStatusItemBase& peer) override {
inline bool equals(const SystemStatusPowerConnectState& peer) { return mDataItem.mState == ((const SystemStatusScreenState&)peer).mDataItem.mState;
return (mState == peer.mState);
} }
}; };
class SystemStatusTimeZoneChange : public SystemStatusItemBase, class SystemStatusPowerConnectState : public SystemStatusItemBase {
public TimeZoneChangeDataItemBase
{
public: public:
inline SystemStatusTimeZoneChange( PowerConnectStateDataItem mDataItem;
int64_t currTimeMillis=0ULL, int32_t rawOffset=0, int32_t dstOffset=0) : inline SystemStatusPowerConnectState(bool state=false): mDataItem(state) {}
TimeZoneChangeDataItemBase(currTimeMillis, rawOffset, dstOffset) {} inline SystemStatusPowerConnectState(const PowerConnectStateDataItem& itemBase):
inline SystemStatusTimeZoneChange(const TimeZoneChangeDataItemBase& itemBase) : mDataItem(itemBase) {}
TimeZoneChangeDataItemBase(itemBase) {} inline bool equals(const SystemStatusItemBase& peer) override {
inline bool equals(const SystemStatusTimeZoneChange& peer) { return mDataItem.mState == ((const SystemStatusPowerConnectState&)peer).mDataItem.mState;
return ((mCurrTimeMillis == peer.mCurrTimeMillis) &&
(mRawOffsetTZ == peer.mRawOffsetTZ) &&
(mDstOffsetTZ == peer.mDstOffsetTZ));
} }
}; };
class SystemStatusTimeChange : public SystemStatusItemBase, class SystemStatusTimeZoneChange : public SystemStatusItemBase {
public TimeChangeDataItemBase
{
public: public:
TimeZoneChangeDataItem mDataItem;
inline SystemStatusTimeZoneChange(int64_t currTimeMillis=0ULL, int32_t rawOffset=0,
int32_t dstOffset=0): mDataItem(currTimeMillis, rawOffset, dstOffset) {}
inline SystemStatusTimeZoneChange(const TimeZoneChangeDataItem& itemBase):
mDataItem(itemBase) {}
inline bool equals(const SystemStatusItemBase& peer) override {
return mDataItem.mCurrTimeMillis ==
((const SystemStatusTimeZoneChange&)peer).mDataItem.mCurrTimeMillis &&
mDataItem.mRawOffsetTZ ==
((const SystemStatusTimeZoneChange&)peer).mDataItem.mRawOffsetTZ &&
mDataItem.mDstOffsetTZ ==
((const SystemStatusTimeZoneChange&)peer).mDataItem.mDstOffsetTZ;
}
};
class SystemStatusTimeChange : public SystemStatusItemBase {
public:
TimeChangeDataItem mDataItem;
inline SystemStatusTimeChange( inline SystemStatusTimeChange(
int64_t currTimeMillis=0ULL, int32_t rawOffset=0, int32_t dstOffset=0) : int64_t currTimeMillis=0ULL, int32_t rawOffset=0, int32_t dstOffset=0):
TimeChangeDataItemBase(currTimeMillis, rawOffset, dstOffset) {} mDataItem(currTimeMillis, rawOffset, dstOffset) {}
inline SystemStatusTimeChange(const TimeChangeDataItemBase& itemBase) : inline SystemStatusTimeChange(const TimeChangeDataItem& itemBase): mDataItem(itemBase) {}
TimeChangeDataItemBase(itemBase) {} inline bool equals(const SystemStatusItemBase& peer) override {
inline bool equals(const SystemStatusTimeChange& peer) { return mDataItem.mCurrTimeMillis ==
return ((mCurrTimeMillis == peer.mCurrTimeMillis) && ((const SystemStatusTimeChange&)peer).mDataItem.mCurrTimeMillis &&
(mRawOffsetTZ == peer.mRawOffsetTZ) && mDataItem.mRawOffsetTZ ==
(mDstOffsetTZ == peer.mDstOffsetTZ)); ((const SystemStatusTimeChange&)peer).mDataItem.mRawOffsetTZ &&
mDataItem.mDstOffsetTZ ==
((const SystemStatusTimeChange&)peer).mDataItem.mDstOffsetTZ;
} }
}; };
class SystemStatusWifiSupplicantStatus : public SystemStatusItemBase, class SystemStatusWifiSupplicantStatus : public SystemStatusItemBase {
public WifiSupplicantStatusDataItemBase
{
public: public:
inline SystemStatusWifiSupplicantStatus() : WifiSupplicantStatusDataItem mDataItem;
WifiSupplicantStatusDataItemBase() {} inline SystemStatusWifiSupplicantStatus(): mDataItem() {}
inline SystemStatusWifiSupplicantStatus(const WifiSupplicantStatusDataItemBase& itemBase) : inline SystemStatusWifiSupplicantStatus(const WifiSupplicantStatusDataItem& itemBase):
WifiSupplicantStatusDataItemBase(itemBase) {} mDataItem(itemBase) {}
inline bool equals(const SystemStatusWifiSupplicantStatus& peer) { inline bool equals(const SystemStatusItemBase& peer) override {
return ((mState == peer.mState) && return mDataItem.mState ==
(mApMacAddressValid == peer.mApMacAddressValid) && ((const SystemStatusWifiSupplicantStatus&)peer).mDataItem.mState &&
(mWifiApSsidValid == peer.mWifiApSsidValid) && mDataItem.mApMacAddressValid ==
(mWifiApSsid == peer.mWifiApSsid)); ((const SystemStatusWifiSupplicantStatus&)peer).mDataItem.mApMacAddressValid &&
mDataItem.mWifiApSsidValid ==
((const SystemStatusWifiSupplicantStatus&)peer).mDataItem.mWifiApSsidValid &&
mDataItem.mWifiApSsid ==
((const SystemStatusWifiSupplicantStatus&)peer).mDataItem.mWifiApSsid;
} }
}; };
class SystemStatusShutdownState : public SystemStatusItemBase, class SystemStatusShutdownState : public SystemStatusItemBase {
public ShutdownStateDataItemBase
{
public: public:
inline SystemStatusShutdownState(bool state=false) : ShutdownStateDataItem mDataItem;
ShutdownStateDataItemBase(state) {} inline SystemStatusShutdownState(bool state=false): mDataItem(state) {}
inline SystemStatusShutdownState(const ShutdownStateDataItemBase& itemBase) : inline SystemStatusShutdownState(const ShutdownStateDataItem& itemBase):
ShutdownStateDataItemBase(itemBase) {} mDataItem(itemBase) {}
inline bool equals(const SystemStatusShutdownState& peer) { inline bool equals(const SystemStatusItemBase& peer) override {
return (mState == peer.mState); return mDataItem.mState == ((const SystemStatusShutdownState&)peer).mDataItem.mState;
} }
}; };
class SystemStatusTac : public SystemStatusItemBase, class SystemStatusTac : public SystemStatusItemBase {
public TacDataItemBase
{
public: public:
inline SystemStatusTac(std::string value="") : TacDataItem mDataItem;
TacDataItemBase(value) {} inline SystemStatusTac(std::string value=""): mDataItem(value) {}
inline SystemStatusTac(const TacDataItemBase& itemBase) : inline SystemStatusTac(const TacDataItem& itemBase): mDataItem(itemBase) {}
TacDataItemBase(itemBase) {} inline bool equals(const SystemStatusItemBase& peer) override {
inline bool equals(const SystemStatusTac& peer) { return mDataItem.mValue == ((const SystemStatusTac&)peer).mDataItem.mValue;
return (mValue == peer.mValue);
} }
inline void dump(void) override { inline void dump(void) override {
LOC_LOGD("Tac: value=%s", mValue.c_str()); LOC_LOGD("Tac: value=%s", mDataItem.mValue.c_str());
} }
}; };
class SystemStatusMccMnc : public SystemStatusItemBase, class SystemStatusMccMnc : public SystemStatusItemBase {
public MccmncDataItemBase
{
public: public:
inline SystemStatusMccMnc(std::string value="") : MccmncDataItem mDataItem;
MccmncDataItemBase(value) {} inline SystemStatusMccMnc(std::string value=""): mDataItem(value) {}
inline SystemStatusMccMnc(const MccmncDataItemBase& itemBase) : inline SystemStatusMccMnc(const MccmncDataItem& itemBase): mDataItem(itemBase) {}
MccmncDataItemBase(itemBase) {} inline bool equals(const SystemStatusItemBase& peer) override {
inline bool equals(const SystemStatusMccMnc& peer) { return mDataItem.mValue == ((const SystemStatusMccMnc&)peer).mDataItem.mValue;
return (mValue == peer.mValue);
} }
inline void dump(void) override { inline void dump(void) override {
LOC_LOGD("TacMccMnc value=%s", mValue.c_str()); LOC_LOGD("TacMccMnc value=%s", mDataItem.mValue.c_str());
} }
}; };
class SystemStatusBtDeviceScanDetail : public SystemStatusItemBase, class SystemStatusBtDeviceScanDetail : public SystemStatusItemBase {
public BtDeviceScanDetailsDataItemBase
{
public: public:
inline SystemStatusBtDeviceScanDetail() : BtDeviceScanDetailsDataItem mDataItem;
BtDeviceScanDetailsDataItemBase() {} inline SystemStatusBtDeviceScanDetail(): mDataItem() {}
inline SystemStatusBtDeviceScanDetail(const BtDeviceScanDetailsDataItemBase& itemBase) : inline SystemStatusBtDeviceScanDetail(const BtDeviceScanDetailsDataItem& itemBase):
BtDeviceScanDetailsDataItemBase(itemBase) {} mDataItem(itemBase) {}
inline bool equals(const SystemStatusBtDeviceScanDetail& peer) { inline bool equals(const SystemStatusItemBase& peer) override {
return ((mApSrnRssi == peer.mApSrnRssi) && return mDataItem.mApSrnRssi ==
(0 == memcmp(mApSrnMacAddress, peer.mApSrnMacAddress, sizeof(mApSrnMacAddress))) && ((const SystemStatusBtDeviceScanDetail&)peer).mDataItem.mApSrnRssi &&
(mApSrnTimestamp == peer.mApSrnTimestamp) && memcmp(mDataItem.mApSrnMacAddress,
(mRequestTimestamp == peer.mRequestTimestamp) && ((const SystemStatusBtDeviceScanDetail&)peer).mDataItem.mApSrnMacAddress,
(mReceiveTimestamp == peer.mReceiveTimestamp)); sizeof(mDataItem.mApSrnMacAddress)) == 0 &&
mDataItem.mApSrnTimestamp ==
((const SystemStatusBtDeviceScanDetail&)peer).mDataItem.mApSrnTimestamp &&
mDataItem.mRequestTimestamp ==
((const SystemStatusBtDeviceScanDetail&)peer).mDataItem.mRequestTimestamp &&
mDataItem.mReceiveTimestamp ==
((const SystemStatusBtDeviceScanDetail&)peer).mDataItem.mReceiveTimestamp;
} }
}; };
class SystemStatusBtleDeviceScanDetail : public SystemStatusItemBase, class SystemStatusBtleDeviceScanDetail : public SystemStatusItemBase {
public BtLeDeviceScanDetailsDataItemBase
{
public: public:
inline SystemStatusBtleDeviceScanDetail() : BtLeDeviceScanDetailsDataItem mDataItem;
BtLeDeviceScanDetailsDataItemBase() {} inline SystemStatusBtleDeviceScanDetail(): mDataItem() {}
inline SystemStatusBtleDeviceScanDetail(const BtLeDeviceScanDetailsDataItemBase& itemBase) : inline SystemStatusBtleDeviceScanDetail(const BtLeDeviceScanDetailsDataItem& itemBase):
BtLeDeviceScanDetailsDataItemBase(itemBase) {} mDataItem(itemBase) {}
inline bool equals(const SystemStatusBtleDeviceScanDetail& peer) { inline bool equals(const SystemStatusItemBase& peer) override {
return ((mApSrnRssi == peer.mApSrnRssi) && return mDataItem.mApSrnRssi ==
(0 == memcmp(mApSrnMacAddress, peer.mApSrnMacAddress, sizeof(mApSrnMacAddress))) && ((const SystemStatusBtleDeviceScanDetail&)peer).mDataItem.mApSrnRssi &&
(mApSrnTimestamp == peer.mApSrnTimestamp) && memcmp(mDataItem.mApSrnMacAddress,
(mRequestTimestamp == peer.mRequestTimestamp) && ((const SystemStatusBtleDeviceScanDetail&)peer).mDataItem.mApSrnMacAddress,
(mReceiveTimestamp == peer.mReceiveTimestamp)); sizeof(mDataItem.mApSrnMacAddress)) == 0 &&
mDataItem.mApSrnTimestamp ==
((const SystemStatusBtleDeviceScanDetail&)peer).mDataItem.mApSrnTimestamp &&
mDataItem.mRequestTimestamp ==
((const SystemStatusBtleDeviceScanDetail&)peer).mDataItem.mRequestTimestamp &&
mDataItem.mReceiveTimestamp ==
((const SystemStatusBtleDeviceScanDetail&)peer).mDataItem.mReceiveTimestamp;
} }
}; };

View file

@ -46,9 +46,6 @@ COUT SystemStatusOsObserver::containerTransfer(CINT& inContainer) {
} }
SystemStatusOsObserver::~SystemStatusOsObserver() { SystemStatusOsObserver::~SystemStatusOsObserver() {
// Close data-item library handle
DataItemsFactoryProxy::closeDataItemLibraryHandle();
// Destroy cache // Destroy cache
for (auto each : mDataItemCache) { for (auto each : mDataItemCache) {
if (nullptr != each.second) { if (nullptr != each.second) {
@ -112,10 +109,10 @@ void SystemStatusOsObserver::subscribe(const list<DataItemId>& l, IDataItemObser
// Send subscription set to framework // Send subscription set to framework
if (nullptr != mParent->mContext.mSubscriptionObj) { if (nullptr != mParent->mContext.mSubscriptionObj) {
if (mToRequestData) { if (mToRequestData) {
LOC_LOGD("Request Data sent to framework for the following"); LOC_LOGd("Request Data sent to framework for the following");
mParent->mContext.mSubscriptionObj->requestData(diItemlist, mParent); mParent->mContext.mSubscriptionObj->requestData(diItemlist, mParent);
} else if (!dataItemsToSubscribe.empty()) { } else if (!dataItemsToSubscribe.empty()) {
LOC_LOGD("Subscribe Request sent to framework for the following"); LOC_LOGd("Subscribe Request sent to framework for the following");
mParent->logMe(dataItemsToSubscribe); mParent->logMe(dataItemsToSubscribe);
mParent->mContext.mSubscriptionObj->subscribe( mParent->mContext.mSubscriptionObj->subscribe(
containerTransfer<unordered_set<DataItemId>, list<DataItemId>>( containerTransfer<unordered_set<DataItemId>, list<DataItemId>>(
@ -177,7 +174,7 @@ void SystemStatusOsObserver::updateSubscription(
if (nullptr != mParent->mContext.mSubscriptionObj) { if (nullptr != mParent->mContext.mSubscriptionObj) {
// Send subscription set to framework // Send subscription set to framework
if (!dataItemsToSubscribe.empty()) { if (!dataItemsToSubscribe.empty()) {
LOC_LOGD("Subscribe Request sent to framework for the following"); LOC_LOGd("Subscribe Request sent to framework for the following");
mParent->logMe(dataItemsToSubscribe); mParent->logMe(dataItemsToSubscribe);
mParent->mContext.mSubscriptionObj->subscribe( mParent->mContext.mSubscriptionObj->subscribe(
@ -188,7 +185,7 @@ void SystemStatusOsObserver::updateSubscription(
// Send unsubscribe to framework // Send unsubscribe to framework
if (!dataItemsToUnsubscribe.empty()) { if (!dataItemsToUnsubscribe.empty()) {
LOC_LOGD("Unsubscribe Request sent to framework for the following"); LOC_LOGd("Unsubscribe Request sent to framework for the following");
mParent->logMe(dataItemsToUnsubscribe); mParent->logMe(dataItemsToUnsubscribe);
mParent->mContext.mSubscriptionObj->unsubscribe( mParent->mContext.mSubscriptionObj->unsubscribe(
@ -230,7 +227,7 @@ void SystemStatusOsObserver::unsubscribe(
&dataItemsToUnsubscribe, nullptr); &dataItemsToUnsubscribe, nullptr);
if (nullptr != mParent->mContext.mSubscriptionObj && !dataItemsToUnsubscribe.empty()) { if (nullptr != mParent->mContext.mSubscriptionObj && !dataItemsToUnsubscribe.empty()) {
LOC_LOGD("Unsubscribe Request sent to framework for the following data items"); LOC_LOGd("Unsubscribe Request sent to framework for the following data items");
mParent->logMe(dataItemsToUnsubscribe); mParent->logMe(dataItemsToUnsubscribe);
// Send unsubscribe to framework // Send unsubscribe to framework
@ -271,7 +268,7 @@ void SystemStatusOsObserver::unsubscribeAll(IDataItemObserver* client)
if (!dataItemsToUnsubscribe.empty() && if (!dataItemsToUnsubscribe.empty() &&
nullptr != mParent->mContext.mSubscriptionObj) { nullptr != mParent->mContext.mSubscriptionObj) {
LOC_LOGD("Unsubscribe Request sent to framework for the following data items"); LOC_LOGd("Unsubscribe Request sent to framework for the following data items");
mParent->logMe(dataItemsToUnsubscribe); mParent->logMe(dataItemsToUnsubscribe);
// Send unsubscribe to framework // Send unsubscribe to framework
@ -347,19 +344,16 @@ void SystemStatusOsObserver::notify(const list<IDataItemCore*>& dlist)
}; };
if (!dlist.empty()) { if (!dlist.empty()) {
vector<IDataItemCore*> dataItemVec(dlist.size()); vector<IDataItemCore*> dataItemVec;
for (auto each : dlist) { for (auto each : dlist) {
IDataItemCore* di = DataItemsFactoryProxy::createNewDataItem(each->getId()); IDataItemCore* di = DataItemsFactoryProxy::createNewDataItem(each);
if (nullptr == di) { if (nullptr == di) {
LOC_LOGw("Unable to create dataitem:%d", each->getId()); LOC_LOGw("Unable to create dataitem:%d", each->getId());
continue; continue;
} }
// Copy contents into the newly created data item
di->copy(each);
// add this dataitem if updated from last one // add this dataitem if updated from last one
dataItemVec.push_back(di); dataItemVec.push_back(di);
IF_LOC_LOGD { IF_LOC_LOGD {
@ -381,7 +375,7 @@ void SystemStatusOsObserver::notify(const list<IDataItemCore*>& dlist)
void SystemStatusOsObserver::turnOn(DataItemId dit, int timeOut) void SystemStatusOsObserver::turnOn(DataItemId dit, int timeOut)
{ {
if (nullptr == mContext.mFrameworkActionReqObj) { if (nullptr == mContext.mFrameworkActionReqObj) {
LOC_LOGE("%s:%d]: Framework action request object is NULL", __func__, __LINE__); LOC_LOGe("Framework action request object is NULL");
return; return;
} }
@ -392,7 +386,7 @@ void SystemStatusOsObserver::turnOn(DataItemId dit, int timeOut)
// Add reference count as 1 and add dataitem to map // Add reference count as 1 and add dataitem to map
pair<DataItemId, int> cpair(dit, 1); pair<DataItemId, int> cpair(dit, 1);
mActiveRequestCount.insert(cpair); mActiveRequestCount.insert(cpair);
LOC_LOGD("Sending turnOn request"); LOC_LOGd("Sending turnOn request");
// Send action turn on to framework // Send action turn on to framework
struct HandleTurnOnMsg : public LocMsg { struct HandleTurnOnMsg : public LocMsg {
@ -413,14 +407,14 @@ void SystemStatusOsObserver::turnOn(DataItemId dit, int timeOut)
else { else {
// Found in map, update reference count // Found in map, update reference count
citer->second++; citer->second++;
LOC_LOGD("turnOn - Data item:%d Num_refs:%d", dit, citer->second); LOC_LOGd("turnOn - Data item:%d Num_refs:%d", dit, citer->second);
} }
} }
void SystemStatusOsObserver::turnOff(DataItemId dit) void SystemStatusOsObserver::turnOff(DataItemId dit)
{ {
if (nullptr == mContext.mFrameworkActionReqObj) { if (nullptr == mContext.mFrameworkActionReqObj) {
LOC_LOGE("%s:%d]: Framework action request object is NULL", __func__, __LINE__); LOC_LOGe("Framework action request object is NULL");
return; return;
} }
@ -429,7 +423,7 @@ void SystemStatusOsObserver::turnOff(DataItemId dit)
if (citer != mActiveRequestCount.end()) { if (citer != mActiveRequestCount.end()) {
// found // found
citer->second--; citer->second--;
LOC_LOGD("turnOff - Data item:%d Remaining:%d", dit, citer->second); LOC_LOGd("turnOff - Data item:%d Remaining:%d", dit, citer->second);
if(citer->second == 0) { if(citer->second == 0) {
// if this was last reference, remove item from map and turn off module // if this was last reference, remove item from map and turn off module
mActiveRequestCount.erase(citer); mActiveRequestCount.erase(citer);
@ -542,7 +536,7 @@ void SystemStatusOsObserver::sendCachedDataItems(
if (citer != mDataItemCache.end()) { if (citer != mDataItemCache.end()) {
string dv; string dv;
citer->second->stringify(dv); citer->second->stringify(dv);
LOC_LOGI("DataItem: %s >> %s", dv.c_str(), clientName.c_str()); LOC_LOGi("DataItem: %s >> %s", dv.c_str(), clientName.c_str());
dataItems.push_front(citer->second); dataItems.push_front(citer->second);
} }
} }
@ -564,27 +558,22 @@ bool SystemStatusOsObserver::updateCache(IDataItemCore* d)
// handling it, so SystemStatusOsObserver also doesn't. // handling it, so SystemStatusOsObserver also doesn't.
// So it has to be true to proceed. // So it has to be true to proceed.
if (nullptr != d && mSystemStatus->eventDataItemNotify(d)) { if (nullptr != d && mSystemStatus->eventDataItemNotify(d)) {
dataItemUpdated = true;
auto citer = mDataItemCache.find(d->getId()); auto citer = mDataItemCache.find(d->getId());
if (citer == mDataItemCache.end()) { if (citer == mDataItemCache.end()) {
// New data item; not found in cache // New data item; not found in cache
IDataItemCore* dataitem = DataItemsFactoryProxy::createNewDataItem(d->getId()); IDataItemCore* dataitem = DataItemsFactoryProxy::createNewDataItem(d);
if (nullptr != dataitem) { if (nullptr != dataitem) {
// Copy the contents of the data item
dataitem->copy(d);
// Insert in mDataItemCache // Insert in mDataItemCache
mDataItemCache.insert(std::make_pair(d->getId(), dataitem)); mDataItemCache.insert(std::make_pair(d->getId(), dataitem));
dataItemUpdated = true;
} }
} else { } else {
// Found in cache; Update cache if necessary // Found in cache; Update cache if necessary
citer->second->copy(d, &dataItemUpdated); citer->second->copyFrom(d);
}
if (dataItemUpdated) {
LOC_LOGV("DataItem:%d updated:%d", d->getId(), dataItemUpdated);
} }
} }
LOC_LOGd("DataItem:%d updated:%d", d->getId(), dataItemUpdated);
return dataItemUpdated; return dataItemUpdated;
} }

View file

@ -0,0 +1,891 @@
/* Copyright (c) 2020, 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 "DataItemConcreteTypes.h"
#include <inttypes.h>
#include <log_util.h>
#define ENH_FIELD_ENABLED "IS_QUALCOMM_ENHANCED_PROVIDER_ENABLED"
#define AIRPLANEMODE_FIELD_MODE "IS_AIRPLANE_MODE_ON"
#define ENH_FIELD_ENABLED "IS_QUALCOMM_ENHANCED_PROVIDER_ENABLED"
#define GPSSTATE_FIELD_ENABLED "IS_GPS_PROVIDER_ENABLED"
#define NLPSTATUS_FIELD_ENABLED "IS_NETWORK_PROVIDER_ENABLED"
#define WIFIHARDWARESTATE_FIELD_ENABLED "IS_WIFI_HARDWARE_ON"
#define SCREENSTATE_FIELD_ENABLED "IS_SCREEN_ON"
#define POWERCONNECTSTATE_FIELD_ENABLED "IS_POWER_CONNECTED"
#define TIMEZONECHANGE_FIELD_ENABLED "IS_TIMEZONE_CHANGED"
#define TIMECHANGE_FIELD_ENABLED "IS_TIME_CHANGED"
#define TIMECHANGE_FIELD_CURRENT_TIME_MILLIS "CURR_TIME_MILLIS"
#define TIMECHANGE_FIELD_RAW_OFFSET_TZ "RAW_OFFSET_TZ"
#define TIMECHANGE_FIELD_DST_OFFSET_TZ "DST_OFFSET_TZ"
#define SHUTDOWN_FIELD_ENABLED "IS_SHUTDOWN"
#define ASSISTEDGPS_FIELD_ENABLED "IS_ASSISTED_GPS_ENABLED"
#define NETWORKINFO_CARD "ACTIVE_NETWORK_INFO"
#define NETWORKINFO_FIELD_TYPE "TYPE"
#define NETWORKINFO_FIELD_TYPENAME "TYPE_NAME"
#define NETWORKINFO_FIELD_SUBTYPENAME "SUB_TYPE_NAME"
#define NETWORKINFO_FIELD_AVAILABLE "IS_AVAILABLE"
#define NETWORKINFO_FIELD_CONNECTED "IS_CONNECTED"
#define NETWORKINFO_FIELD_ROAMING "IS_ROAMING"
#define NETWORKINFO_FIELD_NETWORKHANDLE_0 "NETWORK_HANDLE_0"
#define NETWORKINFO_FIELD_NETWORKHANDLE_1 "NETWORK_HANDLE_1"
#define NETWORKINFO_FIELD_NETWORKHANDLE_2 "NETWORK_HANDLE_2"
#define NETWORKINFO_FIELD_NETWORKHANDLE_3 "NETWORK_HANDLE_3"
#define NETWORKINFO_FIELD_NETWORKHANDLE_4 "NETWORK_HANDLE_4"
#define NETWORKINFO_FIELD_NETWORKHANDLE_5 "NETWORK_HANDLE_5"
#define NETWORKINFO_FIELD_NETWORKHANDLE_6 "NETWORK_HANDLE_6"
#define NETWORKINFO_FIELD_NETWORKHANDLE_7 "NETWORK_HANDLE_7"
#define NETWORKINFO_FIELD_NETWORKHANDLE_8 "NETWORK_HANDLE_8"
#define NETWORKINFO_FIELD_NETWORKHANDLE_9 "NETWORK_HANDLE_9"
#define SERVICESTATUS_FIELD_STATE "CELL_NETWORK_STATUS"
#define MODEL_FIELD_NAME "MODEL"
#define MANUFACTURER_FIELD_NAME "MANUFACTURER"
#define OSSTATUS_CARD "ACTIVE_NETWORK_INFO"
#define RILSERVICEINFO_CARD "RIL-SERVICE-INFO"
#define RILSERVICEINFO_FIELD_ARIF_TYPE_MASK "SUPPORTED-AIRINTERFACE-TYPE-MASK"
#define RILSERVICEINFO_FIELD_CARRIER_ARIF_TYPE "CARRIER-AIRINTERFACE-TYPE"
#define RILSERVICEINFO_FIELD_CARRIER_MCC "MOBILE-COUNTRY-CODE"
#define RILSERVICEINFO_FIELD_CARRIER_MNC "MOBILE-NETWORK-CODE"
#define RILSERVICEINFO_FIELD_CARRIER_NAME "HOME-CARRIER-NAME"
#define RILCELLINFO_CARD "RIL-CELL-UPDATE"
#define RILCELLINFO_FIELD_NETWORK_STATUS "NETWORK-STATUS"
#define RILCELLINFO_FIELD_RIL_TECH_TYPE "RIL-TECH-TYPE"
#define RILLCELLINFO_FIELD_MCC "MOBILE-COUNTRY-CODE"
#define RILLCELLINFO_FIELD_MNC "MOBILE-NETWORK-CODE"
#define RILLCELLINFO_FIELD_LAC "LOCATION-AREA-CODE"
#define RILLCELLINFO_FIELD_CID "CELL-ID"
#define RILLCELLINFO_FIELD_SID "SYSTEM-ID"
#define RILLCELLINFO_FIELD_NID "NETWORK-ID"
#define RILLCELLINFO_FIELD_BSID "BASE-STATION-ID"
#define RILLCELLINFO_FIELD_BSLAT "BASE-STATION-LATITUDE"
#define RILLCELLINFO_FIELD_BSLON "BASE-STATION-LONGITUDE"
#define RILLCELLINFO_FIELD_UTC_TIME_OFFSET "TIME-ZONE-OFFSET"
#define RILLCELLINFO_FIELD_DAYLIGHT_TIMEZONE "IN-DAY-LIGHT-SAVING"
#define RILLCELLINFO_FIELD_TAC "TRACKING-AREA-CODE"
#define RILLCELLINFO_FIELD_PCI "PHYSICAL-CELL-ID"
#define RILLCELLINFO_FIELD_NB_MODE "NB-MODE"
#define RILLCELLINFO_FIELD_NB_EARFCN_OFFSET "NB-EARFCN-OFFSET"
#define WIFI_SUPPLICANT_FIELD_STATE "WIFI-SUPPLICANT-STATE"
#define TAC_FIELD_NAME "TAC"
#define MCCMNC_FIELD_NAME "MCCMNC"
#define BTLESCANDETAILS_FIELD_VALID "BTLE_VALID_DEV"
#define BTLESCANDETAILS_FIELD_RSSI "BTLE_DEV_RSSI"
#define BTLESCANDETAILS_FIELD_MAC "BTLE_DEV_MAC"
#define BTLESCANDETAILS_FIELD_SCANREQ "BTLE_SCAN_REQ_TIME"
#define BTLESCANDETAILS_FIELD_SCANSTART "BTLE_SCAN_START_TIME"
#define BTLESCANDETAILS_FIELD_SCANRECV "BTLE_SCAN_RECV_TIME"
#define BTLESCANDETAILS_FIELD_SCANERROR "BTLE_SCAN_ERR"
#define BTSCANDETAILS_FIELD_VALID "BT_VALID_DEV"
#define BTSCANDETAILS_FIELD_RSSI "BT_DEV_RSSI"
#define BTSCANDETAILS_FIELD_MAC "BT_DEV_MAC"
#define BTSCANDETAILS_FIELD_SCANREQ "BT_SCAN_REQ_TIME"
#define BTSCANDETAILS_FIELD_SCANSTART "BT_SCAN_START_TIME"
#define BTSCANDETAILS_FIELD_SCANRECV "BT_SCAN_RECV_TIME"
#define BTSCANDETAILS_FIELD_SCANERROR "BT_SCAN_ERR"
#define OEM_GTP_UPLAOD_TRIGGER_READY_FIELD_NAME "OEM-GTP-UPLOAD-TRIGGER-READY"
#define BATTERYLEVEL_FIELD_BATTERY_PCT "BATTERY_PCT"
namespace loc_core
{
// stringify
void AirplaneModeDataItem::stringify(string& valueStr) {
int32_t result = 0;
ENTRY_LOG();
do {
STRINGIFY_ERROR_CHECK_AND_DOWN_CAST(AirplaneModeDataItem, AIRPLANEMODE_DATA_ITEM_ID);
valueStr.clear ();
valueStr = AIRPLANEMODE_FIELD_MODE;
valueStr += ": ";
valueStr += (d->mMode) ? ("true") : ("false");
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
}
void ENHDataItem::stringify(string& valueStr) {
int32_t result = 0;
ENTRY_LOG();
do {
STRINGIFY_ERROR_CHECK_AND_DOWN_CAST(ENHDataItem, ENH_DATA_ITEM_ID);
valueStr.clear ();
valueStr = ENH_FIELD_ENABLED;
valueStr += ": ";
valueStr += (d->mEnabled) ? ("true") : ("false");
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
}
void GPSStateDataItem::stringify(string& valueStr) {
int32_t result = 0;
ENTRY_LOG();
do {
STRINGIFY_ERROR_CHECK_AND_DOWN_CAST(GPSStateDataItem, GPSSTATE_DATA_ITEM_ID);
valueStr.clear ();
valueStr = GPSSTATE_FIELD_ENABLED;
valueStr += ": ";
valueStr += (d->mEnabled) ? ("true") : ("false");
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
}
void NLPStatusDataItem::stringify(string& valueStr) {
int32_t result = 0;
ENTRY_LOG();
do {
STRINGIFY_ERROR_CHECK_AND_DOWN_CAST(NLPStatusDataItem, NLPSTATUS_DATA_ITEM_ID);
valueStr.clear ();
valueStr = NLPSTATUS_FIELD_ENABLED;
valueStr += ": ";
valueStr += (d->mEnabled) ? ("true") : ("false");
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
}
void WifiHardwareStateDataItem::stringify(string& valueStr) {
int32_t result = 0;
ENTRY_LOG();
do {
STRINGIFY_ERROR_CHECK_AND_DOWN_CAST(WifiHardwareStateDataItem,
WIFIHARDWARESTATE_DATA_ITEM_ID);
valueStr.clear ();
valueStr = WIFIHARDWARESTATE_FIELD_ENABLED;
valueStr += ": ";
valueStr += (d->mEnabled) ? ("true") : ("false");
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
}
void ScreenStateDataItem::stringify(string& valueStr) {
int32_t result = 0;
ENTRY_LOG();
do {
STRINGIFY_ERROR_CHECK_AND_DOWN_CAST(ScreenStateDataItem, SCREEN_STATE_DATA_ITEM_ID);
valueStr.clear ();
valueStr = SCREENSTATE_FIELD_ENABLED;
valueStr += ": ";
valueStr += (d->mState) ? ("true") : ("false");
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
}
void PowerConnectStateDataItem::stringify(string& valueStr) {
int32_t result = 0;
ENTRY_LOG();
do {
STRINGIFY_ERROR_CHECK_AND_DOWN_CAST(PowerConnectStateDataItem,
POWER_CONNECTED_STATE_DATA_ITEM_ID);
valueStr.clear ();
valueStr = POWERCONNECTSTATE_FIELD_ENABLED;
valueStr += ": ";
valueStr += (d->mState) ? ("true") : ("false");
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
}
void BatteryLevelDataItem::stringify(string& valueStr) {
int32_t result = 0;
ENTRY_LOG();
do {
STRINGIFY_ERROR_CHECK_AND_DOWN_CAST(BatteryLevelDataItem, BATTERY_LEVEL_DATA_ITEM_ID);
valueStr.clear ();
valueStr += BATTERYLEVEL_FIELD_BATTERY_PCT;
valueStr += ": ";
char state [12];
snprintf (state, 12, "%d", d->mBatteryPct);
valueStr += string (state);
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
}
void TimeZoneChangeDataItem::stringify(string& valueStr) {
int32_t result = 0;
ENTRY_LOG();
do {
STRINGIFY_ERROR_CHECK_AND_DOWN_CAST(TimeZoneChangeDataItem, TIMEZONE_CHANGE_DATA_ITEM_ID);
valueStr.clear ();
valueStr = TIMEZONECHANGE_FIELD_ENABLED;
valueStr += ": ";
valueStr += "true";
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
}
void TimeChangeDataItem::stringify(string& valueStr) {
int32_t result = 0;
ENTRY_LOG();
do {
STRINGIFY_ERROR_CHECK_AND_DOWN_CAST(TimeChangeDataItem, TIME_CHANGE_DATA_ITEM_ID);
valueStr.clear ();
valueStr = TIMECHANGE_FIELD_ENABLED;
valueStr += ": ";
valueStr += "true";
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
}
void ShutdownStateDataItem::stringify(string& valueStr) {
int32_t result = 0;
ENTRY_LOG();
do {
STRINGIFY_ERROR_CHECK_AND_DOWN_CAST(ShutdownStateDataItem, SHUTDOWN_STATE_DATA_ITEM_ID);
valueStr.clear ();
valueStr = SHUTDOWN_FIELD_ENABLED;
valueStr += ": ";
valueStr += (d->mState) ? ("true") : ("false");
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
}
void AssistedGpsDataItem::stringify(string& valueStr) {
int32_t result = 0;
ENTRY_LOG();
do {
STRINGIFY_ERROR_CHECK_AND_DOWN_CAST(AssistedGpsDataItem, ASSISTED_GPS_DATA_ITEM_ID);
valueStr.clear ();
valueStr = ASSISTEDGPS_FIELD_ENABLED;
valueStr += ": ";
valueStr += (d->mEnabled) ? ("true") : ("false");
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
}
void NetworkInfoDataItem::stringify(string& valueStr) {
int32_t result = 0;
ENTRY_LOG();
do {
STRINGIFY_ERROR_CHECK_AND_DOWN_CAST(NetworkInfoDataItem, NETWORKINFO_DATA_ITEM_ID);
valueStr.clear ();
valueStr = NETWORKINFO_CARD;
valueStr += "::";
valueStr += NETWORKINFO_FIELD_TYPE;
valueStr += "s_MASK: ";
char type [12];
snprintf (type, 12, "%" PRIu64, mAllTypes);
valueStr += string (type);
valueStr += ", ";
valueStr += NETWORKINFO_FIELD_TYPENAME;
valueStr += ": ";
valueStr += d->mTypeName;
valueStr += ", ";
valueStr += NETWORKINFO_FIELD_SUBTYPENAME;
valueStr += ": ";
valueStr += d->mSubTypeName;
valueStr += ", ";
valueStr += NETWORKINFO_FIELD_AVAILABLE;
valueStr += ": ";
valueStr += (d->mAvailable) ? ("true") : ("false");
valueStr += ", ";
valueStr += NETWORKINFO_FIELD_CONNECTED;
valueStr += ": ";
valueStr += (d->mConnected) ? ("true") : ("false");
valueStr += ", ";
valueStr += NETWORKINFO_FIELD_ROAMING;
valueStr += ": ";
valueStr += (d->mRoaming) ? ("true") : ("false");
valueStr += ", ";
valueStr += NETWORKINFO_FIELD_NETWORKHANDLE_0;
valueStr += ": ";
valueStr += d->mAllNetworkHandles[0].toString();
valueStr += ", ";
valueStr += NETWORKINFO_FIELD_NETWORKHANDLE_1;
valueStr += ": ";
valueStr += d->mAllNetworkHandles[1].toString();
valueStr += ", ";
valueStr += NETWORKINFO_FIELD_NETWORKHANDLE_2;
valueStr += ": ";
valueStr += d->mAllNetworkHandles[2].toString();
valueStr += ", ";
valueStr += NETWORKINFO_FIELD_NETWORKHANDLE_3;
valueStr += ": ";
valueStr += d->mAllNetworkHandles[3].toString();
valueStr += ", ";
valueStr += NETWORKINFO_FIELD_NETWORKHANDLE_4;
valueStr += ": ";
valueStr += d->mAllNetworkHandles[4].toString();
valueStr += ", ";
valueStr += NETWORKINFO_FIELD_NETWORKHANDLE_5;
valueStr += ": ";
valueStr += d->mAllNetworkHandles[5].toString();
valueStr += ", ";
valueStr += NETWORKINFO_FIELD_NETWORKHANDLE_6;
valueStr += ": ";
valueStr += d->mAllNetworkHandles[6].toString();
valueStr += ", ";
valueStr += NETWORKINFO_FIELD_NETWORKHANDLE_7;
valueStr += ": ";
valueStr += d->mAllNetworkHandles[7].toString();
valueStr += ", ";
valueStr += NETWORKINFO_FIELD_NETWORKHANDLE_8;
valueStr += ": ";
valueStr += d->mAllNetworkHandles[8].toString();
valueStr += ", ";
valueStr += NETWORKINFO_FIELD_NETWORKHANDLE_9;
valueStr += ": ";
valueStr += d->mAllNetworkHandles[9].toString();
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
}
void ServiceStatusDataItem::stringify(string& valueStr) {
int32_t result = 0;
ENTRY_LOG();
do {
STRINGIFY_ERROR_CHECK_AND_DOWN_CAST(ServiceStatusDataItem, SERVICESTATUS_DATA_ITEM_ID);
valueStr.clear ();
valueStr += SERVICESTATUS_FIELD_STATE;
valueStr += ": ";
char state [12];
snprintf (state, 12, "%d", d->mServiceState);
valueStr += string (state);
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
}
void ModelDataItem::stringify(string& valueStr) {
int32_t result = 0;
ENTRY_LOG();
do {
STRINGIFY_ERROR_CHECK_AND_DOWN_CAST(ModelDataItem, MODEL_DATA_ITEM_ID);
valueStr.clear ();
valueStr += MODEL_FIELD_NAME;
valueStr += ": ";
valueStr += d->mModel;
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
}
void ManufacturerDataItem::stringify(string& valueStr) {
int32_t result = 0;
ENTRY_LOG();
do {
STRINGIFY_ERROR_CHECK_AND_DOWN_CAST(ManufacturerDataItem, MANUFACTURER_DATA_ITEM_ID);
valueStr.clear ();
valueStr += MANUFACTURER_FIELD_NAME;
valueStr += ": ";
valueStr += d->mManufacturer;
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
}
void WifiSupplicantStatusDataItem::stringify(string& valueStr) {
int32_t result = 0;
ENTRY_LOG();
do {
STRINGIFY_ERROR_CHECK_AND_DOWN_CAST(WifiSupplicantStatusDataItem,
WIFI_SUPPLICANT_STATUS_DATA_ITEM_ID);
valueStr += "Attach state: ";
char t[50];
memset (t, '\0', 50);
snprintf (t, 50, "%d", d->mState);
valueStr += t;
valueStr += ", Mac address valid: ";
valueStr += (d->mApMacAddressValid) ? ("true") : ("false");
valueStr += ", AP MAC address: ";
memset (t, '\0', 50);
snprintf(t, 50, "[%02x:%02x:%02x:%02x:%02x:%02x]", d->mApMacAddress[0], d->mApMacAddress[1],
d->mApMacAddress[2], d->mApMacAddress[3], d->mApMacAddress[4], d->mApMacAddress[5]);
valueStr += t;
valueStr += ", Wifi-Ap SSID Valid: ";
valueStr += (d->mWifiApSsidValid) ? ("true") : ("false");
valueStr += ", SSID: ";
valueStr += d->mWifiApSsid;
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
}
void TacDataItem::stringify(string& valueStr) {
int32_t result = 0;
ENTRY_LOG();
do {
STRINGIFY_ERROR_CHECK_AND_DOWN_CAST(TacDataItem, TAC_DATA_ITEM_ID);
valueStr.clear ();
valueStr += TAC_FIELD_NAME;
valueStr += ": ";
valueStr += d->mValue;
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
}
void MccmncDataItem::stringify(string& valueStr) {
int32_t result = 0;
ENTRY_LOG();
do {
STRINGIFY_ERROR_CHECK_AND_DOWN_CAST(MccmncDataItem, MCCMNC_DATA_ITEM_ID);
valueStr.clear ();
valueStr += MCCMNC_FIELD_NAME;
valueStr += ": ";
valueStr += d->mValue;
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
}
void BtLeDeviceScanDetailsDataItem::stringify(string& valueStr) {
int32_t result = 0;
ENTRY_LOG();
do {
STRINGIFY_ERROR_CHECK_AND_DOWN_CAST(BtLeDeviceScanDetailsDataItem, BTLE_SCAN_DATA_ITEM_ID);
valueStr.clear ();
valueStr += BTLESCANDETAILS_FIELD_VALID;
valueStr += ": ";
valueStr += d->mValidSrnData;
valueStr += ", ";
valueStr += BTLESCANDETAILS_FIELD_RSSI;
valueStr += ": ";
valueStr += d->mApSrnRssi;
valueStr += ", ";
char t[10];
memset (t, '\0', 10);
valueStr += BTLESCANDETAILS_FIELD_MAC;
valueStr += ": ";
snprintf(t, 10, "[%02x:%02x:%02x:%02x:%02x:%02x]", d->mApSrnMacAddress[0],
d->mApSrnMacAddress[1], d->mApSrnMacAddress[2], d->mApSrnMacAddress[3],
d->mApSrnMacAddress[4], d->mApSrnMacAddress[5]);
valueStr += t;
valueStr += ", ";
valueStr += BTLESCANDETAILS_FIELD_SCANREQ;
valueStr += ": ";
valueStr += d->mApSrnTimestamp;
valueStr += ", ";
valueStr += BTLESCANDETAILS_FIELD_SCANSTART;
valueStr += ": ";
valueStr += d->mRequestTimestamp;
valueStr += ", ";
valueStr += BTLESCANDETAILS_FIELD_SCANRECV;
valueStr += ": ";
valueStr += d->mReceiveTimestamp;
valueStr += ", ";
valueStr += BTLESCANDETAILS_FIELD_SCANERROR;
valueStr += ": ";
valueStr += d->mErrorCause;
valueStr += ", ";
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
}
void BtDeviceScanDetailsDataItem::stringify(string& valueStr) {
int32_t result = 0;
ENTRY_LOG();
do {
STRINGIFY_ERROR_CHECK_AND_DOWN_CAST(BtDeviceScanDetailsDataItem, BT_SCAN_DATA_ITEM_ID);
valueStr.clear ();
valueStr += BTSCANDETAILS_FIELD_VALID;
valueStr += ": ";
valueStr += d->mValidSrnData;
valueStr += ", ";
valueStr += BTSCANDETAILS_FIELD_RSSI;
valueStr += ": ";
valueStr += d->mApSrnRssi;
valueStr += ", ";
char t[10];
memset (t, '\0', 10);
valueStr += BTSCANDETAILS_FIELD_MAC;
valueStr += ": ";
snprintf(t, 10, "[%02x:%02x:%02x:%02x:%02x:%02x]", d->mApSrnMacAddress[0],
d->mApSrnMacAddress[1], d->mApSrnMacAddress[2], d->mApSrnMacAddress[3],
d->mApSrnMacAddress[4], d->mApSrnMacAddress[5]);
valueStr += t;
valueStr += ", ";
valueStr += BTSCANDETAILS_FIELD_SCANREQ;
valueStr += ": ";
valueStr += d->mApSrnTimestamp;
valueStr += ", ";
valueStr += BTSCANDETAILS_FIELD_SCANSTART;
valueStr += ": ";
valueStr += d->mRequestTimestamp;
valueStr += ", ";
valueStr += BTSCANDETAILS_FIELD_SCANRECV;
valueStr += ": ";
valueStr += d->mReceiveTimestamp;
valueStr += ", ";
valueStr += BTSCANDETAILS_FIELD_SCANERROR;
valueStr += ": ";
valueStr += d->mErrorCause;
valueStr += ", ";
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
}
// copy
int32_t AirplaneModeDataItem::copyFrom(IDataItemCore* src) {
int32_t result = -1;
ENTRY_LOG();
do {
COPIER_ERROR_CHECK_AND_DOWN_CAST(AirplaneModeDataItem, AIRPLANEMODE_DATA_ITEM_ID);
if (s->mMode == d->mMode) { result = 0; break; }
s->mMode = d->mMode;
result = 0;
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
return result;
}
int32_t ENHDataItem::copyFrom(IDataItemCore* src) {
int32_t result = -1;
ENTRY_LOG();
do {
COPIER_ERROR_CHECK_AND_DOWN_CAST(ENHDataItem, ENH_DATA_ITEM_ID);
if (s->mEnabled == d->mEnabled) { result = true; break; }
s->mEnabled = d->mEnabled;
result = 0;
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
return result;
}
int32_t GPSStateDataItem::copyFrom(IDataItemCore* src) {
int32_t result = -1;
ENTRY_LOG();
do {
COPIER_ERROR_CHECK_AND_DOWN_CAST(GPSStateDataItem, GPSSTATE_DATA_ITEM_ID);
if (s->mEnabled == d->mEnabled) { result = 0; break; }
s->mEnabled = d->mEnabled;
result = 0;
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
return result;
}
int32_t NLPStatusDataItem::copyFrom(IDataItemCore* src) {
int32_t result = -1;
ENTRY_LOG();
do {
COPIER_ERROR_CHECK_AND_DOWN_CAST(NLPStatusDataItem, NLPSTATUS_DATA_ITEM_ID);
if (s->mEnabled == d->mEnabled) { result = 0; break; }
s->mEnabled = d->mEnabled;
result = 0;
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
return result;
}
int32_t WifiHardwareStateDataItem::copyFrom(IDataItemCore* src) {
int32_t result = -1;
ENTRY_LOG();
do {
COPIER_ERROR_CHECK_AND_DOWN_CAST(WifiHardwareStateDataItem, WIFIHARDWARESTATE_DATA_ITEM_ID);
if (s->mEnabled == d->mEnabled) { result = 0; break; }
s->mEnabled = d->mEnabled;
result = 0;
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
return result;
}
int32_t ScreenStateDataItem::copyFrom(IDataItemCore* src) {
int32_t result = -1;
ENTRY_LOG();
do {
COPIER_ERROR_CHECK_AND_DOWN_CAST(ScreenStateDataItem, SCREEN_STATE_DATA_ITEM_ID);
if (s->mState == d->mState) { result = 0; break; }
s->mState = d->mState;
result = 0;
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
return result;
}
int32_t PowerConnectStateDataItem::copyFrom(IDataItemCore* src) {
int32_t result = -1;
ENTRY_LOG();
do {
COPIER_ERROR_CHECK_AND_DOWN_CAST(PowerConnectStateDataItem,
POWER_CONNECTED_STATE_DATA_ITEM_ID);
if (s->mState == d->mState) { result = 0; break; }
s->mState = d->mState;
result = 0;
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
return result;
}
int32_t BatteryLevelDataItem::copyFrom(IDataItemCore* src) {
int32_t result = -1;
ENTRY_LOG();
do {
COPIER_ERROR_CHECK_AND_DOWN_CAST(BatteryLevelDataItem, BATTERY_LEVEL_DATA_ITEM_ID);
if (s->mBatteryPct == d->mBatteryPct) { result = 0; break; }
s->mBatteryPct = d->mBatteryPct;
result = 0;
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
return result;
}
int32_t TimeZoneChangeDataItem::copyFrom(IDataItemCore* src) {
int32_t result = -1;
ENTRY_LOG();
do {
COPIER_ERROR_CHECK_AND_DOWN_CAST(TimeZoneChangeDataItem, TIMEZONE_CHANGE_DATA_ITEM_ID);
if (s->mCurrTimeMillis == d->mCurrTimeMillis &&
s->mRawOffsetTZ == d->mRawOffsetTZ &&
s->mDstOffsetTZ == d->mDstOffsetTZ) {
result = 0;
break;
}
s->mCurrTimeMillis = d->mCurrTimeMillis;
s->mRawOffsetTZ = d->mRawOffsetTZ;
s->mDstOffsetTZ = d->mDstOffsetTZ;
result = 0;
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
return result;
}
int32_t TimeChangeDataItem::copyFrom(IDataItemCore* src) {
int32_t result = -1;
ENTRY_LOG();
do {
COPIER_ERROR_CHECK_AND_DOWN_CAST(TimeChangeDataItem, TIME_CHANGE_DATA_ITEM_ID);
if (s->mCurrTimeMillis == d->mCurrTimeMillis &&
s->mRawOffsetTZ == d->mRawOffsetTZ &&
s->mDstOffsetTZ == d->mDstOffsetTZ) {
result = 0;
break;
}
s->mCurrTimeMillis = d->mCurrTimeMillis;
s->mRawOffsetTZ = d->mRawOffsetTZ;
s->mDstOffsetTZ = d->mDstOffsetTZ;
result = 0;
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
return result;
}
int32_t ShutdownStateDataItem::copyFrom(IDataItemCore* src) {
int32_t result = -1;
ENTRY_LOG();
do {
COPIER_ERROR_CHECK_AND_DOWN_CAST(ShutdownStateDataItem, SHUTDOWN_STATE_DATA_ITEM_ID);
if (s->mState == d->mState) { result = 0; break; }
s->mState = d->mState;
result = 0;
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
return result;
}
int32_t AssistedGpsDataItem::copyFrom(IDataItemCore* src) {
int32_t result = -1;
ENTRY_LOG();
do {
COPIER_ERROR_CHECK_AND_DOWN_CAST(AssistedGpsDataItem, ASSISTED_GPS_DATA_ITEM_ID);
if (s->mEnabled == d->mEnabled) { result = 0; break; }
s->mEnabled = d->mEnabled;
result = 0;
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
return result;
}
int32_t NetworkInfoDataItem::copyFrom(IDataItemCore* src) {
int32_t result = -1;
ENTRY_LOG();
do {
COPIER_ERROR_CHECK_AND_DOWN_CAST(NetworkInfoDataItem, NETWORKINFO_DATA_ITEM_ID);
NetworkType type = ((NetworkInfoDataItem*)d)->getType();
if ( (s->mAllTypes == d->mAllTypes) &&
(s->getType() == type) && (0 == s->mTypeName.compare(d->mTypeName)) &&
(0 == s->mSubTypeName.compare(d->mSubTypeName)) &&
(s->mAvailable == d->mAvailable) &&
(s->mConnected == d->mConnected) &&
(s->mRoaming == d->mRoaming) &&
(memcmp(s->mAllNetworkHandles, d->mAllNetworkHandles,
sizeof(s->mAllNetworkHandles)) == 0) &&
(s->mNetworkHandle == d->mNetworkHandle) ) {
result = 0;
break;
}
s->mAllTypes = (d->mAllTypes == 0) ? typeToAllTypes(type) : d->mAllTypes;
if (s->getType() != type) { s->setType(type);}
if (0 != s->mTypeName.compare(d->mTypeName)) { s->mTypeName = d->mTypeName;}
if (0 != s->mSubTypeName.compare(d->mSubTypeName)) {s->mSubTypeName = d->mSubTypeName;}
if (s->mAvailable != d->mAvailable) {s->mAvailable = d->mAvailable;}
if (s->mConnected != d->mConnected) {s->mConnected = d->mConnected;}
if (s->mRoaming != d->mRoaming) {s->mRoaming = d->mRoaming;}
if (memcmp(s->mAllNetworkHandles, d->mAllNetworkHandles,
sizeof(s->mAllNetworkHandles)) != 0) {
memcpy(static_cast<void*>(s->mAllNetworkHandles),
static_cast<void *>(d->mAllNetworkHandles), sizeof(s->mAllNetworkHandles));
}
if (s->mNetworkHandle != d->mNetworkHandle) {s->mNetworkHandle = d->mNetworkHandle;}
result = 0;
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
return result;
}
int32_t ServiceStatusDataItem::copyFrom(IDataItemCore* src) {
int32_t result = -1;
ENTRY_LOG();
do {
COPIER_ERROR_CHECK_AND_DOWN_CAST(ServiceStatusDataItem, SERVICESTATUS_DATA_ITEM_ID);
if (s->mServiceState == d->mServiceState) { result = 0; break; }
s->mServiceState = d->mServiceState;
result = 0;
} while (0);
EXIT_LOG("%d", result);
return result;
}
int32_t ModelDataItem::copyFrom(IDataItemCore* src) {
int32_t result = -1;
ENTRY_LOG();
do {
COPIER_ERROR_CHECK_AND_DOWN_CAST(ModelDataItem, MODEL_DATA_ITEM_ID);
if (0 == s->mModel.compare(d->mModel)) { result = 0; break; }
s->mModel = d->mModel;
result = 0;
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
return result;
}
int32_t ManufacturerDataItem::copyFrom(IDataItemCore* src) {
int32_t result = -1;
ENTRY_LOG();
do {
COPIER_ERROR_CHECK_AND_DOWN_CAST(ManufacturerDataItem, MANUFACTURER_DATA_ITEM_ID);
if (0 == s->mManufacturer.compare(d->mManufacturer)) { result = 0; break; }
s->mManufacturer = d->mManufacturer;
result = 0;
} while (0);
EXIT_LOG("%d", result);
return result;
}
int32_t WifiSupplicantStatusDataItem::copyFrom(IDataItemCore* src) {
int32_t result = -1;
ENTRY_LOG();
do {
COPIER_ERROR_CHECK_AND_DOWN_CAST(WifiSupplicantStatusDataItem,
WIFI_SUPPLICANT_STATUS_DATA_ITEM_ID);
if ( (s->mState == d->mState) &&
(s->mApMacAddressValid == d->mApMacAddressValid) &&
(s->mWifiApSsidValid == d->mWifiApSsidValid)) {
// compare mac address
if (memcmp(s->mApMacAddress, d->mApMacAddress, sizeof(s->mApMacAddress)) == 0) {
// compare ssid
if (s->mWifiApSsid.compare(d->mWifiApSsid) == 0) {
result = 0;
break;
}
}
}
if (s->mState != d->mState) { s->mState = d->mState;}
if (s->mApMacAddressValid != d->mApMacAddressValid) {
s->mApMacAddressValid = d->mApMacAddressValid;
}
if (s->mWifiApSsidValid != d->mWifiApSsidValid) {s->mWifiApSsidValid = d->mWifiApSsidValid;}
if (memcmp(s->mApMacAddress, d->mApMacAddress, sizeof(s->mApMacAddress)) != 0) {
memcpy(static_cast<void*>(s->mApMacAddress), static_cast<void *>(d->mApMacAddress),
sizeof(s->mApMacAddress));
}
if (s->mWifiApSsid.compare(d->mWifiApSsid) != 0) {
s->mWifiApSsid = d->mWifiApSsid;
}
result = 0;
} while (0);
EXIT_LOG_WITH_ERROR("%d", result);
return result;
}
int32_t TacDataItem::copyFrom(IDataItemCore* src) {
int32_t result = -1;
ENTRY_LOG();
do {
COPIER_ERROR_CHECK_AND_DOWN_CAST(TacDataItem, TAC_DATA_ITEM_ID);
if (0 == s->mValue.compare(d->mValue)) { result = 0; break; }
s->mValue = d->mValue;
result = 0;
} while (0);
EXIT_LOG("%d", result);
return result;
}
int32_t MccmncDataItem::copyFrom(IDataItemCore* src) {
int32_t result = -1;
ENTRY_LOG();
do {
COPIER_ERROR_CHECK_AND_DOWN_CAST(MccmncDataItem, MCCMNC_DATA_ITEM_ID);
if (0 == s->mValue.compare(d->mValue)) { result = 0; break; }
s->mValue= d->mValue;
result = 0;
} while (0);
EXIT_LOG("%d", result);
return result;
}
int32_t BtLeDeviceScanDetailsDataItem::copyFrom(IDataItemCore* src) {
int32_t result = -1;
ENTRY_LOG();
do {
COPIER_ERROR_CHECK_AND_DOWN_CAST(BtLeDeviceScanDetailsDataItem, BTLE_SCAN_DATA_ITEM_ID);
if (s->mValidSrnData != d->mValidSrnData) { s->mValidSrnData = d->mValidSrnData;}
if (s->mApSrnRssi != d->mApSrnRssi) { s->mApSrnRssi = d->mApSrnRssi;}
if (memcmp(s->mApSrnMacAddress, d->mApSrnMacAddress, sizeof(s->mApSrnMacAddress)) != 0) {
memcpy(static_cast<void*>(s->mApSrnMacAddress), static_cast<void*>(d->mApSrnMacAddress),
sizeof(s->mApSrnMacAddress));
}
if (s->mApSrnTimestamp != d->mApSrnTimestamp) {s->mApSrnTimestamp = d->mApSrnTimestamp;}
if (s->mRequestTimestamp != d->mRequestTimestamp) {
s->mRequestTimestamp = d->mRequestTimestamp;
}
if (s->mReceiveTimestamp != d->mReceiveTimestamp) {
s->mReceiveTimestamp = d->mReceiveTimestamp;
}
if (s->mErrorCause != d->mErrorCause) {s->mErrorCause = d->mErrorCause;}
result = 0;
} while (0);
EXIT_LOG("%d", result);
return result;
}
int32_t BtDeviceScanDetailsDataItem::copyFrom(IDataItemCore* src) {
int32_t result = -1;
ENTRY_LOG();
do {
COPIER_ERROR_CHECK_AND_DOWN_CAST(BtDeviceScanDetailsDataItem, BT_SCAN_DATA_ITEM_ID);
if (s->mValidSrnData != d->mValidSrnData) { s->mValidSrnData = d->mValidSrnData;}
if (s->mApSrnRssi != d->mApSrnRssi) { s->mApSrnRssi = d->mApSrnRssi;}
if (memcmp(s->mApSrnMacAddress, d->mApSrnMacAddress, sizeof(s->mApSrnMacAddress)) != 0) {
memcpy(static_cast<void*>(s->mApSrnMacAddress), static_cast<void*>(d->mApSrnMacAddress),
sizeof(s->mApSrnMacAddress));
}
if (s->mApSrnTimestamp != d->mApSrnTimestamp) {s->mApSrnTimestamp = d->mApSrnTimestamp;}
if (s->mRequestTimestamp != d->mRequestTimestamp) {
s->mRequestTimestamp = d->mRequestTimestamp;
}
if (s->mReceiveTimestamp != d->mReceiveTimestamp) {
s->mReceiveTimestamp = d->mReceiveTimestamp;
}
if (s->mErrorCause != d->mErrorCause) {s->mErrorCause = d->mErrorCause;}
result = 0;
} while (0);
EXIT_LOG("%d", result);
return result;
}
} //namespace loc_core

View file

@ -0,0 +1,595 @@
/* Copyright (c) 2020, 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 DATAITEM_CONCRETETYPES_H
#define DATAITEM_CONCRETETYPES_H
#include <string>
#include <cstring>
#include <sstream>
#include <DataItemId.h>
#include <IDataItemCore.h>
#include <gps_extended_c.h>
#include <inttypes.h>
#define MAC_ADDRESS_LENGTH 6
// MAC address length in bytes
// QMI_LOC_SRN_MAC_ADDR_LENGTH_V02
#define SRN_MAC_ADDRESS_LENGTH 6
#define WIFI_SUPPLICANT_DEFAULT_STATE 0
#define TIME_DEFAULT_CURRTIME 0
#define TIMEZONE_DEFAULT_RAWOFFSET 0
#define TIMEZONE_DEFAULT_DSTOFFSET 0
#define NETWORKINFO_DEFAULT_TYPE 300
#define SERVICESTATUS_DEFAULT_STATE 3 /// OOO
#define BATTERY_PCT_DEFAULT 50
#define STRINGIFY_ERROR_CHECK_AND_DOWN_CAST(T, ID) \
if (getId() != ID) { result = 1; break; } \
T * d = static_cast<T *>(this);
// macro for copier
#define COPIER_ERROR_CHECK_AND_DOWN_CAST(T, ID) \
if (src == NULL) { result = 1; break; } \
if (getId() != src->getId()) { result = 2; break; } \
if (getId() != ID) { result = 3; break; } \
T * s = static_cast<T *>(this); \
T * d = static_cast<T *>(src);
static constexpr char sDelimit = ':';
namespace loc_core {
using namespace std;
enum NetworkType {
TYPE_MOBILE = 0,
TYPE_WIFI,
TYPE_ETHERNET,
TYPE_BLUETOOTH,
TYPE_MMS,
TYPE_SUPL,
TYPE_DUN,
TYPE_HIPRI,
TYPE_WIMAX,
TYPE_PROXY,
TYPE_UNKNOWN,
};
typedef struct NetworkInfoType {
// Unique network handle ID
uint64_t networkHandle;
// Type of network for corresponding network handle
NetworkType networkType;
NetworkInfoType() : networkHandle(NETWORK_HANDLE_UNKNOWN), networkType(TYPE_UNKNOWN) {}
NetworkInfoType(string strObj) {
size_t posDelimit = strObj.find(sDelimit);
if ( posDelimit != string::npos) {
int32_t type = TYPE_UNKNOWN;
string handleStr = strObj.substr(0, posDelimit);
string typeStr = strObj.substr(posDelimit + 1, strObj.length() - posDelimit - 1);
stringstream(handleStr) >> networkHandle;
stringstream(typeStr) >> type;
networkType = (NetworkType) type;
} else {
networkHandle = NETWORK_HANDLE_UNKNOWN;
networkType = TYPE_UNKNOWN;
}
}
bool operator== (const NetworkInfoType& other) {
return ((networkHandle == other.networkHandle) && (networkType == other.networkType));
}
string toString() {
string valueStr;
valueStr.clear ();
char nethandle [32];
memset (nethandle, 0, 32);
snprintf(nethandle, sizeof(nethandle), "%" PRIu64, networkHandle);
valueStr += string(nethandle);
valueStr += sDelimit;
char type [12];
memset (type, 0, 12);
snprintf (type, 12, "%u", networkType);
valueStr += string (type);
return valueStr;
}
} NetworkInfoType;
class AirplaneModeDataItem: public IDataItemCore {
public:
AirplaneModeDataItem(IDataItemCore* di):
AirplaneModeDataItem(((AirplaneModeDataItem*)di)->mMode) {}
AirplaneModeDataItem(bool mode = false):
mMode(mode) {mId = AIRPLANEMODE_DATA_ITEM_ID;}
virtual ~AirplaneModeDataItem() {}
virtual void stringify(string& /*valueStr*/) override;
virtual int32_t copyFrom(IDataItemCore* /*src*/) override;
// Data members
bool mMode;
};
class ENHDataItem: public IDataItemCore {
public:
ENHDataItem(bool enabled = false) :
mEnabled(enabled) {mId = ENH_DATA_ITEM_ID;}
virtual ~ENHDataItem() {}
virtual void stringify(string& /*valueStr*/) override;
virtual int32_t copyFrom(IDataItemCore* /*src*/) override;
// Data members
bool mEnabled;
};
class GPSStateDataItem: public IDataItemCore {
public:
GPSStateDataItem(bool enabled = false) :
mEnabled(enabled) {mId = GPSSTATE_DATA_ITEM_ID;}
virtual ~GPSStateDataItem() {}
virtual void stringify(string& /*valueStr*/) override;
virtual int32_t copyFrom(IDataItemCore* /*src*/) override;
// Data members
bool mEnabled;
};
class NLPStatusDataItem: public IDataItemCore {
public:
NLPStatusDataItem(bool enabled = false) :
mEnabled(enabled) {mId = NLPSTATUS_DATA_ITEM_ID;}
virtual ~NLPStatusDataItem() {}
virtual void stringify(string& /*valueStr*/) override;
virtual int32_t copyFrom(IDataItemCore* /*src*/) override;
// Data members
bool mEnabled;
};
class WifiHardwareStateDataItem: public IDataItemCore {
public:
WifiHardwareStateDataItem(bool enabled = false) :
mEnabled(enabled) {mId = WIFIHARDWARESTATE_DATA_ITEM_ID;}
virtual ~WifiHardwareStateDataItem() {}
virtual void stringify(string& /*valueStr*/) override;
virtual int32_t copyFrom(IDataItemCore* /*src*/) override;
// Data members
bool mEnabled;
};
class ScreenStateDataItem: public IDataItemCore {
public:
ScreenStateDataItem(bool state = false) :
mState(state) {mId = SCREEN_STATE_DATA_ITEM_ID;}
virtual ~ScreenStateDataItem() {}
virtual void stringify(string& /*valueStr*/) override;
virtual int32_t copyFrom(IDataItemCore* /*src*/) override;
// Data members
bool mState;
};
class PowerConnectStateDataItem: public IDataItemCore {
public:
PowerConnectStateDataItem(bool state = false) :
mState(state) {mId = POWER_CONNECTED_STATE_DATA_ITEM_ID;}
virtual ~PowerConnectStateDataItem() {}
virtual void stringify(string& /*valueStr*/) override;
virtual int32_t copyFrom(IDataItemCore* /*src*/) override;
// Data members
bool mState;
};
class TimeZoneChangeDataItem: public IDataItemCore {
public:
TimeZoneChangeDataItem(int64_t currTimeMillis = TIME_DEFAULT_CURRTIME,
int32_t rawOffset = TIMEZONE_DEFAULT_RAWOFFSET,
int32_t dstOffset = TIMEZONE_DEFAULT_DSTOFFSET) :
mCurrTimeMillis (currTimeMillis),
mRawOffsetTZ (rawOffset),
mDstOffsetTZ (dstOffset) {mId = TIMEZONE_CHANGE_DATA_ITEM_ID;}
virtual ~TimeZoneChangeDataItem() {}
virtual void stringify(string& /*valueStr*/) override;
virtual int32_t copyFrom(IDataItemCore* /*src*/) override;
// Data members
int64_t mCurrTimeMillis;
int32_t mRawOffsetTZ;
int32_t mDstOffsetTZ;
};
class TimeChangeDataItem: public IDataItemCore {
public:
TimeChangeDataItem(int64_t currTimeMillis = TIME_DEFAULT_CURRTIME,
int32_t rawOffset = TIMEZONE_DEFAULT_RAWOFFSET,
int32_t dstOffset = TIMEZONE_DEFAULT_DSTOFFSET) :
mCurrTimeMillis (currTimeMillis),
mRawOffsetTZ (rawOffset),
mDstOffsetTZ (dstOffset) {mId = TIME_CHANGE_DATA_ITEM_ID;}
virtual ~TimeChangeDataItem() {}
virtual void stringify(string& /*valueStr*/) override;
virtual int32_t copyFrom(IDataItemCore* /*src*/) override;
// Data members
int64_t mCurrTimeMillis;
int32_t mRawOffsetTZ;
int32_t mDstOffsetTZ;
};
class ShutdownStateDataItem: public IDataItemCore {
public:
ShutdownStateDataItem(bool state = false) :
mState (state) {mId = SHUTDOWN_STATE_DATA_ITEM_ID;}
virtual ~ShutdownStateDataItem() {}
virtual void stringify(string& /*valueStr*/) override;
virtual int32_t copyFrom(IDataItemCore* /*src*/) override;
// Data members
bool mState;
};
class AssistedGpsDataItem: public IDataItemCore {
public:
AssistedGpsDataItem(bool enabled = false) :
mEnabled(enabled) {mId = ASSISTED_GPS_DATA_ITEM_ID;}
virtual ~AssistedGpsDataItem() {}
virtual void stringify(string& /*valueStr*/) override;
virtual int32_t copyFrom(IDataItemCore* /*src*/) override;
// Data members
bool mEnabled;
};
class NetworkInfoDataItem: public IDataItemCore {
public:
NetworkInfoDataItem(
int32_t type = NETWORKINFO_DEFAULT_TYPE,
std::string typeName = "",
std::string subTypeName = "",
bool available = false,
bool connected = false,
bool roaming = false,
uint64_t networkHandle = NETWORK_HANDLE_UNKNOWN, string apn = ""):
NetworkInfoDataItem(getNormalizedType(type), type, typeName, subTypeName, available,
connected, roaming, networkHandle, "") {}
NetworkInfoDataItem(NetworkType initialType, int32_t type, string typeName,
string subTypeName, bool available, bool connected, bool roaming,
uint64_t networkHandle, string apn):
mAllTypes(typeToAllTypes(initialType)),
mType(type),
mTypeName(typeName),
mSubTypeName(subTypeName),
mAvailable(available),
mConnected(connected),
mRoaming(roaming),
mNetworkHandle(networkHandle), mApn(apn) {
mId = NETWORKINFO_DATA_ITEM_ID;
mAllNetworkHandles[0].networkHandle = networkHandle;
mAllNetworkHandles[0].networkType = initialType;
}
virtual ~NetworkInfoDataItem() {}
virtual void stringify(string& /*valueStr*/) override;
virtual int32_t copyFrom(IDataItemCore* /*src*/) override;
inline uint64_t getAllTypes() { return mAllTypes; }
inline NetworkInfoType* getNetworkHandle() {
return &mAllNetworkHandles[0];
}
inline virtual NetworkType getType(void) const {
return getNormalizedType(mType);
}
inline static NetworkType getNormalizedType(int32_t type) {
NetworkType typeout = TYPE_UNKNOWN;
switch (type) {
case 100:
typeout = TYPE_WIFI;
break;
case 101:
typeout = TYPE_ETHERNET;
break;
case 102:
typeout = TYPE_BLUETOOTH;
break;
case 201:
typeout = TYPE_MOBILE;
break;
case 202:
typeout = TYPE_DUN;
break;
case 203:
typeout = TYPE_HIPRI;
break;
case 204:
typeout = TYPE_MMS;
break;
case 205:
typeout = TYPE_SUPL;
break;
case 220:
typeout = TYPE_WIMAX;
break;
case 300:
default:
typeout = TYPE_UNKNOWN;
break;
}
return typeout;
}
// Data members
uint64_t mAllTypes;
int32_t mType;
string mTypeName;
string mSubTypeName;
bool mAvailable;
bool mConnected;
bool mRoaming;
NetworkInfoType mAllNetworkHandles[MAX_NETWORK_HANDLES];
uint64_t mNetworkHandle;
string mApn;
protected:
inline uint64_t typeToAllTypes(NetworkType type) {
return (type >= TYPE_UNKNOWN || type < TYPE_MOBILE) ? 0 : (1<<type);
}
private:
inline void setType(NetworkType type) {
switch (type) {
case TYPE_WIFI:
mType = 100;
break;
case TYPE_ETHERNET:
mType = 101;
break;
case TYPE_BLUETOOTH:
mType = 102;
break;
case TYPE_MOBILE:
mType = 201;
break;
case TYPE_DUN:
mType = 202;
break;
case TYPE_HIPRI:
mType = 203;
break;
case TYPE_MMS:
mType = 204;
break;
case TYPE_SUPL:
mType = 205;
break;
case TYPE_WIMAX:
mType = 220;
break;
default:
mType = 300;
break;
}
}
};
class ServiceStatusDataItem: public IDataItemCore {
public:
ServiceStatusDataItem(int32_t serviceState = SERVICESTATUS_DEFAULT_STATE) :
mServiceState (serviceState) {mId = SERVICESTATUS_DATA_ITEM_ID;}
virtual ~ServiceStatusDataItem() {}
virtual void stringify(string& /*valueStr*/) override;
virtual int32_t copyFrom(IDataItemCore* /*src*/) override;
// Data members
int32_t mServiceState;
};
class ModelDataItem: public IDataItemCore {
public:
ModelDataItem(const string & name = "") :
mModel (name) {mId = MODEL_DATA_ITEM_ID;}
virtual ~ModelDataItem() {}
virtual void stringify(string& /*valueStr*/) override;
virtual int32_t copyFrom(IDataItemCore* /*src*/) override;
// Data members
string mModel;
};
class ManufacturerDataItem: public IDataItemCore {
public:
ManufacturerDataItem(const string & name = "") :
mManufacturer (name) {mId = MANUFACTURER_DATA_ITEM_ID;}
virtual ~ManufacturerDataItem() {}
virtual void stringify(string& /*valueStr*/) override;
virtual int32_t copyFrom(IDataItemCore* /*src*/) override;
// Data members
string mManufacturer;
};
class RilServiceInfoDataItem : public IDataItemCore {
public:
inline RilServiceInfoDataItem() :
mData(nullptr) {mId = RILSERVICEINFO_DATA_ITEM_ID;}
inline virtual ~RilServiceInfoDataItem() { if (nullptr != mData) free(mData); }
virtual void stringify(string& /*valueStr*/) {}
virtual int32_t copyFrom(IDataItemCore* src) {
memcpy(mData, ((RilServiceInfoDataItem*)src)->mData, mLength);
return 0;
}
inline RilServiceInfoDataItem(const RilServiceInfoDataItem& peer) :
RilServiceInfoDataItem() {
mLength = peer.mLength;
mData = malloc(mLength);
memcpy(mData, peer.mData, mLength);
peer.setPeerData(*this);
}
inline virtual bool operator==(const RilServiceInfoDataItem& other) const {
return other.mData == mData;
}
inline virtual void setPeerData(RilServiceInfoDataItem& /*peer*/) const {}
void* mData;
int mLength;
};
class RilCellInfoDataItem : public IDataItemCore {
public:
inline RilCellInfoDataItem() :
mData(nullptr) {mId = RILCELLINFO_DATA_ITEM_ID;}
inline virtual ~RilCellInfoDataItem() { if (nullptr != mData) free(mData); }
virtual void stringify(string& /*valueStr*/) {}
virtual int32_t copyFrom(IDataItemCore* src) {
memcpy(mData, ((RilCellInfoDataItem*)src)->mData, mLength);
return 0;
}
inline RilCellInfoDataItem(const RilCellInfoDataItem& peer) :
RilCellInfoDataItem() {
mLength = peer.mLength;
mData = malloc(mLength);
memcpy(mData, peer.mData, mLength);
peer.setPeerData(*this);
}
inline virtual bool operator==(const RilCellInfoDataItem& other) const {
return other.mData == mData;
}
inline virtual void setPeerData(RilCellInfoDataItem& /*peer*/) const {}
void* mData;
int mLength;
};
class WifiSupplicantStatusDataItem: public IDataItemCore {
public:
WifiSupplicantStatusDataItem() :
mState((WifiSupplicantState)WIFI_SUPPLICANT_DEFAULT_STATE),
mApMacAddressValid(false),
mWifiApSsidValid(false) {
mId = WIFI_SUPPLICANT_STATUS_DATA_ITEM_ID;
memset (mApMacAddress, 0, sizeof (mApMacAddress));
mWifiApSsid.clear();
}
virtual ~WifiSupplicantStatusDataItem() {}
virtual void stringify(string& /*valueStr*/) override;
virtual int32_t copyFrom(IDataItemCore* /*src*/) override;
// Data members
typedef enum WifiSupplicantState {
DISCONNECTED,
INTERFACE_DISABLED,
INACTIVE,
SCANNING,
AUTHENTICATING,
ASSOCIATING,
ASSOCIATED,
FOUR_WAY_HANDSHAKE,
GROUP_HANDSHAKE,
COMPLETED,
DORMANT,
UNINITIALIZED,
INVALID
} WifiSupplicantState;
/* Represents whether access point attach state*/
WifiSupplicantState mState;
/* Represents info on whether ap mac address is valid */
bool mApMacAddressValid;
/* Represents mac address of the wifi access point*/
uint8_t mApMacAddress[MAC_ADDRESS_LENGTH];
/* Represents info on whether ap SSID is valid */
bool mWifiApSsidValid;
/* Represents Wifi SSID string*/
string mWifiApSsid;
};
class TacDataItem: public IDataItemCore {
public:
TacDataItem(const string & name = "") :
mValue (name) {mId = TAC_DATA_ITEM_ID;}
virtual ~TacDataItem() {}
virtual void stringify(string& /*valueStr*/) override;
virtual int32_t copyFrom(IDataItemCore* /*src*/) override;
// Data members
string mValue;
};
class MccmncDataItem: public IDataItemCore {
public:
MccmncDataItem(const string & name = "") :
mValue(name) {mId = MCCMNC_DATA_ITEM_ID;}
virtual ~MccmncDataItem() {}
virtual void stringify(string& /*valueStr*/) override;
virtual int32_t copyFrom(IDataItemCore* /*src*/) override;
// Data members
string mValue;
};
class SrnDeviceScanDetailsDataItem: public IDataItemCore {
public:
SrnDeviceScanDetailsDataItem(DataItemId Id) :
mValidSrnData(false),
mApSrnRssi(-1),
mApSrnTimestamp(0),
mRequestTimestamp(0),
mReceiveTimestamp(0),
mErrorCause(-1) {mId = Id;}
virtual ~SrnDeviceScanDetailsDataItem() {}
// Data members common to all SRN tech types
/* Represents info on whether SRN data is valid (no error)*/
bool mValidSrnData;
/* SRN device RSSI reported */
int32_t mApSrnRssi;
/* MAC adress of SRN device */
uint8_t mApSrnMacAddress[SRN_MAC_ADDRESS_LENGTH];
/* UTC timestamp at which the scan was requested.for this SRN device*/
int64_t mApSrnTimestamp;
/* UTC timestamp at which the scan was started. */
int64_t mRequestTimestamp;
/* UTC timestamp at which the scan was received.*/
int64_t mReceiveTimestamp;
/* Reason for the error/failure if SRN details are not valid */
int32_t mErrorCause;
};
class BtDeviceScanDetailsDataItem: public SrnDeviceScanDetailsDataItem {
public:
BtDeviceScanDetailsDataItem() :
SrnDeviceScanDetailsDataItem(BT_SCAN_DATA_ITEM_ID) {}
virtual ~BtDeviceScanDetailsDataItem() {}
virtual void stringify(string& /*valueStr*/) override;
virtual int32_t copyFrom(IDataItemCore* /*src*/) override;
};
class BtLeDeviceScanDetailsDataItem: public SrnDeviceScanDetailsDataItem {
public:
BtLeDeviceScanDetailsDataItem() :
SrnDeviceScanDetailsDataItem(BTLE_SCAN_DATA_ITEM_ID) {}
virtual ~BtLeDeviceScanDetailsDataItem() {}
virtual void stringify(string& /*valueStr*/) override;
virtual int32_t copyFrom(IDataItemCore* /*src*/) override;
};
class BatteryLevelDataItem: public IDataItemCore {
public:
inline BatteryLevelDataItem(uint8_t batteryPct = BATTERY_PCT_DEFAULT) :
mBatteryPct(batteryPct) {mId = BATTERY_LEVEL_DATA_ITEM_ID;}
inline ~BatteryLevelDataItem() {}
virtual void stringify(string& /*valueStr*/) override;
virtual int32_t copyFrom(IDataItemCore* /*src*/) override;
// Data members
uint8_t mBatteryPct;
};
} // namespace loc_core
#endif //DATAITEM_CONCRETETYPES_H

View file

@ -1,555 +0,0 @@
/* Copyright (c) 2015-2017, 2020, 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 __DATAITEMCONCRETEBASETYPES__
#define __DATAITEMCONCRETEBASETYPES__
#include <string>
#include <cstring>
#include <sstream>
#include <DataItemId.h>
#include <IDataItemCore.h>
#include <gps_extended_c.h>
#include <inttypes.h>
#define MAC_ADDRESS_LENGTH 6
// MAC address length in bytes
// QMI_LOC_SRN_MAC_ADDR_LENGTH_V02
#define SRN_MAC_ADDRESS_LENGTH 6
#define WIFI_SUPPLICANT_DEFAULT_STATE 0
static constexpr char sDelimit = ':';
namespace loc_core
{
using namespace std;
enum NetworkType {
TYPE_MOBILE = 0,
TYPE_WIFI,
TYPE_ETHERNET,
TYPE_BLUETOOTH,
TYPE_MMS,
TYPE_SUPL,
TYPE_DUN,
TYPE_HIPRI,
TYPE_WIMAX,
TYPE_PROXY,
TYPE_UNKNOWN,
};
typedef struct NetworkInfoType
{
// Unique network handle ID
uint64_t networkHandle;
// Type of network for corresponding network handle
NetworkType networkType;
NetworkInfoType() : networkHandle(NETWORK_HANDLE_UNKNOWN), networkType(TYPE_UNKNOWN) {}
NetworkInfoType(string strObj) {
size_t posDelimit = strObj.find(sDelimit);
if ( posDelimit != string::npos) {
int32_t type = TYPE_UNKNOWN;
string handleStr = strObj.substr(0, posDelimit);
string typeStr = strObj.substr(posDelimit + 1, strObj.length() - posDelimit - 1);
stringstream(handleStr) >> networkHandle;
stringstream(typeStr) >> type;
networkType = (NetworkType) type;
} else {
networkHandle = NETWORK_HANDLE_UNKNOWN;
networkType = TYPE_UNKNOWN;
}
}
bool operator== (const NetworkInfoType& other) {
return ((networkHandle == other.networkHandle) && (networkType == other.networkType));
}
string toString() {
string valueStr;
valueStr.clear ();
char nethandle [32];
memset (nethandle, 0, 32);
snprintf(nethandle, sizeof(nethandle), "%" PRIu64, networkHandle);
valueStr += string(nethandle);
valueStr += sDelimit;
char type [12];
memset (type, 0, 12);
snprintf (type, 12, "%u", networkType);
valueStr += string (type);
return valueStr;
}
} NetworkInfoType;
class AirplaneModeDataItemBase : public IDataItemCore {
public:
AirplaneModeDataItemBase(bool mode):
mMode(mode),
mId(AIRPLANEMODE_DATA_ITEM_ID) {}
virtual ~AirplaneModeDataItemBase() {}
inline virtual DataItemId getId() { return mId; }
virtual void stringify(string& /*valueStr*/) {}
virtual int32_t copy(IDataItemCore* /*src*/, bool* /*dataItemCopied = NULL*/) {return 1;}
// Data members
bool mMode;
protected:
DataItemId mId;
};
class ENHDataItemBase : public IDataItemCore {
public:
ENHDataItemBase(bool enabled) :
mEnabled(enabled),
mId(ENH_DATA_ITEM_ID) {}
virtual ~ENHDataItemBase() {}
inline virtual DataItemId getId() { return mId; }
virtual void stringify(string& /*valueStr*/) {}
virtual int32_t copy(IDataItemCore* /*src*/, bool* /*dataItemCopied = NULL*/) {return 1;}
// Data members
bool mEnabled;
protected:
DataItemId mId;
};
class GPSStateDataItemBase : public IDataItemCore {
public:
GPSStateDataItemBase(bool enabled) :
mEnabled(enabled),
mId(GPSSTATE_DATA_ITEM_ID) {}
virtual ~GPSStateDataItemBase() {}
inline virtual DataItemId getId() { return mId; }
virtual void stringify(string& /*valueStr*/) {}
virtual int32_t copy(IDataItemCore* /*src*/, bool* /*dataItemCopied = NULL*/) {return 1;}
// Data members
bool mEnabled;
protected:
DataItemId mId;
};
class NLPStatusDataItemBase : public IDataItemCore {
public:
NLPStatusDataItemBase(bool enabled) :
mEnabled(enabled),
mId(NLPSTATUS_DATA_ITEM_ID) {}
virtual ~NLPStatusDataItemBase() {}
inline virtual DataItemId getId() { return mId; }
virtual void stringify(string& /*valueStr*/) {}
virtual int32_t copy(IDataItemCore* /*src*/, bool* /*dataItemCopied = NULL*/) {return 1;}
// Data members
bool mEnabled;
protected:
DataItemId mId;
};
class WifiHardwareStateDataItemBase : public IDataItemCore {
public:
WifiHardwareStateDataItemBase(bool enabled) :
mEnabled(enabled),
mId(WIFIHARDWARESTATE_DATA_ITEM_ID) {}
virtual ~WifiHardwareStateDataItemBase() {}
inline virtual DataItemId getId() { return mId; }
virtual void stringify(string& /*valueStr*/) {}
virtual int32_t copy(IDataItemCore* /*src*/, bool* /*dataItemCopied = NULL*/) {return 1;}
// Data members
bool mEnabled;
protected:
DataItemId mId;
};
class ScreenStateDataItemBase : public IDataItemCore {
public:
ScreenStateDataItemBase(bool state) :
mState(state),
mId(SCREEN_STATE_DATA_ITEM_ID) {}
virtual ~ScreenStateDataItemBase() {}
inline virtual DataItemId getId() { return mId; }
virtual void stringify(string& /*valueStr*/) {}
virtual int32_t copy(IDataItemCore* /*src*/, bool* /*dataItemCopied = NULL*/) {return 1;}
// Data members
bool mState;
protected:
DataItemId mId;
};
class PowerConnectStateDataItemBase : public IDataItemCore {
public:
PowerConnectStateDataItemBase(bool state) :
mState(state),
mId(POWER_CONNECTED_STATE_DATA_ITEM_ID) {}
virtual ~PowerConnectStateDataItemBase() {}
inline virtual DataItemId getId() { return mId; }
virtual void stringify(string& /*valueStr*/) {}
virtual int32_t copy(IDataItemCore* /*src*/, bool* /*dataItemCopied = NULL*/) {return 1;}
// Data members
bool mState;
protected:
DataItemId mId;
};
class TimeZoneChangeDataItemBase : public IDataItemCore {
public:
TimeZoneChangeDataItemBase(int64_t currTimeMillis, int32_t rawOffset, int32_t dstOffset) :
mCurrTimeMillis (currTimeMillis),
mRawOffsetTZ (rawOffset),
mDstOffsetTZ (dstOffset),
mId(TIMEZONE_CHANGE_DATA_ITEM_ID) {}
virtual ~TimeZoneChangeDataItemBase() {}
inline virtual DataItemId getId() { return mId; }
virtual void stringify(string& /*valueStr*/) {}
virtual int32_t copy(IDataItemCore* /*src*/, bool* /*dataItemCopied = NULL*/) {return 1;}
// Data members
int64_t mCurrTimeMillis;
int32_t mRawOffsetTZ;
int32_t mDstOffsetTZ;
protected:
DataItemId mId;
};
class TimeChangeDataItemBase : public IDataItemCore {
public:
TimeChangeDataItemBase(int64_t currTimeMillis, int32_t rawOffset, int32_t dstOffset) :
mCurrTimeMillis (currTimeMillis),
mRawOffsetTZ (rawOffset),
mDstOffsetTZ (dstOffset),
mId(TIME_CHANGE_DATA_ITEM_ID) {}
virtual ~TimeChangeDataItemBase() {}
inline virtual DataItemId getId() { return mId; }
virtual void stringify(string& /*valueStr*/) {}
virtual int32_t copy(IDataItemCore* /*src*/, bool* /*dataItemCopied = NULL*/) {return 1;}
// Data members
int64_t mCurrTimeMillis;
int32_t mRawOffsetTZ;
int32_t mDstOffsetTZ;
protected:
DataItemId mId;
};
class ShutdownStateDataItemBase : public IDataItemCore {
public:
ShutdownStateDataItemBase(bool state) :
mState (state),
mId(SHUTDOWN_STATE_DATA_ITEM_ID) {}
virtual ~ShutdownStateDataItemBase() {}
inline virtual DataItemId getId() { return mId; }
virtual void stringify(string& /*valueStr*/) {}
virtual int32_t copy(IDataItemCore* /*src*/, bool* /*dataItemCopied = NULL*/) {return 1;}
// Data members
bool mState;
protected:
DataItemId mId;
};
class AssistedGpsDataItemBase : public IDataItemCore {
public:
AssistedGpsDataItemBase(bool enabled) :
mEnabled(enabled),
mId(ASSISTED_GPS_DATA_ITEM_ID) {}
virtual ~AssistedGpsDataItemBase() {}
inline virtual DataItemId getId() { return mId; }
virtual void stringify(string& /*valueStr*/) {}
virtual int32_t copy(IDataItemCore* /*src*/, bool* /*dataItemCopied = NULL*/) {return 1;}
// Data members
bool mEnabled;
protected:
DataItemId mId;
};
class NetworkInfoDataItemBase : public IDataItemCore {
public:
NetworkInfoDataItemBase(
NetworkType initialType, int32_t type, string typeName, string subTypeName,
bool available, bool connected, bool roaming, uint64_t networkHandle, string apn):
mAllTypes(typeToAllTypes(initialType)),
mType(type),
mTypeName(typeName),
mSubTypeName(subTypeName),
mAvailable(available),
mConnected(connected),
mRoaming(roaming),
mNetworkHandle(networkHandle),
mApn(apn), mId(NETWORKINFO_DATA_ITEM_ID) {
mAllNetworkHandles[0].networkHandle = networkHandle;
mAllNetworkHandles[0].networkType = initialType;
}
virtual ~NetworkInfoDataItemBase() {}
inline virtual DataItemId getId() { return mId; }
virtual void stringify(string& /*valueStr*/) {}
virtual int32_t copy(IDataItemCore* /*src*/, bool* /*dataItemCopied = NULL*/) {return 1;}
inline virtual NetworkType getType(void) const {
return (NetworkType)mType;
}
inline uint64_t getAllTypes() { return mAllTypes; }
inline NetworkInfoType* getNetworkHandle() {
return &mAllNetworkHandles[0];
}
// Data members
uint64_t mAllTypes;
int32_t mType;
string mTypeName;
string mSubTypeName;
bool mAvailable;
bool mConnected;
bool mRoaming;
NetworkInfoType mAllNetworkHandles[MAX_NETWORK_HANDLES];
uint64_t mNetworkHandle;
string mApn;
protected:
DataItemId mId;
inline uint64_t typeToAllTypes(NetworkType type) {
return (type >= TYPE_UNKNOWN || type < TYPE_MOBILE) ? 0 : (1<<type);
}
};
class ServiceStatusDataItemBase : public IDataItemCore {
public:
ServiceStatusDataItemBase(int32_t serviceState) :
mServiceState (serviceState),
mId(SERVICESTATUS_DATA_ITEM_ID) {}
virtual ~ServiceStatusDataItemBase() {}
inline virtual DataItemId getId() { return mId; }
virtual void stringify(string& /*valueStr*/) {}
virtual int32_t copy(IDataItemCore* /*src*/, bool* /*dataItemCopied = NULL*/) {return 1;}
// Data members
int32_t mServiceState;
protected:
DataItemId mId;
};
class ModelDataItemBase : public IDataItemCore {
public:
ModelDataItemBase(const string & name) :
mModel (name),
mId(MODEL_DATA_ITEM_ID) {}
virtual ~ModelDataItemBase() {}
inline virtual DataItemId getId() { return mId; }
virtual void stringify(string& /*valueStr*/) {}
virtual int32_t copy(IDataItemCore* /*src*/, bool* /*dataItemCopied = NULL*/) {return 1;}
// Data members
string mModel;
protected:
DataItemId mId;
};
class ManufacturerDataItemBase : public IDataItemCore {
public:
ManufacturerDataItemBase(const string & name) :
mManufacturer (name),
mId(MANUFACTURER_DATA_ITEM_ID) {}
virtual ~ManufacturerDataItemBase() {}
inline virtual DataItemId getId() { return mId; }
virtual void stringify(string& /*valueStr*/) {}
virtual int32_t copy(IDataItemCore* /*src*/, bool* /*dataItemCopied = NULL*/) {return 1;}
// Data members
string mManufacturer;
protected:
DataItemId mId;
};
class RilServiceInfoDataItemBase : public IDataItemCore {
public:
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:
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;
};
class WifiSupplicantStatusDataItemBase : public IDataItemCore {
public:
WifiSupplicantStatusDataItemBase() :
mState((WifiSupplicantState)WIFI_SUPPLICANT_DEFAULT_STATE),
mApMacAddressValid(false),
mWifiApSsidValid(false),
mId(WIFI_SUPPLICANT_STATUS_DATA_ITEM_ID) {
memset (&mApMacAddress, 0, sizeof (mApMacAddress));
mWifiApSsid.clear();
}
virtual ~WifiSupplicantStatusDataItemBase() {}
inline virtual DataItemId getId() { return mId; }
virtual void stringify(string& /*valueStr*/) {}
virtual int32_t copy(IDataItemCore* /*src*/, bool* /*dataItemCopied = NULL*/) {return 1;}
// Data members
typedef enum WifiSupplicantState {
DISCONNECTED,
INTERFACE_DISABLED,
INACTIVE,
SCANNING,
AUTHENTICATING,
ASSOCIATING,
ASSOCIATED,
FOUR_WAY_HANDSHAKE,
GROUP_HANDSHAKE,
COMPLETED,
DORMANT,
UNINITIALIZED,
INVALID
} WifiSupplicantState;
/* Represents whether access point attach state*/
WifiSupplicantState mState;
/* Represents info on whether ap mac address is valid */
bool mApMacAddressValid;
/* Represents mac address of the wifi access point*/
uint8_t mApMacAddress[MAC_ADDRESS_LENGTH];
/* Represents info on whether ap SSID is valid */
bool mWifiApSsidValid;
/* Represents Wifi SSID string*/
string mWifiApSsid;
protected:
DataItemId mId;
};
class TacDataItemBase : public IDataItemCore {
public:
TacDataItemBase(const string & name) :
mValue (name),
mId(TAC_DATA_ITEM_ID) {}
virtual ~TacDataItemBase() {}
inline virtual DataItemId getId() { return mId; }
virtual void stringify(string& /*valueStr*/) {}
virtual int32_t copy(IDataItemCore* /*src*/, bool* /*dataItemCopied = NULL*/) {return 1;}
// Data members
string mValue;
protected:
DataItemId mId;
};
class MccmncDataItemBase : public IDataItemCore {
public:
MccmncDataItemBase(const string & name) :
mValue(name),
mId(MCCMNC_DATA_ITEM_ID) {}
virtual ~MccmncDataItemBase() {}
inline virtual DataItemId getId() { return mId; }
virtual void stringify(string& /*valueStr*/) {}
virtual int32_t copy(IDataItemCore* /*src*/, bool* /*dataItemCopied = NULL*/) {return 1;}
// Data members
string mValue;
protected:
DataItemId mId;
};
class SrnDeviceScanDetailsDataItemBase : public IDataItemCore {
public:
SrnDeviceScanDetailsDataItemBase(DataItemId Id) :
mValidSrnData(false),
mApSrnRssi(-1),
mApSrnTimestamp(0),
mRequestTimestamp(0),
mReceiveTimestamp(0),
mErrorCause(-1),
mId(Id) {}
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)*/
bool mValidSrnData;
/* SRN device RSSI reported */
int32_t mApSrnRssi;
/* MAC adress of SRN device */
uint8_t mApSrnMacAddress[SRN_MAC_ADDRESS_LENGTH];
/* UTC timestamp at which the scan was requested.for this SRN device*/
int64_t mApSrnTimestamp;
/* UTC timestamp at which the scan was started. */
int64_t mRequestTimestamp;
/* UTC timestamp at which the scan was received.*/
int64_t mReceiveTimestamp;
/* Reason for the error/failure if SRN details are not valid */
int32_t mErrorCause;
protected:
DataItemId mId;
};
class BtDeviceScanDetailsDataItemBase : public SrnDeviceScanDetailsDataItemBase {
public:
BtDeviceScanDetailsDataItemBase() :
SrnDeviceScanDetailsDataItemBase(BT_SCAN_DATA_ITEM_ID) {}
virtual ~BtDeviceScanDetailsDataItemBase() {}
virtual void stringify(string& /*valueStr*/) {}
virtual int32_t copy(IDataItemCore* /*src*/, bool* /*dataItemCopied = NULL*/) {return 1;}
};
class BtLeDeviceScanDetailsDataItemBase : public SrnDeviceScanDetailsDataItemBase {
public:
BtLeDeviceScanDetailsDataItemBase() :
SrnDeviceScanDetailsDataItemBase(BTLE_SCAN_DATA_ITEM_ID) {}
virtual ~BtLeDeviceScanDetailsDataItemBase() {}
virtual void stringify(string& /*valueStr*/) {}
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__

View file

@ -32,50 +32,95 @@
#include <DataItemId.h> #include <DataItemId.h>
#include <IDataItemCore.h> #include <IDataItemCore.h>
#include <DataItemsFactoryProxy.h> #include <DataItemsFactoryProxy.h>
#include <DataItemConcreteTypes.h>
#include <loc_pla.h> #include <loc_pla.h>
#include <log_util.h> #include <log_util.h>
#include "loc_misc_utils.h" #include "loc_misc_utils.h"
namespace loc_core namespace loc_core
{ {
void* DataItemsFactoryProxy::dataItemLibHandle = NULL;
get_concrete_data_item_fn* DataItemsFactoryProxy::getConcreteDIFunc = NULL;
IDataItemCore* DataItemsFactoryProxy::createNewDataItem(DataItemId id) IDataItemCore* DataItemsFactoryProxy::createNewDataItem(IDataItemCore* dataItem) {
{
IDataItemCore *mydi = nullptr; IDataItemCore *mydi = nullptr;
if (NULL != getConcreteDIFunc) { switch (dataItem->getId()) {
mydi = (*getConcreteDIFunc)(id); case AIRPLANEMODE_DATA_ITEM_ID:
} mydi = new AirplaneModeDataItem(*((AirplaneModeDataItem*)dataItem));
else { break;
getConcreteDIFunc = (get_concrete_data_item_fn * ) case ENH_DATA_ITEM_ID:
dlGetSymFromLib(dataItemLibHandle, DATA_ITEMS_LIB_NAME, DATA_ITEMS_GET_CONCRETE_DI); mydi = new ENHDataItem(*((ENHDataItem*)dataItem));
break;
if (NULL != getConcreteDIFunc) { case GPSSTATE_DATA_ITEM_ID:
LOC_LOGd("Loaded function %s : %p", DATA_ITEMS_GET_CONCRETE_DI, getConcreteDIFunc); mydi = new GPSStateDataItem(*((GPSStateDataItem*)dataItem));
mydi = (*getConcreteDIFunc)(id); break;
} case NLPSTATUS_DATA_ITEM_ID:
else { mydi = new NLPStatusDataItem(*((NLPStatusDataItem*)dataItem));
// dlysm failed. break;
const char * err = dlerror(); case WIFIHARDWARESTATE_DATA_ITEM_ID:
if (NULL == err) mydi = new WifiHardwareStateDataItem(*((WifiHardwareStateDataItem*)dataItem));
{ break;
err = "Unknown"; case NETWORKINFO_DATA_ITEM_ID:
} mydi = new NetworkInfoDataItem(*((NetworkInfoDataItem*)dataItem));
LOC_LOGe("failed to find symbol %s; error=%s", DATA_ITEMS_GET_CONCRETE_DI, err); break;
} case SERVICESTATUS_DATA_ITEM_ID:
} mydi = new ServiceStatusDataItem(*((ServiceStatusDataItem*)dataItem));
break;
case RILCELLINFO_DATA_ITEM_ID:
mydi = new RilCellInfoDataItem(*((RilCellInfoDataItem*)dataItem));
break;
case RILSERVICEINFO_DATA_ITEM_ID:
mydi = new RilServiceInfoDataItem(*((RilServiceInfoDataItem*)dataItem));
break;
case MODEL_DATA_ITEM_ID:
mydi = new ModelDataItem(*((ModelDataItem*)dataItem));
break;
case MANUFACTURER_DATA_ITEM_ID:
mydi = new ManufacturerDataItem(*((ManufacturerDataItem*)dataItem));
break;
case ASSISTED_GPS_DATA_ITEM_ID:
mydi = new AssistedGpsDataItem(*((AssistedGpsDataItem*)dataItem));
break;
case SCREEN_STATE_DATA_ITEM_ID:
mydi = new ScreenStateDataItem(*((ScreenStateDataItem*)dataItem));
break;
case POWER_CONNECTED_STATE_DATA_ITEM_ID:
mydi = new PowerConnectStateDataItem(*((PowerConnectStateDataItem*)dataItem));
break;
case TIMEZONE_CHANGE_DATA_ITEM_ID:
mydi = new TimeZoneChangeDataItem(*((TimeZoneChangeDataItem*)dataItem));
break;
case TIME_CHANGE_DATA_ITEM_ID:
mydi = new TimeChangeDataItem(*((TimeChangeDataItem*)dataItem));
break;
case WIFI_SUPPLICANT_STATUS_DATA_ITEM_ID:
mydi = new WifiSupplicantStatusDataItem(*((WifiSupplicantStatusDataItem*)dataItem));
break;
case SHUTDOWN_STATE_DATA_ITEM_ID:
mydi = new ShutdownStateDataItem(*((ShutdownStateDataItem*)dataItem));
break;
case TAC_DATA_ITEM_ID:
mydi = new TacDataItem(*((TacDataItem*)dataItem));
break;
case MCCMNC_DATA_ITEM_ID:
mydi = new MccmncDataItem(*((MccmncDataItem*)dataItem));
break;
case BTLE_SCAN_DATA_ITEM_ID:
mydi = new BtLeDeviceScanDetailsDataItem(*((BtLeDeviceScanDetailsDataItem*)dataItem));
break;
case BT_SCAN_DATA_ITEM_ID:
mydi = new BtDeviceScanDetailsDataItem(*((BtDeviceScanDetailsDataItem*)dataItem));
break;
case BATTERY_LEVEL_DATA_ITEM_ID:
mydi = new BatteryLevelDataItem(*((BatteryLevelDataItem*)dataItem));
break;
case INVALID_DATA_ITEM_ID:
case MAX_DATA_ITEM_ID:
default:
break;
};
return mydi; return mydi;
} }
void DataItemsFactoryProxy::closeDataItemLibraryHandle()
{
if (NULL != dataItemLibHandle) {
dlclose(dataItemLibHandle);
dataItemLibHandle = NULL;
}
}
} // namespace loc_core } // namespace loc_core

View file

@ -1,4 +1,4 @@
/* Copyright (c) 2017, The Linux Foundation. All rights reserved. /* Copyright (c) 2017, 2020, The Linux Foundation. All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are * modification, are permitted provided that the following conditions are
@ -35,18 +35,9 @@
namespace loc_core namespace loc_core
{ {
#define DATA_ITEMS_LIB_NAME "libdataitems.so"
#define DATA_ITEMS_GET_CONCRETE_DI "getConcreteDataItem"
typedef IDataItemCore * (get_concrete_data_item_fn)(DataItemId);
class DataItemsFactoryProxy { class DataItemsFactoryProxy {
public: public:
static IDataItemCore* createNewDataItem(DataItemId id); static IDataItemCore* createNewDataItem(IDataItemCore* di);
static void closeDataItemLibraryHandle();
static void *dataItemLibHandle;
static get_concrete_data_item_fn *getConcreteDIFunc;
}; };
} // namespace loc_core } // namespace loc_core

View file

@ -1,4 +1,4 @@
/* Copyright (c) 2015, 2017 The Linux Foundation. All rights reserved. /* Copyright (c) 2015, 2017, 2020 The Linux Foundation. All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are * modification, are permitted provided that the following conditions are
@ -49,7 +49,7 @@ public:
* @details Gets Data item id. * @details Gets Data item id.
* @return Data item id. * @return Data item id.
*/ */
virtual DataItemId getId () = 0; inline DataItemId getId() { return mId; }
/** /**
* @brief Stringify. * @brief Stringify.
@ -68,13 +68,15 @@ public:
* *
* @return Zero for success or non zero for failure. * @return Zero for success or non zero for failure.
*/ */
virtual int32_t copy (IDataItemCore * src, bool *dataItemCopied = nullptr) = 0; virtual int32_t copyFrom(IDataItemCore * src) = 0;
/** /**
* @brief Destructor. * @brief Destructor.
* @details Destructor. * @details Destructor.
*/ */
virtual ~IDataItemCore () {} virtual ~IDataItemCore () {}
protected:
DataItemId mId = INVALID_DATA_ITEM_ID;
}; };
} // namespace loc_core } // namespace loc_core

View file

@ -29,6 +29,13 @@
# #
#****************************************************************************** #******************************************************************************
#******************************************************************************
# Changes from Qualcomm Innovation Center are provided under the following license:
# Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
# SPDX-License-Identifier: BSD-3-Clause-Clear
#
#******************************************************************************
fdatasync: 1 fdatasync: 1
getdents64: 1 getdents64: 1
gettimeofday: 1 gettimeofday: 1
@ -71,3 +78,6 @@ creat: 1
chmod: 1 chmod: 1
lseek: 1 lseek: 1
geteuid32: 1 geteuid32: 1
getrlimit: 1
shutdown: 1

View file

@ -32,7 +32,7 @@
#include <SystemStatus.h> #include <SystemStatus.h>
#include <DataItemId.h> #include <DataItemId.h>
#include <DataItemsFactoryProxy.h> #include <DataItemsFactoryProxy.h>
#include <DataItemConcreteTypesBase.h> #include <DataItemConcreteTypes.h>
#include <loc_log.h> #include <loc_log.h>
#include <NativeAgpsHandler.h> #include <NativeAgpsHandler.h>
#include <GnssAdapter.h> #include <GnssAdapter.h>
@ -48,8 +48,8 @@ void NativeAgpsHandler::notify(const list<IDataItemCore*>& dlist) {
for (auto each : dlist) { for (auto each : dlist) {
switch (each->getId()) { switch (each->getId()) {
case NETWORKINFO_DATA_ITEM_ID: { case NETWORKINFO_DATA_ITEM_ID: {
NetworkInfoDataItemBase* networkInfo = NetworkInfoDataItem* networkInfo =
static_cast<NetworkInfoDataItemBase*>(each); static_cast<NetworkInfoDataItem*>(each);
uint64_t mobileBit = (uint64_t )1 << loc_core::TYPE_MOBILE; uint64_t mobileBit = (uint64_t )1 << loc_core::TYPE_MOBILE;
uint64_t allTypes = networkInfo->mAllTypes; uint64_t allTypes = networkInfo->mAllTypes;
mConnected = ((networkInfo->mAllTypes & mobileBit) == mobileBit); mConnected = ((networkInfo->mAllTypes & mobileBit) == mobileBit);

View file

@ -47,7 +47,7 @@
#include <LocAdapterBase.h> #include <LocAdapterBase.h>
#include <DataItemId.h> #include <DataItemId.h>
#include <DataItemsFactoryProxy.h> #include <DataItemsFactoryProxy.h>
#include <DataItemConcreteTypesBase.h> #include <DataItemConcreteTypes.h>
using namespace loc_util; using namespace loc_util;
using namespace loc_core; using namespace loc_core;
@ -322,13 +322,10 @@ void XtraSystemStatusObserver::notify(const list<IDataItemCore*>& dlist)
const list<IDataItemCore*>& dataItemList) : const list<IDataItemCore*>& dataItemList) :
mXtraSysStatObj(xtraSysStatObs) { mXtraSysStatObj(xtraSysStatObs) {
for (auto eachItem : dataItemList) { for (auto eachItem : dataItemList) {
IDataItemCore* dataitem = DataItemsFactoryProxy::createNewDataItem( IDataItemCore* dataitem = DataItemsFactoryProxy::createNewDataItem(eachItem);
eachItem->getId());
if (NULL == dataitem) { if (NULL == dataitem) {
break; break;
} }
// Copy the contents of the data item
dataitem->copy(eachItem);
mDataItemList.push_back(dataitem); mDataItemList.push_back(dataitem);
} }
@ -349,8 +346,7 @@ void XtraSystemStatusObserver::notify(const list<IDataItemCore*>& dlist)
{ {
case NETWORKINFO_DATA_ITEM_ID: case NETWORKINFO_DATA_ITEM_ID:
{ {
NetworkInfoDataItemBase* networkInfo = NetworkInfoDataItem* networkInfo = static_cast<NetworkInfoDataItem*>(each);
static_cast<NetworkInfoDataItemBase*>(each);
NetworkInfoType* networkHandleInfo = NetworkInfoType* networkHandleInfo =
static_cast<NetworkInfoType*>(networkInfo->getNetworkHandle()); static_cast<NetworkInfoType*>(networkInfo->getNetworkHandle());
mXtraSysStatObj->updateConnections(networkInfo->getAllTypes(), mXtraSysStatObj->updateConnections(networkInfo->getAllTypes(),
@ -360,16 +356,14 @@ void XtraSystemStatusObserver::notify(const list<IDataItemCore*>& dlist)
case TAC_DATA_ITEM_ID: case TAC_DATA_ITEM_ID:
{ {
TacDataItemBase* tac = TacDataItem* tac = static_cast<TacDataItem*>(each);
static_cast<TacDataItemBase*>(each);
mXtraSysStatObj->updateTac(tac->mValue); mXtraSysStatObj->updateTac(tac->mValue);
} }
break; break;
case MCCMNC_DATA_ITEM_ID: case MCCMNC_DATA_ITEM_ID:
{ {
MccmncDataItemBase* mccmnc = MccmncDataItem* mccmnc = static_cast<MccmncDataItem*>(each);
static_cast<MccmncDataItemBase*>(each);
mXtraSysStatObj->updateMccMnc(mccmnc->mValue); mXtraSysStatObj->updateMccMnc(mccmnc->mValue);
} }
break; break;