summaryrefslogtreecommitdiff
path: root/core/SystemStatus.cpp
diff options
context:
space:
mode:
authorKevin Tang <zhikait@codeaurora.org>2018-04-09 14:32:28 -0700
committerKevin Tang <zhikait@codeaurora.org>2018-05-14 12:24:06 -0700
commit80e09f69b6f186b95daf5c9200fc74ac3b8242be (patch)
treed73a40c4fb1ec3326c7b4743ce3024fe7af76459 /core/SystemStatus.cpp
parent36da980fea8cd9e95b26a113e7d2634bf25b3522 (diff)
downloadgps-80e09f69b6f186b95daf5c9200fc74ac3b8242be.tar.gz
Fixed a number of issues with NetworkInfoDataItemBase
There are a couple of issues. NetworkInfoDataItemBase objects might be from OsAgent or GnssLocationProvider. The two sources actually have mTypes defined differently. In addtion, when there are different types of connections such as wifi / mobile, getting connected / disconnected independently, clients need to be all notified correctly. Right now, if mConnected hasn't changed, no updates are send. For exmple, if mobile is connected, later wifi gets connected too, clients won't know. SystemStatus is also updated to get updated / colated informtion. In the above example, SystemStatus's top record would record as both mobile and wifi are connected. Change-Id: I1825902247fe1d4e6363f5e24a75be7e984d0dc4 CRs-Fixed: 2221114
Diffstat (limited to 'core/SystemStatus.cpp')
-rw-r--r--core/SystemStatus.cpp113
1 files changed, 50 insertions, 63 deletions
diff --git a/core/SystemStatus.cpp b/core/SystemStatus.cpp
index e12d9f3..5d5c4b0 100644
--- a/core/SystemStatus.cpp
+++ b/core/SystemStatus.cpp
@@ -1250,8 +1250,7 @@ IOsObserver* SystemStatus::getOsObserver()
}
SystemStatus::SystemStatus(const MsgTask* msgTask) :
- mSysStatusObsvr(this, msgTask),
- mConnected(false)
+ mSysStatusObsvr(this, msgTask)
{
int result = 0;
ENTRY_LOG ();
@@ -1301,17 +1300,10 @@ SystemStatus::SystemStatus(const MsgTask* msgTask) :
/******************************************************************************
SystemStatus - storing dataitems
******************************************************************************/
-template <typename TYPE_SYSTEMSTATUS_ITEM, typename TYPE_REPORT, typename TYPE_ITEMBASE>
-bool SystemStatus::setItemBaseinReport(TYPE_REPORT& report, const TYPE_ITEMBASE& s)
-{
- TYPE_SYSTEMSTATUS_ITEM sout(s);
- return setIteminReport(report, sout);
-}
-
template <typename TYPE_REPORT, typename TYPE_ITEM>
-bool SystemStatus::setIteminReport(TYPE_REPORT& report, const TYPE_ITEM& s)
+bool SystemStatus::setIteminReport(TYPE_REPORT& report, TYPE_ITEM&& s)
{
- if (!report.empty() && report.back().equals(s)) {
+ if (!report.empty() && report.back().equals(static_cast<TYPE_ITEM&>(s.collate(report.back())))) {
// there is no change - just update reported timestamp
report.back().mUtcReported = s.mUtcReported;
return false;
@@ -1449,94 +1441,92 @@ bool SystemStatus::eventDataItemNotify(IDataItemCore* dataitem)
switch(dataitem->getId())
{
case AIRPLANEMODE_DATA_ITEM_ID:
- ret = setItemBaseinReport<SystemStatusAirplaneMode>(mCache.mAirplaneMode,
- *(static_cast<AirplaneModeDataItemBase*>(dataitem)));
+ ret = setIteminReport(mCache.mAirplaneMode,
+ SystemStatusAirplaneMode(*(static_cast<AirplaneModeDataItemBase*>(dataitem))));
break;
case ENH_DATA_ITEM_ID:
- ret = setItemBaseinReport<SystemStatusENH>(mCache.mENH,
- *(static_cast<ENHDataItemBase*>(dataitem)));
+ ret = setIteminReport(mCache.mENH,
+ SystemStatusENH(*(static_cast<ENHDataItemBase*>(dataitem))));
break;
case GPSSTATE_DATA_ITEM_ID:
- ret = setItemBaseinReport<SystemStatusGpsState>(mCache.mGPSState,
- *(static_cast<GPSStateDataItemBase*>(dataitem)));
+ ret = setIteminReport(mCache.mGPSState,
+ SystemStatusGpsState(*(static_cast<GPSStateDataItemBase*>(dataitem))));
break;
case NLPSTATUS_DATA_ITEM_ID:
- ret = setItemBaseinReport<SystemStatusNLPStatus>(mCache.mNLPStatus,
- *(static_cast<NLPStatusDataItemBase*>(dataitem)));
+ ret = setIteminReport(mCache.mNLPStatus,
+ SystemStatusNLPStatus(*(static_cast<NLPStatusDataItemBase*>(dataitem))));
break;
case WIFIHARDWARESTATE_DATA_ITEM_ID:
- ret = setItemBaseinReport<SystemStatusWifiHardwareState>(mCache.mWifiHardwareState,
- *(static_cast<WifiHardwareStateDataItemBase*>(dataitem)));
+ ret = setIteminReport(mCache.mWifiHardwareState,
+ SystemStatusWifiHardwareState(*(static_cast<WifiHardwareStateDataItemBase*>(dataitem))));
break;
case NETWORKINFO_DATA_ITEM_ID:
- ret = setItemBaseinReport<SystemStatusNetworkInfo>(mCache.mNetworkInfo,
- *(static_cast<NetworkInfoDataItemBase*>(dataitem)));
+ ret = setIteminReport(mCache.mNetworkInfo,
+ SystemStatusNetworkInfo(*(static_cast<NetworkInfoDataItemBase*>(dataitem))));
break;
case RILSERVICEINFO_DATA_ITEM_ID:
- ret = setItemBaseinReport<SystemStatusServiceInfo>(mCache.mRilServiceInfo,
- *(static_cast<RilServiceInfoDataItemBase*>(dataitem)));
+ ret = setIteminReport(mCache.mRilServiceInfo,
+ SystemStatusServiceInfo(*(static_cast<RilServiceInfoDataItemBase*>(dataitem))));
break;
case RILCELLINFO_DATA_ITEM_ID:
- ret = setItemBaseinReport<SystemStatusRilCellInfo>(mCache.mRilCellInfo,
- *(static_cast<RilCellInfoDataItemBase*>(dataitem)));
+ ret = setIteminReport(mCache.mRilCellInfo,
+ SystemStatusRilCellInfo(*(static_cast<RilCellInfoDataItemBase*>(dataitem))));
break;
case SERVICESTATUS_DATA_ITEM_ID:
- ret = setItemBaseinReport<SystemStatusServiceStatus>(mCache.mServiceStatus,
- *(static_cast<ServiceStatusDataItemBase*>(dataitem)));
+ ret = setIteminReport(mCache.mServiceStatus,
+ SystemStatusServiceStatus(*(static_cast<ServiceStatusDataItemBase*>(dataitem))));
break;
case MODEL_DATA_ITEM_ID:
- ret = setItemBaseinReport<SystemStatusModel>(mCache.mModel,
- *(static_cast<ModelDataItemBase*>(dataitem)));
+ ret = setIteminReport(mCache.mModel,
+ SystemStatusModel(*(static_cast<ModelDataItemBase*>(dataitem))));
break;
case MANUFACTURER_DATA_ITEM_ID:
- ret = setItemBaseinReport<SystemStatusManufacturer>(mCache.mManufacturer,
- *(static_cast<ManufacturerDataItemBase*>(dataitem)));
+ ret = setIteminReport(mCache.mManufacturer,
+ SystemStatusManufacturer(*(static_cast<ManufacturerDataItemBase*>(dataitem))));
break;
case ASSISTED_GPS_DATA_ITEM_ID:
- ret = setItemBaseinReport<SystemStatusAssistedGps>(mCache.mAssistedGps,
- *(static_cast<AssistedGpsDataItemBase*>(dataitem)));
+ ret = setIteminReport(mCache.mAssistedGps,
+ SystemStatusAssistedGps(*(static_cast<AssistedGpsDataItemBase*>(dataitem))));
break;
case SCREEN_STATE_DATA_ITEM_ID:
- ret = setItemBaseinReport<SystemStatusScreenState>(mCache.mScreenState,
- *(static_cast<ScreenStateDataItemBase*>(dataitem)));
+ ret = setIteminReport(mCache.mScreenState,
+ SystemStatusScreenState(*(static_cast<ScreenStateDataItemBase*>(dataitem))));
break;
case POWER_CONNECTED_STATE_DATA_ITEM_ID:
- ret = setItemBaseinReport<SystemStatusPowerConnectState>(mCache.mPowerConnectState,
- *(static_cast<PowerConnectStateDataItemBase*>(dataitem)));
+ ret = setIteminReport(mCache.mPowerConnectState,
+ SystemStatusPowerConnectState(*(static_cast<PowerConnectStateDataItemBase*>(dataitem))));
break;
case TIMEZONE_CHANGE_DATA_ITEM_ID:
- ret = setItemBaseinReport<SystemStatusTimeZoneChange>(mCache.mTimeZoneChange,
- *(static_cast<TimeZoneChangeDataItemBase*>(dataitem)));
+ ret = setIteminReport(mCache.mTimeZoneChange,
+ SystemStatusTimeZoneChange(*(static_cast<TimeZoneChangeDataItemBase*>(dataitem))));
break;
case TIME_CHANGE_DATA_ITEM_ID:
- ret = setItemBaseinReport<SystemStatusTimeChange>(mCache.mTimeChange,
- *(static_cast<TimeChangeDataItemBase*>(dataitem)));
+ ret = setIteminReport(mCache.mTimeChange,
+ SystemStatusTimeChange(*(static_cast<TimeChangeDataItemBase*>(dataitem))));
break;
case WIFI_SUPPLICANT_STATUS_DATA_ITEM_ID:
- ret = setItemBaseinReport<SystemStatusWifiSupplicantStatus>(
- mCache.mWifiSupplicantStatus,
- *(static_cast<WifiSupplicantStatusDataItemBase*>(dataitem)));
+ ret = setIteminReport(mCache.mWifiSupplicantStatus,
+ SystemStatusWifiSupplicantStatus(*(static_cast<WifiSupplicantStatusDataItemBase*>(dataitem))));
break;
case SHUTDOWN_STATE_DATA_ITEM_ID:
- ret = setItemBaseinReport<SystemStatusShutdownState>(mCache.mShutdownState,
- *(static_cast<ShutdownStateDataItemBase*>(dataitem)));
+ ret = setIteminReport(mCache.mShutdownState,
+ SystemStatusShutdownState(*(static_cast<ShutdownStateDataItemBase*>(dataitem))));
break;
case TAC_DATA_ITEM_ID:
- ret = setItemBaseinReport<SystemStatusTac>(mCache.mTac,
- *(static_cast<TacDataItemBase*>(dataitem)));
+ ret = setIteminReport(mCache.mTac,
+ SystemStatusTac(*(static_cast<TacDataItemBase*>(dataitem))));
break;
case MCCMNC_DATA_ITEM_ID:
- ret = setItemBaseinReport<SystemStatusMccMnc>(mCache.mMccMnc,
- *(static_cast<MccmncDataItemBase*>(dataitem)));
+ ret = setIteminReport(mCache.mMccMnc,
+ SystemStatusMccMnc(*(static_cast<MccmncDataItemBase*>(dataitem))));
break;
case BTLE_SCAN_DATA_ITEM_ID:
- ret = setItemBaseinReport<SystemStatusBtDeviceScanDetail>(mCache.mBtDeviceScanDetail,
- *(static_cast<BtDeviceScanDetailsDataItemBase*>(dataitem)));
+ ret = setIteminReport(mCache.mBtDeviceScanDetail,
+ SystemStatusBtDeviceScanDetail(*(static_cast<BtDeviceScanDetailsDataItemBase*>(dataitem))));
break;
case BT_SCAN_DATA_ITEM_ID:
- ret = setItemBaseinReport<SystemStatusBtleDeviceScanDetail>(
- mCache.mBtLeDeviceScanDetail,
- *(static_cast<BtLeDeviceScanDetailsDataItemBase*>(dataitem)));
+ ret = setIteminReport(mCache.mBtLeDeviceScanDetail,
+ SystemStatusBtleDeviceScanDetail(*(static_cast<BtLeDeviceScanDetailsDataItemBase*>(dataitem))));
break;
default:
break;
@@ -1689,13 +1679,10 @@ bool SystemStatus::setDefaultGnssEngineStates(void)
******************************************************************************/
bool SystemStatus::eventConnectionStatus(bool connected, int8_t type)
{
- if (connected != mConnected) {
- mConnected = connected;
+ // send networkinof dataitem to systemstatus observer clients
+ SystemStatusNetworkInfo s(type, "", "", false, connected, false);
+ mSysStatusObsvr.notify({&s});
- // send networkinof dataitem to systemstatus observer clients
- SystemStatusNetworkInfo s(type, "", "", false, connected, false);
- mSysStatusObsvr.notify({&s});
- }
return true;
}