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