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
This commit is contained in:
parent
fdab877f35
commit
533f43e690
5 changed files with 107 additions and 117 deletions
|
@ -1250,8 +1250,7 @@ IOsObserver* SystemStatus::getOsObserver()
|
||||||
}
|
}
|
||||||
|
|
||||||
SystemStatus::SystemStatus(const MsgTask* msgTask) :
|
SystemStatus::SystemStatus(const MsgTask* msgTask) :
|
||||||
mSysStatusObsvr(this, msgTask),
|
mSysStatusObsvr(this, msgTask)
|
||||||
mConnected(false)
|
|
||||||
{
|
{
|
||||||
int result = 0;
|
int result = 0;
|
||||||
ENTRY_LOG ();
|
ENTRY_LOG ();
|
||||||
|
@ -1301,17 +1300,10 @@ SystemStatus::SystemStatus(const MsgTask* msgTask) :
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
SystemStatus - storing dataitems
|
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>
|
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
|
// there is no change - just update reported timestamp
|
||||||
report.back().mUtcReported = s.mUtcReported;
|
report.back().mUtcReported = s.mUtcReported;
|
||||||
return false;
|
return false;
|
||||||
|
@ -1449,94 +1441,92 @@ bool SystemStatus::eventDataItemNotify(IDataItemCore* dataitem)
|
||||||
switch(dataitem->getId())
|
switch(dataitem->getId())
|
||||||
{
|
{
|
||||||
case AIRPLANEMODE_DATA_ITEM_ID:
|
case AIRPLANEMODE_DATA_ITEM_ID:
|
||||||
ret = setItemBaseinReport<SystemStatusAirplaneMode>(mCache.mAirplaneMode,
|
ret = setIteminReport(mCache.mAirplaneMode,
|
||||||
*(static_cast<AirplaneModeDataItemBase*>(dataitem)));
|
SystemStatusAirplaneMode(*(static_cast<AirplaneModeDataItemBase*>(dataitem))));
|
||||||
break;
|
break;
|
||||||
case ENH_DATA_ITEM_ID:
|
case ENH_DATA_ITEM_ID:
|
||||||
ret = setItemBaseinReport<SystemStatusENH>(mCache.mENH,
|
ret = setIteminReport(mCache.mENH,
|
||||||
*(static_cast<ENHDataItemBase*>(dataitem)));
|
SystemStatusENH(*(static_cast<ENHDataItemBase*>(dataitem))));
|
||||||
break;
|
break;
|
||||||
case GPSSTATE_DATA_ITEM_ID:
|
case GPSSTATE_DATA_ITEM_ID:
|
||||||
ret = setItemBaseinReport<SystemStatusGpsState>(mCache.mGPSState,
|
ret = setIteminReport(mCache.mGPSState,
|
||||||
*(static_cast<GPSStateDataItemBase*>(dataitem)));
|
SystemStatusGpsState(*(static_cast<GPSStateDataItemBase*>(dataitem))));
|
||||||
break;
|
break;
|
||||||
case NLPSTATUS_DATA_ITEM_ID:
|
case NLPSTATUS_DATA_ITEM_ID:
|
||||||
ret = setItemBaseinReport<SystemStatusNLPStatus>(mCache.mNLPStatus,
|
ret = setIteminReport(mCache.mNLPStatus,
|
||||||
*(static_cast<NLPStatusDataItemBase*>(dataitem)));
|
SystemStatusNLPStatus(*(static_cast<NLPStatusDataItemBase*>(dataitem))));
|
||||||
break;
|
break;
|
||||||
case WIFIHARDWARESTATE_DATA_ITEM_ID:
|
case WIFIHARDWARESTATE_DATA_ITEM_ID:
|
||||||
ret = setItemBaseinReport<SystemStatusWifiHardwareState>(mCache.mWifiHardwareState,
|
ret = setIteminReport(mCache.mWifiHardwareState,
|
||||||
*(static_cast<WifiHardwareStateDataItemBase*>(dataitem)));
|
SystemStatusWifiHardwareState(*(static_cast<WifiHardwareStateDataItemBase*>(dataitem))));
|
||||||
break;
|
break;
|
||||||
case NETWORKINFO_DATA_ITEM_ID:
|
case NETWORKINFO_DATA_ITEM_ID:
|
||||||
ret = setItemBaseinReport<SystemStatusNetworkInfo>(mCache.mNetworkInfo,
|
ret = setIteminReport(mCache.mNetworkInfo,
|
||||||
*(static_cast<NetworkInfoDataItemBase*>(dataitem)));
|
SystemStatusNetworkInfo(*(static_cast<NetworkInfoDataItemBase*>(dataitem))));
|
||||||
break;
|
break;
|
||||||
case RILSERVICEINFO_DATA_ITEM_ID:
|
case RILSERVICEINFO_DATA_ITEM_ID:
|
||||||
ret = setItemBaseinReport<SystemStatusServiceInfo>(mCache.mRilServiceInfo,
|
ret = setIteminReport(mCache.mRilServiceInfo,
|
||||||
*(static_cast<RilServiceInfoDataItemBase*>(dataitem)));
|
SystemStatusServiceInfo(*(static_cast<RilServiceInfoDataItemBase*>(dataitem))));
|
||||||
break;
|
break;
|
||||||
case RILCELLINFO_DATA_ITEM_ID:
|
case RILCELLINFO_DATA_ITEM_ID:
|
||||||
ret = setItemBaseinReport<SystemStatusRilCellInfo>(mCache.mRilCellInfo,
|
ret = setIteminReport(mCache.mRilCellInfo,
|
||||||
*(static_cast<RilCellInfoDataItemBase*>(dataitem)));
|
SystemStatusRilCellInfo(*(static_cast<RilCellInfoDataItemBase*>(dataitem))));
|
||||||
break;
|
break;
|
||||||
case SERVICESTATUS_DATA_ITEM_ID:
|
case SERVICESTATUS_DATA_ITEM_ID:
|
||||||
ret = setItemBaseinReport<SystemStatusServiceStatus>(mCache.mServiceStatus,
|
ret = setIteminReport(mCache.mServiceStatus,
|
||||||
*(static_cast<ServiceStatusDataItemBase*>(dataitem)));
|
SystemStatusServiceStatus(*(static_cast<ServiceStatusDataItemBase*>(dataitem))));
|
||||||
break;
|
break;
|
||||||
case MODEL_DATA_ITEM_ID:
|
case MODEL_DATA_ITEM_ID:
|
||||||
ret = setItemBaseinReport<SystemStatusModel>(mCache.mModel,
|
ret = setIteminReport(mCache.mModel,
|
||||||
*(static_cast<ModelDataItemBase*>(dataitem)));
|
SystemStatusModel(*(static_cast<ModelDataItemBase*>(dataitem))));
|
||||||
break;
|
break;
|
||||||
case MANUFACTURER_DATA_ITEM_ID:
|
case MANUFACTURER_DATA_ITEM_ID:
|
||||||
ret = setItemBaseinReport<SystemStatusManufacturer>(mCache.mManufacturer,
|
ret = setIteminReport(mCache.mManufacturer,
|
||||||
*(static_cast<ManufacturerDataItemBase*>(dataitem)));
|
SystemStatusManufacturer(*(static_cast<ManufacturerDataItemBase*>(dataitem))));
|
||||||
break;
|
break;
|
||||||
case ASSISTED_GPS_DATA_ITEM_ID:
|
case ASSISTED_GPS_DATA_ITEM_ID:
|
||||||
ret = setItemBaseinReport<SystemStatusAssistedGps>(mCache.mAssistedGps,
|
ret = setIteminReport(mCache.mAssistedGps,
|
||||||
*(static_cast<AssistedGpsDataItemBase*>(dataitem)));
|
SystemStatusAssistedGps(*(static_cast<AssistedGpsDataItemBase*>(dataitem))));
|
||||||
break;
|
break;
|
||||||
case SCREEN_STATE_DATA_ITEM_ID:
|
case SCREEN_STATE_DATA_ITEM_ID:
|
||||||
ret = setItemBaseinReport<SystemStatusScreenState>(mCache.mScreenState,
|
ret = setIteminReport(mCache.mScreenState,
|
||||||
*(static_cast<ScreenStateDataItemBase*>(dataitem)));
|
SystemStatusScreenState(*(static_cast<ScreenStateDataItemBase*>(dataitem))));
|
||||||
break;
|
break;
|
||||||
case POWER_CONNECTED_STATE_DATA_ITEM_ID:
|
case POWER_CONNECTED_STATE_DATA_ITEM_ID:
|
||||||
ret = setItemBaseinReport<SystemStatusPowerConnectState>(mCache.mPowerConnectState,
|
ret = setIteminReport(mCache.mPowerConnectState,
|
||||||
*(static_cast<PowerConnectStateDataItemBase*>(dataitem)));
|
SystemStatusPowerConnectState(*(static_cast<PowerConnectStateDataItemBase*>(dataitem))));
|
||||||
break;
|
break;
|
||||||
case TIMEZONE_CHANGE_DATA_ITEM_ID:
|
case TIMEZONE_CHANGE_DATA_ITEM_ID:
|
||||||
ret = setItemBaseinReport<SystemStatusTimeZoneChange>(mCache.mTimeZoneChange,
|
ret = setIteminReport(mCache.mTimeZoneChange,
|
||||||
*(static_cast<TimeZoneChangeDataItemBase*>(dataitem)));
|
SystemStatusTimeZoneChange(*(static_cast<TimeZoneChangeDataItemBase*>(dataitem))));
|
||||||
break;
|
break;
|
||||||
case TIME_CHANGE_DATA_ITEM_ID:
|
case TIME_CHANGE_DATA_ITEM_ID:
|
||||||
ret = setItemBaseinReport<SystemStatusTimeChange>(mCache.mTimeChange,
|
ret = setIteminReport(mCache.mTimeChange,
|
||||||
*(static_cast<TimeChangeDataItemBase*>(dataitem)));
|
SystemStatusTimeChange(*(static_cast<TimeChangeDataItemBase*>(dataitem))));
|
||||||
break;
|
break;
|
||||||
case WIFI_SUPPLICANT_STATUS_DATA_ITEM_ID:
|
case WIFI_SUPPLICANT_STATUS_DATA_ITEM_ID:
|
||||||
ret = setItemBaseinReport<SystemStatusWifiSupplicantStatus>(
|
ret = setIteminReport(mCache.mWifiSupplicantStatus,
|
||||||
mCache.mWifiSupplicantStatus,
|
SystemStatusWifiSupplicantStatus(*(static_cast<WifiSupplicantStatusDataItemBase*>(dataitem))));
|
||||||
*(static_cast<WifiSupplicantStatusDataItemBase*>(dataitem)));
|
|
||||||
break;
|
break;
|
||||||
case SHUTDOWN_STATE_DATA_ITEM_ID:
|
case SHUTDOWN_STATE_DATA_ITEM_ID:
|
||||||
ret = setItemBaseinReport<SystemStatusShutdownState>(mCache.mShutdownState,
|
ret = setIteminReport(mCache.mShutdownState,
|
||||||
*(static_cast<ShutdownStateDataItemBase*>(dataitem)));
|
SystemStatusShutdownState(*(static_cast<ShutdownStateDataItemBase*>(dataitem))));
|
||||||
break;
|
break;
|
||||||
case TAC_DATA_ITEM_ID:
|
case TAC_DATA_ITEM_ID:
|
||||||
ret = setItemBaseinReport<SystemStatusTac>(mCache.mTac,
|
ret = setIteminReport(mCache.mTac,
|
||||||
*(static_cast<TacDataItemBase*>(dataitem)));
|
SystemStatusTac(*(static_cast<TacDataItemBase*>(dataitem))));
|
||||||
break;
|
break;
|
||||||
case MCCMNC_DATA_ITEM_ID:
|
case MCCMNC_DATA_ITEM_ID:
|
||||||
ret = setItemBaseinReport<SystemStatusMccMnc>(mCache.mMccMnc,
|
ret = setIteminReport(mCache.mMccMnc,
|
||||||
*(static_cast<MccmncDataItemBase*>(dataitem)));
|
SystemStatusMccMnc(*(static_cast<MccmncDataItemBase*>(dataitem))));
|
||||||
break;
|
break;
|
||||||
case BTLE_SCAN_DATA_ITEM_ID:
|
case BTLE_SCAN_DATA_ITEM_ID:
|
||||||
ret = setItemBaseinReport<SystemStatusBtDeviceScanDetail>(mCache.mBtDeviceScanDetail,
|
ret = setIteminReport(mCache.mBtDeviceScanDetail,
|
||||||
*(static_cast<BtDeviceScanDetailsDataItemBase*>(dataitem)));
|
SystemStatusBtDeviceScanDetail(*(static_cast<BtDeviceScanDetailsDataItemBase*>(dataitem))));
|
||||||
break;
|
break;
|
||||||
case BT_SCAN_DATA_ITEM_ID:
|
case BT_SCAN_DATA_ITEM_ID:
|
||||||
ret = setItemBaseinReport<SystemStatusBtleDeviceScanDetail>(
|
ret = setIteminReport(mCache.mBtLeDeviceScanDetail,
|
||||||
mCache.mBtLeDeviceScanDetail,
|
SystemStatusBtleDeviceScanDetail(*(static_cast<BtLeDeviceScanDetailsDataItemBase*>(dataitem))));
|
||||||
*(static_cast<BtLeDeviceScanDetailsDataItemBase*>(dataitem)));
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
@ -1689,13 +1679,10 @@ bool SystemStatus::setDefaultGnssEngineStates(void)
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
bool SystemStatus::eventConnectionStatus(bool connected, int8_t type)
|
bool SystemStatus::eventConnectionStatus(bool connected, int8_t type)
|
||||||
{
|
{
|
||||||
if (connected != mConnected) {
|
// send networkinof dataitem to systemstatus observer clients
|
||||||
mConnected = connected;
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -77,8 +77,11 @@ public:
|
||||||
mUtcTime.tv_nsec = tv.tv_nsec;
|
mUtcTime.tv_nsec = tv.tv_nsec;
|
||||||
mUtcReported = mUtcTime;
|
mUtcReported = mUtcTime;
|
||||||
};
|
};
|
||||||
virtual ~SystemStatusItemBase() { };
|
virtual ~SystemStatusItemBase() {};
|
||||||
virtual void dump(void) { };
|
inline virtual SystemStatusItemBase& collate(SystemStatusItemBase&) {
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
virtual void dump(void) {};
|
||||||
};
|
};
|
||||||
|
|
||||||
class SystemStatusLocation : public SystemStatusItemBase
|
class SystemStatusLocation : public SystemStatusItemBase
|
||||||
|
@ -93,7 +96,7 @@ public:
|
||||||
const GpsLocationExtended& locationEx) :
|
const GpsLocationExtended& locationEx) :
|
||||||
mValid(true),
|
mValid(true),
|
||||||
mLocation(location),
|
mLocation(location),
|
||||||
mLocationEx(locationEx) { }
|
mLocationEx(locationEx) {}
|
||||||
bool equals(const SystemStatusLocation& peer);
|
bool equals(const SystemStatusLocation& peer);
|
||||||
void dump(void);
|
void dump(void);
|
||||||
};
|
};
|
||||||
|
@ -457,6 +460,7 @@ public:
|
||||||
class SystemStatusNetworkInfo : public SystemStatusItemBase,
|
class SystemStatusNetworkInfo : public SystemStatusItemBase,
|
||||||
public NetworkInfoDataItemBase
|
public NetworkInfoDataItemBase
|
||||||
{
|
{
|
||||||
|
NetworkInfoDataItemBase* mSrcObjPtr;
|
||||||
public:
|
public:
|
||||||
inline SystemStatusNetworkInfo(
|
inline SystemStatusNetworkInfo(
|
||||||
int32_t type=0,
|
int32_t type=0,
|
||||||
|
@ -466,18 +470,21 @@ public:
|
||||||
bool connected=false,
|
bool connected=false,
|
||||||
bool roaming=false) :
|
bool roaming=false) :
|
||||||
NetworkInfoDataItemBase(
|
NetworkInfoDataItemBase(
|
||||||
|
(NetworkType)type,
|
||||||
type,
|
type,
|
||||||
typeName,
|
typeName,
|
||||||
subTypeName,
|
subTypeName,
|
||||||
available,
|
available,
|
||||||
connected,
|
connected,
|
||||||
roaming) {}
|
roaming),
|
||||||
|
mSrcObjPtr(nullptr) {}
|
||||||
inline SystemStatusNetworkInfo(const NetworkInfoDataItemBase& itemBase) :
|
inline SystemStatusNetworkInfo(const NetworkInfoDataItemBase& itemBase) :
|
||||||
NetworkInfoDataItemBase(itemBase) {
|
NetworkInfoDataItemBase(itemBase),
|
||||||
|
mSrcObjPtr((NetworkInfoDataItemBase*)&itemBase) {
|
||||||
mType = itemBase.getType();
|
mType = itemBase.getType();
|
||||||
}
|
}
|
||||||
inline bool equals(const SystemStatusNetworkInfo& peer) {
|
inline bool equals(const SystemStatusNetworkInfo& peer) {
|
||||||
if ((mType == peer.mType) &&
|
if ((mAllTypes == peer.mAllTypes) &&
|
||||||
(mTypeName == peer.mTypeName) &&
|
(mTypeName == peer.mTypeName) &&
|
||||||
(mSubTypeName == peer.mSubTypeName) &&
|
(mSubTypeName == peer.mSubTypeName) &&
|
||||||
(mAvailable == peer.mAvailable) &&
|
(mAvailable == peer.mAvailable) &&
|
||||||
|
@ -487,8 +494,24 @@ public:
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
inline virtual SystemStatusItemBase& collate(SystemStatusItemBase& curInfo) {
|
||||||
|
uint64_t allTypes = (static_cast<SystemStatusNetworkInfo&>(curInfo)).mAllTypes;
|
||||||
|
if (mConnected) {
|
||||||
|
mAllTypes |= allTypes;
|
||||||
|
} else if (0 != mAllTypes) {
|
||||||
|
mAllTypes = (allTypes & (~mAllTypes));
|
||||||
|
} // else (mConnected == false && mAllTypes == 0)
|
||||||
|
// we keep mAllTypes as 0, which means no more connections.
|
||||||
|
|
||||||
|
if (nullptr != mSrcObjPtr) {
|
||||||
|
// this is critical, changing mAllTypes of the original obj
|
||||||
|
mSrcObjPtr->mAllTypes = mAllTypes;
|
||||||
|
}
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
inline void dump(void) override {
|
inline void dump(void) override {
|
||||||
LOC_LOGD("NetworkInfo: type=%u connected=%u", mType, mConnected);
|
LOC_LOGD("NetworkInfo: mAllTypes=%" PRIx64 " connected=%u mType=%x",
|
||||||
|
mAllTypes, mConnected, mType);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -783,13 +806,9 @@ private:
|
||||||
// Data members
|
// Data members
|
||||||
static pthread_mutex_t mMutexSystemStatus;
|
static pthread_mutex_t mMutexSystemStatus;
|
||||||
SystemStatusReports mCache;
|
SystemStatusReports mCache;
|
||||||
bool mConnected;
|
|
||||||
|
|
||||||
template <typename TYPE_SYSTEMSTATUS_ITEM, typename TYPE_REPORT, typename TYPE_ITEMBASE>
|
|
||||||
bool setItemBaseinReport(TYPE_REPORT& report, const TYPE_ITEMBASE& s);
|
|
||||||
|
|
||||||
template <typename TYPE_REPORT, typename TYPE_ITEM>
|
template <typename TYPE_REPORT, typename TYPE_ITEM>
|
||||||
bool setIteminReport(TYPE_REPORT& report, const TYPE_ITEM& s);
|
bool setIteminReport(TYPE_REPORT& report, TYPE_ITEM&& s);
|
||||||
|
|
||||||
// set default dataitem derived item in report cache
|
// set default dataitem derived item in report cache
|
||||||
template <typename TYPE_REPORT, typename TYPE_ITEM>
|
template <typename TYPE_REPORT, typename TYPE_ITEM>
|
||||||
|
|
|
@ -221,9 +221,23 @@ protected:
|
||||||
|
|
||||||
class NetworkInfoDataItemBase : public IDataItemCore {
|
class NetworkInfoDataItemBase : public IDataItemCore {
|
||||||
public:
|
public:
|
||||||
|
enum NetworkType {
|
||||||
|
TYPE_MOBILE,
|
||||||
|
TYPE_WIFI,
|
||||||
|
TYPE_ETHERNET,
|
||||||
|
TYPE_BLUETOOTH,
|
||||||
|
TYPE_MMS,
|
||||||
|
TYPE_SUPL,
|
||||||
|
TYPE_DUN,
|
||||||
|
TYPE_HIPRI,
|
||||||
|
TYPE_WIMAX,
|
||||||
|
TYPE_UNKNOWN,
|
||||||
|
};
|
||||||
NetworkInfoDataItemBase(
|
NetworkInfoDataItemBase(
|
||||||
int32_t type, string typeName, string subTypeName,
|
NetworkType initialType, int32_t type, string typeName, string subTypeName,
|
||||||
bool available, bool connected, bool roaming ):
|
bool available, bool connected, bool roaming ):
|
||||||
|
mAllTypes((initialType >= TYPE_UNKNOWN || initialType < TYPE_MOBILE) ?
|
||||||
|
0 : (1<<initialType)),
|
||||||
mType(type),
|
mType(type),
|
||||||
mTypeName(typeName),
|
mTypeName(typeName),
|
||||||
mSubTypeName(subTypeName),
|
mSubTypeName(subTypeName),
|
||||||
|
@ -235,22 +249,12 @@ public:
|
||||||
inline virtual DataItemId getId() { return mId; }
|
inline virtual DataItemId getId() { return mId; }
|
||||||
virtual void stringify(string& /*valueStr*/) {}
|
virtual void stringify(string& /*valueStr*/) {}
|
||||||
virtual int32_t copy(IDataItemCore* /*src*/, bool* /*dataItemCopied = NULL*/) {return 1;}
|
virtual int32_t copy(IDataItemCore* /*src*/, bool* /*dataItemCopied = NULL*/) {return 1;}
|
||||||
enum NetworkType {
|
|
||||||
TYPE_UNKNOWN,
|
|
||||||
TYPE_MOBILE,
|
|
||||||
TYPE_WIFI,
|
|
||||||
TYPE_ETHERNET,
|
|
||||||
TYPE_BLUETOOTH,
|
|
||||||
TYPE_MMS,
|
|
||||||
TYPE_SUPL,
|
|
||||||
TYPE_DUN,
|
|
||||||
TYPE_HIPRI,
|
|
||||||
TYPE_WIMAX
|
|
||||||
};
|
|
||||||
inline virtual NetworkType getType(void) const {
|
inline virtual NetworkType getType(void) const {
|
||||||
return (NetworkType)mType;
|
return (NetworkType)mType;
|
||||||
}
|
}
|
||||||
// Data members
|
inline uint64_t getAllTypes() { return mAllTypes; }
|
||||||
|
// Data members
|
||||||
|
uint64_t mAllTypes;
|
||||||
int32_t mType;
|
int32_t mType;
|
||||||
string mTypeName;
|
string mTypeName;
|
||||||
string mSubTypeName;
|
string mSubTypeName;
|
||||||
|
|
|
@ -69,18 +69,9 @@ bool XtraSystemStatusObserver::updateLockStatus(uint32_t lock) {
|
||||||
return ( send(LOC_IPC_XTRA, ss.str()) );
|
return ( send(LOC_IPC_XTRA, ss.str()) );
|
||||||
}
|
}
|
||||||
|
|
||||||
bool XtraSystemStatusObserver::updateConnectionStatus(bool connected, int32_t type) {
|
bool XtraSystemStatusObserver::updateConnections(uint64_t allConnections) {
|
||||||
mIsConnectivityStatusKnown = true;
|
mIsConnectivityStatusKnown = true;
|
||||||
|
mConnections = allConnections;
|
||||||
if (connected) {
|
|
||||||
mConnections.insert(type);
|
|
||||||
} else {
|
|
||||||
if (-1 == type) { // -1 for disconnecting all connections
|
|
||||||
mConnections.clear();
|
|
||||||
} else {
|
|
||||||
mConnections.erase(type);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!mReqStatusReceived) {
|
if (!mReqStatusReceived) {
|
||||||
return true;
|
return true;
|
||||||
|
@ -88,8 +79,7 @@ bool XtraSystemStatusObserver::updateConnectionStatus(bool connected, int32_t ty
|
||||||
|
|
||||||
stringstream ss;
|
stringstream ss;
|
||||||
ss << "connection";
|
ss << "connection";
|
||||||
ss << " " << (connected ? "1" : "0");
|
ss << " " << mConnections;
|
||||||
ss << " " << type;
|
|
||||||
return ( send(LOC_IPC_XTRA, ss.str()) );
|
return ( send(LOC_IPC_XTRA, ss.str()) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -132,13 +122,6 @@ bool XtraSystemStatusObserver::updateXtraThrottle(const bool enabled) {
|
||||||
return ( send(LOC_IPC_XTRA, ss.str()) );
|
return ( send(LOC_IPC_XTRA, ss.str()) );
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline ostream& operator<<(ostream& os, CONNECTIONS& data) {
|
|
||||||
for (auto elem : data) {
|
|
||||||
os << elem << ' ';
|
|
||||||
}
|
|
||||||
return os;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline bool XtraSystemStatusObserver::onStatusRequested(int32_t xtraStatusUpdated) {
|
inline bool XtraSystemStatusObserver::onStatusRequested(int32_t xtraStatusUpdated) {
|
||||||
mReqStatusReceived = true;
|
mReqStatusReceived = true;
|
||||||
|
|
||||||
|
@ -248,8 +231,7 @@ void XtraSystemStatusObserver::notify(const list<IDataItemCore*>& dlist)
|
||||||
{
|
{
|
||||||
NetworkInfoDataItemBase* networkInfo =
|
NetworkInfoDataItemBase* networkInfo =
|
||||||
static_cast<NetworkInfoDataItemBase*>(each);
|
static_cast<NetworkInfoDataItemBase*>(each);
|
||||||
mXtraSysStatObj->updateConnectionStatus(networkInfo->mConnected,
|
mXtraSysStatObj->updateConnections(networkInfo->getAllTypes());
|
||||||
networkInfo->mType);
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
@ -33,22 +33,20 @@
|
||||||
#include <MsgTask.h>
|
#include <MsgTask.h>
|
||||||
#include <LocIpc.h>
|
#include <LocIpc.h>
|
||||||
#include <LocTimer.h>
|
#include <LocTimer.h>
|
||||||
#include <set>
|
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using loc_core::IOsObserver;
|
using loc_core::IOsObserver;
|
||||||
using loc_core::IDataItemObserver;
|
using loc_core::IDataItemObserver;
|
||||||
using loc_core::IDataItemCore;
|
using loc_core::IDataItemCore;
|
||||||
using loc_util::LocIpc;
|
using loc_util::LocIpc;
|
||||||
using CONNECTIONS = set<int32_t>;
|
|
||||||
|
|
||||||
class XtraSystemStatusObserver : public IDataItemObserver, public LocIpc{
|
class XtraSystemStatusObserver : public IDataItemObserver, public LocIpc{
|
||||||
public :
|
public :
|
||||||
// constructor & destructor
|
// constructor & destructor
|
||||||
inline XtraSystemStatusObserver(IOsObserver* sysStatObs, const MsgTask* msgTask):
|
inline XtraSystemStatusObserver(IOsObserver* sysStatObs, const MsgTask* msgTask):
|
||||||
mSystemStatusObsrvr(sysStatObs), mMsgTask(msgTask),
|
mSystemStatusObsrvr(sysStatObs), mMsgTask(msgTask),
|
||||||
mGpsLock(-1), mXtraThrottle(true), mReqStatusReceived(false),
|
mGpsLock(-1), mConnections(0), mXtraThrottle(true), mReqStatusReceived(false),
|
||||||
mIsConnectivityStatusKnown (false), mDelayLocTimer(*this) {
|
mDelayLocTimer(*this), mIsConnectivityStatusKnown (false) {
|
||||||
subscribe(true);
|
subscribe(true);
|
||||||
startListeningNonBlocking(LOC_IPC_HAL);
|
startListeningNonBlocking(LOC_IPC_HAL);
|
||||||
mDelayLocTimer.start(100 /*.1 sec*/, false);
|
mDelayLocTimer.start(100 /*.1 sec*/, false);
|
||||||
|
@ -63,7 +61,7 @@ public :
|
||||||
virtual void notify(const list<IDataItemCore*>& dlist);
|
virtual void notify(const list<IDataItemCore*>& dlist);
|
||||||
|
|
||||||
bool updateLockStatus(uint32_t lock);
|
bool updateLockStatus(uint32_t lock);
|
||||||
bool updateConnectionStatus(bool connected, int32_t type);
|
bool updateConnections(uint64_t allConnections);
|
||||||
bool updateTac(const string& tac);
|
bool updateTac(const string& tac);
|
||||||
bool updateMccMnc(const string& mccmnc);
|
bool updateMccMnc(const string& mccmnc);
|
||||||
bool updateXtraThrottle(const bool enabled);
|
bool updateXtraThrottle(const bool enabled);
|
||||||
|
@ -77,7 +75,7 @@ private:
|
||||||
IOsObserver* mSystemStatusObsrvr;
|
IOsObserver* mSystemStatusObsrvr;
|
||||||
const MsgTask* mMsgTask;
|
const MsgTask* mMsgTask;
|
||||||
int32_t mGpsLock;
|
int32_t mGpsLock;
|
||||||
CONNECTIONS mConnections;
|
uint64_t mConnections;
|
||||||
string mTac;
|
string mTac;
|
||||||
string mMccmnc;
|
string mMccmnc;
|
||||||
bool mXtraThrottle;
|
bool mXtraThrottle;
|
||||||
|
|
Loading…
Reference in a new issue