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