summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKevin Tang <zhikait@codeaurora.org>2019-03-26 18:40:03 -0700
committerKevin Tang <zhikait@codeaurora.org>2019-03-26 18:40:03 -0700
commit546e88fc046234170088cd93bc78567c548ca559 (patch)
tree4f0eff628e1848256cfd7df3b5b0bae7826665bc
parent01869b4004179870db2160ed41283dce7fbbdcde (diff)
downloadgps-546e88fc046234170088cd93bc78567c548ca559.tar.gz
Add HAL support for network handle
Add HAL support for modifications to the network status information passed in. Change-Id: I99defc6a419d9f21ce74469a1aa016cc7fade4a5 CRs-Fixed: 2397433
-rw-r--r--android/2.0/AGnssRil.cpp9
-rw-r--r--core/SystemStatus.cpp8
-rw-r--r--core/SystemStatus.h21
-rw-r--r--core/data-items/DataItemConcreteTypesBase.h19
-rw-r--r--gnss/XtraSystemStatusObserver.cpp19
-rw-r--r--gnss/XtraSystemStatusObserver.h7
-rw-r--r--gnss/location_gnss.cpp11
-rw-r--r--location/location_interface.h3
-rw-r--r--utils/gps_extended_c.h3
9 files changed, 75 insertions, 25 deletions
diff --git a/android/2.0/AGnssRil.cpp b/android/2.0/AGnssRil.cpp
index e17a06d..9de8b7d 100644
--- a/android/2.0/AGnssRil.cpp
+++ b/android/2.0/AGnssRil.cpp
@@ -102,7 +102,7 @@ Return<bool> 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<bool> 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 f4316ca..6ef4993 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 9422322..73a220a 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 <stdint.h>
#include <sys/time.h>
#include <vector>
+#include <algorithm>
+#include <iterator>
#include <loc_pla.h>
#include <log_util.h>
#include <MsgTask.h>
@@ -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<SystemStatusNetworkInfo&>(curInfo)).mAllTypes;
+ uint64_t networkHandle =
+ (static_cast<SystemStatusNetworkInfo&>(curInfo)).mNetworkHandle;
+ int32_t type = (static_cast<SystemStatusNetworkInfo&>(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 44be5f9..552d46a 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 <cstring>
#include <DataItemId.h>
#include <IDataItemCore.h>
+#include <gps_extended_c.h>
#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 962e100..6e1902c 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<IDataItemCore*>& dlist)
{
NetworkInfoDataItemBase* networkInfo =
static_cast<NetworkInfoDataItemBase*>(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 cbbeda6..22a3013 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<IDataItemCore*>& 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 45ad292..f3b15ee 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 47dda87..5e596ea 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 64e2c39..680f938 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 */