android_device_samsung_msm8.../gps/gnss/XtraSystemStatusObserver.h

98 lines
3.6 KiB
C
Raw Normal View History

2018-07-19 12:48:02 +02:00
/* Copyright (c) 2017, 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
* met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following
* disclaimer in the documentation and/or other materials provided
* with the distribution.
* * Neither the name of The Linux Foundation, nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
#ifndef XTRA_SYSTEM_STATUS_OBS_H
#define XTRA_SYSTEM_STATUS_OBS_H
#include <cinttypes>
#include <MsgTask.h>
2019-02-11 21:56:38 +01:00
#include <LocIpc.h>
#include <LocTimer.h>
2018-07-19 12:48:02 +02:00
using namespace std;
using loc_core::IOsObserver;
using loc_core::IDataItemObserver;
using loc_core::IDataItemCore;
2019-02-11 21:56:38 +01:00
using loc_util::LocIpc;
2018-07-19 12:48:02 +02:00
2019-02-11 21:56:38 +01:00
class XtraSystemStatusObserver : public IDataItemObserver, public LocIpc{
2018-07-19 12:48:02 +02:00
public :
// constructor & destructor
inline XtraSystemStatusObserver(IOsObserver* sysStatObs, const MsgTask* msgTask):
2019-02-11 21:56:38 +01:00
mSystemStatusObsrvr(sysStatObs), mMsgTask(msgTask),
mGpsLock(-1), mConnections(0), mXtraThrottle(true), mReqStatusReceived(false),
mDelayLocTimer(*this), mIsConnectivityStatusKnown (false) {
2018-07-19 12:48:02 +02:00
subscribe(true);
2019-02-11 21:56:38 +01:00
startListeningNonBlocking(LOC_IPC_HAL);
mDelayLocTimer.start(100 /*.1 sec*/, false);
}
inline virtual ~XtraSystemStatusObserver() {
subscribe(false);
stopListening();
2018-07-19 12:48:02 +02:00
}
// IDataItemObserver overrides
inline virtual void getName(string& name);
virtual void notify(const list<IDataItemCore*>& dlist);
bool updateLockStatus(uint32_t lock);
2019-02-11 21:56:38 +01:00
bool updateConnections(uint64_t allConnections);
2018-07-19 12:48:02 +02:00
bool updateTac(const string& tac);
bool updateMccMnc(const string& mccmnc);
2019-02-11 21:56:38 +01:00
bool updateXtraThrottle(const bool enabled);
2018-07-19 12:48:02 +02:00
inline const MsgTask* getMsgTask() { return mMsgTask; }
void subscribe(bool yes);
2019-02-11 21:56:38 +01:00
protected:
void onReceive(const std::string& data) override;
2018-07-19 12:48:02 +02:00
private:
IOsObserver* mSystemStatusObsrvr;
const MsgTask* mMsgTask;
2019-02-11 21:56:38 +01:00
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;
2018-07-19 12:48:02 +02:00
2019-02-11 21:56:38 +01:00
bool onStatusRequested(int32_t xtraStatusUpdated);
2018-07-19 12:48:02 +02:00
};
#endif