From a940046ff57e019a91c91d6d87f04b513d13b733 Mon Sep 17 00:00:00 2001 From: Rashed Abdel-Tawab Date: Tue, 19 Sep 2017 20:58:14 -0400 Subject: msm8996-common: Import gps from LA.UM.6.5.r1-02500-8x96.0 Signed-off-by: Davide Garberi --- gps/core/SystemStatusOsObserver.h | 333 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 333 insertions(+) create mode 100644 gps/core/SystemStatusOsObserver.h (limited to 'gps/core/SystemStatusOsObserver.h') diff --git a/gps/core/SystemStatusOsObserver.h b/gps/core/SystemStatusOsObserver.h new file mode 100644 index 0000000..8e42d21 --- /dev/null +++ b/gps/core/SystemStatusOsObserver.h @@ -0,0 +1,333 @@ +/* Copyright (c) 2015-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 __SYSTEM_STATUS_OSOBSERVER__ +#define __SYSTEM_STATUS_OSOBSERVER__ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace loc_core +{ + +/****************************************************************************** + SystemStatusOsObserver +******************************************************************************/ +// Forward Declarations +class IDataItemCore; + +template +class IClientIndex; + +template +class IDataItemIndex; + +struct SystemContext { + IDataItemSubscription *mSubscriptionObj; + IFrameworkActionReq *mFrameworkActionReqObj; + const MsgTask *mMsgTask; + + inline SystemContext() : + mSubscriptionObj(NULL), + mFrameworkActionReqObj(NULL), + mMsgTask(NULL) {} +}; + +// Clients wanting to get data from OS/Framework would need to +// subscribe with OSObserver using IDataItemSubscription interface. +// Such clients would need to implement IDataItemObserver interface +// to receive data when it becomes available. +class SystemStatusOsObserver : public IOsObserver { + +public: + // ctor + SystemStatusOsObserver(const MsgTask* msgTask); + + // dtor + ~SystemStatusOsObserver(); + + // To set the subscription object + inline void setSubscriptionObj(IDataItemSubscription *subscriptionObj) { + mContext.mSubscriptionObj = subscriptionObj; + }; + + // To set the framework action request object + inline void setFrameworkActionReqObj(IFrameworkActionReq *frameworkActionReqObj) { + mContext.mFrameworkActionReqObj = frameworkActionReqObj; + } + + // IDataItemObserver Overrides + virtual void getName (string & name); + virtual void notify (const std::list & dlist); + + // IDataItemSubscription Overrides + virtual void subscribe (const std :: list & l, IDataItemObserver * client); + virtual void updateSubscription + ( + const std :: list & l, + IDataItemObserver * client + ); + virtual void requestData + ( + const std :: list & l, + IDataItemObserver * client + ); + virtual void unsubscribe (const std :: list & l, IDataItemObserver * client); + virtual void unsubscribeAll (IDataItemObserver * client); + + // IFrameworkActionReq Overrides + virtual void turnOn (DataItemId dit, int timeOut = 0); + virtual void turnOff (DataItemId dit); + +private: + + SystemContext mContext; + const string mAddress; + IClientIndex *mClientIndex; + IDataItemIndex *mDataItemIndex; + map < DataItemId, IDataItemCore * > mDataItemCache; + map < DataItemId, int > mActiveRequestCount; + + // Nested types + // Messages + struct HandleMsgBase : public LocMsg { + HandleMsgBase (SystemStatusOsObserver * parent); + virtual ~HandleMsgBase (); + // Data members + SystemStatusOsObserver * mParent; + }; + + // Helpers + int sendFirstResponse + ( + const list & l, + IDataItemObserver * to + ); + + int sendCachedDataItems + ( + const list & l, + IDataItemObserver * to + ); + + int updateCache (IDataItemCore * d, bool &dataItemUpdated); + void logMe (const list & l); + + // Messages + struct HandleClientMsg : public LocMsg { + HandleClientMsg (SystemStatusOsObserver * parent, IDataItemObserver * client); + virtual ~HandleClientMsg (); + // Data Members + SystemStatusOsObserver * mParent; + IDataItemObserver * mClient; + }; + + struct HandleSubscribeReq : public HandleClientMsg { + HandleSubscribeReq (SystemStatusOsObserver * parent, + const list & l, + IDataItemObserver * client); + virtual ~HandleSubscribeReq (); + void proc () const; + // Data members + const list mDataItemList; + }; + + struct HandleUpdateSubscriptionReq : public HandleClientMsg { + HandleUpdateSubscriptionReq (SystemStatusOsObserver * parent, + const list & l, + IDataItemObserver * client); + virtual ~HandleUpdateSubscriptionReq (); + void proc () const; + // Data members + const list mDataItemList; + }; + + struct HandleRequestData : public HandleClientMsg { + HandleRequestData (SystemStatusOsObserver * parent, + const list & l, + IDataItemObserver * client); + virtual ~HandleRequestData (); + void proc () const; + const list mDataItemList; + }; + + struct HandleUnsubscribeReq : public HandleClientMsg { + HandleUnsubscribeReq (SystemStatusOsObserver * parent, + const list & l, + IDataItemObserver * client); + virtual ~HandleUnsubscribeReq (); + void proc () const; + // Data members + const list mDataItemList; + }; + + struct HandleUnsubscribeAllReq : public HandleClientMsg { + HandleUnsubscribeAllReq + ( + SystemStatusOsObserver * parent, + IDataItemObserver * client + ); + virtual ~HandleUnsubscribeAllReq (); + void proc () const; + }; + + struct HandleNotify : public HandleMsgBase { + HandleNotify (SystemStatusOsObserver * parent, list dlist); + virtual ~HandleNotify (); + void getListOfClients + ( + const list & dlist, + list & clients + ) const; + void proc () const; + // Data members + list mDList; + }; + + struct HandleTurnOn : public HandleMsgBase { + HandleTurnOn (SystemStatusOsObserver * parent, + const DataItemId dit, + const int timeOut); + virtual ~HandleTurnOn (); + void proc () const; + // Data members + DataItemId mDataItemId; + int mTimeOut; + }; + + struct HandleTurnOff : public HandleMsgBase { + HandleTurnOff (SystemStatusOsObserver * parent,const DataItemId dit); + virtual ~HandleTurnOff (); + void proc () const; + // Data members + DataItemId mDataItemId; + }; + +}; + + +/****************************************************************************** + Messages +******************************************************************************/ +// Ctors +inline SystemStatusOsObserver :: HandleMsgBase :: HandleMsgBase (SystemStatusOsObserver * parent) +: +mParent (parent) +{} + +inline SystemStatusOsObserver :: HandleClientMsg :: HandleClientMsg +( + SystemStatusOsObserver * parent, + IDataItemObserver * client +) +: +mParent (parent), +mClient (client) +{} + +inline SystemStatusOsObserver :: HandleSubscribeReq :: HandleSubscribeReq + (SystemStatusOsObserver * parent, const list & l, IDataItemObserver * client) +: +HandleClientMsg (parent, client), mDataItemList (l) +{} + +inline SystemStatusOsObserver :: HandleUpdateSubscriptionReq :: HandleUpdateSubscriptionReq + (SystemStatusOsObserver * parent, const list & l, IDataItemObserver * client) +: +HandleClientMsg (parent, client), mDataItemList (l) +{} + +inline SystemStatusOsObserver :: HandleRequestData :: HandleRequestData + (SystemStatusOsObserver * parent, const list & l, IDataItemObserver * client) +: +HandleClientMsg (parent, client), mDataItemList (l) +{} + +inline SystemStatusOsObserver :: HandleUnsubscribeReq :: HandleUnsubscribeReq + (SystemStatusOsObserver * parent, const list & l, IDataItemObserver * client) +: +HandleClientMsg (parent, client), mDataItemList (l) +{} + +inline SystemStatusOsObserver :: HandleUnsubscribeAllReq :: HandleUnsubscribeAllReq + (SystemStatusOsObserver * parent, IDataItemObserver * client) +: +HandleClientMsg (parent, client) +{} + +inline SystemStatusOsObserver :: HandleNotify :: HandleNotify + (SystemStatusOsObserver * parent, list dlist) +: +HandleMsgBase (parent), mDList (dlist) +{} + +inline SystemStatusOsObserver :: HandleTurnOn :: HandleTurnOn + (SystemStatusOsObserver * parent, const DataItemId dit,const int timeOut) +: +HandleMsgBase (parent), mDataItemId (dit), mTimeOut (timeOut) +{} + +inline SystemStatusOsObserver :: HandleTurnOff :: HandleTurnOff + (SystemStatusOsObserver * parent, const DataItemId dit) +: +HandleMsgBase (parent), mDataItemId (dit) +{} + +// Dtors +inline SystemStatusOsObserver :: HandleMsgBase :: ~HandleMsgBase () {} +inline SystemStatusOsObserver :: HandleClientMsg :: ~HandleClientMsg () {} +inline SystemStatusOsObserver :: HandleSubscribeReq :: ~HandleSubscribeReq () {} +inline SystemStatusOsObserver :: HandleUpdateSubscriptionReq :: ~HandleUpdateSubscriptionReq() {} +inline SystemStatusOsObserver :: HandleRequestData :: ~HandleRequestData() {} +inline SystemStatusOsObserver :: HandleUnsubscribeReq :: ~HandleUnsubscribeReq () {} +inline SystemStatusOsObserver :: HandleUnsubscribeAllReq :: ~HandleUnsubscribeAllReq () {} + +inline SystemStatusOsObserver :: HandleNotify :: ~HandleNotify () { + list :: iterator it = mDList.begin (); + for (; it != mDList.end (); ++it) { + delete *it; + *it = NULL; + } +} + +inline SystemStatusOsObserver :: HandleTurnOn :: ~HandleTurnOn () {} +inline SystemStatusOsObserver :: HandleTurnOff :: ~HandleTurnOff () {} + + +} // namespace loc_core + +#endif //__SYSTEM_STATUS__ + -- cgit v1.2.3