18c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/* Copyright (c) 2011-2014, The Linux Foundation. All rights reserved.
28c2d3d5afc51d3f35150f748f263870367771b6fEd Tam *
38c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * Redistribution and use in source and binary forms, with or without
48c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * modification, are permitted provided that the following conditions are
58c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * met:
68c2d3d5afc51d3f35150f748f263870367771b6fEd Tam *     * Redistributions of source code must retain the above copyright
78c2d3d5afc51d3f35150f748f263870367771b6fEd Tam *       notice, this list of conditions and the following disclaimer.
88c2d3d5afc51d3f35150f748f263870367771b6fEd Tam *     * Redistributions in binary form must reproduce the above
98c2d3d5afc51d3f35150f748f263870367771b6fEd Tam *       copyright notice, this list of conditions and the following
108c2d3d5afc51d3f35150f748f263870367771b6fEd Tam *       disclaimer in the documentation and/or other materials provided
118c2d3d5afc51d3f35150f748f263870367771b6fEd Tam *       with the distribution.
128c2d3d5afc51d3f35150f748f263870367771b6fEd Tam *     * Neither the name of The Linux Foundation, nor the names of its
138c2d3d5afc51d3f35150f748f263870367771b6fEd Tam *       contributors may be used to endorse or promote products derived
148c2d3d5afc51d3f35150f748f263870367771b6fEd Tam *       from this software without specific prior written permission.
158c2d3d5afc51d3f35150f748f263870367771b6fEd Tam *
168c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
178c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
188c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
198c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
208c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
218c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
228c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
238c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
248c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
258c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
268c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
278c2d3d5afc51d3f35150f748f263870367771b6fEd Tam *
288c2d3d5afc51d3f35150f748f263870367771b6fEd Tam */
298c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#ifndef LOC_API_ENG_ADAPTER_H
308c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define LOC_API_ENG_ADAPTER_H
318c2d3d5afc51d3f35150f748f263870367771b6fEd Tam
328c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#include <ctype.h>
338c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#include <hardware/gps.h>
348c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#include <loc.h>
358c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#include <loc_eng_log.h>
368c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#include <log_util.h>
378c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#include <LocAdapterBase.h>
388c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#include <LocDualContext.h>
398c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#include <UlpProxyBase.h>
408c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#include <platform_lib_includes.h>
418c2d3d5afc51d3f35150f748f263870367771b6fEd Tam
428c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define MAX_URL_LEN 256
438c2d3d5afc51d3f35150f748f263870367771b6fEd Tam
448c2d3d5afc51d3f35150f748f263870367771b6fEd Tamusing namespace loc_core;
458c2d3d5afc51d3f35150f748f263870367771b6fEd Tam
468c2d3d5afc51d3f35150f748f263870367771b6fEd Tamclass LocEngAdapter;
478c2d3d5afc51d3f35150f748f263870367771b6fEd Tam
488c2d3d5afc51d3f35150f748f263870367771b6fEd Tamclass LocInternalAdapter : public LocAdapterBase {
498c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    LocEngAdapter* mLocEngAdapter;
508c2d3d5afc51d3f35150f748f263870367771b6fEd Tampublic:
518c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    LocInternalAdapter(LocEngAdapter* adapter);
528c2d3d5afc51d3f35150f748f263870367771b6fEd Tam
538c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    virtual void reportPosition(UlpLocation &location,
548c2d3d5afc51d3f35150f748f263870367771b6fEd Tam                                GpsLocationExtended &locationExtended,
558c2d3d5afc51d3f35150f748f263870367771b6fEd Tam                                void* locationExt,
568c2d3d5afc51d3f35150f748f263870367771b6fEd Tam                                enum loc_sess_status status,
578c2d3d5afc51d3f35150f748f263870367771b6fEd Tam                                LocPosTechMask loc_technology_mask);
588c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    virtual void reportSv(GpsSvStatus &svStatus,
598c2d3d5afc51d3f35150f748f263870367771b6fEd Tam                          GpsLocationExtended &locationExtended,
608c2d3d5afc51d3f35150f748f263870367771b6fEd Tam                          void* svExt);
618c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    virtual void reportStatus(GpsStatusValue status);
628c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    virtual void setPositionModeInt(LocPosMode& posMode);
638c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    virtual void startFixInt();
648c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    virtual void stopFixInt();
658c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    virtual void getZppInt();
668c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    virtual void setUlpProxy(UlpProxyBase* ulp);
678c2d3d5afc51d3f35150f748f263870367771b6fEd Tam};
688c2d3d5afc51d3f35150f748f263870367771b6fEd Tam
698c2d3d5afc51d3f35150f748f263870367771b6fEd Tamtypedef void (*loc_msg_sender)(void* loc_eng_data_p, void* msgp);
708c2d3d5afc51d3f35150f748f263870367771b6fEd Tam
718c2d3d5afc51d3f35150f748f263870367771b6fEd Tamclass LocEngAdapter : public LocAdapterBase {
728c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    void* mOwner;
738c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    LocInternalAdapter* mInternalAdapter;
748c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    UlpProxyBase* mUlp;
758c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    LocPosMode mFixCriteria;
768c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    bool mNavigating;
778c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    // mPowerVote is encoded as
788c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    // mPowerVote & 0x20 -- powerVoteRight
798c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    // mPowerVote & 0x10 -- power On / Off
808c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    unsigned int mPowerVote;
818c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    static const unsigned int POWER_VOTE_RIGHT = 0x20;
828c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    static const unsigned int POWER_VOTE_VALUE = 0x10;
838c2d3d5afc51d3f35150f748f263870367771b6fEd Tam
848c2d3d5afc51d3f35150f748f263870367771b6fEd Tampublic:
858c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    bool mSupportsAgpsRequests;
868c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    bool mSupportsPositionInjection;
878c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    bool mSupportsTimeInjection;
888c2d3d5afc51d3f35150f748f263870367771b6fEd Tam
898c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    LocEngAdapter(LOC_API_ADAPTER_EVENT_MASK_T mask,
908c2d3d5afc51d3f35150f748f263870367771b6fEd Tam                  void* owner, ContextBase* context,
918c2d3d5afc51d3f35150f748f263870367771b6fEd Tam                  MsgTask::tCreate tCreator);
928c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    virtual ~LocEngAdapter();
938c2d3d5afc51d3f35150f748f263870367771b6fEd Tam
948c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    virtual void setUlpProxy(UlpProxyBase* ulp);
958c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    inline void requestUlp(unsigned long capabilities) {
968c2d3d5afc51d3f35150f748f263870367771b6fEd Tam        mContext->requestUlp(mInternalAdapter, capabilities);
978c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    }
988c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    inline LocInternalAdapter* getInternalAdapter() { return mInternalAdapter; }
998c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    inline UlpProxyBase* getUlpProxy() { return mUlp; }
1008c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    inline void* getOwner() { return mOwner; }
1018c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    inline bool hasAgpsExtendedCapabilities() {
1028c2d3d5afc51d3f35150f748f263870367771b6fEd Tam        return mContext->hasAgpsExtendedCapabilities();
1038c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    }
1048c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    inline bool hasCPIExtendedCapabilities() {
1058c2d3d5afc51d3f35150f748f263870367771b6fEd Tam        return mContext->hasCPIExtendedCapabilities();
1068c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    }
1078c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    inline const MsgTask* getMsgTask() { return mMsgTask; }
1088c2d3d5afc51d3f35150f748f263870367771b6fEd Tam
1098c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    inline enum loc_api_adapter_err
1108c2d3d5afc51d3f35150f748f263870367771b6fEd Tam        startFix()
1118c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    {
1128c2d3d5afc51d3f35150f748f263870367771b6fEd Tam        return mLocApi->startFix(mFixCriteria);
1138c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    }
1148c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    inline enum loc_api_adapter_err
1158c2d3d5afc51d3f35150f748f263870367771b6fEd Tam        stopFix()
1168c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    {
1178c2d3d5afc51d3f35150f748f263870367771b6fEd Tam        return mLocApi->stopFix();
1188c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    }
1198c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    inline enum loc_api_adapter_err
1208c2d3d5afc51d3f35150f748f263870367771b6fEd Tam        deleteAidingData(GpsAidingData f)
1218c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    {
1228c2d3d5afc51d3f35150f748f263870367771b6fEd Tam        return mLocApi->deleteAidingData(f);
1238c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    }
1248c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    inline enum loc_api_adapter_err
1258c2d3d5afc51d3f35150f748f263870367771b6fEd Tam        enableData(int enable)
1268c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    {
1278c2d3d5afc51d3f35150f748f263870367771b6fEd Tam        return mLocApi->enableData(enable);
1288c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    }
1298c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    inline enum loc_api_adapter_err
1308c2d3d5afc51d3f35150f748f263870367771b6fEd Tam        setAPN(char* apn, int len)
1318c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    {
1328c2d3d5afc51d3f35150f748f263870367771b6fEd Tam        return mLocApi->setAPN(apn, len);
1338c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    }
1348c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    inline enum loc_api_adapter_err
1358c2d3d5afc51d3f35150f748f263870367771b6fEd Tam        injectPosition(double latitude, double longitude, float accuracy)
1368c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    {
1378c2d3d5afc51d3f35150f748f263870367771b6fEd Tam        return mLocApi->injectPosition(latitude, longitude, accuracy);
1388c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    }
1398c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    inline enum loc_api_adapter_err
1408c2d3d5afc51d3f35150f748f263870367771b6fEd Tam        setXtraData(char* data, int length)
1418c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    {
1428c2d3d5afc51d3f35150f748f263870367771b6fEd Tam        return mLocApi->setXtraData(data, length);
1438c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    }
1448c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    inline enum loc_api_adapter_err
1458c2d3d5afc51d3f35150f748f263870367771b6fEd Tam        requestXtraServer()
1468c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    {
1478c2d3d5afc51d3f35150f748f263870367771b6fEd Tam        return mLocApi->requestXtraServer();
1488c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    }
1498c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    inline enum loc_api_adapter_err
1508c2d3d5afc51d3f35150f748f263870367771b6fEd Tam        atlOpenStatus(int handle, int is_succ, char* apn, AGpsBearerType bearer, AGpsType agpsType)
1518c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    {
1528c2d3d5afc51d3f35150f748f263870367771b6fEd Tam        return mLocApi->atlOpenStatus(handle, is_succ, apn, bearer, agpsType);
1538c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    }
1548c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    inline enum loc_api_adapter_err
1558c2d3d5afc51d3f35150f748f263870367771b6fEd Tam        atlCloseStatus(int handle, int is_succ)
1568c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    {
1578c2d3d5afc51d3f35150f748f263870367771b6fEd Tam        return mLocApi->atlCloseStatus(handle, is_succ);
1588c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    }
1598c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    inline enum loc_api_adapter_err
1608c2d3d5afc51d3f35150f748f263870367771b6fEd Tam        setPositionMode(const LocPosMode *posMode)
1618c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    {
1628c2d3d5afc51d3f35150f748f263870367771b6fEd Tam        if (NULL != posMode) {
1638c2d3d5afc51d3f35150f748f263870367771b6fEd Tam            mFixCriteria = *posMode;
1648c2d3d5afc51d3f35150f748f263870367771b6fEd Tam        }
1658c2d3d5afc51d3f35150f748f263870367771b6fEd Tam        return mLocApi->setPositionMode(mFixCriteria);
1668c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    }
1678c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    inline enum loc_api_adapter_err
1688c2d3d5afc51d3f35150f748f263870367771b6fEd Tam        setServer(const char* url, int len)
1698c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    {
1708c2d3d5afc51d3f35150f748f263870367771b6fEd Tam        return mLocApi->setServer(url, len);
1718c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    }
1728c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    inline enum loc_api_adapter_err
1738c2d3d5afc51d3f35150f748f263870367771b6fEd Tam        setServer(unsigned int ip, int port,
1748c2d3d5afc51d3f35150f748f263870367771b6fEd Tam                  LocServerType type)
1758c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    {
1768c2d3d5afc51d3f35150f748f263870367771b6fEd Tam        return mLocApi->setServer(ip, port, type);
1778c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    }
1788c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    inline enum loc_api_adapter_err
1798c2d3d5afc51d3f35150f748f263870367771b6fEd Tam        informNiResponse(GpsUserResponseType userResponse, const void* passThroughData)
1808c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    {
1818c2d3d5afc51d3f35150f748f263870367771b6fEd Tam        return mLocApi->informNiResponse(userResponse, passThroughData);
1828c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    }
1838c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    inline enum loc_api_adapter_err
1848c2d3d5afc51d3f35150f748f263870367771b6fEd Tam        setSUPLVersion(uint32_t version)
1858c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    {
1868c2d3d5afc51d3f35150f748f263870367771b6fEd Tam        return mLocApi->setSUPLVersion(version);
1878c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    }
1888c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    inline enum loc_api_adapter_err
1898c2d3d5afc51d3f35150f748f263870367771b6fEd Tam        setLPPConfig(uint32_t profile)
1908c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    {
1918c2d3d5afc51d3f35150f748f263870367771b6fEd Tam        return mLocApi->setLPPConfig(profile);
1928c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    }
1938c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    inline enum loc_api_adapter_err
1948c2d3d5afc51d3f35150f748f263870367771b6fEd Tam        setSensorControlConfig(int sensorUsage, int sensorProvider)
1958c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    {
1968c2d3d5afc51d3f35150f748f263870367771b6fEd Tam        return mLocApi->setSensorControlConfig(sensorUsage, sensorProvider);
1978c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    }
1988c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    inline enum loc_api_adapter_err
1998c2d3d5afc51d3f35150f748f263870367771b6fEd Tam        setSensorProperties(bool gyroBiasVarianceRandomWalk_valid, float gyroBiasVarianceRandomWalk,
2008c2d3d5afc51d3f35150f748f263870367771b6fEd Tam                            bool accelBiasVarianceRandomWalk_valid, float accelBiasVarianceRandomWalk,
2018c2d3d5afc51d3f35150f748f263870367771b6fEd Tam                            bool angleBiasVarianceRandomWalk_valid, float angleBiasVarianceRandomWalk,
2028c2d3d5afc51d3f35150f748f263870367771b6fEd Tam                            bool rateBiasVarianceRandomWalk_valid, float rateBiasVarianceRandomWalk,
2038c2d3d5afc51d3f35150f748f263870367771b6fEd Tam                            bool velocityBiasVarianceRandomWalk_valid, float velocityBiasVarianceRandomWalk)
2048c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    {
2058c2d3d5afc51d3f35150f748f263870367771b6fEd Tam        return mLocApi->setSensorProperties(gyroBiasVarianceRandomWalk_valid, gyroBiasVarianceRandomWalk,
2068c2d3d5afc51d3f35150f748f263870367771b6fEd Tam                                           accelBiasVarianceRandomWalk_valid, accelBiasVarianceRandomWalk,
2078c2d3d5afc51d3f35150f748f263870367771b6fEd Tam                                           angleBiasVarianceRandomWalk_valid, angleBiasVarianceRandomWalk,
2088c2d3d5afc51d3f35150f748f263870367771b6fEd Tam                                           rateBiasVarianceRandomWalk_valid, rateBiasVarianceRandomWalk,
2098c2d3d5afc51d3f35150f748f263870367771b6fEd Tam                                           velocityBiasVarianceRandomWalk_valid, velocityBiasVarianceRandomWalk);
2108c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    }
2118c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    inline virtual enum loc_api_adapter_err
2128c2d3d5afc51d3f35150f748f263870367771b6fEd Tam        setSensorPerfControlConfig(int controlMode, int accelSamplesPerBatch, int accelBatchesPerSec,
2138c2d3d5afc51d3f35150f748f263870367771b6fEd Tam                            int gyroSamplesPerBatch, int gyroBatchesPerSec,
2148c2d3d5afc51d3f35150f748f263870367771b6fEd Tam                            int accelSamplesPerBatchHigh, int accelBatchesPerSecHigh,
2158c2d3d5afc51d3f35150f748f263870367771b6fEd Tam                            int gyroSamplesPerBatchHigh, int gyroBatchesPerSecHigh, int algorithmConfig)
2168c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    {
2178c2d3d5afc51d3f35150f748f263870367771b6fEd Tam        return mLocApi->setSensorPerfControlConfig(controlMode, accelSamplesPerBatch, accelBatchesPerSec,
2188c2d3d5afc51d3f35150f748f263870367771b6fEd Tam                                                  gyroSamplesPerBatch, gyroBatchesPerSec,
2198c2d3d5afc51d3f35150f748f263870367771b6fEd Tam                                                  accelSamplesPerBatchHigh, accelBatchesPerSecHigh,
2208c2d3d5afc51d3f35150f748f263870367771b6fEd Tam                                                  gyroSamplesPerBatchHigh, gyroBatchesPerSecHigh,
2218c2d3d5afc51d3f35150f748f263870367771b6fEd Tam                                                  algorithmConfig);
2228c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    }
2238c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    inline virtual enum loc_api_adapter_err
2248c2d3d5afc51d3f35150f748f263870367771b6fEd Tam        setExtPowerConfig(int isBatteryCharging)
2258c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    {
2268c2d3d5afc51d3f35150f748f263870367771b6fEd Tam        return mLocApi->setExtPowerConfig(isBatteryCharging);
2278c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    }
2288c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    inline virtual enum loc_api_adapter_err
2298c2d3d5afc51d3f35150f748f263870367771b6fEd Tam        setAGLONASSProtocol(unsigned long aGlonassProtocol)
2308c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    {
2318c2d3d5afc51d3f35150f748f263870367771b6fEd Tam        return mLocApi->setAGLONASSProtocol(aGlonassProtocol);
2328c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    }
2338c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    inline virtual int initDataServiceClient()
2348c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    {
2358c2d3d5afc51d3f35150f748f263870367771b6fEd Tam        return mLocApi->initDataServiceClient();
2368c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    }
2378c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    inline virtual int openAndStartDataCall()
2388c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    {
2398c2d3d5afc51d3f35150f748f263870367771b6fEd Tam        return mLocApi->openAndStartDataCall();
2408c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    }
2418c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    inline virtual void stopDataCall()
2428c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    {
2438c2d3d5afc51d3f35150f748f263870367771b6fEd Tam        mLocApi->stopDataCall();
2448c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    }
2458c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    inline virtual void closeDataCall()
2468c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    {
2478c2d3d5afc51d3f35150f748f263870367771b6fEd Tam        mLocApi->closeDataCall();
2488c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    }
2498c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    inline enum loc_api_adapter_err
2508c2d3d5afc51d3f35150f748f263870367771b6fEd Tam        getZpp(GpsLocation &zppLoc, LocPosTechMask &tech_mask)
2518c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    {
2528c2d3d5afc51d3f35150f748f263870367771b6fEd Tam        return mLocApi->getBestAvailableZppFix(zppLoc, tech_mask);
2538c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    }
2548c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    enum loc_api_adapter_err setTime(GpsUtcTime time,
2558c2d3d5afc51d3f35150f748f263870367771b6fEd Tam                                     int64_t timeReference,
2568c2d3d5afc51d3f35150f748f263870367771b6fEd Tam                                     int uncertainty);
2578c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    enum loc_api_adapter_err setXtraVersionCheck(int check);
2588c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    inline virtual void installAGpsCert(const DerEncodedCertificate* pData,
2598c2d3d5afc51d3f35150f748f263870367771b6fEd Tam                                        size_t length,
2608c2d3d5afc51d3f35150f748f263870367771b6fEd Tam                                        uint32_t slotBitMask)
2618c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    {
2628c2d3d5afc51d3f35150f748f263870367771b6fEd Tam        mLocApi->installAGpsCert(pData, length, slotBitMask);
2638c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    }
2648c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    virtual void handleEngineDownEvent();
2658c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    virtual void handleEngineUpEvent();
2668c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    virtual void reportPosition(UlpLocation &location,
2678c2d3d5afc51d3f35150f748f263870367771b6fEd Tam                                GpsLocationExtended &locationExtended,
2688c2d3d5afc51d3f35150f748f263870367771b6fEd Tam                                void* locationExt,
2698c2d3d5afc51d3f35150f748f263870367771b6fEd Tam                                enum loc_sess_status status,
2708c2d3d5afc51d3f35150f748f263870367771b6fEd Tam                                LocPosTechMask loc_technology_mask);
2718c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    virtual void reportSv(GpsSvStatus &svStatus,
2728c2d3d5afc51d3f35150f748f263870367771b6fEd Tam                          GpsLocationExtended &locationExtended,
2738c2d3d5afc51d3f35150f748f263870367771b6fEd Tam                          void* svExt);
2748c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    virtual void reportStatus(GpsStatusValue status);
2758c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    virtual void reportNmea(const char* nmea, int length);
2768c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    virtual bool reportXtraServer(const char* url1, const char* url2,
2778c2d3d5afc51d3f35150f748f263870367771b6fEd Tam                                  const char* url3, const int maxlength);
2788c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    virtual bool requestXtraData();
2798c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    virtual bool requestTime();
2808c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    virtual bool requestATL(int connHandle, AGpsType agps_type);
2818c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    virtual bool releaseATL(int connHandle);
2828c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    virtual bool requestNiNotify(GpsNiNotification &notify, const void* data);
2838c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    virtual bool requestSuplES(int connHandle);
2848c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    virtual bool reportDataCallOpened();
2858c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    virtual bool reportDataCallClosed();
2868c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    virtual void reportGpsMeasurementData(GpsData &gpsMeasurementData);
2878c2d3d5afc51d3f35150f748f263870367771b6fEd Tam
2888c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    inline const LocPosMode& getPositionMode() const
2898c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    {return mFixCriteria;}
2908c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    inline virtual bool isInSession()
2918c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    { return mNavigating; }
2928c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    void setInSession(bool inSession);
2938c2d3d5afc51d3f35150f748f263870367771b6fEd Tam
2948c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    // Permit/prohibit power voting
2958c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    inline void setPowerVoteRight(bool powerVoteRight) {
2968c2d3d5afc51d3f35150f748f263870367771b6fEd Tam        mPowerVote = powerVoteRight ? (mPowerVote | POWER_VOTE_RIGHT) :
2978c2d3d5afc51d3f35150f748f263870367771b6fEd Tam                                      (mPowerVote & ~POWER_VOTE_RIGHT);
2988c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    }
2998c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    inline bool getPowerVoteRight() const {
3008c2d3d5afc51d3f35150f748f263870367771b6fEd Tam        return (mPowerVote & POWER_VOTE_RIGHT) != 0 ;
3018c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    }
3028c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    // Set the power voting up/down and do actual operation if permitted
3038c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    inline void setPowerVote(bool powerOn) {
3048c2d3d5afc51d3f35150f748f263870367771b6fEd Tam        mPowerVote = powerOn ? (mPowerVote | POWER_VOTE_VALUE) :
3058c2d3d5afc51d3f35150f748f263870367771b6fEd Tam                               (mPowerVote & ~POWER_VOTE_VALUE);
3068c2d3d5afc51d3f35150f748f263870367771b6fEd Tam        requestPowerVote();
3078c2d3d5afc51d3f35150f748f263870367771b6fEd Tam        mContext->modemPowerVote(powerOn);
3088c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    }
3098c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    inline bool getPowerVote() const {
3108c2d3d5afc51d3f35150f748f263870367771b6fEd Tam        return (mPowerVote & POWER_VOTE_VALUE) != 0 ;
3118c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    }
3128c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    // Do power voting according to last settings if permitted
3138c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    void requestPowerVote();
3148c2d3d5afc51d3f35150f748f263870367771b6fEd Tam
3158c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    /*Values for lock
3168c2d3d5afc51d3f35150f748f263870367771b6fEd Tam      1 = Do not lock any position sessions
3178c2d3d5afc51d3f35150f748f263870367771b6fEd Tam      2 = Lock MI position sessions
3188c2d3d5afc51d3f35150f748f263870367771b6fEd Tam      3 = Lock MT position sessions
3198c2d3d5afc51d3f35150f748f263870367771b6fEd Tam      4 = Lock all position sessions
3208c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    */
3218c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    inline int setGpsLock(LOC_GPS_LOCK_MASK lock)
3228c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    {
3238c2d3d5afc51d3f35150f748f263870367771b6fEd Tam        return mLocApi->setGpsLock(lock);
3248c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    }
3258c2d3d5afc51d3f35150f748f263870367771b6fEd Tam
3268c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    int setGpsLockMsg(LOC_GPS_LOCK_MASK lock);
3278c2d3d5afc51d3f35150f748f263870367771b6fEd Tam
3288c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    /*
3298c2d3d5afc51d3f35150f748f263870367771b6fEd Tam      Returns
3308c2d3d5afc51d3f35150f748f263870367771b6fEd Tam      Current value of GPS lock on success
3318c2d3d5afc51d3f35150f748f263870367771b6fEd Tam      -1 on failure
3328c2d3d5afc51d3f35150f748f263870367771b6fEd Tam     */
3338c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    inline int getGpsLock()
3348c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    {
3358c2d3d5afc51d3f35150f748f263870367771b6fEd Tam        return mLocApi->getGpsLock();
3368c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    }
3378c2d3d5afc51d3f35150f748f263870367771b6fEd Tam
3388c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    /*
3398c2d3d5afc51d3f35150f748f263870367771b6fEd Tam      Update Registration Mask
3408c2d3d5afc51d3f35150f748f263870367771b6fEd Tam     */
3418c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    void updateRegistrationMask(LOC_API_ADAPTER_EVENT_MASK_T event,
3428c2d3d5afc51d3f35150f748f263870367771b6fEd Tam                                loc_registration_mask_status isEnabled);
3438c2d3d5afc51d3f35150f748f263870367771b6fEd Tam
3448c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    /*
3458c2d3d5afc51d3f35150f748f263870367771b6fEd Tam      Set Gnss Constellation Config
3468c2d3d5afc51d3f35150f748f263870367771b6fEd Tam     */
3478c2d3d5afc51d3f35150f748f263870367771b6fEd Tam    bool gnssConstellationConfig();
3488c2d3d5afc51d3f35150f748f263870367771b6fEd Tam};
3498c2d3d5afc51d3f35150f748f263870367771b6fEd Tam
3508c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#endif //LOC_API_ENG_ADAPTER_H
351