1b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel/* Copyright (c) 2011-2017, The Linux Foundation. All rights reserved.
2129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel *
3129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * Redistribution and use in source and binary forms, with or without
4129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * modification, are permitted provided that the following conditions are
5129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * met:
6129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel *     * Redistributions of source code must retain the above copyright
7129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel *       notice, this list of conditions and the following disclaimer.
8129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel *     * Redistributions in binary form must reproduce the above
9129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel *       copyright notice, this list of conditions and the following
10129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel *       disclaimer in the documentation and/or other materials provided
11129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel *       with the distribution.
12129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel *     * Neither the name of The Linux Foundation, nor the names of its
13129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel *       contributors may be used to endorse or promote products derived
14129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel *       from this software without specific prior written permission.
15129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel *
16129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
17129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
18129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
19129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
20129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
23129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
24129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
25129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
26129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel *
28129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel */
29129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#ifndef __LOC_CONTEXT_BASE__
30129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define __LOC_CONTEXT_BASE__
31129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel
32129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#include <stdbool.h>
33129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#include <ctype.h>
34129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#include <MsgTask.h>
35129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#include <LocApiBase.h>
36129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#include <LBSProxyBase.h>
37b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel#include <loc_cfg.h>
38129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel
39129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define MAX_XTRA_SERVER_URL_LENGTH 256
40129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel
41129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel/* GPS.conf support */
42129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel/* NOTE: the implementaiton of the parser casts number
43129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel   fields to 32 bit. To ensure all 'n' fields working,
44129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel   they must all be 32 bit fields. */
45129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudeltypedef struct loc_gps_cfg_s
46129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel{
47129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    uint32_t       INTERMEDIATE_POS;
48129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    uint32_t       ACCURACY_THRES;
49129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    uint32_t       SUPL_VER;
50129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    uint32_t       SUPL_MODE;
51129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    uint32_t       SUPL_ES;
52129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    uint32_t       CAPABILITIES;
53129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    uint32_t       LPP_PROFILE;
54129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    uint32_t       XTRA_VERSION_CHECK;
55129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    char           XTRA_SERVER_1[MAX_XTRA_SERVER_URL_LENGTH];
56129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    char           XTRA_SERVER_2[MAX_XTRA_SERVER_URL_LENGTH];
57129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    char           XTRA_SERVER_3[MAX_XTRA_SERVER_URL_LENGTH];
58129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    uint32_t       USE_EMERGENCY_PDN_FOR_EMERGENCY_SUPL;
59129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    uint32_t       NMEA_PROVIDER;
60129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    uint32_t       GPS_LOCK;
61129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    uint32_t       A_GLONASS_POS_PROTOCOL_SELECT;
62129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    uint32_t       AGPS_CERT_WRITABLE_MASK;
63129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    uint32_t       AGPS_CONFIG_INJECT;
64129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    uint32_t       LPPE_CP_TECHNOLOGY;
65129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    uint32_t       LPPE_UP_TECHNOLOGY;
666f2a63d31df9024574b97a242c5e89e9252cb895Thierry Strudel    uint32_t       EXTERNAL_DR_ENABLED;
67129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel} loc_gps_cfg_s_type;
68129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel
69129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel/* NOTE: the implementaiton of the parser casts number
70129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel   fields to 32 bit. To ensure all 'n' fields working,
71129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel   they must all be 32 bit fields. */
72129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel/* Meanwhile, *_valid fields are 8 bit fields, and 'f'
73129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel   fields are double. Rigid as they are, it is the
74129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel   the status quo, until the parsing mechanism is
75129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel   change, that is. */
76129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudeltypedef struct
77129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel{
78129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    uint8_t        GYRO_BIAS_RANDOM_WALK_VALID;
79129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    double         GYRO_BIAS_RANDOM_WALK;
80129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    uint32_t       SENSOR_ACCEL_BATCHES_PER_SEC;
81129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    uint32_t       SENSOR_ACCEL_SAMPLES_PER_BATCH;
82129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    uint32_t       SENSOR_GYRO_BATCHES_PER_SEC;
83129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    uint32_t       SENSOR_GYRO_SAMPLES_PER_BATCH;
84129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    uint32_t       SENSOR_ACCEL_BATCHES_PER_SEC_HIGH;
85129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    uint32_t       SENSOR_ACCEL_SAMPLES_PER_BATCH_HIGH;
86129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    uint32_t       SENSOR_GYRO_BATCHES_PER_SEC_HIGH;
87129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    uint32_t       SENSOR_GYRO_SAMPLES_PER_BATCH_HIGH;
88129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    uint32_t       SENSOR_CONTROL_MODE;
89129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    uint32_t       SENSOR_USAGE;
90129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    uint32_t       SENSOR_ALGORITHM_CONFIG_MASK;
91129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    uint8_t        ACCEL_RANDOM_WALK_SPECTRAL_DENSITY_VALID;
92129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    double         ACCEL_RANDOM_WALK_SPECTRAL_DENSITY;
93129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    uint8_t        ANGLE_RANDOM_WALK_SPECTRAL_DENSITY_VALID;
94129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    double         ANGLE_RANDOM_WALK_SPECTRAL_DENSITY;
95129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    uint8_t        RATE_RANDOM_WALK_SPECTRAL_DENSITY_VALID;
96129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    double         RATE_RANDOM_WALK_SPECTRAL_DENSITY;
97129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    uint8_t        VELOCITY_RANDOM_WALK_SPECTRAL_DENSITY_VALID;
98129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    double         VELOCITY_RANDOM_WALK_SPECTRAL_DENSITY;
99129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    uint32_t       SENSOR_PROVIDER;
100129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel} loc_sap_cfg_s_type;
101129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel
102129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudelnamespace loc_core {
103129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel
104129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudelclass LocAdapterBase;
105129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel
106129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudelclass ContextBase {
107129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    static LBSProxyBase* getLBSProxy(const char* libName);
108129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LocApiBase* createLocApi(LOC_API_ADAPTER_EVENT_MASK_T excludedMask);
109b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel    static const loc_param_s_type mGps_conf_table[];
110b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel    static const loc_param_s_type mSap_conf_table[];
111129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudelprotected:
112129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    const LBSProxyBase* mLBSProxy;
113129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    const MsgTask* mMsgTask;
114129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LocApiBase* mLocApi;
115129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    LocApiProxyBase *mLocApiProxy;
116129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudelpublic:
117129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    ContextBase(const MsgTask* msgTask,
118129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel                LOC_API_ADAPTER_EVENT_MASK_T exMask,
119129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel                const char* libName);
120129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    inline virtual ~ContextBase() { delete mLocApi; delete mLBSProxy; }
121129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel
122129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    inline const MsgTask* getMsgTask() { return mMsgTask; }
123129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    inline LocApiBase* getLocApi() { return mLocApi; }
124129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    inline LocApiProxyBase* getLocApiProxy() { return mLocApiProxy; }
125129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    inline bool hasAgpsExtendedCapabilities() { return mLBSProxy->hasAgpsExtendedCapabilities(); }
126129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    inline bool hasCPIExtendedCapabilities() { return mLBSProxy->hasCPIExtendedCapabilities(); }
127129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    inline bool hasNativeXtraClient() { return mLBSProxy->hasNativeXtraClient(); }
128129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    inline void modemPowerVote(bool power) const { return mLBSProxy->modemPowerVote(power); }
129129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    inline void requestUlp(LocAdapterBase* adapter,
130129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel                           unsigned long capabilities) {
131129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel        mLBSProxy->requestUlp(adapter, capabilities);
132129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    }
133129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    inline IzatDevId_t getIzatDevId() const {
134129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel        return mLBSProxy->getIzatDevId();
135129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    }
136129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    inline void sendMsg(const LocMsg *msg) { getMsgTask()->sendMsg(msg); }
137129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel
138129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    static loc_gps_cfg_s_type mGps_conf;
139129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    static loc_sap_cfg_s_type mSap_conf;
140129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel
141b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel    void readConfig();
142129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel    static uint32_t getCarrierCapabilities();
143129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel
144129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel};
145129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel
146129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel} // namespace loc_core
147129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel
148129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#endif //__LOC_CONTEXT_BASE__
149