123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- #define LOG_TAG "LocSvc_NativeAgpsHandler"
- #include <LocAdapterBase.h>
- #include <SystemStatus.h>
- #include <DataItemId.h>
- #include <DataItemsFactoryProxy.h>
- #include <DataItemConcreteTypes.h>
- #include <loc_log.h>
- #include <NativeAgpsHandler.h>
- #include <GnssAdapter.h>
- using namespace loc_core;
- void NativeAgpsHandler::getName(string& name) {
- name = "NativeAgpsHandler";
- }
- void NativeAgpsHandler::notify(const unordered_set<IDataItemCore*>& dlist) {
- for (auto each : dlist) {
- switch (each->getId()) {
- case NETWORKINFO_DATA_ITEM_ID: {
- NetworkInfoDataItem* networkInfo = static_cast<NetworkInfoDataItem*>(each);
- uint64_t mobileBit = (uint64_t )1 << loc_core::TYPE_MOBILE;
- mConnected = ((networkInfo->mAllTypes & mobileBit) == mobileBit);
-
- mApn = networkInfo->mApn;
- LOC_LOGd("updated mConnected:%d, mApn: %s", mConnected, mApn.c_str());
- break;
- }
- default:
- break;
- }
- }
- }
- NativeAgpsHandler* NativeAgpsHandler::sLocalHandle = nullptr;
- NativeAgpsHandler::NativeAgpsHandler(IOsObserver* sysStatObs, GnssAdapter& adapter) :
- mSystemStatusObsrvr(sysStatObs), mConnected(false), mAdapter(adapter) {
- sLocalHandle = this;
- unordered_set<DataItemId> subItemIdList = {NETWORKINFO_DATA_ITEM_ID};
- mSystemStatusObsrvr->subscribe(subItemIdList, this);
- }
- NativeAgpsHandler::~NativeAgpsHandler() {
- if (nullptr != mSystemStatusObsrvr) {
- LOC_LOGd("Unsubscribe for network info.");
- unordered_set<DataItemId> subItemIdList = {NETWORKINFO_DATA_ITEM_ID};
- mSystemStatusObsrvr->unsubscribe(subItemIdList, this);
- }
- sLocalHandle = nullptr;
- mSystemStatusObsrvr = nullptr;
- }
- AgpsCbInfo NativeAgpsHandler::getAgpsCbInfo() {
- AgpsCbInfo nativeCbInfo = {};
- nativeCbInfo.statusV4Cb = (void*)agnssStatusIpV4Cb;
- nativeCbInfo.atlType = AGPS_ATL_TYPE_WWAN;
- return nativeCbInfo;
- }
- void NativeAgpsHandler::agnssStatusIpV4Cb(AGnssExtStatusIpV4 statusInfo) {
- if (nullptr != sLocalHandle) {
- sLocalHandle->processATLRequestRelease(statusInfo);
- } else {
- LOC_LOGe("sLocalHandle is null");
- }
- }
- void NativeAgpsHandler::processATLRequestRelease(AGnssExtStatusIpV4 statusInfo) {
- if (LOC_AGPS_TYPE_WWAN_ANY == statusInfo.type) {
- LOC_LOGd("status.type = %d status.apnTypeMask = 0x%X", statusInfo.type,
- statusInfo.apnTypeMask);
- switch (statusInfo.status) {
- case LOC_GPS_REQUEST_AGPS_DATA_CONN:
- if (mConnected) {
- mAdapter.dataConnOpenCommand(LOC_AGPS_TYPE_WWAN_ANY, mApn.c_str(), mApn.size(),
- AGPS_APN_BEARER_IPV4);
- } else {
- mAdapter.dataConnFailedCommand(LOC_AGPS_TYPE_WWAN_ANY);
- }
- break;
- case LOC_GPS_RELEASE_AGPS_DATA_CONN:
- mAdapter.dataConnClosedCommand(LOC_AGPS_TYPE_WWAN_ANY);
- break;
- default:
- LOC_LOGe("Invalid Request: %d", statusInfo.status);
- }
- } else {
- LOC_LOGe("mAgpsManger is null or invalid request type!");
- }
- }
|