From 546e88fc046234170088cd93bc78567c548ca559 Mon Sep 17 00:00:00 2001 From: Kevin Tang Date: Tue, 26 Mar 2019 18:40:03 -0700 Subject: [PATCH] Add HAL support for network handle Add HAL support for modifications to the network status information passed in. Change-Id: I99defc6a419d9f21ce74469a1aa016cc7fade4a5 CRs-Fixed: 2397433 --- android/2.0/AGnssRil.cpp | 9 +++++++-- core/SystemStatus.cpp | 8 +++++--- core/SystemStatus.h | 21 +++++++++++++++++---- core/data-items/DataItemConcreteTypesBase.h | 19 +++++++++++++++---- gnss/XtraSystemStatusObserver.cpp | 19 ++++++++++++++----- gnss/XtraSystemStatusObserver.h | 7 +++++-- gnss/location_gnss.cpp | 11 +++++++---- location/location_interface.h | 3 ++- utils/gps_extended_c.h | 3 +++ 9 files changed, 75 insertions(+), 25 deletions(-) diff --git a/android/2.0/AGnssRil.cpp b/android/2.0/AGnssRil.cpp index e17a06d4..9de8b7d6 100644 --- a/android/2.0/AGnssRil.cpp +++ b/android/2.0/AGnssRil.cpp @@ -102,7 +102,7 @@ Return AGnssRil::updateNetworkState(bool connected, NetworkType type, bool } break; } - mGnss->getGnssInterface()->updateConnectionStatus(connected, typeout); + mGnss->getGnssInterface()->updateConnectionStatus(connected, false, typeout, 0); } return true; } @@ -111,12 +111,17 @@ Return AGnssRil::updateNetworkState_2_0(const V2_0::IAGnssRil::NetworkAttr if (nullptr != mGnss && (nullptr != mGnss->getGnssInterface())) { int8_t typeout = loc_core::NetworkInfoDataItemBase::TYPE_UNKNOWN; + bool roaming = false; if (attributes.capabilities & IAGnssRil::NetworkCapability::NOT_METERED) { typeout = loc_core::NetworkInfoDataItemBase::TYPE_WIFI; } else { typeout = loc_core::NetworkInfoDataItemBase::TYPE_MOBILE; } - mGnss->getGnssInterface()->updateConnectionStatus(attributes.isConnected, typeout); + if (attributes.capabilities & IAGnssRil::NetworkCapability::NOT_ROAMING) { + roaming = false; + } + mGnss->getGnssInterface()->updateConnectionStatus(attributes.isConnected, + typeout, roaming, (NetworkHandle) attributes.networkHandle); } return true; } diff --git a/core/SystemStatus.cpp b/core/SystemStatus.cpp index f4316ca0..6ef49935 100644 --- a/core/SystemStatus.cpp +++ b/core/SystemStatus.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2017, The Linux Foundation. All rights reserved. +/* Copyright (c) 2017, 2019, 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 @@ -1682,10 +1682,12 @@ bool SystemStatus::setDefaultGnssEngineStates(void) @return true when successfully done ******************************************************************************/ -bool SystemStatus::eventConnectionStatus(bool connected, int8_t type) +bool SystemStatus::eventConnectionStatus(bool connected, int8_t type, + bool roaming, NetworkHandle networkHandle) { // send networkinof dataitem to systemstatus observer clients - SystemStatusNetworkInfo s(type, "", "", connected); + SystemStatusNetworkInfo s(type, "", "", connected, roaming, + (uint64_t) networkHandle); mSysStatusObsvr.notify({&s}); return true; diff --git a/core/SystemStatus.h b/core/SystemStatus.h index 94223223..73a220a0 100644 --- a/core/SystemStatus.h +++ b/core/SystemStatus.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2017, The Linux Foundation. All rights reserved. +/* Copyright (c) 2017-2019, The Linux Foundation. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are @@ -32,6 +32,8 @@ #include #include #include +#include +#include #include #include #include @@ -467,7 +469,8 @@ public: std::string typeName="", string subTypeName="", bool connected=false, - bool roaming=false) : + bool roaming=false, + uint64_t networkHandle=NETWORK_HANDLE_UNKNOWN) : NetworkInfoDataItemBase( (NetworkType)type, type, @@ -475,7 +478,8 @@ public: subTypeName, connected && (!roaming), connected, - roaming), + roaming, + networkHandle), mSrcObjPtr(nullptr) {} inline SystemStatusNetworkInfo(const NetworkInfoDataItemBase& itemBase) : NetworkInfoDataItemBase(itemBase), @@ -487,16 +491,24 @@ public: } inline virtual SystemStatusItemBase& collate(SystemStatusItemBase& curInfo) { uint64_t allTypes = (static_cast(curInfo)).mAllTypes; + uint64_t networkHandle = + (static_cast(curInfo)).mNetworkHandle; + int32_t type = (static_cast(curInfo)).mType; if (mConnected) { mAllTypes |= allTypes; + mAllNetworkHandles[type] = networkHandle; } else if (0 != mAllTypes) { mAllTypes = (allTypes & (~mAllTypes)); + mAllNetworkHandles[type] = NETWORK_HANDLE_UNKNOWN; } // 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; + memcpy(mSrcObjPtr->mAllNetworkHandles, + mAllNetworkHandles, + sizeof(mSrcObjPtr->mAllNetworkHandles)); } return *this; } @@ -830,7 +842,8 @@ public: bool setNmeaString(const char *data, uint32_t len); bool getReport(SystemStatusReports& reports, bool isLatestonly = false) const; bool setDefaultGnssEngineStates(void); - bool eventConnectionStatus(bool connected, int8_t type); + bool eventConnectionStatus(bool connected, int8_t type, + bool roaming, NetworkHandle networkHandle); }; } // namespace loc_core diff --git a/core/data-items/DataItemConcreteTypesBase.h b/core/data-items/DataItemConcreteTypesBase.h index 44be5f99..552d46a1 100644 --- a/core/data-items/DataItemConcreteTypesBase.h +++ b/core/data-items/DataItemConcreteTypesBase.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2015-2017, The Linux Foundation. All rights reserved. +/* Copyright (c) 2015-2017, 2019, The Linux Foundation. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are @@ -34,6 +34,7 @@ #include #include #include +#include #define MAC_ADDRESS_LENGTH 6 // MAC address length in bytes @@ -222,7 +223,7 @@ protected: class NetworkInfoDataItemBase : public IDataItemCore { public: enum NetworkType { - TYPE_MOBILE, + TYPE_MOBILE = 0, TYPE_WIFI, TYPE_ETHERNET, TYPE_BLUETOOTH, @@ -236,7 +237,7 @@ public: }; NetworkInfoDataItemBase( NetworkType initialType, int32_t type, string typeName, string subTypeName, - bool available, bool connected, bool roaming ): + bool available, bool connected, bool roaming, uint64_t networkHandle ): mAllTypes(typeToAllTypes(initialType)), mType(type), mTypeName(typeName), @@ -244,7 +245,12 @@ public: mAvailable(available), mConnected(connected), mRoaming(roaming), - mId(NETWORKINFO_DATA_ITEM_ID) {} + mNetworkHandle(networkHandle), + mId(NETWORKINFO_DATA_ITEM_ID) { + memset (&mAllNetworkHandles, NETWORK_HANDLE_UNKNOWN, + sizeof (mAllNetworkHandles)); + mAllNetworkHandles[type] = networkHandle; + } virtual ~NetworkInfoDataItemBase() {} inline virtual DataItemId getId() { return mId; } virtual void stringify(string& /*valueStr*/) {} @@ -253,6 +259,9 @@ public: return (NetworkType)mType; } inline uint64_t getAllTypes() { return mAllTypes; } + inline uint64_t getNetworkHandle(NetworkType type) { + return mAllNetworkHandles[type]; + } // Data members uint64_t mAllTypes; int32_t mType; @@ -261,6 +270,8 @@ public: bool mAvailable; bool mConnected; bool mRoaming; + uint64_t mAllNetworkHandles[TYPE_UNKNOWN + 1]; + uint64_t mNetworkHandle; protected: DataItemId mId; inline uint64_t typeToAllTypes(NetworkType type) { diff --git a/gnss/XtraSystemStatusObserver.cpp b/gnss/XtraSystemStatusObserver.cpp index 962e1000..6e1902c5 100644 --- a/gnss/XtraSystemStatusObserver.cpp +++ b/gnss/XtraSystemStatusObserver.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2017, The Linux Foundation. All rights reserved. +/* Copyright (c) 2017, 2019, 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 @@ -69,17 +69,21 @@ bool XtraSystemStatusObserver::updateLockStatus(GnssConfigGpsLock lock) { return ( send(LOC_IPC_XTRA, ss.str()) ); } -bool XtraSystemStatusObserver::updateConnections(uint64_t allConnections) { +bool XtraSystemStatusObserver::updateConnections(uint64_t allConnections, + uint64_t wifiNetworkHandle, uint64_t mobileNetworkHandle) { mIsConnectivityStatusKnown = true; mConnections = allConnections; + mWifiNetworkHandle = wifiNetworkHandle; + mMobileNetworkHandle = mobileNetworkHandle; if (!mReqStatusReceived) { return true; } stringstream ss; - ss << "connection"; - ss << " " << mConnections; + ss << "connection" << endl << mConnections << endl << wifiNetworkHandle + << endl << mobileNetworkHandle; + return ( send(LOC_IPC_XTRA, ss.str()) ); } @@ -134,6 +138,7 @@ inline bool XtraSystemStatusObserver::onStatusRequested(int32_t xtraStatusUpdate ss << "respondStatus" << endl; (mGpsLock == -1 ? ss : ss << mGpsLock) << endl; (mConnections == (uint64_t)~0 ? ss : ss << mConnections) << endl + << mWifiNetworkHandle << endl << mMobileNetworkHandle << endl << mTac << endl << mMccmnc << endl << mIsConnectivityStatusKnown; return ( send(LOC_IPC_XTRA, ss.str()) ); @@ -235,7 +240,11 @@ void XtraSystemStatusObserver::notify(const list& dlist) { NetworkInfoDataItemBase* networkInfo = static_cast(each); - mXtraSysStatObj->updateConnections(networkInfo->getAllTypes()); + mXtraSysStatObj->updateConnections(networkInfo->getAllTypes(), + (NetworkHandle) networkInfo->getNetworkHandle( + loc_core::NetworkInfoDataItemBase::TYPE_WIFI), + (NetworkHandle) networkInfo->getNetworkHandle( + loc_core::NetworkInfoDataItemBase::TYPE_MOBILE)); } break; diff --git a/gnss/XtraSystemStatusObserver.h b/gnss/XtraSystemStatusObserver.h index cbbeda61..22a3013c 100644 --- a/gnss/XtraSystemStatusObserver.h +++ b/gnss/XtraSystemStatusObserver.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2017, The Linux Foundation. All rights reserved. +/* Copyright (c) 2017-2019, 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 @@ -61,7 +61,8 @@ public : virtual void notify(const list& dlist); bool updateLockStatus(GnssConfigGpsLock lock); - bool updateConnections(uint64_t allConnections); + bool updateConnections(uint64_t allConnections, + uint64_t wifiNetworkHandle, uint64_t mobileNetworkHandle); bool updateTac(const string& tac); bool updateMccMnc(const string& mccmnc); bool updateXtraThrottle(const bool enabled); @@ -76,6 +77,8 @@ private: const MsgTask* mMsgTask; GnssConfigGpsLock mGpsLock; uint64_t mConnections; + uint64_t mWifiNetworkHandle; + uint64_t mMobileNetworkHandle; string mTac; string mMccmnc; bool mXtraThrottle; diff --git a/gnss/location_gnss.cpp b/gnss/location_gnss.cpp index 45ad292c..f3b15eef 100644 --- a/gnss/location_gnss.cpp +++ b/gnss/location_gnss.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2017, 2019 The Linux Foundation. All rights reserved. +/* Copyright (c) 2017-2019, 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 @@ -65,7 +65,8 @@ static void agpsDataConnOpen(AGpsExtType agpsType, const char* apnName, int apnL static void agpsDataConnClosed(AGpsExtType agpsType); static void agpsDataConnFailed(AGpsExtType agpsType); static void getDebugReport(GnssDebugReport& report); -static void updateConnectionStatus(bool connected, int8_t type); +static void updateConnectionStatus(bool connected, int8_t type, bool roaming = false, + NetworkHandle networkHandle = NETWORK_HANDLE_UNKNOWN); static void getGnssEnergyConsumed(GnssEnergyConsumedCallback energyConsumedCb); static void enableNfwLocationAccess(bool enable); static void nfwInit(const NfwCbInfo& cbInfo); @@ -319,9 +320,11 @@ static void getDebugReport(GnssDebugReport& report) { } } -static void updateConnectionStatus(bool connected, int8_t type) { +static void updateConnectionStatus(bool connected, int8_t type, + bool roaming, NetworkHandle networkHandle) { if (NULL != gGnssAdapter) { - gGnssAdapter->getSystemStatus()->eventConnectionStatus(connected, type); + gGnssAdapter->getSystemStatus()->eventConnectionStatus( + connected, type, roaming, networkHandle); } } diff --git a/location/location_interface.h b/location/location_interface.h index 47dda870..5e596eae 100644 --- a/location/location_interface.h +++ b/location/location_interface.h @@ -76,7 +76,8 @@ struct GnssInterface { void (*agpsDataConnClosed)(AGpsExtType agpsType); void (*agpsDataConnFailed)(AGpsExtType agpsType); void (*getDebugReport)(GnssDebugReport& report); - void (*updateConnectionStatus)(bool connected, int8_t type); + void (*updateConnectionStatus)(bool connected, int8_t type, bool roaming, + NetworkHandle networkHandle); void (*odcpiInit)(const OdcpiRequestCallback& callback); void (*odcpiInject)(const Location& location); void (*blockCPI)(double latitude, double longitude, float accuracy, diff --git a/utils/gps_extended_c.h b/utils/gps_extended_c.h index 64e2c39d..680f9381 100644 --- a/utils/gps_extended_c.h +++ b/utils/gps_extended_c.h @@ -2134,6 +2134,9 @@ typedef void (*LocAgpsCloseResultCb)(bool isSuccess, AGpsExtType agpsType, void* #define SOCKET_TO_LOCATION_CLIENT_BASE "/dev/socket/loc_client/toclient" #define SOCKET_TO_EXTERANL_AP_LOCATION_CLIENT_BASE "/dev/socket/loc_client/extap.toclient" +typedef uint64_t NetworkHandle; +#define NETWORK_HANDLE_UNKNOWN ~0 + #ifdef __cplusplus } #endif /* __cplusplus */