diff options
author | Isaac Chen <isaacchen@isaacchen.cn> | 2018-12-31 10:55:08 +0100 |
---|---|---|
committer | TingyiChen <tingyi364@gmail.com> | 2019-08-13 11:54:40 +0200 |
commit | e5c53750f06e9d9739b45ec108260ead7ff80941 (patch) | |
tree | fe1d84884caefc481e994ae9c59c84b11fddd408 /gps/gnss/XtraSystemStatusObserver.h | |
parent | 3ac2a0309619515c9ac27a5b6ec7c212b86dc355 (diff) |
wayne-common: Synchorize gps to P
* QC Tag: LA.UM.7.2.r1-04900-sdm660.0
Signed-off-by: Isaac Chen <isaacchen@isaacchen.cn>
Change-Id: I34383e8fbf394b774f83f8d662873e8786ff1bbf
Diffstat (limited to 'gps/gnss/XtraSystemStatusObserver.h')
-rw-r--r-- | gps/gnss/XtraSystemStatusObserver.h | 44 |
1 files changed, 35 insertions, 9 deletions
diff --git a/gps/gnss/XtraSystemStatusObserver.h b/gps/gnss/XtraSystemStatusObserver.h index 42f49b5..af0789b 100644 --- a/gps/gnss/XtraSystemStatusObserver.h +++ b/gps/gnss/XtraSystemStatusObserver.h @@ -31,41 +31,67 @@ #include <cinttypes> #include <MsgTask.h> +#include <LocIpc.h> +#include <LocTimer.h> using namespace std; using loc_core::IOsObserver; using loc_core::IDataItemObserver; using loc_core::IDataItemCore; +using loc_util::LocIpc; - -class XtraSystemStatusObserver : public IDataItemObserver { +class XtraSystemStatusObserver : public IDataItemObserver, public LocIpc{ public : // constructor & destructor inline XtraSystemStatusObserver(IOsObserver* sysStatObs, const MsgTask* msgTask): - mSystemStatusObsrvr(sysStatObs), mMsgTask(msgTask) { + mSystemStatusObsrvr(sysStatObs), mMsgTask(msgTask), + mGpsLock(-1), mConnections(0), mXtraThrottle(true), mReqStatusReceived(false), + mDelayLocTimer(*this), mIsConnectivityStatusKnown (false) { subscribe(true); + startListeningNonBlocking(LOC_IPC_HAL); + mDelayLocTimer.start(100 /*.1 sec*/, false); + } + inline virtual ~XtraSystemStatusObserver() { + subscribe(false); + stopListening(); } - inline XtraSystemStatusObserver() {}; - inline virtual ~XtraSystemStatusObserver() { subscribe(false); } // IDataItemObserver overrides inline virtual void getName(string& name); virtual void notify(const list<IDataItemCore*>& dlist); bool updateLockStatus(uint32_t lock); - bool updateConnectionStatus(bool connected, uint32_t type); + bool updateConnections(uint64_t allConnections); bool updateTac(const string& tac); bool updateMccMnc(const string& mccmnc); + bool updateXtraThrottle(const bool enabled); inline const MsgTask* getMsgTask() { return mMsgTask; } void subscribe(bool yes); +protected: + void onReceive(const std::string& data) override; + private: - int createSocket(); - void closeSocket(const int32_t socketFd); - bool sendEvent(const stringstream& event); IOsObserver* mSystemStatusObsrvr; const MsgTask* mMsgTask; + int32_t mGpsLock; + uint64_t mConnections; + string mTac; + string mMccmnc; + bool mXtraThrottle; + bool mReqStatusReceived; + bool mIsConnectivityStatusKnown; + + class DelayLocTimer : public LocTimer { + XtraSystemStatusObserver& mXSSO; + public: + DelayLocTimer(XtraSystemStatusObserver& xsso) : mXSSO(xsso) {} + void timeOutCallback() override { + mXSSO.send(LOC_IPC_XTRA, "halinit"); + } + } mDelayLocTimer; + bool onStatusRequested(int32_t xtraStatusUpdated); }; #endif |