From 41d3c44644b843c82688292ad41d31ea6f121cd4 Mon Sep 17 00:00:00 2001 From: Tushar Janefalkar Date: Wed, 25 Sep 2013 11:01:43 -0700 Subject: [PATCH] Send status report msg through ULP In order to preserve the ordering of position reports and status reports from the GPS engine, status reports are sent through the ULP too CRS-Fixed: 538143 Change-Id: I41be2121493c6a0b35a5726fd546eb0fa5e9b20c --- core/UlpProxyBase.h | 3 +++ loc_api/libloc_api_50001/LocEngAdapter.cpp | 10 ++++++++-- loc_api/libloc_api_50001/LocEngAdapter.h | 1 + loc_api/libloc_api_50001/loc_eng.cpp | 7 ++++--- loc_api/libloc_api_50001/loc_eng_msg.h | 4 ++-- 5 files changed, 18 insertions(+), 7 deletions(-) diff --git a/core/UlpProxyBase.h b/core/UlpProxyBase.h index 02ba1678..0873748b 100644 --- a/core/UlpProxyBase.h +++ b/core/UlpProxyBase.h @@ -54,6 +54,9 @@ public: void* svExt) { return false; } + inline virtual bool reportStatus(GpsStatusValue status) { + return false; + } inline virtual void setAdapter(LocAdapterBase* adapter) {} inline virtual void setCapabilities(unsigned long capabilities) {} }; diff --git a/loc_api/libloc_api_50001/LocEngAdapter.cpp b/loc_api/libloc_api_50001/LocEngAdapter.cpp index 5224473f..468fe973 100644 --- a/loc_api/libloc_api_50001/LocEngAdapter.cpp +++ b/loc_api/libloc_api_50001/LocEngAdapter.cpp @@ -157,10 +157,16 @@ void LocEngAdapter::reportSv(GpsSvStatus &svStatus, } } -inline +void LocInternalAdapter::reportStatus(GpsStatusValue status) +{ + sendMsg(new LocEngReportStatus(mLocEngAdapter, status)); +} + void LocEngAdapter::reportStatus(GpsStatusValue status) { - sendMsg(new LocEngReportStatus(mOwner, status)); + if (!mUlp->reportStatus(status)) { + mInternalAdapter->reportStatus(status); + } } inline diff --git a/loc_api/libloc_api_50001/LocEngAdapter.h b/loc_api/libloc_api_50001/LocEngAdapter.h index 53a5aca0..a31cebbb 100644 --- a/loc_api/libloc_api_50001/LocEngAdapter.h +++ b/loc_api/libloc_api_50001/LocEngAdapter.h @@ -58,6 +58,7 @@ public: virtual void reportSv(GpsSvStatus &svStatus, GpsLocationExtended &locationExtended, void* svExt); + virtual void reportStatus(GpsStatusValue status); virtual void setPositionModeInt(LocPosMode& posMode); virtual void startFixInt(); virtual void stopFixInt(); diff --git a/loc_api/libloc_api_50001/loc_eng.cpp b/loc_api/libloc_api_50001/loc_eng.cpp index 90df5290..f6fd54d2 100644 --- a/loc_api/libloc_api_50001/loc_eng.cpp +++ b/loc_api/libloc_api_50001/loc_eng.cpp @@ -821,15 +821,16 @@ void LocEngReportSv::send() const { } // case LOC_ENG_MSG_REPORT_STATUS: -LocEngReportStatus::LocEngReportStatus(void* locEng, +LocEngReportStatus::LocEngReportStatus(LocAdapterBase* adapter, GpsStatusValue engineStatus) : - LocMsg(), mLocEng(locEng), mStatus(engineStatus) + LocMsg(), mAdapter(adapter), mStatus(engineStatus) { locallog(); } inline void LocEngReportStatus::proc() const { - loc_eng_data_s_type* locEng = (loc_eng_data_s_type*) mLocEng; + LocEngAdapter* adapter = (LocEngAdapter*)mAdapter; + loc_eng_data_s_type* locEng = (loc_eng_data_s_type*)adapter->getOwner(); loc_eng_report_status(*locEng, mStatus); update_aiding_data_for_deletion(*locEng); diff --git a/loc_api/libloc_api_50001/loc_eng_msg.h b/loc_api/libloc_api_50001/loc_eng_msg.h index 1a318946..4790bbee 100644 --- a/loc_api/libloc_api_50001/loc_eng_msg.h +++ b/loc_api/libloc_api_50001/loc_eng_msg.h @@ -119,9 +119,9 @@ struct LocEngReportSv : public LocMsg { }; struct LocEngReportStatus : public LocMsg { - void* mLocEng; + LocAdapterBase* mAdapter; const GpsStatusValue mStatus; - LocEngReportStatus(void* locEng, + LocEngReportStatus(LocAdapterBase* adapter, GpsStatusValue engineStatus); virtual void proc() const; void locallog() const;