1eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh/* Copyright (c) 2011-2014,2016-2017 The Linux Foundation. All rights reserved.
2eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh *
3eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * Redistribution and use in source and binary forms, with or without
4eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * modification, are permitted provided that the following conditions are
5eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * met:
6eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh *     * Redistributions of source code must retain the above copyright
7eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh *       notice, this list of conditions and the following disclaimer.
8eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh *     * Redistributions in binary form must reproduce the above
9eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh *       copyright notice, this list of conditions and the following
10eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh *       disclaimer in the documentation and/or other materials provided
11eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh *       with the distribution.
12eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh *     * Neither the name of The Linux Foundation, nor the names of its
13eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh *       contributors may be used to endorse or promote products derived
14eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh *       from this software without specific prior written permission.
15eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh *
16eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
17eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
18eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
19eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
20eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
23eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
24eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
25eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
26eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh *
28eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh */
29eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh#define LOG_NDEBUG 0
30eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh#define LOG_TAG "LocSvc_CtxBase"
31eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh
32eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh#include <dlfcn.h>
33eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh#include <cutils/sched_policy.h>
34eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh#include <unistd.h>
35eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh#include <ContextBase.h>
36eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh#include <msg_q.h>
37eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh#include <loc_target.h>
38eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh#include <platform_lib_includes.h>
39eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh#include <loc_log.h>
40eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh
41eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanhnamespace loc_core {
42eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh
43eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanhloc_gps_cfg_s_type ContextBase::mGps_conf {};
44eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanhloc_sap_cfg_s_type ContextBase::mSap_conf {};
45eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh
46eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanhconst loc_param_s_type ContextBase::mGps_conf_table[] =
47eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh{
48eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh  {"GPS_LOCK",                       &mGps_conf.GPS_LOCK,                       NULL, 'n'},
49eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh  {"SUPL_VER",                       &mGps_conf.SUPL_VER,                       NULL, 'n'},
50eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh  {"LPP_PROFILE",                    &mGps_conf.LPP_PROFILE,                    NULL, 'n'},
51eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh  {"A_GLONASS_POS_PROTOCOL_SELECT",  &mGps_conf.A_GLONASS_POS_PROTOCOL_SELECT,  NULL, 'n'},
52eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh  {"LPPE_CP_TECHNOLOGY",             &mGps_conf.LPPE_CP_TECHNOLOGY,             NULL, 'n'},
53eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh  {"LPPE_UP_TECHNOLOGY",             &mGps_conf.LPPE_UP_TECHNOLOGY,             NULL, 'n'},
54eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh  {"AGPS_CERT_WRITABLE_MASK",        &mGps_conf.AGPS_CERT_WRITABLE_MASK,        NULL, 'n'},
55eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh  {"SUPL_MODE",                      &mGps_conf.SUPL_MODE,                      NULL, 'n'},
56eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh  {"SUPL_ES",                        &mGps_conf.SUPL_ES,                        NULL, 'n'},
57eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh  {"INTERMEDIATE_POS",               &mGps_conf.INTERMEDIATE_POS,               NULL, 'n'},
58eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh  {"ACCURACY_THRES",                 &mGps_conf.ACCURACY_THRES,                 NULL, 'n'},
59eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh  {"NMEA_PROVIDER",                  &mGps_conf.NMEA_PROVIDER,                  NULL, 'n'},
60eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh  {"CAPABILITIES",                   &mGps_conf.CAPABILITIES,                   NULL, 'n'},
61eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh  {"XTRA_VERSION_CHECK",             &mGps_conf.XTRA_VERSION_CHECK,             NULL, 'n'},
62eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh  {"XTRA_SERVER_1",                  &mGps_conf.XTRA_SERVER_1,                  NULL, 's'},
63eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh  {"XTRA_SERVER_2",                  &mGps_conf.XTRA_SERVER_2,                  NULL, 's'},
64eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh  {"XTRA_SERVER_3",                  &mGps_conf.XTRA_SERVER_3,                  NULL, 's'},
65eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh  {"USE_EMERGENCY_PDN_FOR_EMERGENCY_SUPL",  &mGps_conf.USE_EMERGENCY_PDN_FOR_EMERGENCY_SUPL,          NULL, 'n'},
66eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh  {"AGPS_CONFIG_INJECT",             &mGps_conf.AGPS_CONFIG_INJECT,             NULL, 'n'},
67eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh  {"EXTERNAL_DR_ENABLED",            &mGps_conf.EXTERNAL_DR_ENABLED,                  NULL, 'n'},
68eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh};
69eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh
70eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanhconst loc_param_s_type ContextBase::mSap_conf_table[] =
71eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh{
72eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh  {"GYRO_BIAS_RANDOM_WALK",          &mSap_conf.GYRO_BIAS_RANDOM_WALK,          &mSap_conf.GYRO_BIAS_RANDOM_WALK_VALID, 'f'},
73eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh  {"ACCEL_RANDOM_WALK_SPECTRAL_DENSITY",     &mSap_conf.ACCEL_RANDOM_WALK_SPECTRAL_DENSITY,    &mSap_conf.ACCEL_RANDOM_WALK_SPECTRAL_DENSITY_VALID, 'f'},
74eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh  {"ANGLE_RANDOM_WALK_SPECTRAL_DENSITY",     &mSap_conf.ANGLE_RANDOM_WALK_SPECTRAL_DENSITY,    &mSap_conf.ANGLE_RANDOM_WALK_SPECTRAL_DENSITY_VALID, 'f'},
75eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh  {"RATE_RANDOM_WALK_SPECTRAL_DENSITY",      &mSap_conf.RATE_RANDOM_WALK_SPECTRAL_DENSITY,     &mSap_conf.RATE_RANDOM_WALK_SPECTRAL_DENSITY_VALID, 'f'},
76eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh  {"VELOCITY_RANDOM_WALK_SPECTRAL_DENSITY",  &mSap_conf.VELOCITY_RANDOM_WALK_SPECTRAL_DENSITY, &mSap_conf.VELOCITY_RANDOM_WALK_SPECTRAL_DENSITY_VALID, 'f'},
77eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh  {"SENSOR_ACCEL_BATCHES_PER_SEC",   &mSap_conf.SENSOR_ACCEL_BATCHES_PER_SEC,   NULL, 'n'},
78eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh  {"SENSOR_ACCEL_SAMPLES_PER_BATCH", &mSap_conf.SENSOR_ACCEL_SAMPLES_PER_BATCH, NULL, 'n'},
79eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh  {"SENSOR_GYRO_BATCHES_PER_SEC",    &mSap_conf.SENSOR_GYRO_BATCHES_PER_SEC,    NULL, 'n'},
80eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh  {"SENSOR_GYRO_SAMPLES_PER_BATCH",  &mSap_conf.SENSOR_GYRO_SAMPLES_PER_BATCH,  NULL, 'n'},
81eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh  {"SENSOR_ACCEL_BATCHES_PER_SEC_HIGH",   &mSap_conf.SENSOR_ACCEL_BATCHES_PER_SEC_HIGH,   NULL, 'n'},
82eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh  {"SENSOR_ACCEL_SAMPLES_PER_BATCH_HIGH", &mSap_conf.SENSOR_ACCEL_SAMPLES_PER_BATCH_HIGH, NULL, 'n'},
83eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh  {"SENSOR_GYRO_BATCHES_PER_SEC_HIGH",    &mSap_conf.SENSOR_GYRO_BATCHES_PER_SEC_HIGH,    NULL, 'n'},
84eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh  {"SENSOR_GYRO_SAMPLES_PER_BATCH_HIGH",  &mSap_conf.SENSOR_GYRO_SAMPLES_PER_BATCH_HIGH,  NULL, 'n'},
85eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh  {"SENSOR_CONTROL_MODE",            &mSap_conf.SENSOR_CONTROL_MODE,            NULL, 'n'},
86eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh  {"SENSOR_USAGE",                   &mSap_conf.SENSOR_USAGE,                   NULL, 'n'},
87eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh  {"SENSOR_ALGORITHM_CONFIG_MASK",   &mSap_conf.SENSOR_ALGORITHM_CONFIG_MASK,   NULL, 'n'},
88eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh  {"SENSOR_PROVIDER",                &mSap_conf.SENSOR_PROVIDER,                NULL, 'n'}
89eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh};
90eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh
91eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanhvoid ContextBase::readConfig()
92eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh{
939f6138fc1bf5470861dca973b0b0e62532402815Harikrishnan Hariharan  static bool confReadDone = false;
949f6138fc1bf5470861dca973b0b0e62532402815Harikrishnan Hariharan  if (!confReadDone) {
959f6138fc1bf5470861dca973b0b0e62532402815Harikrishnan Hariharan      confReadDone = true;
96eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh   /*Defaults for gps.conf*/
97eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh   mGps_conf.INTERMEDIATE_POS = 0;
98eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh   mGps_conf.ACCURACY_THRES = 0;
99eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh   mGps_conf.NMEA_PROVIDER = 0;
100eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh   mGps_conf.GPS_LOCK = 0;
101eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh   mGps_conf.SUPL_VER = 0x10000;
102eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh   mGps_conf.SUPL_MODE = 0x1;
103eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh   mGps_conf.SUPL_ES = 0;
104eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh   mGps_conf.CAPABILITIES = 0x7;
105eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh   /* LTE Positioning Profile configuration is disable by default*/
106eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh   mGps_conf.LPP_PROFILE = 0;
107eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh   /*By default no positioning protocol is selected on A-GLONASS system*/
108eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh   mGps_conf.A_GLONASS_POS_PROTOCOL_SELECT = 0;
109eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh   /*XTRA version check is disabled by default*/
110eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh   mGps_conf.XTRA_VERSION_CHECK=0;
111eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh   /*Use emergency PDN by default*/
112eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh   mGps_conf.USE_EMERGENCY_PDN_FOR_EMERGENCY_SUPL = 1;
113eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh   /* By default no LPPe CP technology is enabled*/
114eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh   mGps_conf.LPPE_CP_TECHNOLOGY = 0;
115eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh   /* By default no LPPe UP technology is enabled*/
116eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh   mGps_conf.LPPE_UP_TECHNOLOGY = 0;
117eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh
118eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh   /*Defaults for sap.conf*/
119eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh   mSap_conf.GYRO_BIAS_RANDOM_WALK = 0;
120eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh   mSap_conf.SENSOR_ACCEL_BATCHES_PER_SEC = 2;
121eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh   mSap_conf.SENSOR_ACCEL_SAMPLES_PER_BATCH = 5;
122eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh   mSap_conf.SENSOR_GYRO_BATCHES_PER_SEC = 2;
123eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh   mSap_conf.SENSOR_GYRO_SAMPLES_PER_BATCH = 5;
124eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh   mSap_conf.SENSOR_ACCEL_BATCHES_PER_SEC_HIGH = 4;
125eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh   mSap_conf.SENSOR_ACCEL_SAMPLES_PER_BATCH_HIGH = 25;
126eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh   mSap_conf.SENSOR_GYRO_BATCHES_PER_SEC_HIGH = 4;
127eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh   mSap_conf.SENSOR_GYRO_SAMPLES_PER_BATCH_HIGH = 25;
128eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh   mSap_conf.SENSOR_CONTROL_MODE = 0; /* AUTO */
129eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh   mSap_conf.SENSOR_USAGE = 0; /* Enabled */
130eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh   mSap_conf.SENSOR_ALGORITHM_CONFIG_MASK = 0; /* INS Disabled = FALSE*/
131eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh   /* Values MUST be set by OEMs in configuration for sensor-assisted
132eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh      navigation to work. There are NO default values */
133eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh   mSap_conf.ACCEL_RANDOM_WALK_SPECTRAL_DENSITY = 0;
134eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh   mSap_conf.ANGLE_RANDOM_WALK_SPECTRAL_DENSITY = 0;
135eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh   mSap_conf.RATE_RANDOM_WALK_SPECTRAL_DENSITY = 0;
136eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh   mSap_conf.VELOCITY_RANDOM_WALK_SPECTRAL_DENSITY = 0;
137eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh   mSap_conf.GYRO_BIAS_RANDOM_WALK_VALID = 0;
138eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh   mSap_conf.ACCEL_RANDOM_WALK_SPECTRAL_DENSITY_VALID = 0;
139eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh   mSap_conf.ANGLE_RANDOM_WALK_SPECTRAL_DENSITY_VALID = 0;
140eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh   mSap_conf.RATE_RANDOM_WALK_SPECTRAL_DENSITY_VALID = 0;
141eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh   mSap_conf.VELOCITY_RANDOM_WALK_SPECTRAL_DENSITY_VALID = 0;
142eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh   /* default provider is SSC */
143eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh   mSap_conf.SENSOR_PROVIDER = 1;
144eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh
145eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh   /* None of the 10 slots for agps certificates are writable by default */
146eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh   mGps_conf.AGPS_CERT_WRITABLE_MASK = 0;
147eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh
148eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh   /* inject supl config to modem with config values from config.xml or gps.conf, default 1 */
149eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh   mGps_conf.AGPS_CONFIG_INJECT = 1;
150eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh
151eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh   UTIL_READ_CONF(LOC_PATH_GPS_CONF, mGps_conf_table);
152eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh   UTIL_READ_CONF(LOC_PATH_SAP_CONF, mSap_conf_table);
1539f6138fc1bf5470861dca973b0b0e62532402815Harikrishnan Hariharan   switch (getTargetGnssType(loc_get_target())) {
1549f6138fc1bf5470861dca973b0b0e62532402815Harikrishnan Hariharan     case GNSS_GSS:
1559f6138fc1bf5470861dca973b0b0e62532402815Harikrishnan Hariharan     case GNSS_AUTO:
1569f6138fc1bf5470861dca973b0b0e62532402815Harikrishnan Hariharan        // For APQ targets, MSA/MSB capabilities should be reset
1579f6138fc1bf5470861dca973b0b0e62532402815Harikrishnan Hariharan        mGps_conf.CAPABILITIES &= ~(LOC_GPS_CAPABILITY_MSA | LOC_GPS_CAPABILITY_MSB);
1589f6138fc1bf5470861dca973b0b0e62532402815Harikrishnan Hariharan        break;
1599f6138fc1bf5470861dca973b0b0e62532402815Harikrishnan Hariharan     default:
1609f6138fc1bf5470861dca973b0b0e62532402815Harikrishnan Hariharan        break;
1619f6138fc1bf5470861dca973b0b0e62532402815Harikrishnan Hariharan    }
1629f6138fc1bf5470861dca973b0b0e62532402815Harikrishnan Hariharan    }
163eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh}
164eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh
165eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanhuint32_t ContextBase::getCarrierCapabilities() {
166eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    #define carrierMSA (uint32_t)0x2
167eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    #define carrierMSB (uint32_t)0x1
168eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    #define gpsConfMSA (uint32_t)0x4
169eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    #define gpsConfMSB (uint32_t)0x2
170eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    uint32_t capabilities = mGps_conf.CAPABILITIES;
171eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    if ((mGps_conf.SUPL_MODE & carrierMSA) != carrierMSA) {
172eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        capabilities &= ~gpsConfMSA;
173eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    }
174eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    if ((mGps_conf.SUPL_MODE & carrierMSB) != carrierMSB) {
175eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        capabilities &= ~gpsConfMSB;
176eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    }
177eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh
178eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    LOC_LOGV("getCarrierCapabilities: CAPABILITIES %x, SUPL_MODE %x, carrier capabilities %x",
179eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh             mGps_conf.CAPABILITIES, mGps_conf.SUPL_MODE, capabilities);
180eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    return capabilities;
181eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh}
182eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh
183eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain VongsouvanhLBSProxyBase* ContextBase::getLBSProxy(const char* libName)
184eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh{
185eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    LBSProxyBase* proxy = NULL;
186eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    LOC_LOGD("%s:%d]: getLBSProxy libname: %s\n", __func__, __LINE__, libName);
187eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    void* lib = dlopen(libName, RTLD_NOW);
188eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh
189eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    if ((void*)NULL != lib) {
190eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        getLBSProxy_t* getter = (getLBSProxy_t*)dlsym(lib, "getLBSProxy");
191eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        if (NULL != getter) {
192eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh            proxy = (*getter)();
193eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        }
194eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    }
195eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    else
196eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    {
197eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        LOC_LOGW("%s:%d]: FAILED TO LOAD libname: %s\n", __func__, __LINE__, libName);
198eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    }
199eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    if (NULL == proxy) {
200eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        proxy = new LBSProxyBase();
201eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    }
202eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    LOC_LOGD("%s:%d]: Exiting\n", __func__, __LINE__);
203eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    return proxy;
204eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh}
205eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh
206eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain VongsouvanhLocApiBase* ContextBase::createLocApi(LOC_API_ADAPTER_EVENT_MASK_T exMask)
207eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh{
208eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    LocApiBase* locApi = NULL;
209eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh
210eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    // Check the target
211eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    if (TARGET_NO_GNSS != loc_get_target()){
212eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh
213eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        if (NULL == (locApi = mLBSProxy->getLocApi(mMsgTask, exMask, this))) {
214eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh            void *handle = NULL;
215eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh            //try to see if LocApiV02 is present
216eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh            if ((handle = dlopen("libloc_api_v02.so", RTLD_NOW)) != NULL) {
217eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh                LOC_LOGD("%s:%d]: libloc_api_v02.so is present", __func__, __LINE__);
218eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh                getLocApi_t* getter = (getLocApi_t*) dlsym(handle, "getLocApi");
219eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh                if (getter != NULL) {
220eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh                    LOC_LOGD("%s:%d]: getter is not NULL for LocApiV02", __func__,
221eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh                            __LINE__);
222eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh                    locApi = (*getter)(mMsgTask, exMask, this);
223eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh                }
224eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh            }
225eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh            // only RPC is the option now
226eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh            else {
227eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh                LOC_LOGD("%s:%d]: libloc_api_v02.so is NOT present. Trying RPC",
228eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh                        __func__, __LINE__);
229eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh                handle = dlopen("libloc_api-rpc-qc.so", RTLD_NOW);
230eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh                if (NULL != handle) {
231eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh                    getLocApi_t* getter = (getLocApi_t*) dlsym(handle, "getLocApi");
232eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh                    if (NULL != getter) {
233eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh                        LOC_LOGD("%s:%d]: getter is not NULL in RPC", __func__,
234eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh                                __LINE__);
235eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh                        locApi = (*getter)(mMsgTask, exMask, this);
236eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh                    }
237eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh                }
238eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh            }
239eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        }
240eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    }
241eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh
242eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    // locApi could still be NULL at this time
243eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    // we would then create a dummy one
244eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    if (NULL == locApi) {
245eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        locApi = new LocApiBase(mMsgTask, exMask, this);
246eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    }
247eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh
248eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    return locApi;
249eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh}
250eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh
251eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain VongsouvanhContextBase::ContextBase(const MsgTask* msgTask,
252eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh                         LOC_API_ADAPTER_EVENT_MASK_T exMask,
253eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh                         const char* libName) :
254eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    mLBSProxy(getLBSProxy(libName)),
255eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    mMsgTask(msgTask),
256eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    mLocApi(createLocApi(exMask)),
257eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    mLocApiProxy(mLocApi->getLocApiProxy())
258eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh{
259eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh}
260eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh
261eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh}
262