From 4e9fee0ebda64609d4ff50e06c567021cc945dc8 Mon Sep 17 00:00:00 2001 From: Madhanraj Chelladurai Date: Tue, 9 Jul 2019 15:46:46 +0530 Subject: [PATCH 01/10] gps: Add diag permissions for gnss service Change-Id: I1e65ce2a2e681f48b476fb8b310015f572f306e1 CRs-Fixed: 2413585 --- android/1.0/android.hardware.gnss@1.0-service-qti.rc | 2 +- android/1.1/android.hardware.gnss@1.1-service-qti.rc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/android/1.0/android.hardware.gnss@1.0-service-qti.rc b/android/1.0/android.hardware.gnss@1.0-service-qti.rc index b5da6f97..1fbd8935 100644 --- a/android/1.0/android.hardware.gnss@1.0-service-qti.rc +++ b/android/1.0/android.hardware.gnss@1.0-service-qti.rc @@ -1,4 +1,4 @@ service gnss_service /vendor/bin/hw/android.hardware.gnss@1.0-service-qti class hal user gps - group system gps radio + group system gps radio vendor_qti_diag diff --git a/android/1.1/android.hardware.gnss@1.1-service-qti.rc b/android/1.1/android.hardware.gnss@1.1-service-qti.rc index 41b105b9..bd655841 100644 --- a/android/1.1/android.hardware.gnss@1.1-service-qti.rc +++ b/android/1.1/android.hardware.gnss@1.1-service-qti.rc @@ -1,4 +1,4 @@ service gnss_service /vendor/bin/hw/android.hardware.gnss@1.1-service-qti class hal user gps - group system gps radio + group system gps radio vendor_qti_diag From 42e8ab01901a627bef050179be7dbb725abd5787 Mon Sep 17 00:00:00 2001 From: Santoshkumar Zalake Date: Fri, 7 Jun 2019 13:55:19 +0530 Subject: [PATCH 02/10] Add GNSS Deployment Support. The GNSS Deployment is used to configure GNSS Hardware using gps.conf file CRs-Fixed: 2480150 Change-Id: Ia09d3165de0c2f80f23bef8c0431095b25d16ea2 --- core/ContextBase.cpp | 26 +++++++++++++++++++++----- core/ContextBase.h | 1 + etc/gps.conf | 10 ++++++++++ 3 files changed, 32 insertions(+), 5 deletions(-) diff --git a/core/ContextBase.cpp b/core/ContextBase.cpp index 084b6bfb..b6029895 100644 --- a/core/ContextBase.cpp +++ b/core/ContextBase.cpp @@ -40,6 +40,10 @@ namespace loc_core { +#define SLL_LOC_API_LIB_NAME "libsynergy_loc_api.so" +#define LOC_APIV2_0_LIB_NAME "libloc_api_v02.so" +#define IS_SS5_HW_ENABLED 1 + loc_gps_cfg_s_type ContextBase::mGps_conf {}; loc_sap_cfg_s_type ContextBase::mSap_conf {}; bool ContextBase::sIsEngineCapabilitiesKnown = false; @@ -80,6 +84,7 @@ const loc_param_s_type ContextBase::mGps_conf_table[] = {"POSITION_ASSISTED_CLOCK_ESTIMATOR_ENABLED", &mGps_conf.POSITION_ASSISTED_CLOCK_ESTIMATOR_ENABLED, NULL, 'n'}, {"PROXY_APP_PACKAGE_NAME", &mGps_conf.PROXY_APP_PACKAGE_NAME, NULL, 's' }, {"CP_MTLR_ES", &mGps_conf.CP_MTLR_ES, NULL, 'n' }, + {"GNSS_DEPLOYMENT", &mGps_conf.GNSS_DEPLOYMENT, NULL, 'n'}, }; const loc_param_s_type ContextBase::mSap_conf_table[] = @@ -171,10 +176,16 @@ void ContextBase::readConfig() mGps_conf.CONSTRAINED_TIME_UNCERTAINTY_ENERGY_BUDGET = 0; /* default configuration value of position assisted clock estimator mode */ mGps_conf.POSITION_ASSISTED_CLOCK_ESTIMATOR_ENABLED = 0; + /* default configuration QCOM GNSS H/W */ + mGps_conf.GNSS_DEPLOYMENT = 0; UTIL_READ_CONF(LOC_PATH_GPS_CONF, mGps_conf_table); UTIL_READ_CONF(LOC_PATH_SAP_CONF, mSap_conf_table); + LOC_LOGI("%s] GNSS Deployment: %s", __FUNCTION__, + ((mGps_conf.GNSS_DEPLOYMENT == 1) ? "SS5" : + ((mGps_conf.GNSS_DEPLOYMENT == 2) ? "QFUSION" : "QGNSS"))); + switch (getTargetGnssType(loc_get_target())) { case GNSS_GSS: case GNSS_AUTO: @@ -231,19 +242,24 @@ LBSProxyBase* ContextBase::getLBSProxy(const char* libName) LocApiBase* ContextBase::createLocApi(LOC_API_ADAPTER_EVENT_MASK_T exMask) { LocApiBase* locApi = NULL; + const char* libname = LOC_APIV2_0_LIB_NAME; // Check the target if (TARGET_NO_GNSS != loc_get_target()){ if (NULL == (locApi = mLBSProxy->getLocApi(exMask, this))) { void *handle = NULL; - //try to see if LocApiV02 is present - if ((handle = dlopen("libloc_api_v02.so", RTLD_NOW)) != NULL) { - LOC_LOGD("%s:%d]: libloc_api_v02.so is present", __func__, __LINE__); + + if (IS_SS5_HW_ENABLED == mGps_conf.GNSS_DEPLOYMENT) { + libname = SLL_LOC_API_LIB_NAME; + } + + if ((handle = dlopen(libname, RTLD_NOW)) != NULL) { + LOC_LOGD("%s:%d]: %s is present", __func__, __LINE__, libname); getLocApi_t* getter = (getLocApi_t*) dlsym(handle, "getLocApi"); if (getter != NULL) { - LOC_LOGD("%s:%d]: getter is not NULL for LocApiV02", __func__, - __LINE__); + LOC_LOGD("%s:%d]: getter is not NULL of %s", __func__, + __LINE__, libname); locApi = (*getter)(exMask, this); } } diff --git a/core/ContextBase.h b/core/ContextBase.h index ab61a084..5da76e26 100644 --- a/core/ContextBase.h +++ b/core/ContextBase.h @@ -73,6 +73,7 @@ typedef struct loc_gps_cfg_s uint32_t POSITION_ASSISTED_CLOCK_ESTIMATOR_ENABLED; char PROXY_APP_PACKAGE_NAME[LOC_MAX_PARAM_STRING]; uint32_t CP_MTLR_ES; + uint32_t GNSS_DEPLOYMENT; } loc_gps_cfg_s_type; /* NOTE: the implementaiton of the parser casts number diff --git a/etc/gps.conf b/etc/gps.conf index f773e818..c247cbd3 100644 --- a/etc/gps.conf +++ b/etc/gps.conf @@ -287,3 +287,13 @@ PROXY_APP_PACKAGE_NAME = com.google.android.carrierlocation ##################################### # CP MTLR ES, 1=enable, 0=disable CP_MTLR_ES=0 + +################################################## +# GNSS_DEPLOYMENT +################################################## +# 0 : Enable QCOM GNSS (default) +# 1 : Enable QCSR SS5 +# This setting use to select between QCOM GNSS +# and QCSR SS5 hardware receiver. +# By default QCOM GNSS receiver is enabled. +# GNSS_DEPLOYMENT = 0 From 0df749e3635c8568c38babdfad81a4b0d1e5ce39 Mon Sep 17 00:00:00 2001 From: Nilesh Gharde Date: Thu, 29 Aug 2019 14:24:46 +0530 Subject: [PATCH 03/10] Adding one level of context swith for Geofence_add Added one more context switch for geofence add command. To even out total number of the context switch as it is for remove/modify/pause command. This will prevent out of order execution of sent msg tasks. Change-Id: Icf1f39ee3526e2e45cfe3e84945f71524941069b CRs-Fixed: 2516790 --- geofence/GeofenceAdapter.cpp | 49 +++++++++++++++++--------------- location/LocationAPIClientBase.h | 2 ++ 2 files changed, 28 insertions(+), 23 deletions(-) diff --git a/geofence/GeofenceAdapter.cpp b/geofence/GeofenceAdapter.cpp index b8746fbc..e2995896 100644 --- a/geofence/GeofenceAdapter.cpp +++ b/geofence/GeofenceAdapter.cpp @@ -242,30 +242,33 @@ GeofenceAdapter::addGeofencesCommand(LocationAPI* client, size_t count, Geofence if (NULL == mIds || NULL == mOptions || NULL == mInfos) { errs[i] = LOCATION_ERROR_INVALID_PARAMETER; } else { - mApi.addGeofence(mIds[i], - mOptions[i], - mInfos[i], - new LocApiResponseData(*mAdapter.getContext(), - [&mAdapter = mAdapter, mOptions = mOptions, mClient = mClient, - mCount = mCount, mIds = mIds, mInfos = mInfos, errs, i] - (LocationError err, LocApiGeofenceData data) { - if (LOCATION_ERROR_SUCCESS == err) { - mAdapter.saveGeofenceItem(mClient, - mIds[i], - data.hwId, - mOptions[i], - mInfos[i]); - } - errs[i] = err; + mApi.addToCallQueue(new LocApiResponse(*mAdapter.getContext(), + [&mAdapter = mAdapter, mCount = mCount, mClient = mClient, + mOptions = mOptions, mInfos = mInfos, mIds = mIds, &mApi = mApi, + errs, i] (LocationError err ) { + mApi.addGeofence(mIds[i], mOptions[i], mInfos[i], + new LocApiResponseData(*mAdapter.getContext(), + [&mAdapter = mAdapter, mOptions = mOptions, mClient = mClient, + mCount = mCount, mIds = mIds, mInfos = mInfos, errs, i] + (LocationError err, LocApiGeofenceData data) { + if (LOCATION_ERROR_SUCCESS == err) { + mAdapter.saveGeofenceItem(mClient, + mIds[i], + data.hwId, + mOptions[i], + mInfos[i]); + } + errs[i] = err; - // Send aggregated response on last item and cleanup - if (i == mCount-1) { - mAdapter.reportResponse(mClient, mCount, errs, mIds); - delete[] errs; - delete[] mIds; - delete[] mOptions; - delete[] mInfos; - } + // Send aggregated response on last item and cleanup + if (i == mCount-1) { + mAdapter.reportResponse(mClient, mCount, errs, mIds); + delete[] errs; + delete[] mIds; + delete[] mOptions; + delete[] mInfos; + } + })); })); } } diff --git a/location/LocationAPIClientBase.h b/location/LocationAPIClientBase.h index fddae604..098000c5 100644 --- a/location/LocationAPIClientBase.h +++ b/location/LocationAPIClientBase.h @@ -488,6 +488,7 @@ private: for (size_t i = 0; i < count; i++) { ids[i] = mAPI.mGeofenceBiDict.getId(sessions[i]); } + LOC_LOGD("%s:]Returned geofence-id: %d in add geofence", __FUNCTION__, *ids); mAPI.onAddGeofencesCb(count, errors, ids); free(ids); } @@ -505,6 +506,7 @@ private: for (size_t i = 0; i < count; i++) { ids[i] = mRemovedGeofenceBiDict->getId(sessions[i]); } + LOC_LOGD("%s:]Returned geofence-id: %d in remove geofence", __FUNCTION__, *ids); mAPI.onRemoveGeofencesCb(count, errors, ids); free(ids); delete(mRemovedGeofenceBiDict); From 1209591f9428c6777ad52461f901cb4c9351d5cd Mon Sep 17 00:00:00 2001 From: Kevin Tang Date: Tue, 6 Aug 2019 16:38:12 -0700 Subject: [PATCH 04/10] change some of the comments that contain prohibited words Change-Id: Iaa8009e245edbcbc5adbe2348de4a014271c0ef9 CRs-Fixed: 2504418 --- location/LocationDataTypes.h | 5 ++--- utils/gps_extended_c.h | 5 ++--- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/location/LocationDataTypes.h b/location/LocationDataTypes.h index 27c5157b..504b5cc5 100644 --- a/location/LocationDataTypes.h +++ b/location/LocationDataTypes.h @@ -1032,9 +1032,8 @@ typedef struct { // location engine type. When the fix. when the type is set to // LOC_ENGINE_SRC_FUSED, the fix is the propagated/aggregated // reports from all engines running on the system (e.g.: - // DR/SPE/PPE) based proprietary algorithm. To check which - // location engine contributes to the fused output, check for - // locOutputEngMask. + // DR/SPE/PPE). To check which location engine contributes to + // the fused output, check for locOutputEngMask. LocOutputEngineType locOutputEngType; // when loc output eng type is set to fused, this field // indicates the set of engines contribute to the fix. diff --git a/utils/gps_extended_c.h b/utils/gps_extended_c.h index 819e77b2..69a659ee 100644 --- a/utils/gps_extended_c.h +++ b/utils/gps_extended_c.h @@ -807,9 +807,8 @@ typedef struct { /* location engine type. When the fix. when the type is set to LOC_ENGINE_SRC_FUSED, the fix is the propagated/aggregated reports from all engines running on the system (e.g.: - DR/SPE/PPE) based proprietary algorithm. To check which - location engine contributes to the fused output, check for - locOutputEngMask. */ + DR/SPE/PPE). To check which location engine contributes to + the fused output, check for locOutputEngMask. */ LocOutputEngineType locOutputEngType; /* when loc output eng type is set to fused, this field indicates the set of engines contribute to the fix. */ From f4dc944333c54a5455d17b6bd7c02d2ededb6e4a Mon Sep 17 00:00:00 2001 From: Harikrishnan Hariharan Date: Sun, 1 Sep 2019 10:52:23 +0530 Subject: [PATCH 05/10] Make use of USE_GLIB flags for LE related functions We were making use of USE_QCMAP which was not defined in configure files. Change-Id: I12f823a79b0036502b832a3fb40a93828bde6f59 CRs-Fixed: 2521803 --- core/SystemStatusOsObserver.cpp | 2 +- core/SystemStatusOsObserver.h | 8 ++++---- core/observer/IFrameworkActionReq.h | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/core/SystemStatusOsObserver.cpp b/core/SystemStatusOsObserver.cpp index 3fdb5130..0427380c 100644 --- a/core/SystemStatusOsObserver.cpp +++ b/core/SystemStatusOsObserver.cpp @@ -448,7 +448,7 @@ void SystemStatusOsObserver::turnOff(DataItemId dit) } } -#ifdef USE_QCMAP +#ifdef USE_GLIB bool SystemStatusOsObserver::connectBackhaul() { bool result = false; diff --git a/core/SystemStatusOsObserver.h b/core/SystemStatusOsObserver.h index 87109762..fd606063 100644 --- a/core/SystemStatusOsObserver.h +++ b/core/SystemStatusOsObserver.h @@ -84,7 +84,7 @@ public: mSystemStatus(systemstatus), mContext(msgTask, this), mAddress("SystemStatusOsObserver"), mClientToDataItems(MAX_DATA_ITEM_ID), mDataItemToClients(MAX_DATA_ITEM_ID) -#ifdef USE_QCMAP +#ifdef USE_GLIB , mBackHaulConnectReqCount(0) #endif { @@ -106,7 +106,7 @@ public: // To set the framework action request object inline void setFrameworkActionReqObj(IFrameworkActionReq* frameworkActionReqObj) { mContext.mFrameworkActionReqObj = frameworkActionReqObj; -#ifdef USE_QCMAP +#ifdef USE_GLIB if (mBackHaulConnectReqCount > 0) { connectBackhaul(); mBackHaulConnectReqCount = 0; @@ -134,7 +134,7 @@ public: // IFrameworkActionReq Overrides virtual void turnOn(DataItemId dit, int timeOut = 0) override; virtual void turnOff(DataItemId dit) override; -#ifdef USE_QCMAP +#ifdef USE_GLIB virtual bool connectBackhaul() override; virtual bool disconnectBackhaul(); #endif @@ -151,7 +151,7 @@ private: // Cache the subscribe and requestData till subscription obj is obtained void cacheObserverRequest(ObserverReqCache& reqCache, const list& l, IDataItemObserver* client); -#ifdef USE_QCMAP +#ifdef USE_GLIB // Cache the framework action request for connect/disconnect int mBackHaulConnectReqCount; #endif diff --git a/core/observer/IFrameworkActionReq.h b/core/observer/IFrameworkActionReq.h index a4ccad8a..4be947ff 100644 --- a/core/observer/IFrameworkActionReq.h +++ b/core/observer/IFrameworkActionReq.h @@ -70,7 +70,7 @@ public: */ virtual void turnOff (DataItemId dit) = 0; -#ifdef USE_QCMAP +#ifdef USE_GLIB /** * @brief Setup WWAN backhaul * @details Setup WWAN backhaul From c891e738f547e1ae9c4fa246e574a47c7c83e496 Mon Sep 17 00:00:00 2001 From: Kevin Tang Date: Wed, 28 Aug 2019 18:18:21 -0700 Subject: [PATCH 06/10] LocIpc sender recv and recver send Added two APIs, which allow ILocIpcListener to provide a sender for sending data back to LocIpcSender; and to allow a LocIpcSender to get a recver from the last send target so that it can receive data from it. Change-Id: I94e2204a2588d375805d0674d1e877bbe414c99f CRs-Fixed: 2524039 --- gnss/XtraSystemStatusObserver.cpp | 3 +- utils/LocIpc.cpp | 70 +++++++++++-------------------- utils/LocIpc.h | 35 +++++++++++++--- 3 files changed, 55 insertions(+), 53 deletions(-) diff --git a/gnss/XtraSystemStatusObserver.cpp b/gnss/XtraSystemStatusObserver.cpp index 1671c76d..a58f7357 100644 --- a/gnss/XtraSystemStatusObserver.cpp +++ b/gnss/XtraSystemStatusObserver.cpp @@ -65,7 +65,8 @@ public: inline XtraIpcListener(IOsObserver* observer, const MsgTask* msgTask, XtraSystemStatusObserver& xsso) : mSystemStatusObsrvr(observer), mMsgTask(msgTask), mXSSO(xsso) {} - virtual void onReceive(const char* data, uint32_t length) override { + virtual void onReceive(const char* data, uint32_t length, + const LocIpcRecver* recver) override { #define STRNCMP(str, constStr) strncmp(str, constStr, sizeof(constStr)-1) if (!STRNCMP(data, "ping")) { LOC_LOGd("ping received"); diff --git a/utils/LocIpc.cpp b/utils/LocIpc.cpp index f4dd0b40..e9dbe9da 100644 --- a/utils/LocIpc.cpp +++ b/utils/LocIpc.cpp @@ -66,18 +66,18 @@ ssize_t Sock::send(const void *buf, uint32_t len, int flags, const struct sockad SOCK_OP_AND_LOG(buf, len, isValid(), rtv, sendto(buf, len, flags, destAddr, addrlen)); return rtv; } -ssize_t Sock::recv(const shared_ptr& dataCb, int flags, struct sockaddr *srcAddr, - socklen_t *addrlen, int sid) const { +ssize_t Sock::recv(const LocIpcRecver& recver, const shared_ptr& dataCb, int flags, + struct sockaddr *srcAddr, socklen_t *addrlen, int sid) const { ssize_t rtv = -1; if (-1 == sid) { sid = mSid; } // else it sid would be connection based socket id for recv SOCK_OP_AND_LOG(dataCb.get(), mMaxTxSize, isValid(), rtv, - recvfrom(dataCb, sid, flags, srcAddr, addrlen)); + recvfrom(recver, dataCb, sid, flags, srcAddr, addrlen)); return rtv; } ssize_t Sock::sendto(const void *buf, size_t len, int flags, const struct sockaddr *destAddr, - socklen_t addrlen) const { + socklen_t addrlen) const { ssize_t rtv = -1; if (len <= mMaxTxSize) { rtv = ::sendto(mSid, buf, len, flags, destAddr, addrlen); @@ -94,19 +94,18 @@ ssize_t Sock::sendto(const void *buf, size_t len, int flags, const struct sockad } return rtv; } -ssize_t Sock::recvfrom(const shared_ptr& dataCb, int sid, int flags, - struct sockaddr *srcAddr, socklen_t *addrlen) const { - ssize_t nBytes = -1; +ssize_t Sock::recvfrom(const LocIpcRecver& recver, const shared_ptr& dataCb, + int sid, int flags, struct sockaddr *srcAddr, socklen_t *addrlen) const { std::string msg(mMaxTxSize, 0); - - if ((nBytes = ::recvfrom(sid, (void*)msg.data(), msg.size(), flags, srcAddr, addrlen)) > 0) { + ssize_t nBytes = ::recvfrom(sid, (void*)msg.data(), msg.size(), flags, srcAddr, addrlen); + if (nBytes > 0) { if (strncmp(msg.data(), MSG_ABORT, sizeof(MSG_ABORT)) == 0) { LOC_LOGi("recvd abort msg.data %s", msg.data()); nBytes = 0; } else if (strncmp(msg.data(), LOC_IPC_HEAD, sizeof(LOC_IPC_HEAD) - 1)) { // short message msg.resize(nBytes); - dataCb->onReceive(msg.data(), nBytes); + dataCb->onReceive(msg.data(), nBytes, &recver); } else { // long message size_t msgLen = 0; @@ -119,7 +118,7 @@ ssize_t Sock::recvfrom(const shared_ptr& dataCb, int sid, int f } if (nBytes > 0) { nBytes = msgLen; - dataCb->onReceive(msg.data(), nBytes); + dataCb->onReceive(msg.data(), nBytes, &recver); } } } @@ -152,7 +151,7 @@ class LocIpcLocalRecver : public LocIpcLocalSender, public LocIpcRecver { protected: inline virtual ssize_t recv() const override { socklen_t size = sizeof(mAddr); - return mSock->recv(mDataCb, 0, (struct sockaddr*)&mAddr, &size); + return mSock->recv(*this, mDataCb, 0, (struct sockaddr*)&mAddr, &size); } public: inline LocIpcLocalRecver(const shared_ptr& listener, const char* name) : @@ -189,6 +188,10 @@ protected: return mSock->send(data, length, 0, (struct sockaddr*)&mAddr, sizeof(mAddr)); } public: + inline LocIpcInetSender(const LocIpcInetSender& sender) : + mSockType(sender.mSockType), mSock(sender.mSock), + mName(sender.mName), mAddr(sender.mAddr) { + } inline LocIpcInetSender(const char* name, int32_t port, int sockType) : LocIpcSender(), mSockType(sockType), mSock(make_shared((nullptr == name) ? -1 : (::socket(AF_INET, mSockType, 0)))), @@ -202,6 +205,10 @@ public: } } } + + unique_ptr getRecver(const shared_ptr& listener) override { + return make_unique(listener, *this, mSock); + } }; class LocIpcInetTcpSender : public LocIpcInetSender { @@ -245,7 +252,9 @@ public: mSock->sendAbort(0, (struct sockaddr*)&loopBackAddr, sizeof(loopBackAddr)); } } - + inline virtual unique_ptr getLastSender() const override { + return make_unique(static_cast(*this)); + } }; class LocIpcInetTcpRecver : public LocIpcInetRecver { @@ -260,7 +269,7 @@ protected: mConnFd = -1; } } - return mSock->recv(mDataCb, 0, (struct sockaddr*)&mAddr, &size, mConnFd); + return mSock->recv(*this, mDataCb, 0, (struct sockaddr*)&mAddr, &size, mConnFd); } public: inline LocIpcInetTcpRecver(const shared_ptr& listener, const char* name, @@ -273,7 +282,7 @@ class LocIpcInetUdpRecver : public LocIpcInetRecver { protected: inline virtual ssize_t recv() const override { socklen_t size = sizeof(mAddr); - return mSock->recv(mDataCb, 0, (struct sockaddr*)&mAddr, &size); + return mSock->recv(*this, mDataCb, 0, (struct sockaddr*)&mAddr, &size); } public: inline LocIpcInetUdpRecver(const shared_ptr& listener, const char* name, @@ -283,37 +292,6 @@ public: inline virtual ~LocIpcInetUdpRecver() {} }; - - -#ifdef NOT_DEFINED -class LocIpcQcsiSender : public LocIpcSender { -protected: - inline virtual bool isOperable() const override { - return mService != nullptr && mService->isServiceRegistered(); - } - inline virtual ssize_t send(const uint8_t data[], uint32_t length, int32_t msgId) const override { - return mService->sendIndToClient(msgId, data, length); - } - inline LocIpcQcsiSender(shared_ptr& service) : mService(service) {} -public: - inline virtual ~LocIpcQcsi() {} -}; - -class LocIpcQcsiRecver : public LocIpcQcsiSender, public LocIpcRecver { -protected: - inline virtual ssize_t recv() const override { return mService->recv(); } -public: - inline LocIpcQcsiRecver(unique_ptr& service) : - LocIpcQcsiSender(service), LocIpcRecver(mService->getDataCallback(), *this) { - } - // only the dele - inline ~LocIpcQcsiRecver() {} - inline virtual const char* getName() const override { return mService->getName().data(); }; - inline virtual void abort() const override { if (isSendable()) mService->abort(); } - shared_ptr getSender() { return make_pare(mService); } -}; -#endif - class LocIpcRunnable : public LocRunnable { bool mAbortCalled; LocIpc& mLocIpc; diff --git a/utils/LocIpc.h b/utils/LocIpc.h index af4c2c3a..d6f8d1d8 100644 --- a/utils/LocIpc.h +++ b/utils/LocIpc.h @@ -53,7 +53,7 @@ public: // LocIpc client can overwrite this function to get notification // when the socket for LocIpc is ready to receive messages. inline virtual void onListenerReady() {} - virtual void onReceive(const char* data, uint32_t length)= 0; + virtual void onReceive(const char* data, uint32_t len, const LocIpcRecver* recver) = 0; }; @@ -123,15 +123,18 @@ private: class LocIpcSender { protected: LocIpcSender() = default; - virtual ~LocIpcSender() = default; virtual bool isOperable() const = 0; virtual ssize_t send(const uint8_t data[], uint32_t length, int32_t msgId) const = 0; public: + virtual ~LocIpcSender() = default; virtual void informRecverRestarted() {} inline bool isSendable() const { return isOperable(); } inline bool sendData(const uint8_t data[], uint32_t length, int32_t msgId) const { return isSendable() && (send(data, length, msgId) > 0); } + virtual unique_ptr getRecver(const shared_ptr& listener) { + return nullptr; + } }; class LocIpcRecver { @@ -148,6 +151,9 @@ public: inline bool recvData() const { return isRecvable() && (recv() > 0); } inline bool isRecvable() const { return mDataCb != nullptr && mIpcSender.isSendable(); } virtual void onListenerReady() { if (mDataCb != nullptr) mDataCb->onListenerReady(); } + inline virtual unique_ptr getLastSender() const { + return nullptr; + } virtual void abort() const = 0; virtual const char* getName() const = 0; }; @@ -158,8 +164,8 @@ class Sock { const uint32_t mMaxTxSize; ssize_t sendto(const void *buf, size_t len, int flags, const struct sockaddr *destAddr, socklen_t addrlen) const; - ssize_t recvfrom(const shared_ptr& dataCb, int sid, int flags, - struct sockaddr *srcAddr, socklen_t *addrlen) const; + ssize_t recvfrom(const LocIpcRecver& recver, const shared_ptr& dataCb, + int sid, int flags, struct sockaddr *srcAddr, socklen_t *addrlen) const; public: int mSid; inline Sock(int sid, const uint32_t maxTxSize = 8192) : mMaxTxSize(maxTxSize), mSid(sid) {} @@ -167,8 +173,8 @@ public: inline bool isValid() const { return -1 != mSid; } ssize_t send(const void *buf, uint32_t len, int flags, const struct sockaddr *destAddr, socklen_t addrlen) const; - ssize_t recv(const shared_ptr& dataCb, int flags, struct sockaddr *srcAddr, - socklen_t *addrlen, int sid = -1) const; + ssize_t recv(const LocIpcRecver& recver, const shared_ptr& dataCb, int flags, + struct sockaddr *srcAddr, socklen_t *addrlen, int sid = -1) const; ssize_t sendAbort(int flags, const struct sockaddr *destAddr, socklen_t addrlen); inline void close() { if (isValid()) { @@ -178,6 +184,23 @@ public: } }; +class SockRecver : public LocIpcRecver { + shared_ptr mSock; +protected: + inline virtual ssize_t recv() const override { + return mSock->recv(*this, mDataCb, 0, nullptr, nullptr); + } +public: + inline SockRecver(const shared_ptr& listener, + LocIpcSender& sender, shared_ptr sock) : + LocIpcRecver(listener, sender), mSock(sock) { + } + inline virtual const char* getName() const override { + return "SockRecver"; + } + inline virtual void abort() const override {} +}; + } #endif //__LOC_IPC__ From 92ba006e1b419b29b08d350f0fa7c3ea78fd2b68 Mon Sep 17 00:00:00 2001 From: Saurabh Srivastava Date: Fri, 6 Sep 2019 17:50:56 +0530 Subject: [PATCH 07/10] Support PQWP7 parsing without NAVIC Support PQWP7 NMEA parsing for older GNSS engine without NAVIC support. CRs-Fixed: 2516292 Change-Id: I62bd4467f15b8c5fc77e7c979eefb146276ff2a0 --- core/SystemStatus.cpp | 12 ++++++++++-- core/SystemStatus.h | 3 ++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/core/SystemStatus.cpp b/core/SystemStatus.cpp index 9ca126f8..7d766517 100644 --- a/core/SystemStatus.cpp +++ b/core/SystemStatus.cpp @@ -660,6 +660,7 @@ private: { eTalker = 0, eUtcTime = 1, + eMin = 2 + SV_ALL_NUM_MIN*3, eMax = 2 + SV_ALL_NUM*3 }; SystemStatusPQWP7 mP7; @@ -668,11 +669,18 @@ public: SystemStatusPQWP7parser(const char *str_in, uint32_t len_in) : SystemStatusNmeaBase(str_in, len_in) { - if (mField.size() < eMax) { + uint32_t svLimit = SV_ALL_NUM; + if (mField.size() < eMin) { LOC_LOGE("PQWP7parser - invalid size=%zu", mField.size()); return; } - for (uint32_t i=0; i Date: Fri, 21 Jun 2019 14:32:15 -0700 Subject: [PATCH 08/10] Selectively send deleteAll command to engines Modify GNSS interface API's to accept positioning engine mask to perform deleteAll command on CRs-Fixed: 2477966 Change-Id: I54a32d76de98ba6bfa88d7fd1925c44b3079af08 --- android/1.0/location_api/GnssAPIClient.cpp | 1 + android/1.1/location_api/GnssAPIClient.cpp | 1 + gnss/GnssAdapter.cpp | 11 +++++++---- location/LocationDataTypes.h | 1 + 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/android/1.0/location_api/GnssAPIClient.cpp b/android/1.0/location_api/GnssAPIClient.cpp index a36d2b48..b9fe2b25 100644 --- a/android/1.0/location_api/GnssAPIClient.cpp +++ b/android/1.0/location_api/GnssAPIClient.cpp @@ -231,6 +231,7 @@ void GnssAPIClient::gnssDeleteAidingData(IGnss::GnssAidingData aidingDataFlags) GNSS_AIDING_DATA_SV_TYPE_QZSS_BIT | GNSS_AIDING_DATA_SV_TYPE_BEIDOU_BIT | GNSS_AIDING_DATA_SV_TYPE_GALILEO_BIT; + data.posEngineMask = STANDARD_POSITIONING_ENGINE; if (aidingDataFlags == IGnss::GnssAidingData::DELETE_ALL) data.deleteAll = true; diff --git a/android/1.1/location_api/GnssAPIClient.cpp b/android/1.1/location_api/GnssAPIClient.cpp index 89877e5e..9a95fdfe 100644 --- a/android/1.1/location_api/GnssAPIClient.cpp +++ b/android/1.1/location_api/GnssAPIClient.cpp @@ -231,6 +231,7 @@ void GnssAPIClient::gnssDeleteAidingData(IGnss::GnssAidingData aidingDataFlags) GNSS_AIDING_DATA_SV_TYPE_QZSS_BIT | GNSS_AIDING_DATA_SV_TYPE_BEIDOU_BIT | GNSS_AIDING_DATA_SV_TYPE_GALILEO_BIT; + data.posEngineMask = STANDARD_POSITIONING_ENGINE; if (aidingDataFlags == IGnss::GnssAidingData::DELETE_ALL) data.deleteAll = true; diff --git a/gnss/GnssAdapter.cpp b/gnss/GnssAdapter.cpp index 578953d7..c2e4a091 100644 --- a/gnss/GnssAdapter.cpp +++ b/gnss/GnssAdapter.cpp @@ -1816,12 +1816,15 @@ GnssAdapter::gnssDeleteAidingDataCommand(GnssAidingData& data) mSessionId(sessionId), mData(data) {} inline virtual void proc() const { - mAdapter.deleteAidingData(mData, mSessionId); + if ((mData.posEngineMask & STANDARD_POSITIONING_ENGINE) != 0) { + mAdapter.deleteAidingData(mData, mSessionId); - SystemStatus* s = mAdapter.getSystemStatus(); - if ((nullptr != s) && (mData.deleteAll)) { - s->setDefaultGnssEngineStates(); + SystemStatus* s = mAdapter.getSystemStatus(); + if ((nullptr != s) && (mData.deleteAll)) { + s->setDefaultGnssEngineStates(); + } } + mAdapter.mEngHubProxy->gnssDeleteAidingData(mData); } }; diff --git a/location/LocationDataTypes.h b/location/LocationDataTypes.h index 27c5157b..40b1c73f 100644 --- a/location/LocationDataTypes.h +++ b/location/LocationDataTypes.h @@ -707,6 +707,7 @@ typedef struct { bool deleteAll; // if true, delete all aiding data and ignore other params GnssAidingDataSv sv; // SV specific aiding data GnssAidingDataCommon common; // common aiding data + PositioningEngineMask posEngineMask; // engines to perform the delete operation on. } GnssAidingData; typedef uint16_t DrCalibrationStatusMask; From 2cae87f908a669561f08b1dac75294f63870a401 Mon Sep 17 00:00:00 2001 From: Santoshkumar Zalake Date: Fri, 13 Sep 2019 15:30:41 +0530 Subject: [PATCH 09/10] Change word in comments CRs-Fixed: 2527266 Change-Id: If368406f561836a82f548ad99171a730256cbfdf --- etc/gps.conf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/etc/gps.conf b/etc/gps.conf index c247cbd3..fc376530 100644 --- a/etc/gps.conf +++ b/etc/gps.conf @@ -291,9 +291,9 @@ CP_MTLR_ES=0 ################################################## # GNSS_DEPLOYMENT ################################################## -# 0 : Enable QCOM GNSS (default) +# 0 : Enable QTI GNSS (default) # 1 : Enable QCSR SS5 -# This setting use to select between QCOM GNSS +# This setting use to select between QTI GNSS # and QCSR SS5 hardware receiver. -# By default QCOM GNSS receiver is enabled. +# By default QTI GNSS receiver is enabled. # GNSS_DEPLOYMENT = 0 From 2379d8bc3046deed80453076830467683f2681b8 Mon Sep 17 00:00:00 2001 From: Santoshkumar Zalake Date: Mon, 16 Sep 2019 12:04:02 +0530 Subject: [PATCH 10/10] Change Word in comments in default configuration CRs-Fixed: 2528185 Change-Id: Iec09e2dd19eb27a64b18ce0cd22aeba71d2e97de --- core/ContextBase.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/ContextBase.cpp b/core/ContextBase.cpp index b6029895..d5c3108f 100644 --- a/core/ContextBase.cpp +++ b/core/ContextBase.cpp @@ -176,7 +176,7 @@ void ContextBase::readConfig() mGps_conf.CONSTRAINED_TIME_UNCERTAINTY_ENERGY_BUDGET = 0; /* default configuration value of position assisted clock estimator mode */ mGps_conf.POSITION_ASSISTED_CLOCK_ESTIMATOR_ENABLED = 0; - /* default configuration QCOM GNSS H/W */ + /* default configuration QTI GNSS H/W */ mGps_conf.GNSS_DEPLOYMENT = 0; UTIL_READ_CONF(LOC_PATH_GPS_CONF, mGps_conf_table);