1 /* Copyright (c) 2011-2013, The Linux Foundation. All rights reserved.
2  *
3  * Redistribution and use in source and binary forms, with or without
4  * modification, are permitted provided that the following conditions are
5  * met:
6  *     * Redistributions of source code must retain the above copyright
7  *       notice, this list of conditions and the following disclaimer.
8  *     * Redistributions in binary form must reproduce the above
9  *       copyright notice, this list of conditions and the following
10  *       disclaimer in the documentation and/or other materials provided
11  *       with the distribution.
12  *     * Neither the name of The Linux Foundation, nor the names of its
13  *       contributors may be used to endorse or promote products derived
14  *       from this software without specific prior written permission.
15  *
16  * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
17  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
18  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
19  * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
20  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
23  * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
24  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
25  * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
26  * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27  *
28  */
29 #ifndef LOC_API_ADAPTER_BASE_H
30 #define LOC_API_ADAPTER_BASE_H
31 
32 #include <gps_extended.h>
33 #include <UlpProxyBase.h>
34 #include <ContextBase.h>
35 
36 namespace loc_core {
37 
38 class LocAdapterBase {
39 protected:
40     const LOC_API_ADAPTER_EVENT_MASK_T mEvtMask;
41     ContextBase* mContext;
42     LocApiBase* mLocApi;
43     const MsgTask* mMsgTask;
44 
LocAdapterBase(const MsgTask * msgTask)45     inline LocAdapterBase(const MsgTask* msgTask) :
46         mEvtMask(0), mContext(NULL), mLocApi(NULL), mMsgTask(msgTask) {}
47 
48     LocAdapterBase(const LOC_API_ADAPTER_EVENT_MASK_T mask,
49                    ContextBase* context);
~LocAdapterBase()50     inline virtual ~LocAdapterBase() { mLocApi->removeAdapter(this); }
51 
52 public:
53     inline LOC_API_ADAPTER_EVENT_MASK_T
checkMask(LOC_API_ADAPTER_EVENT_MASK_T mask)54         checkMask(LOC_API_ADAPTER_EVENT_MASK_T mask) const {
55         return mEvtMask & mask;
56     }
57 
getEvtMask()58     inline LOC_API_ADAPTER_EVENT_MASK_T getEvtMask() const {
59         return mEvtMask;
60     }
61 
sendMsg(const LocMsg * msg)62     inline void sendMsg(const LocMsg* msg) const {
63         mMsgTask->sendMsg(msg);
64     }
65 
sendMsg(const LocMsg * msg)66     inline void sendMsg(const LocMsg* msg) {
67         mMsgTask->sendMsg(msg);
68     }
69 
70     // This will be overridden by the individual adapters
71     // if necessary.
setUlpProxy(UlpProxyBase * ulp)72     inline virtual void setUlpProxy(UlpProxyBase* ulp) {}
handleEngineUpEvent()73     inline virtual void handleEngineUpEvent() {}
74     virtual void handleEngineDownEvent();
setPositionModeInt(LocPosMode & posMode)75     inline virtual void setPositionModeInt(LocPosMode& posMode) {}
startFixInt()76     virtual void startFixInt() {}
stopFixInt()77     virtual void stopFixInt() {}
78     virtual void reportPosition(UlpLocation &location,
79                                 GpsLocationExtended &locationExtended,
80                                 void* locationExt,
81                                 enum loc_sess_status status,
82                                 LocPosTechMask loc_technology_mask);
83     virtual void reportSv(GpsSvStatus &svStatus,
84                           GpsLocationExtended &locationExtended,
85                           void* svExt);
86     virtual void reportStatus(GpsStatusValue status);
87     virtual void reportNmea(const char* nmea, int length);
88     virtual bool reportXtraServer(const char* url1, const char* url2,
89                                   const char* url3, const int maxlength);
90     virtual bool requestXtraData();
91     virtual bool requestTime();
92     virtual bool requestLocation();
93     virtual bool requestATL(int connHandle, AGpsType agps_type);
94     virtual bool releaseATL(int connHandle);
95     virtual bool requestSuplES(int connHandle);
96     virtual bool reportDataCallOpened();
97     virtual bool reportDataCallClosed();
98     virtual bool requestNiNotify(GpsNiNotification &notify,
99                                  const void* data);
isInSession()100     inline virtual bool isInSession() { return false; }
101 };
102 
103 } // namespace loc_core
104 
105 #endif //LOC_API_ADAPTER_BASE_H
106