18c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/* Copyright (c) 2009-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 308c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define LOG_NDDEBUG 0 318c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define LOG_TAG "LocSvc_eng" 328c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 338c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#include <stdint.h> 348c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#include <stdio.h> 358c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#include <stdlib.h> 368c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#include <unistd.h> 378c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#include <dlfcn.h> 388c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#include <ctype.h> 398c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#include <math.h> 408c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#include <pthread.h> 418c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#include <arpa/inet.h> 428c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#include <netinet/in.h> /* struct sockaddr_in */ 438c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#include <sys/socket.h> 448c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#include <sys/time.h> 458c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#include <netdb.h> 468c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#include <time.h> 478c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#include <new> 488c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#include <LocEngAdapter.h> 498c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 508c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#include <cutils/sched_policy.h> 518c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#ifndef USE_GLIB 528c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#include <utils/SystemClock.h> 538c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#include <utils/Log.h> 548c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#endif /* USE_GLIB */ 558c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 568c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#ifdef USE_GLIB 578c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#include <glib.h> 588c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#include <sys/syscall.h> 598c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#endif /* USE_GLIB */ 608c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 618c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#include <string.h> 628c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 638c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#include <loc_eng.h> 648c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#include <loc_eng_ni.h> 658c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#include <loc_eng_dmn_conn.h> 668c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#include <loc_eng_dmn_conn_handler.h> 678c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#include <loc_eng_msg.h> 688c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#include <loc_eng_nmea.h> 698c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#include <msg_q.h> 708c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#include <loc.h> 718c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#include "log_util.h" 728c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#include "platform_lib_includes.h" 738c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#include "loc_core_log.h" 748c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#include "loc_eng_log.h" 758c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 768c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define SUCCESS TRUE 778c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define FAILURE FALSE 788c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 798c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#ifndef GPS_CONF_FILE 808c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define GPS_CONF_FILE "/etc/gps.conf" //??? platform independent 818c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#endif 828c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 838c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#ifndef SAP_CONF_FILE 848c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define SAP_CONF_FILE "/etc/sap.conf" 858c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#endif 868c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 878c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define XTRA1_GPSONEXTRA "xtra1.gpsonextra.net" 888c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 898c2d3d5afc51d3f35150f748f263870367771b6fEd Tamusing namespace loc_core; 908c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 918c2d3d5afc51d3f35150f748f263870367771b6fEd Tamboolean configAlreadyRead = false; 928c2d3d5afc51d3f35150f748f263870367771b6fEd Tamunsigned int agpsStatus = 0; 938c2d3d5afc51d3f35150f748f263870367771b6fEd Tamloc_gps_cfg_s_type gps_conf; 948c2d3d5afc51d3f35150f748f263870367771b6fEd Tamloc_sap_cfg_s_type sap_conf; 958c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 968c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/* Parameter spec table */ 978c2d3d5afc51d3f35150f748f263870367771b6fEd Tamstatic loc_param_s_type gps_conf_table[] = 988c2d3d5afc51d3f35150f748f263870367771b6fEd Tam{ 998c2d3d5afc51d3f35150f748f263870367771b6fEd Tam {"GPS_LOCK", &gps_conf.GPS_LOCK, NULL, 'n'}, 1008c2d3d5afc51d3f35150f748f263870367771b6fEd Tam {"SUPL_VER", &gps_conf.SUPL_VER, NULL, 'n'}, 1018c2d3d5afc51d3f35150f748f263870367771b6fEd Tam {"LPP_PROFILE", &gps_conf.LPP_PROFILE, NULL, 'n'}, 1028c2d3d5afc51d3f35150f748f263870367771b6fEd Tam {"A_GLONASS_POS_PROTOCOL_SELECT", &gps_conf.A_GLONASS_POS_PROTOCOL_SELECT, NULL, 'n'}, 1038c2d3d5afc51d3f35150f748f263870367771b6fEd Tam {"AGPS_CERT_WRITABLE_MASK", &gps_conf.AGPS_CERT_WRITABLE_MASK, NULL, 'n'}, 1048c2d3d5afc51d3f35150f748f263870367771b6fEd Tam {"SUPL_MODE", &gps_conf.SUPL_MODE, NULL, 'n'}, 1058c2d3d5afc51d3f35150f748f263870367771b6fEd Tam {"INTERMEDIATE_POS", &gps_conf.INTERMEDIATE_POS, NULL, 'n'}, 1068c2d3d5afc51d3f35150f748f263870367771b6fEd Tam {"ACCURACY_THRES", &gps_conf.ACCURACY_THRES, NULL, 'n'}, 1078c2d3d5afc51d3f35150f748f263870367771b6fEd Tam {"NMEA_PROVIDER", &gps_conf.NMEA_PROVIDER, NULL, 'n'}, 1088c2d3d5afc51d3f35150f748f263870367771b6fEd Tam {"CAPABILITIES", &gps_conf.CAPABILITIES, NULL, 'n'}, 1098c2d3d5afc51d3f35150f748f263870367771b6fEd Tam {"XTRA_VERSION_CHECK", &gps_conf.XTRA_VERSION_CHECK, NULL, 'n'}, 1108c2d3d5afc51d3f35150f748f263870367771b6fEd Tam {"XTRA_SERVER_1", &gps_conf.XTRA_SERVER_1, NULL, 's'}, 1118c2d3d5afc51d3f35150f748f263870367771b6fEd Tam {"XTRA_SERVER_2", &gps_conf.XTRA_SERVER_2, NULL, 's'}, 1128c2d3d5afc51d3f35150f748f263870367771b6fEd Tam {"XTRA_SERVER_3", &gps_conf.XTRA_SERVER_3, NULL, 's'}, 1138c2d3d5afc51d3f35150f748f263870367771b6fEd Tam {"USE_EMERGENCY_PDN_FOR_EMERGENCY_SUPL", &gps_conf.USE_EMERGENCY_PDN_FOR_EMERGENCY_SUPL, NULL, 'n'}, 1148c2d3d5afc51d3f35150f748f263870367771b6fEd Tam}; 1158c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 1168c2d3d5afc51d3f35150f748f263870367771b6fEd Tamstatic loc_param_s_type sap_conf_table[] = 1178c2d3d5afc51d3f35150f748f263870367771b6fEd Tam{ 1188c2d3d5afc51d3f35150f748f263870367771b6fEd Tam {"GYRO_BIAS_RANDOM_WALK", &sap_conf.GYRO_BIAS_RANDOM_WALK, &sap_conf.GYRO_BIAS_RANDOM_WALK_VALID, 'f'}, 1198c2d3d5afc51d3f35150f748f263870367771b6fEd Tam {"ACCEL_RANDOM_WALK_SPECTRAL_DENSITY", &sap_conf.ACCEL_RANDOM_WALK_SPECTRAL_DENSITY, &sap_conf.ACCEL_RANDOM_WALK_SPECTRAL_DENSITY_VALID, 'f'}, 1208c2d3d5afc51d3f35150f748f263870367771b6fEd Tam {"ANGLE_RANDOM_WALK_SPECTRAL_DENSITY", &sap_conf.ANGLE_RANDOM_WALK_SPECTRAL_DENSITY, &sap_conf.ANGLE_RANDOM_WALK_SPECTRAL_DENSITY_VALID, 'f'}, 1218c2d3d5afc51d3f35150f748f263870367771b6fEd Tam {"RATE_RANDOM_WALK_SPECTRAL_DENSITY", &sap_conf.RATE_RANDOM_WALK_SPECTRAL_DENSITY, &sap_conf.RATE_RANDOM_WALK_SPECTRAL_DENSITY_VALID, 'f'}, 1228c2d3d5afc51d3f35150f748f263870367771b6fEd Tam {"VELOCITY_RANDOM_WALK_SPECTRAL_DENSITY", &sap_conf.VELOCITY_RANDOM_WALK_SPECTRAL_DENSITY, &sap_conf.VELOCITY_RANDOM_WALK_SPECTRAL_DENSITY_VALID, 'f'}, 1238c2d3d5afc51d3f35150f748f263870367771b6fEd Tam {"SENSOR_ACCEL_BATCHES_PER_SEC", &sap_conf.SENSOR_ACCEL_BATCHES_PER_SEC, NULL, 'n'}, 1248c2d3d5afc51d3f35150f748f263870367771b6fEd Tam {"SENSOR_ACCEL_SAMPLES_PER_BATCH", &sap_conf.SENSOR_ACCEL_SAMPLES_PER_BATCH, NULL, 'n'}, 1258c2d3d5afc51d3f35150f748f263870367771b6fEd Tam {"SENSOR_GYRO_BATCHES_PER_SEC", &sap_conf.SENSOR_GYRO_BATCHES_PER_SEC, NULL, 'n'}, 1268c2d3d5afc51d3f35150f748f263870367771b6fEd Tam {"SENSOR_GYRO_SAMPLES_PER_BATCH", &sap_conf.SENSOR_GYRO_SAMPLES_PER_BATCH, NULL, 'n'}, 1278c2d3d5afc51d3f35150f748f263870367771b6fEd Tam {"SENSOR_ACCEL_BATCHES_PER_SEC_HIGH", &sap_conf.SENSOR_ACCEL_BATCHES_PER_SEC_HIGH, NULL, 'n'}, 1288c2d3d5afc51d3f35150f748f263870367771b6fEd Tam {"SENSOR_ACCEL_SAMPLES_PER_BATCH_HIGH", &sap_conf.SENSOR_ACCEL_SAMPLES_PER_BATCH_HIGH, NULL, 'n'}, 1298c2d3d5afc51d3f35150f748f263870367771b6fEd Tam {"SENSOR_GYRO_BATCHES_PER_SEC_HIGH", &sap_conf.SENSOR_GYRO_BATCHES_PER_SEC_HIGH, NULL, 'n'}, 1308c2d3d5afc51d3f35150f748f263870367771b6fEd Tam {"SENSOR_GYRO_SAMPLES_PER_BATCH_HIGH", &sap_conf.SENSOR_GYRO_SAMPLES_PER_BATCH_HIGH, NULL, 'n'}, 1318c2d3d5afc51d3f35150f748f263870367771b6fEd Tam {"SENSOR_CONTROL_MODE", &sap_conf.SENSOR_CONTROL_MODE, NULL, 'n'}, 1328c2d3d5afc51d3f35150f748f263870367771b6fEd Tam {"SENSOR_USAGE", &sap_conf.SENSOR_USAGE, NULL, 'n'}, 1338c2d3d5afc51d3f35150f748f263870367771b6fEd Tam {"SENSOR_ALGORITHM_CONFIG_MASK", &sap_conf.SENSOR_ALGORITHM_CONFIG_MASK, NULL, 'n'}, 1348c2d3d5afc51d3f35150f748f263870367771b6fEd Tam {"SENSOR_PROVIDER", &sap_conf.SENSOR_PROVIDER, NULL, 'n'} 1358c2d3d5afc51d3f35150f748f263870367771b6fEd Tam}; 1368c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 1378c2d3d5afc51d3f35150f748f263870367771b6fEd Tamstatic void loc_default_parameters(void) 1388c2d3d5afc51d3f35150f748f263870367771b6fEd Tam{ 1398c2d3d5afc51d3f35150f748f263870367771b6fEd Tam /*Defaults for gps.conf*/ 1408c2d3d5afc51d3f35150f748f263870367771b6fEd Tam gps_conf.INTERMEDIATE_POS = 0; 1418c2d3d5afc51d3f35150f748f263870367771b6fEd Tam gps_conf.ACCURACY_THRES = 0; 1428c2d3d5afc51d3f35150f748f263870367771b6fEd Tam gps_conf.NMEA_PROVIDER = 0; 1438c2d3d5afc51d3f35150f748f263870367771b6fEd Tam gps_conf.GPS_LOCK = 0; 1448c2d3d5afc51d3f35150f748f263870367771b6fEd Tam gps_conf.SUPL_VER = 0x10000; 1458c2d3d5afc51d3f35150f748f263870367771b6fEd Tam gps_conf.SUPL_MODE = 0x3; 1468c2d3d5afc51d3f35150f748f263870367771b6fEd Tam gps_conf.CAPABILITIES = 0x7; 1478c2d3d5afc51d3f35150f748f263870367771b6fEd Tam /* LTE Positioning Profile configuration is disable by default*/ 1488c2d3d5afc51d3f35150f748f263870367771b6fEd Tam gps_conf.LPP_PROFILE = 0; 1498c2d3d5afc51d3f35150f748f263870367771b6fEd Tam /*By default no positioning protocol is selected on A-GLONASS system*/ 1508c2d3d5afc51d3f35150f748f263870367771b6fEd Tam gps_conf.A_GLONASS_POS_PROTOCOL_SELECT = 0; 1518c2d3d5afc51d3f35150f748f263870367771b6fEd Tam /*XTRA version check is disabled by default*/ 1528c2d3d5afc51d3f35150f748f263870367771b6fEd Tam gps_conf.XTRA_VERSION_CHECK=0; 1538c2d3d5afc51d3f35150f748f263870367771b6fEd Tam /*Use emergency PDN by default*/ 1548c2d3d5afc51d3f35150f748f263870367771b6fEd Tam gps_conf.USE_EMERGENCY_PDN_FOR_EMERGENCY_SUPL = 1; 1558c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 1568c2d3d5afc51d3f35150f748f263870367771b6fEd Tam /*Defaults for sap.conf*/ 1578c2d3d5afc51d3f35150f748f263870367771b6fEd Tam sap_conf.GYRO_BIAS_RANDOM_WALK = 0; 1588c2d3d5afc51d3f35150f748f263870367771b6fEd Tam sap_conf.SENSOR_ACCEL_BATCHES_PER_SEC = 2; 1598c2d3d5afc51d3f35150f748f263870367771b6fEd Tam sap_conf.SENSOR_ACCEL_SAMPLES_PER_BATCH = 5; 1608c2d3d5afc51d3f35150f748f263870367771b6fEd Tam sap_conf.SENSOR_GYRO_BATCHES_PER_SEC = 2; 1618c2d3d5afc51d3f35150f748f263870367771b6fEd Tam sap_conf.SENSOR_GYRO_SAMPLES_PER_BATCH = 5; 1628c2d3d5afc51d3f35150f748f263870367771b6fEd Tam sap_conf.SENSOR_ACCEL_BATCHES_PER_SEC_HIGH = 4; 1638c2d3d5afc51d3f35150f748f263870367771b6fEd Tam sap_conf.SENSOR_ACCEL_SAMPLES_PER_BATCH_HIGH = 25; 1648c2d3d5afc51d3f35150f748f263870367771b6fEd Tam sap_conf.SENSOR_GYRO_BATCHES_PER_SEC_HIGH = 4; 1658c2d3d5afc51d3f35150f748f263870367771b6fEd Tam sap_conf.SENSOR_GYRO_SAMPLES_PER_BATCH_HIGH = 25; 1668c2d3d5afc51d3f35150f748f263870367771b6fEd Tam sap_conf.SENSOR_CONTROL_MODE = 0; /* AUTO */ 1678c2d3d5afc51d3f35150f748f263870367771b6fEd Tam sap_conf.SENSOR_USAGE = 0; /* Enabled */ 1688c2d3d5afc51d3f35150f748f263870367771b6fEd Tam sap_conf.SENSOR_ALGORITHM_CONFIG_MASK = 0; /* INS Disabled = FALSE*/ 1698c2d3d5afc51d3f35150f748f263870367771b6fEd Tam /* Values MUST be set by OEMs in configuration for sensor-assisted 1708c2d3d5afc51d3f35150f748f263870367771b6fEd Tam navigation to work. There are NO default values */ 1718c2d3d5afc51d3f35150f748f263870367771b6fEd Tam sap_conf.ACCEL_RANDOM_WALK_SPECTRAL_DENSITY = 0; 1728c2d3d5afc51d3f35150f748f263870367771b6fEd Tam sap_conf.ANGLE_RANDOM_WALK_SPECTRAL_DENSITY = 0; 1738c2d3d5afc51d3f35150f748f263870367771b6fEd Tam sap_conf.RATE_RANDOM_WALK_SPECTRAL_DENSITY = 0; 1748c2d3d5afc51d3f35150f748f263870367771b6fEd Tam sap_conf.VELOCITY_RANDOM_WALK_SPECTRAL_DENSITY = 0; 1758c2d3d5afc51d3f35150f748f263870367771b6fEd Tam sap_conf.GYRO_BIAS_RANDOM_WALK_VALID = 0; 1768c2d3d5afc51d3f35150f748f263870367771b6fEd Tam sap_conf.ACCEL_RANDOM_WALK_SPECTRAL_DENSITY_VALID = 0; 1778c2d3d5afc51d3f35150f748f263870367771b6fEd Tam sap_conf.ANGLE_RANDOM_WALK_SPECTRAL_DENSITY_VALID = 0; 1788c2d3d5afc51d3f35150f748f263870367771b6fEd Tam sap_conf.RATE_RANDOM_WALK_SPECTRAL_DENSITY_VALID = 0; 1798c2d3d5afc51d3f35150f748f263870367771b6fEd Tam sap_conf.VELOCITY_RANDOM_WALK_SPECTRAL_DENSITY_VALID = 0; 1808c2d3d5afc51d3f35150f748f263870367771b6fEd Tam /* default provider is SSC */ 1818c2d3d5afc51d3f35150f748f263870367771b6fEd Tam sap_conf.SENSOR_PROVIDER = 1; 1828c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 1838c2d3d5afc51d3f35150f748f263870367771b6fEd Tam /* None of the 10 slots for agps certificates are writable by default */ 1848c2d3d5afc51d3f35150f748f263870367771b6fEd Tam gps_conf.AGPS_CERT_WRITABLE_MASK = 0; 1858c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 1868c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 1878c2d3d5afc51d3f35150f748f263870367771b6fEd Tam// 2nd half of init(), singled out for 1888c2d3d5afc51d3f35150f748f263870367771b6fEd Tam// modem restart to use. 1898c2d3d5afc51d3f35150f748f263870367771b6fEd Tamstatic int loc_eng_reinit(loc_eng_data_s_type &loc_eng_data); 1908c2d3d5afc51d3f35150f748f263870367771b6fEd Tamstatic void loc_eng_agps_reinit(loc_eng_data_s_type &loc_eng_data); 1918c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 1928c2d3d5afc51d3f35150f748f263870367771b6fEd Tamstatic int loc_eng_set_server(loc_eng_data_s_type &loc_eng_data, 1938c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocServerType type, const char *hostname, int port); 1948c2d3d5afc51d3f35150f748f263870367771b6fEd Tam// Internal functions 1958c2d3d5afc51d3f35150f748f263870367771b6fEd Tamstatic void loc_inform_gps_status(loc_eng_data_s_type &loc_eng_data, 1968c2d3d5afc51d3f35150f748f263870367771b6fEd Tam GpsStatusValue status); 1978c2d3d5afc51d3f35150f748f263870367771b6fEd Tamstatic void loc_eng_report_status(loc_eng_data_s_type &loc_eng_data, 1988c2d3d5afc51d3f35150f748f263870367771b6fEd Tam GpsStatusValue status); 1998c2d3d5afc51d3f35150f748f263870367771b6fEd Tamstatic void loc_eng_process_conn_request(loc_eng_data_s_type &loc_eng_data, 2008c2d3d5afc51d3f35150f748f263870367771b6fEd Tam int connHandle, AGpsType agps_type); 2018c2d3d5afc51d3f35150f748f263870367771b6fEd Tamstatic void loc_eng_agps_close_status(loc_eng_data_s_type &loc_eng_data, int is_succ); 2028c2d3d5afc51d3f35150f748f263870367771b6fEd Tamstatic void loc_eng_handle_engine_down(loc_eng_data_s_type &loc_eng_data) ; 2038c2d3d5afc51d3f35150f748f263870367771b6fEd Tamstatic void loc_eng_handle_engine_up(loc_eng_data_s_type &loc_eng_data) ; 2048c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 2058c2d3d5afc51d3f35150f748f263870367771b6fEd Tamstatic int loc_eng_start_handler(loc_eng_data_s_type &loc_eng_data); 2068c2d3d5afc51d3f35150f748f263870367771b6fEd Tamstatic int loc_eng_stop_handler(loc_eng_data_s_type &loc_eng_data); 2078c2d3d5afc51d3f35150f748f263870367771b6fEd Tamstatic int loc_eng_get_zpp_handler(loc_eng_data_s_type &loc_eng_data); 2088c2d3d5afc51d3f35150f748f263870367771b6fEd Tamstatic void deleteAidingData(loc_eng_data_s_type &logEng); 2098c2d3d5afc51d3f35150f748f263870367771b6fEd Tamstatic AgpsStateMachine* 2108c2d3d5afc51d3f35150f748f263870367771b6fEd TamgetAgpsStateMachine(loc_eng_data_s_type& logEng, AGpsExtType agpsType); 2118c2d3d5afc51d3f35150f748f263870367771b6fEd Tamstatic int dataCallCb(void *cb_data); 2128c2d3d5afc51d3f35150f748f263870367771b6fEd Tamstatic void update_aiding_data_for_deletion(loc_eng_data_s_type& loc_eng_data) { 2138c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (loc_eng_data.engine_status != GPS_STATUS_ENGINE_ON && 2148c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data.aiding_data_for_deletion != 0) 2158c2d3d5afc51d3f35150f748f263870367771b6fEd Tam { 2168c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data.adapter->deleteAidingData(loc_eng_data.aiding_data_for_deletion); 2178c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data.aiding_data_for_deletion = 0; 2188c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 2198c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 2208c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 2218c2d3d5afc51d3f35150f748f263870367771b6fEd Tamstatic void* noProc(void* data) 2228c2d3d5afc51d3f35150f748f263870367771b6fEd Tam{ 2238c2d3d5afc51d3f35150f748f263870367771b6fEd Tam return NULL; 2248c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 2258c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 2268c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 2278c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/********************************************************************* 2288c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * definitions of the static messages used in the file 2298c2d3d5afc51d3f35150f748f263870367771b6fEd Tam *********************************************************************/ 2308c2d3d5afc51d3f35150f748f263870367771b6fEd Tam// case LOC_ENG_MSG_REQUEST_NI: 2318c2d3d5afc51d3f35150f748f263870367771b6fEd TamLocEngRequestNi::LocEngRequestNi(void* locEng, 2328c2d3d5afc51d3f35150f748f263870367771b6fEd Tam GpsNiNotification ¬if, 2338c2d3d5afc51d3f35150f748f263870367771b6fEd Tam const void* data) : 2348c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocMsg(), mLocEng(locEng), mNotify(notif), mPayload(data) { 2358c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 2368c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 2378c2d3d5afc51d3f35150f748f263870367771b6fEd Tamvoid LocEngRequestNi::proc() const { 2388c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_ni_request_handler(*((loc_eng_data_s_type*)mLocEng), 2398c2d3d5afc51d3f35150f748f263870367771b6fEd Tam &mNotify, mPayload); 2408c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 2418c2d3d5afc51d3f35150f748f263870367771b6fEd Tamvoid LocEngRequestNi::locallog() const 2428c2d3d5afc51d3f35150f748f263870367771b6fEd Tam{ 2438c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGV("id: %d\n type: %s\n flags: %d\n time out: %d\n " 2448c2d3d5afc51d3f35150f748f263870367771b6fEd Tam "default response: %s\n requestor id encoding: %s\n" 2458c2d3d5afc51d3f35150f748f263870367771b6fEd Tam " text encoding: %s\n passThroughData: %p", 2468c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mNotify.notification_id, 2478c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_get_ni_type_name(mNotify.ni_type), 2488c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mNotify.notify_flags, 2498c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mNotify.timeout, 2508c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_get_ni_response_name(mNotify.default_response), 2518c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_get_ni_encoding_name(mNotify.requestor_id_encoding), 2528c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_get_ni_encoding_name(mNotify.text_encoding), 2538c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mPayload); 2548c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 2558c2d3d5afc51d3f35150f748f263870367771b6fEd Taminline void LocEngRequestNi::log() const { 2568c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 2578c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 2588c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 2598c2d3d5afc51d3f35150f748f263870367771b6fEd Tam// case LOC_ENG_MSG_INFORM_NI_RESPONSE: 2608c2d3d5afc51d3f35150f748f263870367771b6fEd Tam// in loc_eng_ni.cpp 2618c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 2628c2d3d5afc51d3f35150f748f263870367771b6fEd Tam// case LOC_ENG_MSG_START_FIX: 2638c2d3d5afc51d3f35150f748f263870367771b6fEd TamLocEngStartFix::LocEngStartFix(LocEngAdapter* adapter) : 2648c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocMsg(), mAdapter(adapter) 2658c2d3d5afc51d3f35150f748f263870367771b6fEd Tam{ 2668c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 2678c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 2688c2d3d5afc51d3f35150f748f263870367771b6fEd Taminline void LocEngStartFix::proc() const 2698c2d3d5afc51d3f35150f748f263870367771b6fEd Tam{ 2708c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data_s_type* locEng = (loc_eng_data_s_type*)mAdapter->getOwner(); 2718c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_start_handler(*locEng); 2728c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 2738c2d3d5afc51d3f35150f748f263870367771b6fEd Taminline void LocEngStartFix::locallog() const 2748c2d3d5afc51d3f35150f748f263870367771b6fEd Tam{ 2758c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGV("LocEngStartFix"); 2768c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 2778c2d3d5afc51d3f35150f748f263870367771b6fEd Taminline void LocEngStartFix::log() const 2788c2d3d5afc51d3f35150f748f263870367771b6fEd Tam{ 2798c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 2808c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 2818c2d3d5afc51d3f35150f748f263870367771b6fEd Tamvoid LocEngStartFix::send() const { 2828c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mAdapter->sendMsg(this); 2838c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 2848c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 2858c2d3d5afc51d3f35150f748f263870367771b6fEd Tam// case LOC_ENG_MSG_STOP_FIX: 2868c2d3d5afc51d3f35150f748f263870367771b6fEd TamLocEngStopFix::LocEngStopFix(LocEngAdapter* adapter) : 2878c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocMsg(), mAdapter(adapter) 2888c2d3d5afc51d3f35150f748f263870367771b6fEd Tam{ 2898c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 2908c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 2918c2d3d5afc51d3f35150f748f263870367771b6fEd Taminline void LocEngStopFix::proc() const 2928c2d3d5afc51d3f35150f748f263870367771b6fEd Tam{ 2938c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data_s_type* locEng = (loc_eng_data_s_type*)mAdapter->getOwner(); 2948c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_stop_handler(*locEng); 2958c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 2968c2d3d5afc51d3f35150f748f263870367771b6fEd Taminline void LocEngStopFix::locallog() const 2978c2d3d5afc51d3f35150f748f263870367771b6fEd Tam{ 2988c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGV("LocEngStopFix"); 2998c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 3008c2d3d5afc51d3f35150f748f263870367771b6fEd Taminline void LocEngStopFix::log() const 3018c2d3d5afc51d3f35150f748f263870367771b6fEd Tam{ 3028c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 3038c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 3048c2d3d5afc51d3f35150f748f263870367771b6fEd Tamvoid LocEngStopFix::send() const { 3058c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mAdapter->sendMsg(this); 3068c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 3078c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 3088c2d3d5afc51d3f35150f748f263870367771b6fEd Tam// case LOC_ENG_MSG_SET_POSITION_MODE: 3098c2d3d5afc51d3f35150f748f263870367771b6fEd TamLocEngPositionMode::LocEngPositionMode(LocEngAdapter* adapter, 3108c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocPosMode &mode) : 3118c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocMsg(), mAdapter(adapter), mPosMode(mode) 3128c2d3d5afc51d3f35150f748f263870367771b6fEd Tam{ 3138c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mPosMode.logv(); 3148c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 3158c2d3d5afc51d3f35150f748f263870367771b6fEd Taminline void LocEngPositionMode::proc() const { 3168c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mAdapter->setPositionMode(&mPosMode); 3178c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 3188c2d3d5afc51d3f35150f748f263870367771b6fEd Taminline void LocEngPositionMode::log() const { 3198c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mPosMode.logv(); 3208c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 3218c2d3d5afc51d3f35150f748f263870367771b6fEd Tamvoid LocEngPositionMode::send() const { 3228c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mAdapter->sendMsg(this); 3238c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 3248c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 3258c2d3d5afc51d3f35150f748f263870367771b6fEd TamLocEngGetZpp::LocEngGetZpp(LocEngAdapter* adapter) : 3268c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocMsg(), mAdapter(adapter) 3278c2d3d5afc51d3f35150f748f263870367771b6fEd Tam{ 3288c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 3298c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 3308c2d3d5afc51d3f35150f748f263870367771b6fEd Taminline void LocEngGetZpp::proc() const 3318c2d3d5afc51d3f35150f748f263870367771b6fEd Tam{ 3328c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data_s_type* locEng = (loc_eng_data_s_type*)mAdapter->getOwner(); 3338c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_get_zpp_handler(*locEng); 3348c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 3358c2d3d5afc51d3f35150f748f263870367771b6fEd Taminline void LocEngGetZpp::locallog() const 3368c2d3d5afc51d3f35150f748f263870367771b6fEd Tam{ 3378c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGV("LocEngGetZpp"); 3388c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 3398c2d3d5afc51d3f35150f748f263870367771b6fEd Taminline void LocEngGetZpp::log() const 3408c2d3d5afc51d3f35150f748f263870367771b6fEd Tam{ 3418c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 3428c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 3438c2d3d5afc51d3f35150f748f263870367771b6fEd Tamvoid LocEngGetZpp::send() const { 3448c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mAdapter->sendMsg(this); 3458c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 3468c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 3478c2d3d5afc51d3f35150f748f263870367771b6fEd Tamstruct LocEngSetTime : public LocMsg { 3488c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocEngAdapter* mAdapter; 3498c2d3d5afc51d3f35150f748f263870367771b6fEd Tam const GpsUtcTime mTime; 3508c2d3d5afc51d3f35150f748f263870367771b6fEd Tam const int64_t mTimeReference; 3518c2d3d5afc51d3f35150f748f263870367771b6fEd Tam const int mUncertainty; 3528c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline LocEngSetTime(LocEngAdapter* adapter, 3538c2d3d5afc51d3f35150f748f263870367771b6fEd Tam GpsUtcTime t, int64_t tf, int unc) : 3548c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocMsg(), mAdapter(adapter), 3558c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mTime(t), mTimeReference(tf), mUncertainty(unc) 3568c2d3d5afc51d3f35150f748f263870367771b6fEd Tam { 3578c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 3588c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 3598c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline virtual void proc() const { 3608c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mAdapter->setTime(mTime, mTimeReference, mUncertainty); 3618c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 3628c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline void locallog() const { 3638c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGV("time: %lld\n timeReference: %lld\n uncertainty: %d", 3648c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mTime, mTimeReference, mUncertainty); 3658c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 3668c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline virtual void log() const { 3678c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 3688c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 3698c2d3d5afc51d3f35150f748f263870367771b6fEd Tam}; 3708c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 3718c2d3d5afc51d3f35150f748f263870367771b6fEd Tam // case LOC_ENG_MSG_INJECT_LOCATION: 3728c2d3d5afc51d3f35150f748f263870367771b6fEd Tamstruct LocEngInjectLocation : public LocMsg { 3738c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocEngAdapter* mAdapter; 3748c2d3d5afc51d3f35150f748f263870367771b6fEd Tam const double mLatitude; 3758c2d3d5afc51d3f35150f748f263870367771b6fEd Tam const double mLongitude; 3768c2d3d5afc51d3f35150f748f263870367771b6fEd Tam const float mAccuracy; 3778c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline LocEngInjectLocation(LocEngAdapter* adapter, 3788c2d3d5afc51d3f35150f748f263870367771b6fEd Tam double lat, double lon, float accur) : 3798c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocMsg(), mAdapter(adapter), 3808c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mLatitude(lat), mLongitude(lon), mAccuracy(accur) 3818c2d3d5afc51d3f35150f748f263870367771b6fEd Tam { 3828c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 3838c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 3848c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline virtual void proc() const { 3858c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mAdapter->injectPosition(mLatitude, mLongitude, mAccuracy); 3868c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 3878c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline void locallog() const { 3888c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGV("latitude: %f\n longitude: %f\n accuracy: %f", 3898c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mLatitude, mLongitude, mAccuracy); 3908c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 3918c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline virtual void log() const { 3928c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 3938c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 3948c2d3d5afc51d3f35150f748f263870367771b6fEd Tam}; 3958c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 3968c2d3d5afc51d3f35150f748f263870367771b6fEd Tam// case LOC_ENG_MSG_SET_SERVER_IPV4: 3978c2d3d5afc51d3f35150f748f263870367771b6fEd Tamstruct LocEngSetServerIpv4 : public LocMsg { 3988c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocEngAdapter* mAdapter; 3998c2d3d5afc51d3f35150f748f263870367771b6fEd Tam const unsigned int mNlAddr; 4008c2d3d5afc51d3f35150f748f263870367771b6fEd Tam const int mPort; 4018c2d3d5afc51d3f35150f748f263870367771b6fEd Tam const LocServerType mServerType; 4028c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline LocEngSetServerIpv4(LocEngAdapter* adapter, 4038c2d3d5afc51d3f35150f748f263870367771b6fEd Tam unsigned int ip, 4048c2d3d5afc51d3f35150f748f263870367771b6fEd Tam int port, 4058c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocServerType type) : 4068c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocMsg(), mAdapter(adapter), 4078c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mNlAddr(ip), mPort(port), mServerType(type) 4088c2d3d5afc51d3f35150f748f263870367771b6fEd Tam { 4098c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 4108c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 4118c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline virtual void proc() const { 4128c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mAdapter->setServer(mNlAddr, mPort, mServerType); 4138c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 4148c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline void locallog() const { 4158c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGV("LocEngSetServerIpv4 - addr: %x, port: %d, type: %s", 4168c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mNlAddr, mPort, loc_get_server_type_name(mServerType)); 4178c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 4188c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline virtual void log() const { 4198c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 4208c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 4218c2d3d5afc51d3f35150f748f263870367771b6fEd Tam}; 4228c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 4238c2d3d5afc51d3f35150f748f263870367771b6fEd Tam// case LOC_ENG_MSG_SET_SERVER_URL: 4248c2d3d5afc51d3f35150f748f263870367771b6fEd Tamstruct LocEngSetServerUrl : public LocMsg { 4258c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocEngAdapter* mAdapter; 4268c2d3d5afc51d3f35150f748f263870367771b6fEd Tam const int mLen; 4278c2d3d5afc51d3f35150f748f263870367771b6fEd Tam char* mUrl; 4288c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline LocEngSetServerUrl(LocEngAdapter* adapter, 4298c2d3d5afc51d3f35150f748f263870367771b6fEd Tam char* urlString, 4308c2d3d5afc51d3f35150f748f263870367771b6fEd Tam int url_len) : 4318c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocMsg(), mAdapter(adapter), 4328c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mLen(url_len), mUrl(new char[mLen+1]) 4338c2d3d5afc51d3f35150f748f263870367771b6fEd Tam { 4348c2d3d5afc51d3f35150f748f263870367771b6fEd Tam memcpy((void*)mUrl, (void*)urlString, url_len); 4358c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mUrl[mLen] = 0; 4368c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 4378c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 4388c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline ~LocEngSetServerUrl() 4398c2d3d5afc51d3f35150f748f263870367771b6fEd Tam { 4408c2d3d5afc51d3f35150f748f263870367771b6fEd Tam delete[] mUrl; 4418c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 4428c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline virtual void proc() const { 4438c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mAdapter->setServer(mUrl, mLen); 4448c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 4458c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline void locallog() const { 4468c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGV("LocEngSetServerUrl - url: %s", mUrl); 4478c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 4488c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline virtual void log() const { 4498c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 4508c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 4518c2d3d5afc51d3f35150f748f263870367771b6fEd Tam}; 4528c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 4538c2d3d5afc51d3f35150f748f263870367771b6fEd Tam// case LOC_ENG_MSG_A_GLONASS_PROTOCOL: 4548c2d3d5afc51d3f35150f748f263870367771b6fEd Tamstruct LocEngAGlonassProtocol : public LocMsg { 4558c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocEngAdapter* mAdapter; 4568c2d3d5afc51d3f35150f748f263870367771b6fEd Tam const unsigned long mAGlonassProtocl; 4578c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline LocEngAGlonassProtocol(LocEngAdapter* adapter, 4588c2d3d5afc51d3f35150f748f263870367771b6fEd Tam unsigned long protocol) : 4598c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocMsg(), mAdapter(adapter), mAGlonassProtocl(protocol) 4608c2d3d5afc51d3f35150f748f263870367771b6fEd Tam { 4618c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 4628c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 4638c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline virtual void proc() const { 4648c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mAdapter->setAGLONASSProtocol(mAGlonassProtocl); 4658c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 4668c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline void locallog() const { 4678c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGV("A-GLONASS protocol: 0x%lx", mAGlonassProtocl); 4688c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 4698c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline virtual void log() const { 4708c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 4718c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 4728c2d3d5afc51d3f35150f748f263870367771b6fEd Tam}; 4738c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 4748c2d3d5afc51d3f35150f748f263870367771b6fEd Tam// case LOC_ENG_MSG_SUPL_VERSION: 4758c2d3d5afc51d3f35150f748f263870367771b6fEd Tamstruct LocEngSuplVer : public LocMsg { 4768c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocEngAdapter* mAdapter; 4778c2d3d5afc51d3f35150f748f263870367771b6fEd Tam const int mSuplVer; 4788c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline LocEngSuplVer(LocEngAdapter* adapter, 4798c2d3d5afc51d3f35150f748f263870367771b6fEd Tam int suplVer) : 4808c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocMsg(), mAdapter(adapter), mSuplVer(suplVer) 4818c2d3d5afc51d3f35150f748f263870367771b6fEd Tam { 4828c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 4838c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 4848c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline virtual void proc() const { 4858c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mAdapter->setSUPLVersion(mSuplVer); 4868c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 4878c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline void locallog() const { 4888c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGV("SUPL Version: %d", mSuplVer); 4898c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 4908c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline virtual void log() const { 4918c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 4928c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 4938c2d3d5afc51d3f35150f748f263870367771b6fEd Tam}; 4948c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 4958c2d3d5afc51d3f35150f748f263870367771b6fEd Tamstruct LocEngSuplMode : public LocMsg { 4968c2d3d5afc51d3f35150f748f263870367771b6fEd Tam UlpProxyBase* mUlp; 4978c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 4988c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline LocEngSuplMode(UlpProxyBase* ulp) : 4998c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocMsg(), mUlp(ulp) 5008c2d3d5afc51d3f35150f748f263870367771b6fEd Tam { 5018c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 5028c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 5038c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline virtual void proc() const { 5048c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mUlp->setCapabilities(getCarrierCapabilities()); 5058c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 5068c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline void locallog() const { 5078c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 5088c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline virtual void log() const { 5098c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 5108c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 5118c2d3d5afc51d3f35150f748f263870367771b6fEd Tam}; 5128c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 5138c2d3d5afc51d3f35150f748f263870367771b6fEd Tam// case LOC_ENG_MSG_LPP_CONFIG: 5148c2d3d5afc51d3f35150f748f263870367771b6fEd Tamstruct LocEngLppConfig : public LocMsg { 5158c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocEngAdapter* mAdapter; 5168c2d3d5afc51d3f35150f748f263870367771b6fEd Tam const int mLppConfig; 5178c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline LocEngLppConfig(LocEngAdapter* adapter, 5188c2d3d5afc51d3f35150f748f263870367771b6fEd Tam int lppConfig) : 5198c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocMsg(), mAdapter(adapter), mLppConfig(lppConfig) 5208c2d3d5afc51d3f35150f748f263870367771b6fEd Tam { 5218c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 5228c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 5238c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline virtual void proc() const { 5248c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mAdapter->setLPPConfig(mLppConfig); 5258c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 5268c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline void locallog() const { 5278c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGV("LocEngLppConfig - profile: %d", mLppConfig); 5288c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 5298c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline virtual void log() const { 5308c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 5318c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 5328c2d3d5afc51d3f35150f748f263870367771b6fEd Tam}; 5338c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 5348c2d3d5afc51d3f35150f748f263870367771b6fEd Tam// case LOC_ENG_MSG_SET_SENSOR_CONTROL_CONFIG: 5358c2d3d5afc51d3f35150f748f263870367771b6fEd Tamstruct LocEngSensorControlConfig : public LocMsg { 5368c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocEngAdapter* mAdapter; 5378c2d3d5afc51d3f35150f748f263870367771b6fEd Tam const int mSensorsDisabled; 5388c2d3d5afc51d3f35150f748f263870367771b6fEd Tam const int mSensorProvider; 5398c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline LocEngSensorControlConfig(LocEngAdapter* adapter, 5408c2d3d5afc51d3f35150f748f263870367771b6fEd Tam int sensorsDisabled, int sensorProvider) : 5418c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocMsg(), mAdapter(adapter), mSensorsDisabled(sensorsDisabled), 5428c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mSensorProvider(sensorProvider) 5438c2d3d5afc51d3f35150f748f263870367771b6fEd Tam { 5448c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 5458c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 5468c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline virtual void proc() const { 5478c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mAdapter->setSensorControlConfig(mSensorsDisabled, mSensorProvider); 5488c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 5498c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline void locallog() const { 5508c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGV("LocEngSensorControlConfig - Sensors Disabled: %d, Sensor Provider: %d", 5518c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mSensorsDisabled, mSensorProvider); 5528c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 5538c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline virtual void log() const { 5548c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 5558c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 5568c2d3d5afc51d3f35150f748f263870367771b6fEd Tam}; 5578c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 5588c2d3d5afc51d3f35150f748f263870367771b6fEd Tam// case LOC_ENG_MSG_SET_SENSOR_PROPERTIES: 5598c2d3d5afc51d3f35150f748f263870367771b6fEd Tamstruct LocEngSensorProperties : public LocMsg { 5608c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocEngAdapter* mAdapter; 5618c2d3d5afc51d3f35150f748f263870367771b6fEd Tam const bool mGyroBiasVarianceRandomWalkValid; 5628c2d3d5afc51d3f35150f748f263870367771b6fEd Tam const float mGyroBiasVarianceRandomWalk; 5638c2d3d5afc51d3f35150f748f263870367771b6fEd Tam const bool mAccelRandomWalkValid; 5648c2d3d5afc51d3f35150f748f263870367771b6fEd Tam const float mAccelRandomWalk; 5658c2d3d5afc51d3f35150f748f263870367771b6fEd Tam const bool mAngleRandomWalkValid; 5668c2d3d5afc51d3f35150f748f263870367771b6fEd Tam const float mAngleRandomWalk; 5678c2d3d5afc51d3f35150f748f263870367771b6fEd Tam const bool mRateRandomWalkValid; 5688c2d3d5afc51d3f35150f748f263870367771b6fEd Tam const float mRateRandomWalk; 5698c2d3d5afc51d3f35150f748f263870367771b6fEd Tam const bool mVelocityRandomWalkValid; 5708c2d3d5afc51d3f35150f748f263870367771b6fEd Tam const float mVelocityRandomWalk; 5718c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline LocEngSensorProperties(LocEngAdapter* adapter, 5728c2d3d5afc51d3f35150f748f263870367771b6fEd Tam bool gyroBiasRandomWalk_valid, 5738c2d3d5afc51d3f35150f748f263870367771b6fEd Tam float gyroBiasRandomWalk, 5748c2d3d5afc51d3f35150f748f263870367771b6fEd Tam bool accelRandomWalk_valid, 5758c2d3d5afc51d3f35150f748f263870367771b6fEd Tam float accelRandomWalk, 5768c2d3d5afc51d3f35150f748f263870367771b6fEd Tam bool angleRandomWalk_valid, 5778c2d3d5afc51d3f35150f748f263870367771b6fEd Tam float angleRandomWalk, 5788c2d3d5afc51d3f35150f748f263870367771b6fEd Tam bool rateRandomWalk_valid, 5798c2d3d5afc51d3f35150f748f263870367771b6fEd Tam float rateRandomWalk, 5808c2d3d5afc51d3f35150f748f263870367771b6fEd Tam bool velocityRandomWalk_valid, 5818c2d3d5afc51d3f35150f748f263870367771b6fEd Tam float velocityRandomWalk) : 5828c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocMsg(), mAdapter(adapter), 5838c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mGyroBiasVarianceRandomWalkValid(gyroBiasRandomWalk_valid), 5848c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mGyroBiasVarianceRandomWalk(gyroBiasRandomWalk), 5858c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mAccelRandomWalkValid(accelRandomWalk_valid), 5868c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mAccelRandomWalk(accelRandomWalk), 5878c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mAngleRandomWalkValid(angleRandomWalk_valid), 5888c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mAngleRandomWalk(angleRandomWalk), 5898c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mRateRandomWalkValid(rateRandomWalk_valid), 5908c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mRateRandomWalk(rateRandomWalk), 5918c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mVelocityRandomWalkValid(velocityRandomWalk_valid), 5928c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mVelocityRandomWalk(velocityRandomWalk) 5938c2d3d5afc51d3f35150f748f263870367771b6fEd Tam { 5948c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 5958c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 5968c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline virtual void proc() const { 5978c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mAdapter->setSensorProperties(mGyroBiasVarianceRandomWalkValid, 5988c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mGyroBiasVarianceRandomWalk, 5998c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mAccelRandomWalkValid, 6008c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mAccelRandomWalk, 6018c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mAngleRandomWalkValid, 6028c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mAngleRandomWalk, 6038c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mRateRandomWalkValid, 6048c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mRateRandomWalk, 6058c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mVelocityRandomWalkValid, 6068c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mVelocityRandomWalk); 6078c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 6088c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline void locallog() const { 6098c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGV("Sensor properties validity, Gyro Random walk: %d " 6108c2d3d5afc51d3f35150f748f263870367771b6fEd Tam "Accel Random Walk: %d " 6118c2d3d5afc51d3f35150f748f263870367771b6fEd Tam "Angle Random Walk: %d Rate Random Walk: %d " 6128c2d3d5afc51d3f35150f748f263870367771b6fEd Tam "Velocity Random Walk: %d\n" 6138c2d3d5afc51d3f35150f748f263870367771b6fEd Tam "Sensor properties, Gyro Random walk: %f " 6148c2d3d5afc51d3f35150f748f263870367771b6fEd Tam "Accel Random Walk: %f " 6158c2d3d5afc51d3f35150f748f263870367771b6fEd Tam "Angle Random Walk: %f Rate Random Walk: %f " 6168c2d3d5afc51d3f35150f748f263870367771b6fEd Tam "Velocity Random Walk: %f", 6178c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mGyroBiasVarianceRandomWalkValid, 6188c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mAccelRandomWalkValid, 6198c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mAngleRandomWalkValid, 6208c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mRateRandomWalkValid, 6218c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mVelocityRandomWalkValid, 6228c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mGyroBiasVarianceRandomWalk, 6238c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mAccelRandomWalk, 6248c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mAngleRandomWalk, 6258c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mRateRandomWalk, 6268c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mVelocityRandomWalk 6278c2d3d5afc51d3f35150f748f263870367771b6fEd Tam ); 6288c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 6298c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline virtual void log() const { 6308c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 6318c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 6328c2d3d5afc51d3f35150f748f263870367771b6fEd Tam}; 6338c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 6348c2d3d5afc51d3f35150f748f263870367771b6fEd Tam// case LOC_ENG_MSG_SET_SENSOR_PERF_CONTROL_CONFIG: 6358c2d3d5afc51d3f35150f748f263870367771b6fEd Tamstruct LocEngSensorPerfControlConfig : public LocMsg { 6368c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocEngAdapter* mAdapter; 6378c2d3d5afc51d3f35150f748f263870367771b6fEd Tam const int mControlMode; 6388c2d3d5afc51d3f35150f748f263870367771b6fEd Tam const int mAccelSamplesPerBatch; 6398c2d3d5afc51d3f35150f748f263870367771b6fEd Tam const int mAccelBatchesPerSec; 6408c2d3d5afc51d3f35150f748f263870367771b6fEd Tam const int mGyroSamplesPerBatch; 6418c2d3d5afc51d3f35150f748f263870367771b6fEd Tam const int mGyroBatchesPerSec; 6428c2d3d5afc51d3f35150f748f263870367771b6fEd Tam const int mAccelSamplesPerBatchHigh; 6438c2d3d5afc51d3f35150f748f263870367771b6fEd Tam const int mAccelBatchesPerSecHigh; 6448c2d3d5afc51d3f35150f748f263870367771b6fEd Tam const int mGyroSamplesPerBatchHigh; 6458c2d3d5afc51d3f35150f748f263870367771b6fEd Tam const int mGyroBatchesPerSecHigh; 6468c2d3d5afc51d3f35150f748f263870367771b6fEd Tam const int mAlgorithmConfig; 6478c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline LocEngSensorPerfControlConfig(LocEngAdapter* adapter, 6488c2d3d5afc51d3f35150f748f263870367771b6fEd Tam int controlMode, 6498c2d3d5afc51d3f35150f748f263870367771b6fEd Tam int accelSamplesPerBatch, 6508c2d3d5afc51d3f35150f748f263870367771b6fEd Tam int accelBatchesPerSec, 6518c2d3d5afc51d3f35150f748f263870367771b6fEd Tam int gyroSamplesPerBatch, 6528c2d3d5afc51d3f35150f748f263870367771b6fEd Tam int gyroBatchesPerSec, 6538c2d3d5afc51d3f35150f748f263870367771b6fEd Tam int accelSamplesPerBatchHigh, 6548c2d3d5afc51d3f35150f748f263870367771b6fEd Tam int accelBatchesPerSecHigh, 6558c2d3d5afc51d3f35150f748f263870367771b6fEd Tam int gyroSamplesPerBatchHigh, 6568c2d3d5afc51d3f35150f748f263870367771b6fEd Tam int gyroBatchesPerSecHigh, 6578c2d3d5afc51d3f35150f748f263870367771b6fEd Tam int algorithmConfig) : 6588c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocMsg(), mAdapter(adapter), 6598c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mControlMode(controlMode), 6608c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mAccelSamplesPerBatch(accelSamplesPerBatch), 6618c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mAccelBatchesPerSec(accelBatchesPerSec), 6628c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mGyroSamplesPerBatch(gyroSamplesPerBatch), 6638c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mGyroBatchesPerSec(gyroBatchesPerSec), 6648c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mAccelSamplesPerBatchHigh(accelSamplesPerBatchHigh), 6658c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mAccelBatchesPerSecHigh(accelBatchesPerSecHigh), 6668c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mGyroSamplesPerBatchHigh(gyroSamplesPerBatchHigh), 6678c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mGyroBatchesPerSecHigh(gyroBatchesPerSecHigh), 6688c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mAlgorithmConfig(algorithmConfig) 6698c2d3d5afc51d3f35150f748f263870367771b6fEd Tam { 6708c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 6718c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 6728c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline virtual void proc() const { 6738c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mAdapter->setSensorPerfControlConfig(mControlMode, 6748c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mAccelSamplesPerBatch, 6758c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mAccelBatchesPerSec, 6768c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mGyroSamplesPerBatch, 6778c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mGyroBatchesPerSec, 6788c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mAccelSamplesPerBatchHigh, 6798c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mAccelBatchesPerSecHigh, 6808c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mGyroSamplesPerBatchHigh, 6818c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mGyroBatchesPerSecHigh, 6828c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mAlgorithmConfig); 6838c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 6848c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline void locallog() const { 6858c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGV("Sensor Perf Control Config (performanceControlMode)(%u) " 6868c2d3d5afc51d3f35150f748f263870367771b6fEd Tam "accel(#smp,#batches) (%u,%u) " 6878c2d3d5afc51d3f35150f748f263870367771b6fEd Tam "gyro(#smp,#batches) (%u,%u), " 6888c2d3d5afc51d3f35150f748f263870367771b6fEd Tam "accel_high(#smp,#batches) (%u,%u) " 6898c2d3d5afc51d3f35150f748f263870367771b6fEd Tam "gyro_high(#smp,#batches) (%u,%u), " 6908c2d3d5afc51d3f35150f748f263870367771b6fEd Tam "algorithmConfig(%u)\n", 6918c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mControlMode, 6928c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mAccelSamplesPerBatch, mAccelBatchesPerSec, 6938c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mGyroSamplesPerBatch, mGyroBatchesPerSec, 6948c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mAccelSamplesPerBatchHigh, mAccelBatchesPerSecHigh, 6958c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mGyroSamplesPerBatchHigh, mGyroBatchesPerSecHigh, 6968c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mAlgorithmConfig); 6978c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 6988c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline virtual void log() const { 6998c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 7008c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 7018c2d3d5afc51d3f35150f748f263870367771b6fEd Tam}; 7028c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 7038c2d3d5afc51d3f35150f748f263870367771b6fEd Tam// case LOC_ENG_MSG_EXT_POWER_CONFIG: 7048c2d3d5afc51d3f35150f748f263870367771b6fEd Tamstruct LocEngExtPowerConfig : public LocMsg { 7058c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocEngAdapter* mAdapter; 7068c2d3d5afc51d3f35150f748f263870367771b6fEd Tam const int mIsBatteryCharging; 7078c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline LocEngExtPowerConfig(LocEngAdapter* adapter, 7088c2d3d5afc51d3f35150f748f263870367771b6fEd Tam int isBatteryCharging) : 7098c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocMsg(), mAdapter(adapter), 7108c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mIsBatteryCharging(isBatteryCharging) 7118c2d3d5afc51d3f35150f748f263870367771b6fEd Tam { 7128c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 7138c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 7148c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline virtual void proc() const { 7158c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mAdapter->setExtPowerConfig(mIsBatteryCharging); 7168c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 7178c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline void locallog() const { 7188c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGV("LocEngExtPowerConfig - isBatteryCharging: %d", 7198c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mIsBatteryCharging); 7208c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 7218c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline virtual void log() const { 7228c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 7238c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 7248c2d3d5afc51d3f35150f748f263870367771b6fEd Tam}; 7258c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 7268c2d3d5afc51d3f35150f748f263870367771b6fEd Tam// case LOC_ENG_MSG_REPORT_POSITION: 7278c2d3d5afc51d3f35150f748f263870367771b6fEd TamLocEngReportPosition::LocEngReportPosition(LocAdapterBase* adapter, 7288c2d3d5afc51d3f35150f748f263870367771b6fEd Tam UlpLocation &loc, 7298c2d3d5afc51d3f35150f748f263870367771b6fEd Tam GpsLocationExtended &locExtended, 7308c2d3d5afc51d3f35150f748f263870367771b6fEd Tam void* locExt, 7318c2d3d5afc51d3f35150f748f263870367771b6fEd Tam enum loc_sess_status st, 7328c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocPosTechMask technology) : 7338c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocMsg(), mAdapter(adapter), mLocation(loc), 7348c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mLocationExtended(locExtended), 7358c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mLocationExt(((loc_eng_data_s_type*) 7368c2d3d5afc51d3f35150f748f263870367771b6fEd Tam ((LocEngAdapter*) 7378c2d3d5afc51d3f35150f748f263870367771b6fEd Tam (mAdapter))->getOwner())->location_ext_parser(locExt)), 7388c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mStatus(st), mTechMask(technology) 7398c2d3d5afc51d3f35150f748f263870367771b6fEd Tam{ 7408c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 7418c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 7428c2d3d5afc51d3f35150f748f263870367771b6fEd Tamvoid LocEngReportPosition::proc() const { 7438c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocEngAdapter* adapter = (LocEngAdapter*)mAdapter; 7448c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data_s_type* locEng = (loc_eng_data_s_type*)adapter->getOwner(); 7458c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 7468c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (locEng->mute_session_state != LOC_MUTE_SESS_IN_SESSION) { 7478c2d3d5afc51d3f35150f748f263870367771b6fEd Tam bool reported = false; 7488c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (locEng->location_cb != NULL) { 7498c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (LOC_SESS_FAILURE == mStatus) { 7508c2d3d5afc51d3f35150f748f263870367771b6fEd Tam // in case we want to handle the failure case 7518c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locEng->location_cb(NULL, NULL); 7528c2d3d5afc51d3f35150f748f263870367771b6fEd Tam reported = true; 7538c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 7548c2d3d5afc51d3f35150f748f263870367771b6fEd Tam // what's in the else if is... (line by line) 7558c2d3d5afc51d3f35150f748f263870367771b6fEd Tam // 1. this is a final fix; and 7568c2d3d5afc51d3f35150f748f263870367771b6fEd Tam // 1.1 it is a Satellite fix; or 7578c2d3d5afc51d3f35150f748f263870367771b6fEd Tam // 1.2 it is a sensor fix 7588c2d3d5afc51d3f35150f748f263870367771b6fEd Tam // 2. (must be intermediate fix... implicit) 7598c2d3d5afc51d3f35150f748f263870367771b6fEd Tam // 2.1 we accepte intermediate; and 7608c2d3d5afc51d3f35150f748f263870367771b6fEd Tam // 2.2 it is NOT the case that 7618c2d3d5afc51d3f35150f748f263870367771b6fEd Tam // 2.2.1 there is inaccuracy; and 7628c2d3d5afc51d3f35150f748f263870367771b6fEd Tam // 2.2.2 we care about inaccuracy; and 7638c2d3d5afc51d3f35150f748f263870367771b6fEd Tam // 2.2.3 the inaccuracy exceeds our tolerance 7648c2d3d5afc51d3f35150f748f263870367771b6fEd Tam else if ((LOC_SESS_SUCCESS == mStatus && 7658c2d3d5afc51d3f35150f748f263870367771b6fEd Tam ((LOC_POS_TECH_MASK_SATELLITE | 7668c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_POS_TECH_MASK_SENSORS | 7678c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_POS_TECH_MASK_HYBRID) & 7688c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mTechMask)) || 7698c2d3d5afc51d3f35150f748f263870367771b6fEd Tam (LOC_SESS_INTERMEDIATE == locEng->intermediateFix && 7708c2d3d5afc51d3f35150f748f263870367771b6fEd Tam !((mLocation.gpsLocation.flags & 7718c2d3d5afc51d3f35150f748f263870367771b6fEd Tam GPS_LOCATION_HAS_ACCURACY) && 7728c2d3d5afc51d3f35150f748f263870367771b6fEd Tam (gps_conf.ACCURACY_THRES != 0) && 7738c2d3d5afc51d3f35150f748f263870367771b6fEd Tam (mLocation.gpsLocation.accuracy > 7748c2d3d5afc51d3f35150f748f263870367771b6fEd Tam gps_conf.ACCURACY_THRES)))) { 7758c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locEng->location_cb((UlpLocation*)&(mLocation), 7768c2d3d5afc51d3f35150f748f263870367771b6fEd Tam (void*)mLocationExt); 7778c2d3d5afc51d3f35150f748f263870367771b6fEd Tam reported = true; 7788c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 7798c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 7808c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 7818c2d3d5afc51d3f35150f748f263870367771b6fEd Tam // if we have reported this fix 7828c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (reported && 7838c2d3d5afc51d3f35150f748f263870367771b6fEd Tam // and if this is a singleshot 7848c2d3d5afc51d3f35150f748f263870367771b6fEd Tam GPS_POSITION_RECURRENCE_SINGLE == 7858c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locEng->adapter->getPositionMode().recurrence) { 7868c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (LOC_SESS_INTERMEDIATE == mStatus) { 7878c2d3d5afc51d3f35150f748f263870367771b6fEd Tam // modem could be still working for a final fix, 7888c2d3d5afc51d3f35150f748f263870367771b6fEd Tam // although we no longer need it. So stopFix(). 7898c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locEng->adapter->stopFix(); 7908c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 7918c2d3d5afc51d3f35150f748f263870367771b6fEd Tam // turn off the session flag. 7928c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locEng->adapter->setInSession(false); 7938c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 7948c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 7958c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (locEng->generateNmea && 7968c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mLocation.position_source == ULP_LOCATION_IS_FROM_GNSS && 7978c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mTechMask & (LOC_POS_TECH_MASK_SATELLITE | 7988c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_POS_TECH_MASK_SENSORS | 7998c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_POS_TECH_MASK_HYBRID)) 8008c2d3d5afc51d3f35150f748f263870367771b6fEd Tam { 8018c2d3d5afc51d3f35150f748f263870367771b6fEd Tam unsigned char generate_nmea = reported && 8028c2d3d5afc51d3f35150f748f263870367771b6fEd Tam (mStatus != LOC_SESS_FAILURE); 8038c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_nmea_generate_pos(locEng, mLocation, mLocationExtended, 8048c2d3d5afc51d3f35150f748f263870367771b6fEd Tam generate_nmea); 8058c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 8068c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 8078c2d3d5afc51d3f35150f748f263870367771b6fEd Tam // Free the allocated memory for rawData 8088c2d3d5afc51d3f35150f748f263870367771b6fEd Tam UlpLocation* gp = (UlpLocation*)&(mLocation); 8098c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (gp != NULL && gp->rawData != NULL) 8108c2d3d5afc51d3f35150f748f263870367771b6fEd Tam { 8118c2d3d5afc51d3f35150f748f263870367771b6fEd Tam delete (char*)gp->rawData; 8128c2d3d5afc51d3f35150f748f263870367771b6fEd Tam gp->rawData = NULL; 8138c2d3d5afc51d3f35150f748f263870367771b6fEd Tam gp->rawDataSize = 0; 8148c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 8158c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 8168c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 8178c2d3d5afc51d3f35150f748f263870367771b6fEd Tamvoid LocEngReportPosition::locallog() const { 8188c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGV("LocEngReportPosition"); 8198c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 8208c2d3d5afc51d3f35150f748f263870367771b6fEd Tamvoid LocEngReportPosition::log() const { 8218c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 8228c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 8238c2d3d5afc51d3f35150f748f263870367771b6fEd Tamvoid LocEngReportPosition::send() const { 8248c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mAdapter->sendMsg(this); 8258c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 8268c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 8278c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 8288c2d3d5afc51d3f35150f748f263870367771b6fEd Tam// case LOC_ENG_MSG_REPORT_SV: 8298c2d3d5afc51d3f35150f748f263870367771b6fEd TamLocEngReportSv::LocEngReportSv(LocAdapterBase* adapter, 8308c2d3d5afc51d3f35150f748f263870367771b6fEd Tam GpsSvStatus &sv, 8318c2d3d5afc51d3f35150f748f263870367771b6fEd Tam GpsLocationExtended &locExtended, 8328c2d3d5afc51d3f35150f748f263870367771b6fEd Tam void* svExt) : 8338c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocMsg(), mAdapter(adapter), mSvStatus(sv), 8348c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mLocationExtended(locExtended), 8358c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mSvExt(((loc_eng_data_s_type*) 8368c2d3d5afc51d3f35150f748f263870367771b6fEd Tam ((LocEngAdapter*) 8378c2d3d5afc51d3f35150f748f263870367771b6fEd Tam (mAdapter))->getOwner())->sv_ext_parser(svExt)) 8388c2d3d5afc51d3f35150f748f263870367771b6fEd Tam{ 8398c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 8408c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 8418c2d3d5afc51d3f35150f748f263870367771b6fEd Tamvoid LocEngReportSv::proc() const { 8428c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocEngAdapter* adapter = (LocEngAdapter*)mAdapter; 8438c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data_s_type* locEng = (loc_eng_data_s_type*)adapter->getOwner(); 8448c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 8458c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (locEng->mute_session_state != LOC_MUTE_SESS_IN_SESSION) 8468c2d3d5afc51d3f35150f748f263870367771b6fEd Tam { 8478c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (locEng->sv_status_cb != NULL) { 8488c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locEng->sv_status_cb((GpsSvStatus*)&(mSvStatus), 8498c2d3d5afc51d3f35150f748f263870367771b6fEd Tam (void*)mSvExt); 8508c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 8518c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 8528c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (locEng->generateNmea) 8538c2d3d5afc51d3f35150f748f263870367771b6fEd Tam { 8548c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_nmea_generate_sv(locEng, mSvStatus, mLocationExtended); 8558c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 8568c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 8578c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 8588c2d3d5afc51d3f35150f748f263870367771b6fEd Tamvoid LocEngReportSv::locallog() const { 8598c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGV("%s:%d] LocEngReportSv",__func__, __LINE__); 8608c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 8618c2d3d5afc51d3f35150f748f263870367771b6fEd Taminline void LocEngReportSv::log() const { 8628c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 8638c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 8648c2d3d5afc51d3f35150f748f263870367771b6fEd Tamvoid LocEngReportSv::send() const { 8658c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mAdapter->sendMsg(this); 8668c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 8678c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 8688c2d3d5afc51d3f35150f748f263870367771b6fEd Tam// case LOC_ENG_MSG_REPORT_STATUS: 8698c2d3d5afc51d3f35150f748f263870367771b6fEd TamLocEngReportStatus::LocEngReportStatus(LocAdapterBase* adapter, 8708c2d3d5afc51d3f35150f748f263870367771b6fEd Tam GpsStatusValue engineStatus) : 8718c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocMsg(), mAdapter(adapter), mStatus(engineStatus) 8728c2d3d5afc51d3f35150f748f263870367771b6fEd Tam{ 8738c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 8748c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 8758c2d3d5afc51d3f35150f748f263870367771b6fEd Taminline void LocEngReportStatus::proc() const 8768c2d3d5afc51d3f35150f748f263870367771b6fEd Tam{ 8778c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocEngAdapter* adapter = (LocEngAdapter*)mAdapter; 8788c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data_s_type* locEng = (loc_eng_data_s_type*)adapter->getOwner(); 8798c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 8808c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_report_status(*locEng, mStatus); 8818c2d3d5afc51d3f35150f748f263870367771b6fEd Tam update_aiding_data_for_deletion(*locEng); 8828c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 8838c2d3d5afc51d3f35150f748f263870367771b6fEd Taminline void LocEngReportStatus::locallog() const { 8848c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGV("LocEngReportStatus"); 8858c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 8868c2d3d5afc51d3f35150f748f263870367771b6fEd Taminline void LocEngReportStatus::log() const { 8878c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 8888c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 8898c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 8908c2d3d5afc51d3f35150f748f263870367771b6fEd Tam// case LOC_ENG_MSG_REPORT_NMEA: 8918c2d3d5afc51d3f35150f748f263870367771b6fEd TamLocEngReportNmea::LocEngReportNmea(void* locEng, 8928c2d3d5afc51d3f35150f748f263870367771b6fEd Tam const char* data, int len) : 8938c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocMsg(), mLocEng(locEng), mNmea(new char[len]), mLen(len) 8948c2d3d5afc51d3f35150f748f263870367771b6fEd Tam{ 8958c2d3d5afc51d3f35150f748f263870367771b6fEd Tam memcpy((void*)mNmea, (void*)data, len); 8968c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 8978c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 8988c2d3d5afc51d3f35150f748f263870367771b6fEd Tamvoid LocEngReportNmea::proc() const { 8998c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data_s_type* locEng = (loc_eng_data_s_type*) mLocEng; 9008c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 9018c2d3d5afc51d3f35150f748f263870367771b6fEd Tam struct timeval tv; 9028c2d3d5afc51d3f35150f748f263870367771b6fEd Tam gettimeofday(&tv, (struct timezone *) NULL); 9038c2d3d5afc51d3f35150f748f263870367771b6fEd Tam int64_t now = tv.tv_sec * 1000LL + tv.tv_usec / 1000; 9048c2d3d5afc51d3f35150f748f263870367771b6fEd Tam CALLBACK_LOG_CALLFLOW("nmea_cb", %d, mLen); 9058c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 9068c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (locEng->nmea_cb != NULL) 9078c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locEng->nmea_cb(now, mNmea, mLen); 9088c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 9098c2d3d5afc51d3f35150f748f263870367771b6fEd Taminline void LocEngReportNmea::locallog() const { 9108c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGV("LocEngReportNmea"); 9118c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 9128c2d3d5afc51d3f35150f748f263870367771b6fEd Taminline void LocEngReportNmea::log() const { 9138c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 9148c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 9158c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 9168c2d3d5afc51d3f35150f748f263870367771b6fEd Tam// case LOC_ENG_MSG_REPORT_XTRA_SERVER: 9178c2d3d5afc51d3f35150f748f263870367771b6fEd TamLocEngReportXtraServer::LocEngReportXtraServer(void* locEng, 9188c2d3d5afc51d3f35150f748f263870367771b6fEd Tam const char *url1, 9198c2d3d5afc51d3f35150f748f263870367771b6fEd Tam const char *url2, 9208c2d3d5afc51d3f35150f748f263870367771b6fEd Tam const char *url3, 9218c2d3d5afc51d3f35150f748f263870367771b6fEd Tam const int maxlength) : 9228c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocMsg(), mLocEng(locEng), mMaxLen(maxlength), 9238c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mServers(new char[3*(mMaxLen+1)]) 9248c2d3d5afc51d3f35150f748f263870367771b6fEd Tam{ 9258c2d3d5afc51d3f35150f748f263870367771b6fEd Tam char * cptr = mServers; 9268c2d3d5afc51d3f35150f748f263870367771b6fEd Tam memset(mServers, 0, 3*(mMaxLen+1)); 9278c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 9288c2d3d5afc51d3f35150f748f263870367771b6fEd Tam // Override modem URLs with uncommented gps.conf urls 9298c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if( gps_conf.XTRA_SERVER_1[0] != '\0' ) { 9308c2d3d5afc51d3f35150f748f263870367771b6fEd Tam url1 = &gps_conf.XTRA_SERVER_1[0]; 9318c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 9328c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if( gps_conf.XTRA_SERVER_2[0] != '\0' ) { 9338c2d3d5afc51d3f35150f748f263870367771b6fEd Tam url2 = &gps_conf.XTRA_SERVER_2[0]; 9348c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 9358c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if( gps_conf.XTRA_SERVER_3[0] != '\0' ) { 9368c2d3d5afc51d3f35150f748f263870367771b6fEd Tam url3 = &gps_conf.XTRA_SERVER_3[0]; 9378c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 9388c2d3d5afc51d3f35150f748f263870367771b6fEd Tam // copy non xtra1.gpsonextra.net URLs into the forwarding buffer. 9398c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if( NULL == strcasestr(url1, XTRA1_GPSONEXTRA) ) { 9408c2d3d5afc51d3f35150f748f263870367771b6fEd Tam strlcpy(cptr, url1, mMaxLen + 1); 9418c2d3d5afc51d3f35150f748f263870367771b6fEd Tam cptr += mMaxLen + 1; 9428c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 9438c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if( NULL == strcasestr(url2, XTRA1_GPSONEXTRA) ) { 9448c2d3d5afc51d3f35150f748f263870367771b6fEd Tam strlcpy(cptr, url2, mMaxLen + 1); 9458c2d3d5afc51d3f35150f748f263870367771b6fEd Tam cptr += mMaxLen + 1; 9468c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 9478c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if( NULL == strcasestr(url3, XTRA1_GPSONEXTRA) ) { 9488c2d3d5afc51d3f35150f748f263870367771b6fEd Tam strlcpy(cptr, url3, mMaxLen + 1); 9498c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 9508c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 9518c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 9528c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 9538c2d3d5afc51d3f35150f748f263870367771b6fEd Tamvoid LocEngReportXtraServer::proc() const { 9548c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_xtra_data_s_type* locEngXtra = 9558c2d3d5afc51d3f35150f748f263870367771b6fEd Tam &(((loc_eng_data_s_type*)mLocEng)->xtra_module_data); 9568c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 9578c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (locEngXtra->report_xtra_server_cb != NULL) { 9588c2d3d5afc51d3f35150f748f263870367771b6fEd Tam CALLBACK_LOG_CALLFLOW("report_xtra_server_cb", %s, mServers); 9598c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locEngXtra->report_xtra_server_cb(mServers, 9608c2d3d5afc51d3f35150f748f263870367771b6fEd Tam &(mServers[mMaxLen+1]), 9618c2d3d5afc51d3f35150f748f263870367771b6fEd Tam &(mServers[(mMaxLen+1)<<1])); 9628c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } else { 9638c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGE("Callback function for request xtra is NULL"); 9648c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 9658c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 9668c2d3d5afc51d3f35150f748f263870367771b6fEd Taminline void LocEngReportXtraServer::locallog() const { 9678c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGV("LocEngReportXtraServers: server1: %s\n server2: %s\n" 9688c2d3d5afc51d3f35150f748f263870367771b6fEd Tam " server3: %s\n", 9698c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mServers, &mServers[mMaxLen+1], &mServers[(mMaxLen+1)<<1]); 9708c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 9718c2d3d5afc51d3f35150f748f263870367771b6fEd Taminline void LocEngReportXtraServer::log() const { 9728c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 9738c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 9748c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 9758c2d3d5afc51d3f35150f748f263870367771b6fEd Tam// case LOC_ENG_MSG_REQUEST_BIT: 9768c2d3d5afc51d3f35150f748f263870367771b6fEd Tam// case LOC_ENG_MSG_RELEASE_BIT: 9778c2d3d5afc51d3f35150f748f263870367771b6fEd TamLocEngReqRelBIT::LocEngReqRelBIT(void* locEng, AGpsExtType type, 9788c2d3d5afc51d3f35150f748f263870367771b6fEd Tam int ipv4, char* ipv6, bool isReq) : 9798c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocMsg(), mLocEng(locEng), mType(type), mIPv4Addr(ipv4), 9808c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mIPv6Addr(ipv6 ? new char[16] : NULL), mIsReq(isReq) { 9818c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (NULL != ipv6) 9828c2d3d5afc51d3f35150f748f263870367771b6fEd Tam memcpy(mIPv6Addr, ipv6, 16); 9838c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 9848c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 9858c2d3d5afc51d3f35150f748f263870367771b6fEd Taminline LocEngReqRelBIT::~LocEngReqRelBIT() { 9868c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (mIPv6Addr) { 9878c2d3d5afc51d3f35150f748f263870367771b6fEd Tam delete[] mIPv6Addr; 9888c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 9898c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 9908c2d3d5afc51d3f35150f748f263870367771b6fEd Tamvoid LocEngReqRelBIT::proc() const { 9918c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data_s_type* locEng = (loc_eng_data_s_type*)mLocEng; 9928c2d3d5afc51d3f35150f748f263870367771b6fEd Tam BITSubscriber s(getAgpsStateMachine(*locEng, mType), 9938c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mIPv4Addr, mIPv6Addr); 9948c2d3d5afc51d3f35150f748f263870367771b6fEd Tam AgpsStateMachine* sm = (AgpsStateMachine*)s.mStateMachine; 9958c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 9968c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (mIsReq) { 9978c2d3d5afc51d3f35150f748f263870367771b6fEd Tam sm->subscribeRsrc((Subscriber*)&s); 9988c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } else { 9998c2d3d5afc51d3f35150f748f263870367771b6fEd Tam sm->unsubscribeRsrc((Subscriber*)&s); 10008c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 10018c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 10028c2d3d5afc51d3f35150f748f263870367771b6fEd Taminline void LocEngReqRelBIT::locallog() const { 10038c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGV("LocEngRequestBIT - ipv4: %d.%d.%d.%d, ipv6: %s", 10048c2d3d5afc51d3f35150f748f263870367771b6fEd Tam (unsigned char)mIPv4Addr, 10058c2d3d5afc51d3f35150f748f263870367771b6fEd Tam (unsigned char)(mIPv4Addr>>8), 10068c2d3d5afc51d3f35150f748f263870367771b6fEd Tam (unsigned char)(mIPv4Addr>>16), 10078c2d3d5afc51d3f35150f748f263870367771b6fEd Tam (unsigned char)(mIPv4Addr>>24), 10088c2d3d5afc51d3f35150f748f263870367771b6fEd Tam NULL != mIPv6Addr ? mIPv6Addr : ""); 10098c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 10108c2d3d5afc51d3f35150f748f263870367771b6fEd Taminline void LocEngReqRelBIT::log() const { 10118c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 10128c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 10138c2d3d5afc51d3f35150f748f263870367771b6fEd Tamvoid LocEngReqRelBIT::send() const { 10148c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data_s_type* locEng = (loc_eng_data_s_type*)mLocEng; 10158c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locEng->adapter->sendMsg(this); 10168c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 10178c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 10188c2d3d5afc51d3f35150f748f263870367771b6fEd Tam// case LOC_ENG_MSG_RELEASE_BIT: 10198c2d3d5afc51d3f35150f748f263870367771b6fEd Tamstruct LocEngReleaseBIT : public LocMsg { 10208c2d3d5afc51d3f35150f748f263870367771b6fEd Tam const BITSubscriber mSubscriber; 10218c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline LocEngReleaseBIT(const AgpsStateMachine* stateMachine, 10228c2d3d5afc51d3f35150f748f263870367771b6fEd Tam unsigned int ipv4, char* ipv6) : 10238c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocMsg(), 10248c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mSubscriber(stateMachine, ipv4, ipv6) 10258c2d3d5afc51d3f35150f748f263870367771b6fEd Tam { 10268c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 10278c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 10288c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline virtual void proc() const 10298c2d3d5afc51d3f35150f748f263870367771b6fEd Tam { 10308c2d3d5afc51d3f35150f748f263870367771b6fEd Tam AgpsStateMachine* sm = (AgpsStateMachine*)mSubscriber.mStateMachine; 10318c2d3d5afc51d3f35150f748f263870367771b6fEd Tam sm->unsubscribeRsrc((Subscriber*)&mSubscriber); 10328c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 10338c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline void locallog() const { 10348c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGV("LocEngReleaseBIT - ipv4: %d.%d.%d.%d, ipv6: %s", 10358c2d3d5afc51d3f35150f748f263870367771b6fEd Tam (unsigned char)(mSubscriber.ID>>24), 10368c2d3d5afc51d3f35150f748f263870367771b6fEd Tam (unsigned char)(mSubscriber.ID>>16), 10378c2d3d5afc51d3f35150f748f263870367771b6fEd Tam (unsigned char)(mSubscriber.ID>>8), 10388c2d3d5afc51d3f35150f748f263870367771b6fEd Tam (unsigned char)mSubscriber.ID, 10398c2d3d5afc51d3f35150f748f263870367771b6fEd Tam NULL != mSubscriber.mIPv6Addr ? mSubscriber.mIPv6Addr : ""); 10408c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 10418c2d3d5afc51d3f35150f748f263870367771b6fEd Tam virtual void log() const { 10428c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 10438c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 10448c2d3d5afc51d3f35150f748f263870367771b6fEd Tam}; 10458c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 10468c2d3d5afc51d3f35150f748f263870367771b6fEd Tam// LocEngSuplEsOpened 10478c2d3d5afc51d3f35150f748f263870367771b6fEd TamLocEngSuplEsOpened::LocEngSuplEsOpened(void* locEng) : 10488c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocMsg(), mLocEng(locEng) { 10498c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 10508c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 10518c2d3d5afc51d3f35150f748f263870367771b6fEd Tamvoid LocEngSuplEsOpened::proc() const { 10528c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data_s_type* locEng = (loc_eng_data_s_type*)mLocEng; 10538c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (locEng->ds_nif) { 10548c2d3d5afc51d3f35150f748f263870367771b6fEd Tam AgpsStateMachine* sm = locEng->ds_nif; 10558c2d3d5afc51d3f35150f748f263870367771b6fEd Tam sm->onRsrcEvent(RSRC_GRANTED); 10568c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 10578c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 10588c2d3d5afc51d3f35150f748f263870367771b6fEd Tamvoid LocEngSuplEsOpened::locallog() const { 10598c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGV("LocEngSuplEsOpened"); 10608c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 10618c2d3d5afc51d3f35150f748f263870367771b6fEd Tamvoid LocEngSuplEsOpened::log() const { 10628c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 10638c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 10648c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 10658c2d3d5afc51d3f35150f748f263870367771b6fEd Tam// LocEngSuplEsClosed 10668c2d3d5afc51d3f35150f748f263870367771b6fEd TamLocEngSuplEsClosed::LocEngSuplEsClosed(void* locEng) : 10678c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocMsg(), mLocEng(locEng) { 10688c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 10698c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 10708c2d3d5afc51d3f35150f748f263870367771b6fEd Tamvoid LocEngSuplEsClosed::proc() const { 10718c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data_s_type* locEng = (loc_eng_data_s_type*)mLocEng; 10728c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (locEng->ds_nif) { 10738c2d3d5afc51d3f35150f748f263870367771b6fEd Tam AgpsStateMachine* sm = locEng->ds_nif; 10748c2d3d5afc51d3f35150f748f263870367771b6fEd Tam sm->onRsrcEvent(RSRC_RELEASED); 10758c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 10768c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 10778c2d3d5afc51d3f35150f748f263870367771b6fEd Tamvoid LocEngSuplEsClosed::locallog() const { 10788c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGV("LocEngSuplEsClosed"); 10798c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 10808c2d3d5afc51d3f35150f748f263870367771b6fEd Tamvoid LocEngSuplEsClosed::log() const { 10818c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 10828c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 10838c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 10848c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 10858c2d3d5afc51d3f35150f748f263870367771b6fEd Tam// case LOC_ENG_MSG_REQUEST_SUPL_ES: 10868c2d3d5afc51d3f35150f748f263870367771b6fEd TamLocEngRequestSuplEs::LocEngRequestSuplEs(void* locEng, int id) : 10878c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocMsg(), mLocEng(locEng), mID(id) { 10888c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 10898c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 10908c2d3d5afc51d3f35150f748f263870367771b6fEd Tamvoid LocEngRequestSuplEs::proc() const { 10918c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data_s_type* locEng = (loc_eng_data_s_type*)mLocEng; 10928c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (locEng->ds_nif) { 10938c2d3d5afc51d3f35150f748f263870367771b6fEd Tam AgpsStateMachine* sm = locEng->ds_nif; 10948c2d3d5afc51d3f35150f748f263870367771b6fEd Tam DSSubscriber s(sm, mID); 10958c2d3d5afc51d3f35150f748f263870367771b6fEd Tam sm->subscribeRsrc((Subscriber*)&s); 10968c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 10978c2d3d5afc51d3f35150f748f263870367771b6fEd Tam else if (locEng->agnss_nif) { 10988c2d3d5afc51d3f35150f748f263870367771b6fEd Tam AgpsStateMachine *sm = locEng->agnss_nif; 10998c2d3d5afc51d3f35150f748f263870367771b6fEd Tam ATLSubscriber s(mID, 11008c2d3d5afc51d3f35150f748f263870367771b6fEd Tam sm, 11018c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locEng->adapter, 11028c2d3d5afc51d3f35150f748f263870367771b6fEd Tam false); 11038c2d3d5afc51d3f35150f748f263870367771b6fEd Tam sm->subscribeRsrc((Subscriber*)&s); 11048c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGD("%s:%d]: Using regular ATL for SUPL ES", __func__, __LINE__); 11058c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 11068c2d3d5afc51d3f35150f748f263870367771b6fEd Tam else { 11078c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locEng->adapter->atlOpenStatus(mID, 0, NULL, -1, -1); 11088c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 11098c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 11108c2d3d5afc51d3f35150f748f263870367771b6fEd Taminline void LocEngRequestSuplEs::locallog() const { 11118c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGV("LocEngRequestSuplEs"); 11128c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 11138c2d3d5afc51d3f35150f748f263870367771b6fEd Taminline void LocEngRequestSuplEs::log() const { 11148c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 11158c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 11168c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 11178c2d3d5afc51d3f35150f748f263870367771b6fEd Tam// case LOC_ENG_MSG_REQUEST_ATL: 11188c2d3d5afc51d3f35150f748f263870367771b6fEd TamLocEngRequestATL::LocEngRequestATL(void* locEng, int id, 11198c2d3d5afc51d3f35150f748f263870367771b6fEd Tam AGpsExtType agps_type) : 11208c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocMsg(), mLocEng(locEng), mID(id), mType(agps_type) { 11218c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 11228c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 11238c2d3d5afc51d3f35150f748f263870367771b6fEd Tamvoid LocEngRequestATL::proc() const { 11248c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data_s_type* locEng = (loc_eng_data_s_type*)mLocEng; 11258c2d3d5afc51d3f35150f748f263870367771b6fEd Tam AgpsStateMachine* sm = (AgpsStateMachine*) 11268c2d3d5afc51d3f35150f748f263870367771b6fEd Tam getAgpsStateMachine(*locEng, mType); 11278c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (sm) { 11288c2d3d5afc51d3f35150f748f263870367771b6fEd Tam ATLSubscriber s(mID, 11298c2d3d5afc51d3f35150f748f263870367771b6fEd Tam sm, 11308c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locEng->adapter, 11318c2d3d5afc51d3f35150f748f263870367771b6fEd Tam AGPS_TYPE_INVALID == mType); 11328c2d3d5afc51d3f35150f748f263870367771b6fEd Tam sm->subscribeRsrc((Subscriber*)&s); 11338c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } else { 11348c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locEng->adapter->atlOpenStatus(mID, 0, NULL, -1, mType); 11358c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 11368c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 11378c2d3d5afc51d3f35150f748f263870367771b6fEd Taminline void LocEngRequestATL::locallog() const { 11388c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGV("LocEngRequestATL"); 11398c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 11408c2d3d5afc51d3f35150f748f263870367771b6fEd Taminline void LocEngRequestATL::log() const { 11418c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 11428c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 11438c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 11448c2d3d5afc51d3f35150f748f263870367771b6fEd Tam// case LOC_ENG_MSG_RELEASE_ATL: 11458c2d3d5afc51d3f35150f748f263870367771b6fEd TamLocEngReleaseATL::LocEngReleaseATL(void* locEng, int id) : 11468c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocMsg(), mLocEng(locEng), mID(id) { 11478c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 11488c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 11498c2d3d5afc51d3f35150f748f263870367771b6fEd Tamvoid LocEngReleaseATL::proc() const { 11508c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data_s_type* locEng = (loc_eng_data_s_type*)mLocEng; 11518c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 11528c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (locEng->agnss_nif) { 11538c2d3d5afc51d3f35150f748f263870367771b6fEd Tam ATLSubscriber s1(mID, locEng->agnss_nif, locEng->adapter, false); 11548c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (locEng->agnss_nif->unsubscribeRsrc((Subscriber*)&s1)) { 11558c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGD("%s:%d]: Unsubscribed from agnss_nif", 11568c2d3d5afc51d3f35150f748f263870367771b6fEd Tam __func__, __LINE__); 11578c2d3d5afc51d3f35150f748f263870367771b6fEd Tam return; 11588c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 11598c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 11608c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 11618c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (locEng->internet_nif) { 11628c2d3d5afc51d3f35150f748f263870367771b6fEd Tam ATLSubscriber s2(mID, locEng->internet_nif, locEng->adapter, false); 11638c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (locEng->internet_nif->unsubscribeRsrc((Subscriber*)&s2)) { 11648c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGD("%s:%d]: Unsubscribed from internet_nif", 11658c2d3d5afc51d3f35150f748f263870367771b6fEd Tam __func__, __LINE__); 11668c2d3d5afc51d3f35150f748f263870367771b6fEd Tam return; 11678c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 11688c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 11698c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 11708c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (locEng->ds_nif) { 11718c2d3d5afc51d3f35150f748f263870367771b6fEd Tam DSSubscriber s3(locEng->ds_nif, mID); 11728c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (locEng->ds_nif->unsubscribeRsrc((Subscriber*)&s3)) { 11738c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGD("%s:%d]: Unsubscribed from ds_nif", 11748c2d3d5afc51d3f35150f748f263870367771b6fEd Tam __func__, __LINE__); 11758c2d3d5afc51d3f35150f748f263870367771b6fEd Tam return; 11768c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 11778c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 11788c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 11798c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGW("%s:%d]: Could not release ATL. " 11808c2d3d5afc51d3f35150f748f263870367771b6fEd Tam "No subscribers found\n", 11818c2d3d5afc51d3f35150f748f263870367771b6fEd Tam __func__, __LINE__); 11828c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locEng->adapter->atlCloseStatus(mID, 0); 11838c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 11848c2d3d5afc51d3f35150f748f263870367771b6fEd Taminline void LocEngReleaseATL::locallog() const { 11858c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGV("LocEngReleaseATL"); 11868c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 11878c2d3d5afc51d3f35150f748f263870367771b6fEd Taminline void LocEngReleaseATL::log() const { 11888c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 11898c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 11908c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 11918c2d3d5afc51d3f35150f748f263870367771b6fEd Tam// case LOC_ENG_MSG_REQUEST_WIFI: 11928c2d3d5afc51d3f35150f748f263870367771b6fEd Tam// case LOC_ENG_MSG_RELEASE_WIFI: 11938c2d3d5afc51d3f35150f748f263870367771b6fEd TamLocEngReqRelWifi::LocEngReqRelWifi(void* locEng, AGpsExtType type, 11948c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_if_req_sender_id_e_type sender_id, 11958c2d3d5afc51d3f35150f748f263870367771b6fEd Tam char* s, char* p, bool isReq) : 11968c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocMsg(), mLocEng(locEng), mType(type), mSenderId(sender_id), 11978c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mSSID(NULL == s ? NULL : new char[SSID_BUF_SIZE]), 11988c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mPassword(NULL == p ? NULL : new char[SSID_BUF_SIZE]), 11998c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mIsReq(isReq) { 12008c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (NULL != s) 12018c2d3d5afc51d3f35150f748f263870367771b6fEd Tam strlcpy(mSSID, s, SSID_BUF_SIZE); 12028c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (NULL != p) 12038c2d3d5afc51d3f35150f748f263870367771b6fEd Tam strlcpy(mPassword, p, SSID_BUF_SIZE); 12048c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 12058c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 12068c2d3d5afc51d3f35150f748f263870367771b6fEd TamLocEngReqRelWifi::~LocEngReqRelWifi() { 12078c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (NULL != mSSID) { 12088c2d3d5afc51d3f35150f748f263870367771b6fEd Tam delete[] mSSID; 12098c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 12108c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (NULL != mPassword) { 12118c2d3d5afc51d3f35150f748f263870367771b6fEd Tam delete[] mPassword; 12128c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 12138c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 12148c2d3d5afc51d3f35150f748f263870367771b6fEd Tamvoid LocEngReqRelWifi::proc() const { 12158c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data_s_type* locEng = (loc_eng_data_s_type*)mLocEng; 12168c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (locEng->wifi_nif) { 12178c2d3d5afc51d3f35150f748f263870367771b6fEd Tam WIFISubscriber s(locEng->wifi_nif, mSSID, mPassword, mSenderId); 12188c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (mIsReq) { 12198c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locEng->wifi_nif->subscribeRsrc((Subscriber*)&s); 12208c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } else { 12218c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locEng->wifi_nif->unsubscribeRsrc((Subscriber*)&s); 12228c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 12238c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } else { 12248c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locEng->adapter->atlOpenStatus(mSenderId, 0, NULL, -1, mType); 12258c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 12268c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 12278c2d3d5afc51d3f35150f748f263870367771b6fEd Taminline void LocEngReqRelWifi::locallog() const { 12288c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGV("%s - senderId: %d, ssid: %s, password: %s", 12298c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mIsReq ? "LocEngRequestWifi" : "LocEngReleaseWifi", 12308c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mSenderId, 12318c2d3d5afc51d3f35150f748f263870367771b6fEd Tam NULL != mSSID ? mSSID : "", 12328c2d3d5afc51d3f35150f748f263870367771b6fEd Tam NULL != mPassword ? mPassword : ""); 12338c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 12348c2d3d5afc51d3f35150f748f263870367771b6fEd Taminline void LocEngReqRelWifi::log() const { 12358c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 12368c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 12378c2d3d5afc51d3f35150f748f263870367771b6fEd Tamvoid LocEngReqRelWifi::send() const { 12388c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data_s_type* locEng = (loc_eng_data_s_type*)mLocEng; 12398c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locEng->adapter->sendMsg(this); 12408c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 12418c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 12428c2d3d5afc51d3f35150f748f263870367771b6fEd Tam// case LOC_ENG_MSG_REQUEST_XTRA_DATA: 12438c2d3d5afc51d3f35150f748f263870367771b6fEd TamLocEngRequestXtra::LocEngRequestXtra(void* locEng) : 12448c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mLocEng(locEng) { 12458c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 12468c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 12478c2d3d5afc51d3f35150f748f263870367771b6fEd Tamvoid LocEngRequestXtra::proc() const 12488c2d3d5afc51d3f35150f748f263870367771b6fEd Tam{ 12498c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_xtra_data_s_type* locEngXtra = 12508c2d3d5afc51d3f35150f748f263870367771b6fEd Tam &(((loc_eng_data_s_type*)mLocEng)->xtra_module_data); 12518c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 12528c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (locEngXtra->download_request_cb != NULL) { 12538c2d3d5afc51d3f35150f748f263870367771b6fEd Tam CALLBACK_LOG_CALLFLOW("download_request_cb", %p, mLocEng); 12548c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locEngXtra->download_request_cb(); 12558c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } else { 12568c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGE("Callback function for request xtra is NULL"); 12578c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 12588c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 12598c2d3d5afc51d3f35150f748f263870367771b6fEd Taminline void LocEngRequestXtra::locallog() const { 12608c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGV("LocEngReqXtra"); 12618c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 12628c2d3d5afc51d3f35150f748f263870367771b6fEd Taminline void LocEngRequestXtra::log() const { 12638c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 12648c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 12658c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 12668c2d3d5afc51d3f35150f748f263870367771b6fEd Tam// case LOC_ENG_MSG_REQUEST_TIME: 12678c2d3d5afc51d3f35150f748f263870367771b6fEd TamLocEngRequestTime::LocEngRequestTime(void* locEng) : 12688c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocMsg(), mLocEng(locEng) 12698c2d3d5afc51d3f35150f748f263870367771b6fEd Tam{ 12708c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 12718c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 12728c2d3d5afc51d3f35150f748f263870367771b6fEd Tamvoid LocEngRequestTime::proc() const { 12738c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data_s_type* locEng = (loc_eng_data_s_type*)mLocEng; 12748c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (gps_conf.CAPABILITIES & GPS_CAPABILITY_ON_DEMAND_TIME) { 12758c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (locEng->request_utc_time_cb != NULL) { 12768c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locEng->request_utc_time_cb(); 12778c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } else { 12788c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGE("Callback function for request time is NULL"); 12798c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 12808c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 12818c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 12828c2d3d5afc51d3f35150f748f263870367771b6fEd Taminline void LocEngRequestTime::locallog() const { 12838c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGV("LocEngReqTime"); 12848c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 12858c2d3d5afc51d3f35150f748f263870367771b6fEd Taminline void LocEngRequestTime::log() const { 12868c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 12878c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 12888c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 12898c2d3d5afc51d3f35150f748f263870367771b6fEd Tam// case LOC_ENG_MSG_DELETE_AIDING_DATA: 12908c2d3d5afc51d3f35150f748f263870367771b6fEd Tamstruct LocEngDelAidData : public LocMsg { 12918c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data_s_type* mLocEng; 12928c2d3d5afc51d3f35150f748f263870367771b6fEd Tam const GpsAidingData mType; 12938c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline LocEngDelAidData(loc_eng_data_s_type* locEng, 12948c2d3d5afc51d3f35150f748f263870367771b6fEd Tam GpsAidingData f) : 12958c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocMsg(), mLocEng(locEng), mType(f) 12968c2d3d5afc51d3f35150f748f263870367771b6fEd Tam { 12978c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 12988c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 12998c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline virtual void proc() const { 13008c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mLocEng->aiding_data_for_deletion = mType; 13018c2d3d5afc51d3f35150f748f263870367771b6fEd Tam update_aiding_data_for_deletion(*mLocEng); 13028c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 13038c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline void locallog() const { 13048c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGV("aiding data msak %d", mType); 13058c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 13068c2d3d5afc51d3f35150f748f263870367771b6fEd Tam virtual void log() const { 13078c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 13088c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 13098c2d3d5afc51d3f35150f748f263870367771b6fEd Tam}; 13108c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 13118c2d3d5afc51d3f35150f748f263870367771b6fEd Tam// case LOC_ENG_MSG_ENABLE_DATA: 13128c2d3d5afc51d3f35150f748f263870367771b6fEd Tamstruct LocEngEnableData : public LocMsg { 13138c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocEngAdapter* mAdapter; 13148c2d3d5afc51d3f35150f748f263870367771b6fEd Tam const int mEnable; 13158c2d3d5afc51d3f35150f748f263870367771b6fEd Tam char* mAPN; 13168c2d3d5afc51d3f35150f748f263870367771b6fEd Tam const int mLen; 13178c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline LocEngEnableData(LocEngAdapter* adapter, 13188c2d3d5afc51d3f35150f748f263870367771b6fEd Tam const char* name, int len, int enable) : 13198c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocMsg(), mAdapter(adapter), 13208c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mEnable(enable), mAPN(NULL), mLen(len) 13218c2d3d5afc51d3f35150f748f263870367771b6fEd Tam { 13228c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (NULL != name) { 13238c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mAPN = new char[len+1]; 13248c2d3d5afc51d3f35150f748f263870367771b6fEd Tam memcpy((void*)mAPN, (void*)name, len); 13258c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mAPN[len] = 0; 13268c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 13278c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 13288c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 13298c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline ~LocEngEnableData() { 13308c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (NULL != mAPN) { 13318c2d3d5afc51d3f35150f748f263870367771b6fEd Tam delete[] mAPN; 13328c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 13338c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 13348c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline virtual void proc() const { 13358c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mAdapter->enableData(mEnable); 13368c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (NULL != mAPN) { 13378c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mAdapter->setAPN(mAPN, mLen); 13388c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 13398c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 13408c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline void locallog() const { 13418c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGV("apn: %s\n enable: %d", 13428c2d3d5afc51d3f35150f748f263870367771b6fEd Tam (NULL == mAPN) ? "NULL" : mAPN, mEnable); 13438c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 13448c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline virtual void log() const { 13458c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 13468c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 13478c2d3d5afc51d3f35150f748f263870367771b6fEd Tam}; 13488c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 13498c2d3d5afc51d3f35150f748f263870367771b6fEd Tam// case LOC_ENG_MSG_INJECT_XTRA_DATA: 13508c2d3d5afc51d3f35150f748f263870367771b6fEd Tam// loc_eng_xtra.cpp 13518c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 13528c2d3d5afc51d3f35150f748f263870367771b6fEd Tam// case LOC_ENG_MSG_SET_CAPABILITIES: 13538c2d3d5afc51d3f35150f748f263870367771b6fEd Tamstruct LocEngSetCapabilities : public LocMsg { 13548c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data_s_type* mLocEng; 13558c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline LocEngSetCapabilities(loc_eng_data_s_type* locEng) : 13568c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocMsg(), mLocEng(locEng) 13578c2d3d5afc51d3f35150f748f263870367771b6fEd Tam { 13588c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 13598c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 13608c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline virtual void proc() const { 13618c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (NULL != mLocEng->set_capabilities_cb) { 13628c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGV("calling set_capabilities_cb 0x%x", 13638c2d3d5afc51d3f35150f748f263870367771b6fEd Tam gps_conf.CAPABILITIES); 13648c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mLocEng->set_capabilities_cb(gps_conf.CAPABILITIES); 13658c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } else { 13668c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGV("set_capabilities_cb is NULL.\n"); 13678c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 13688c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 13698c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline void locallog() const 13708c2d3d5afc51d3f35150f748f263870367771b6fEd Tam { 13718c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGV("LocEngSetCapabilities"); 13728c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 13738c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline virtual void log() const 13748c2d3d5afc51d3f35150f748f263870367771b6fEd Tam { 13758c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 13768c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 13778c2d3d5afc51d3f35150f748f263870367771b6fEd Tam}; 13788c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 13798c2d3d5afc51d3f35150f748f263870367771b6fEd Tam// case LOC_ENG_MSG_LOC_INIT: 13808c2d3d5afc51d3f35150f748f263870367771b6fEd Tamstruct LocEngInit : public LocMsg { 13818c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data_s_type* mLocEng; 13828c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline LocEngInit(loc_eng_data_s_type* locEng) : 13838c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocMsg(), mLocEng(locEng) 13848c2d3d5afc51d3f35150f748f263870367771b6fEd Tam { 13858c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 13868c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 13878c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline virtual void proc() const { 13888c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_reinit(*mLocEng); 13898c2d3d5afc51d3f35150f748f263870367771b6fEd Tam // set the capabilities 13908c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mLocEng->adapter->sendMsg(new LocEngSetCapabilities(mLocEng)); 13918c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 13928c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline void locallog() const 13938c2d3d5afc51d3f35150f748f263870367771b6fEd Tam { 13948c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGV("LocEngInit"); 13958c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 13968c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline virtual void log() const 13978c2d3d5afc51d3f35150f748f263870367771b6fEd Tam { 13988c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 13998c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 14008c2d3d5afc51d3f35150f748f263870367771b6fEd Tam}; 14018c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 14028c2d3d5afc51d3f35150f748f263870367771b6fEd Tam// case LOC_ENG_MSG_REQUEST_XTRA_SERVER: 14038c2d3d5afc51d3f35150f748f263870367771b6fEd Tam// loc_eng_xtra.cpp 14048c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 14058c2d3d5afc51d3f35150f748f263870367771b6fEd Tam// case LOC_ENG_MSG_ATL_OPEN_SUCCESS: 14068c2d3d5afc51d3f35150f748f263870367771b6fEd Tamstruct LocEngAtlOpenSuccess : public LocMsg { 14078c2d3d5afc51d3f35150f748f263870367771b6fEd Tam AgpsStateMachine* mStateMachine; 14088c2d3d5afc51d3f35150f748f263870367771b6fEd Tam const int mLen; 14098c2d3d5afc51d3f35150f748f263870367771b6fEd Tam char* mAPN; 14108c2d3d5afc51d3f35150f748f263870367771b6fEd Tam const AGpsBearerType mBearerType; 14118c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline LocEngAtlOpenSuccess(AgpsStateMachine* statemachine, 14128c2d3d5afc51d3f35150f748f263870367771b6fEd Tam const char* name, 14138c2d3d5afc51d3f35150f748f263870367771b6fEd Tam int len, 14148c2d3d5afc51d3f35150f748f263870367771b6fEd Tam AGpsBearerType btype) : 14158c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocMsg(), 14168c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mStateMachine(statemachine), mLen(len), 14178c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mAPN(new char[len+1]), mBearerType(btype) 14188c2d3d5afc51d3f35150f748f263870367771b6fEd Tam { 14198c2d3d5afc51d3f35150f748f263870367771b6fEd Tam memcpy((void*)mAPN, (void*)name, len); 14208c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mAPN[len] = 0; 14218c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 14228c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 14238c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline ~LocEngAtlOpenSuccess() 14248c2d3d5afc51d3f35150f748f263870367771b6fEd Tam { 14258c2d3d5afc51d3f35150f748f263870367771b6fEd Tam delete[] mAPN; 14268c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 14278c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline virtual void proc() const { 14288c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mStateMachine->setBearer(mBearerType); 14298c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mStateMachine->setAPN(mAPN, mLen); 14308c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mStateMachine->onRsrcEvent(RSRC_GRANTED); 14318c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 14328c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline void locallog() const { 14338c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGV("LocEngAtlOpenSuccess agps type: %s\n apn: %s\n" 14348c2d3d5afc51d3f35150f748f263870367771b6fEd Tam " bearer type: %s", 14358c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_get_agps_type_name(mStateMachine->getType()), 14368c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mAPN, 14378c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_get_agps_bear_name(mBearerType)); 14388c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 14398c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline virtual void log() const { 14408c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 14418c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 14428c2d3d5afc51d3f35150f748f263870367771b6fEd Tam}; 14438c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 14448c2d3d5afc51d3f35150f748f263870367771b6fEd Tam// case LOC_ENG_MSG_ATL_CLOSED: 14458c2d3d5afc51d3f35150f748f263870367771b6fEd Tamstruct LocEngAtlClosed : public LocMsg { 14468c2d3d5afc51d3f35150f748f263870367771b6fEd Tam AgpsStateMachine* mStateMachine; 14478c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline LocEngAtlClosed(AgpsStateMachine* statemachine) : 14488c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocMsg(), mStateMachine(statemachine) { 14498c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 14508c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 14518c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline virtual void proc() const { 14528c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mStateMachine->onRsrcEvent(RSRC_RELEASED); 14538c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 14548c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline void locallog() const { 14558c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGV("LocEngAtlClosed"); 14568c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 14578c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline virtual void log() const { 14588c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 14598c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 14608c2d3d5afc51d3f35150f748f263870367771b6fEd Tam}; 14618c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 14628c2d3d5afc51d3f35150f748f263870367771b6fEd Tam// case LOC_ENG_MSG_ATL_OPEN_FAILED: 14638c2d3d5afc51d3f35150f748f263870367771b6fEd Tamstruct LocEngAtlOpenFailed : public LocMsg { 14648c2d3d5afc51d3f35150f748f263870367771b6fEd Tam AgpsStateMachine* mStateMachine; 14658c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline LocEngAtlOpenFailed(AgpsStateMachine* statemachine) : 14668c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocMsg(), mStateMachine(statemachine) { 14678c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 14688c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 14698c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline virtual void proc() const { 14708c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mStateMachine->onRsrcEvent(RSRC_DENIED); 14718c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 14728c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline void locallog() const { 14738c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGV("LocEngAtlOpenFailed"); 14748c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 14758c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline virtual void log() const { 14768c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 14778c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 14788c2d3d5afc51d3f35150f748f263870367771b6fEd Tam}; 14798c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 14808c2d3d5afc51d3f35150f748f263870367771b6fEd Tam// case LOC_ENG_MSG_ENGINE_DOWN: 14818c2d3d5afc51d3f35150f748f263870367771b6fEd TamLocEngDown::LocEngDown(void* locEng) : 14828c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocMsg(), mLocEng(locEng) { 14838c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 14848c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 14858c2d3d5afc51d3f35150f748f263870367771b6fEd Taminline void LocEngDown::proc() const { 14868c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data_s_type* locEng = (loc_eng_data_s_type*)mLocEng; 14878c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_handle_engine_down(*locEng); 14888c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 14898c2d3d5afc51d3f35150f748f263870367771b6fEd Taminline void LocEngDown::locallog() const { 14908c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGV("LocEngDown"); 14918c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 14928c2d3d5afc51d3f35150f748f263870367771b6fEd Taminline void LocEngDown::log() const { 14938c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 14948c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 14958c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 14968c2d3d5afc51d3f35150f748f263870367771b6fEd Tam// case LOC_ENG_MSG_ENGINE_UP: 14978c2d3d5afc51d3f35150f748f263870367771b6fEd TamLocEngUp::LocEngUp(void* locEng) : 14988c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocMsg(), mLocEng(locEng) { 14998c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 15008c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 15018c2d3d5afc51d3f35150f748f263870367771b6fEd Taminline void LocEngUp::proc() const { 15028c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data_s_type* locEng = (loc_eng_data_s_type*)mLocEng; 15038c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_handle_engine_up(*locEng); 15048c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 15058c2d3d5afc51d3f35150f748f263870367771b6fEd Taminline void LocEngUp::locallog() const { 15068c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGV("LocEngUp"); 15078c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 15088c2d3d5afc51d3f35150f748f263870367771b6fEd Taminline void LocEngUp::log() const { 15098c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 15108c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 15118c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 15128c2d3d5afc51d3f35150f748f263870367771b6fEd Tamstruct LocEngDataClientInit : public LocMsg { 15138c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data_s_type* mLocEng; 15148c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline LocEngDataClientInit(loc_eng_data_s_type* locEng) : 15158c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocMsg(), mLocEng(locEng) { 15168c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 15178c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 15188c2d3d5afc51d3f35150f748f263870367771b6fEd Tam virtual void proc() const { 15198c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data_s_type *locEng = (loc_eng_data_s_type *)mLocEng; 15208c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if(!locEng->adapter->initDataServiceClient()) { 15218c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locEng->ds_nif = new DSStateMachine(servicerTypeExt, 15228c2d3d5afc51d3f35150f748f263870367771b6fEd Tam (void *)dataCallCb, 15238c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locEng->adapter); 15248c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 15258c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 15268c2d3d5afc51d3f35150f748f263870367771b6fEd Tam void locallog() const { 15278c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGV("LocEngDataClientInit\n"); 15288c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 15298c2d3d5afc51d3f35150f748f263870367771b6fEd Tam virtual void log() const { 15308c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 15318c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 15328c2d3d5afc51d3f35150f748f263870367771b6fEd Tam}; 15338c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 15348c2d3d5afc51d3f35150f748f263870367771b6fEd Tamstruct LocEngInstallAGpsCert : public LocMsg { 15358c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocEngAdapter* mpAdapter; 15368c2d3d5afc51d3f35150f748f263870367771b6fEd Tam const size_t mNumberOfCerts; 15378c2d3d5afc51d3f35150f748f263870367771b6fEd Tam const uint32_t mSlotBitMask; 15388c2d3d5afc51d3f35150f748f263870367771b6fEd Tam DerEncodedCertificate* mpData; 15398c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline LocEngInstallAGpsCert(LocEngAdapter* adapter, 15408c2d3d5afc51d3f35150f748f263870367771b6fEd Tam const DerEncodedCertificate* pData, 15418c2d3d5afc51d3f35150f748f263870367771b6fEd Tam size_t numberOfCerts, 15428c2d3d5afc51d3f35150f748f263870367771b6fEd Tam uint32_t slotBitMask) : 15438c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocMsg(), mpAdapter(adapter), 15448c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mNumberOfCerts(numberOfCerts), mSlotBitMask(slotBitMask), 15458c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mpData(new DerEncodedCertificate[mNumberOfCerts]) 15468c2d3d5afc51d3f35150f748f263870367771b6fEd Tam { 15478c2d3d5afc51d3f35150f748f263870367771b6fEd Tam for (int i=0; i < mNumberOfCerts; i++) { 15488c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mpData[i].data = new u_char[pData[i].length]; 15498c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (mpData[i].data) { 15508c2d3d5afc51d3f35150f748f263870367771b6fEd Tam memcpy(mpData[i].data, (void*)pData[i].data, pData[i].length); 15518c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mpData[i].length = pData[i].length; 15528c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } else { 15538c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGE("malloc failed for cert#%d", i); 15548c2d3d5afc51d3f35150f748f263870367771b6fEd Tam break; 15558c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 15568c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 15578c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 15588c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 15598c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline ~LocEngInstallAGpsCert() 15608c2d3d5afc51d3f35150f748f263870367771b6fEd Tam { 15618c2d3d5afc51d3f35150f748f263870367771b6fEd Tam for (int i=0; i < mNumberOfCerts; i++) { 15628c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (mpData[i].data) { 15638c2d3d5afc51d3f35150f748f263870367771b6fEd Tam delete[] mpData[i].data; 15648c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 15658c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 15668c2d3d5afc51d3f35150f748f263870367771b6fEd Tam delete[] mpData; 15678c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 15688c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline virtual void proc() const { 15698c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mpAdapter->installAGpsCert(mpData, mNumberOfCerts, mSlotBitMask); 15708c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 15718c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline void locallog() const { 15728c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGV("LocEngInstallAGpsCert - certs=%u mask=%u", 15738c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mNumberOfCerts, mSlotBitMask); 15748c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 15758c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline virtual void log() const { 15768c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 15778c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 15788c2d3d5afc51d3f35150f748f263870367771b6fEd Tam}; 15798c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 15808c2d3d5afc51d3f35150f748f263870367771b6fEd Tamstruct LocEngUpdateRegistrationMask : public LocMsg { 15818c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data_s_type* mLocEng; 15828c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_API_ADAPTER_EVENT_MASK_T mMask; 15838c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_registration_mask_status mIsEnabled; 15848c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline LocEngUpdateRegistrationMask(loc_eng_data_s_type* locEng, 15858c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_API_ADAPTER_EVENT_MASK_T mask, 15868c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_registration_mask_status isEnabled) : 15878c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocMsg(), mLocEng(locEng), mMask(mask), mIsEnabled(isEnabled) { 15888c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 15898c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 15908c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline virtual void proc() const { 15918c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data_s_type *locEng = (loc_eng_data_s_type *)mLocEng; 15928c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locEng->adapter->updateRegistrationMask(mMask, 15938c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mIsEnabled); 15948c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 15958c2d3d5afc51d3f35150f748f263870367771b6fEd Tam void locallog() const { 15968c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGV("LocEngUpdateRegistrationMask\n"); 15978c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 15988c2d3d5afc51d3f35150f748f263870367771b6fEd Tam virtual void log() const { 15998c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 16008c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 16018c2d3d5afc51d3f35150f748f263870367771b6fEd Tam}; 16028c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 16038c2d3d5afc51d3f35150f748f263870367771b6fEd Tamstruct LocEngGnssConstellationConfig : public LocMsg { 16048c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocEngAdapter* mAdapter; 16058c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline LocEngGnssConstellationConfig(LocEngAdapter* adapter) : 16068c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocMsg(), mAdapter(adapter) { 16078c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 16088c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 16098c2d3d5afc51d3f35150f748f263870367771b6fEd Tam inline virtual void proc() const { 16108c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (mAdapter->gnssConstellationConfig()) { 16118c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGV("Modem supports GNSS measurements\n"); 16128c2d3d5afc51d3f35150f748f263870367771b6fEd Tam gps_conf.CAPABILITIES |= GPS_CAPABILITY_MEASUREMENTS; 16138c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } else { 16148c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGV("Modem does not support GNSS measurements\n"); 16158c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 16168c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 16178c2d3d5afc51d3f35150f748f263870367771b6fEd Tam void locallog() const { 16188c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGV("LocEngGnssConstellationConfig\n"); 16198c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 16208c2d3d5afc51d3f35150f748f263870367771b6fEd Tam virtual void log() const { 16218c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 16228c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 16238c2d3d5afc51d3f35150f748f263870367771b6fEd Tam}; 16248c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 16258c2d3d5afc51d3f35150f748f263870367771b6fEd Tam// case LOC_ENG_MSG_REPORT_GNSS_MEASUREMENT: 16268c2d3d5afc51d3f35150f748f263870367771b6fEd TamLocEngReportGpsMeasurement::LocEngReportGpsMeasurement(void* locEng, 16278c2d3d5afc51d3f35150f748f263870367771b6fEd Tam GpsData &gpsData) : 16288c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocMsg(), mLocEng(locEng), mGpsData(gpsData) 16298c2d3d5afc51d3f35150f748f263870367771b6fEd Tam{ 16308c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 16318c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 16328c2d3d5afc51d3f35150f748f263870367771b6fEd Tamvoid LocEngReportGpsMeasurement::proc() const { 16338c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data_s_type* locEng = (loc_eng_data_s_type*) mLocEng; 16348c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (locEng->mute_session_state != LOC_MUTE_SESS_IN_SESSION) 16358c2d3d5afc51d3f35150f748f263870367771b6fEd Tam { 16368c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (locEng->gps_measurement_cb != NULL) { 16378c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locEng->gps_measurement_cb((GpsData*)&(mGpsData)); 16388c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 16398c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 16408c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 16418c2d3d5afc51d3f35150f748f263870367771b6fEd Tamvoid LocEngReportGpsMeasurement::locallog() const { 16428c2d3d5afc51d3f35150f748f263870367771b6fEd Tam IF_LOC_LOGV { 16438c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGV("%s:%d]: Received in GPS HAL." 16448c2d3d5afc51d3f35150f748f263870367771b6fEd Tam "GNSS Measurements count: %d \n", 16458c2d3d5afc51d3f35150f748f263870367771b6fEd Tam __func__, __LINE__, mGpsData.measurement_count); 16468c2d3d5afc51d3f35150f748f263870367771b6fEd Tam for (int i =0; i< mGpsData.measurement_count && i < GPS_MAX_SVS; i++) { 16478c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGV(" GNSS measurement data in GPS HAL: \n" 16488c2d3d5afc51d3f35150f748f263870367771b6fEd Tam " GPS_HAL => Measurement ID | prn | time_offset_ns | state |" 16498c2d3d5afc51d3f35150f748f263870367771b6fEd Tam " received_gps_tow_ns| c_n0_dbhz | pseudorange_rate_mps |" 16508c2d3d5afc51d3f35150f748f263870367771b6fEd Tam " pseudorange_rate_uncertainty_mps |" 16518c2d3d5afc51d3f35150f748f263870367771b6fEd Tam " accumulated_delta_range_state | flags \n" 16528c2d3d5afc51d3f35150f748f263870367771b6fEd Tam " GPS_HAL => %d | %d | %f | %d | %lld | %f | %f | %f | %d | %d \n", 16538c2d3d5afc51d3f35150f748f263870367771b6fEd Tam i, 16548c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mGpsData.measurements[i].prn, 16558c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mGpsData.measurements[i].time_offset_ns, 16568c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mGpsData.measurements[i].state, 16578c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mGpsData.measurements[i].received_gps_tow_ns, 16588c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mGpsData.measurements[i].c_n0_dbhz, 16598c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mGpsData.measurements[i].pseudorange_rate_mps, 16608c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mGpsData.measurements[i].pseudorange_rate_uncertainty_mps, 16618c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mGpsData.measurements[i].accumulated_delta_range_state, 16628c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mGpsData.measurements[i].flags); 16638c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 16648c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGV(" GPS_HAL => Clocks Info: type | time_ns \n" 16658c2d3d5afc51d3f35150f748f263870367771b6fEd Tam " GPS_HAL => Clocks Info: %d | %lld", mGpsData.clock.type, 16668c2d3d5afc51d3f35150f748f263870367771b6fEd Tam mGpsData.clock.time_ns); 16678c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 16688c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 16698c2d3d5afc51d3f35150f748f263870367771b6fEd Taminline void LocEngReportGpsMeasurement::log() const { 16708c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locallog(); 16718c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 16728c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 16738c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/********************************************************************* 16748c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * Initialization checking macros 16758c2d3d5afc51d3f35150f748f263870367771b6fEd Tam *********************************************************************/ 16768c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define STATE_CHECK(ctx, x, ret) \ 16778c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (!(ctx)) \ 16788c2d3d5afc51d3f35150f748f263870367771b6fEd Tam { \ 16798c2d3d5afc51d3f35150f748f263870367771b6fEd Tam /* Not intialized, abort */\ 16808c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGE("%s: log_eng state error: %s", __func__, x); \ 16818c2d3d5afc51d3f35150f748f263870367771b6fEd Tam EXIT_LOG(%s, x); \ 16828c2d3d5afc51d3f35150f748f263870367771b6fEd Tam ret; \ 16838c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 16848c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define INIT_CHECK(ctx, ret) STATE_CHECK(ctx, "instance not initialized", ret) 16858c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 16868c2d3d5afc51d3f35150f748f263870367771b6fEd Tamuint32_t getCarrierCapabilities() { 16878c2d3d5afc51d3f35150f748f263870367771b6fEd Tam #define carrierMSA (uint32_t)0x2 16888c2d3d5afc51d3f35150f748f263870367771b6fEd Tam #define carrierMSB (uint32_t)0x1 16898c2d3d5afc51d3f35150f748f263870367771b6fEd Tam #define gpsConfMSA (uint32_t)0x4 16908c2d3d5afc51d3f35150f748f263870367771b6fEd Tam #define gpsConfMSB (uint32_t)0x2 16918c2d3d5afc51d3f35150f748f263870367771b6fEd Tam uint32_t capabilities = gps_conf.CAPABILITIES; 16928c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if ((gps_conf.SUPL_MODE & carrierMSA) != carrierMSA) { 16938c2d3d5afc51d3f35150f748f263870367771b6fEd Tam capabilities &= ~gpsConfMSA; 16948c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 16958c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if ((gps_conf.SUPL_MODE & carrierMSB) != carrierMSB) { 16968c2d3d5afc51d3f35150f748f263870367771b6fEd Tam capabilities &= ~gpsConfMSB; 16978c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 16988c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 16998c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGV("getCarrierCapabilities: CAPABILITIES %x, SUPL_MODE %x, carrier capabilities %x", 17008c2d3d5afc51d3f35150f748f263870367771b6fEd Tam gps_conf.CAPABILITIES, gps_conf.SUPL_MODE, capabilities); 17018c2d3d5afc51d3f35150f748f263870367771b6fEd Tam return capabilities; 17028c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 17038c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 17048c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/*=========================================================================== 17058c2d3d5afc51d3f35150f748f263870367771b6fEd TamFUNCTION loc_eng_init 17068c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 17078c2d3d5afc51d3f35150f748f263870367771b6fEd TamDESCRIPTION 17088c2d3d5afc51d3f35150f748f263870367771b6fEd Tam Initialize the location engine, this include setting up global datas 17098c2d3d5afc51d3f35150f748f263870367771b6fEd Tam and registers location engien with loc api service. 17108c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 17118c2d3d5afc51d3f35150f748f263870367771b6fEd TamDEPENDENCIES 17128c2d3d5afc51d3f35150f748f263870367771b6fEd Tam None 17138c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 17148c2d3d5afc51d3f35150f748f263870367771b6fEd TamRETURN VALUE 17158c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 0: success 17168c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 17178c2d3d5afc51d3f35150f748f263870367771b6fEd TamSIDE EFFECTS 17188c2d3d5afc51d3f35150f748f263870367771b6fEd Tam N/A 17198c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 17208c2d3d5afc51d3f35150f748f263870367771b6fEd Tam===========================================================================*/ 17218c2d3d5afc51d3f35150f748f263870367771b6fEd Tamint loc_eng_init(loc_eng_data_s_type &loc_eng_data, LocCallbacks* callbacks, 17228c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_API_ADAPTER_EVENT_MASK_T event, ContextBase* context) 17238c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 17248c2d3d5afc51d3f35150f748f263870367771b6fEd Tam{ 17258c2d3d5afc51d3f35150f748f263870367771b6fEd Tam int ret_val = 0; 17268c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 17278c2d3d5afc51d3f35150f748f263870367771b6fEd Tam ENTRY_LOG_CALLFLOW(); 17288c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (NULL == callbacks || 0 == event) { 17298c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGE("loc_eng_init: bad parameters cb %p eMask %d", callbacks, event); 17308c2d3d5afc51d3f35150f748f263870367771b6fEd Tam ret_val = -1; 17318c2d3d5afc51d3f35150f748f263870367771b6fEd Tam EXIT_LOG(%d, ret_val); 17328c2d3d5afc51d3f35150f748f263870367771b6fEd Tam return ret_val; 17338c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 17348c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 17358c2d3d5afc51d3f35150f748f263870367771b6fEd Tam STATE_CHECK((NULL == loc_eng_data.adapter), 17368c2d3d5afc51d3f35150f748f263870367771b6fEd Tam "instance already initialized", return 0); 17378c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 17388c2d3d5afc51d3f35150f748f263870367771b6fEd Tam memset(&loc_eng_data, 0, sizeof (loc_eng_data)); 17398c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 17408c2d3d5afc51d3f35150f748f263870367771b6fEd Tam // Save callbacks 17418c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data.location_cb = callbacks->location_cb; 17428c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data.sv_status_cb = callbacks->sv_status_cb; 17438c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data.status_cb = callbacks->status_cb; 17448c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data.nmea_cb = callbacks->nmea_cb; 17458c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data.set_capabilities_cb = callbacks->set_capabilities_cb; 17468c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data.acquire_wakelock_cb = callbacks->acquire_wakelock_cb; 17478c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data.release_wakelock_cb = callbacks->release_wakelock_cb; 17488c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data.request_utc_time_cb = callbacks->request_utc_time_cb; 17498c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data.location_ext_parser = callbacks->location_ext_parser ? 17508c2d3d5afc51d3f35150f748f263870367771b6fEd Tam callbacks->location_ext_parser : noProc; 17518c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data.sv_ext_parser = callbacks->sv_ext_parser ? 17528c2d3d5afc51d3f35150f748f263870367771b6fEd Tam callbacks->sv_ext_parser : noProc; 17538c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data.intermediateFix = gps_conf.INTERMEDIATE_POS; 17548c2d3d5afc51d3f35150f748f263870367771b6fEd Tam // initial states taken care of by the memset above 17558c2d3d5afc51d3f35150f748f263870367771b6fEd Tam // loc_eng_data.engine_status -- GPS_STATUS_NONE; 17568c2d3d5afc51d3f35150f748f263870367771b6fEd Tam // loc_eng_data.fix_session_status -- GPS_STATUS_NONE; 17578c2d3d5afc51d3f35150f748f263870367771b6fEd Tam // loc_eng_data.mute_session_state -- LOC_MUTE_SESS_NONE; 17588c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 17598c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if ((event & LOC_API_ADAPTER_BIT_NMEA_1HZ_REPORT) && (gps_conf.NMEA_PROVIDER == NMEA_PROVIDER_AP)) 17608c2d3d5afc51d3f35150f748f263870367771b6fEd Tam { 17618c2d3d5afc51d3f35150f748f263870367771b6fEd Tam event = event ^ LOC_API_ADAPTER_BIT_NMEA_1HZ_REPORT; // unregister for modem NMEA report 17628c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data.generateNmea = true; 17638c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 17648c2d3d5afc51d3f35150f748f263870367771b6fEd Tam else 17658c2d3d5afc51d3f35150f748f263870367771b6fEd Tam { 17668c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data.generateNmea = false; 17678c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 17688c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 17698c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data.adapter = 17708c2d3d5afc51d3f35150f748f263870367771b6fEd Tam new LocEngAdapter(event, &loc_eng_data, context, 17718c2d3d5afc51d3f35150f748f263870367771b6fEd Tam (MsgTask::tCreate)callbacks->create_thread_cb); 17728c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 17738c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGD("loc_eng_init created client, id = %p\n", 17748c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data.adapter); 17758c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data.adapter->sendMsg(new LocEngInit(&loc_eng_data)); 17768c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 17778c2d3d5afc51d3f35150f748f263870367771b6fEd Tam EXIT_LOG(%d, ret_val); 17788c2d3d5afc51d3f35150f748f263870367771b6fEd Tam return ret_val; 17798c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 17808c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 17818c2d3d5afc51d3f35150f748f263870367771b6fEd Tamstatic int loc_eng_reinit(loc_eng_data_s_type &loc_eng_data) 17828c2d3d5afc51d3f35150f748f263870367771b6fEd Tam{ 17838c2d3d5afc51d3f35150f748f263870367771b6fEd Tam ENTRY_LOG(); 17848c2d3d5afc51d3f35150f748f263870367771b6fEd Tam int ret_val = LOC_API_ADAPTER_ERR_SUCCESS; 17858c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocEngAdapter* adapter = loc_eng_data.adapter; 17868c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 17878c2d3d5afc51d3f35150f748f263870367771b6fEd Tam adapter->sendMsg(new LocEngGnssConstellationConfig(adapter)); 17888c2d3d5afc51d3f35150f748f263870367771b6fEd Tam adapter->sendMsg(new LocEngSuplVer(adapter, gps_conf.SUPL_VER)); 17898c2d3d5afc51d3f35150f748f263870367771b6fEd Tam adapter->sendMsg(new LocEngLppConfig(adapter, gps_conf.LPP_PROFILE)); 17908c2d3d5afc51d3f35150f748f263870367771b6fEd Tam adapter->sendMsg(new LocEngSensorControlConfig(adapter, sap_conf.SENSOR_USAGE, 17918c2d3d5afc51d3f35150f748f263870367771b6fEd Tam sap_conf.SENSOR_PROVIDER)); 17928c2d3d5afc51d3f35150f748f263870367771b6fEd Tam adapter->sendMsg(new LocEngAGlonassProtocol(adapter, gps_conf.A_GLONASS_POS_PROTOCOL_SELECT)); 17938c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 17948c2d3d5afc51d3f35150f748f263870367771b6fEd Tam /* Make sure at least one of the sensor property is specified by the user in the gps.conf file. */ 17958c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if( sap_conf.GYRO_BIAS_RANDOM_WALK_VALID || 17968c2d3d5afc51d3f35150f748f263870367771b6fEd Tam sap_conf.ACCEL_RANDOM_WALK_SPECTRAL_DENSITY_VALID || 17978c2d3d5afc51d3f35150f748f263870367771b6fEd Tam sap_conf.ANGLE_RANDOM_WALK_SPECTRAL_DENSITY_VALID || 17988c2d3d5afc51d3f35150f748f263870367771b6fEd Tam sap_conf.RATE_RANDOM_WALK_SPECTRAL_DENSITY_VALID || 17998c2d3d5afc51d3f35150f748f263870367771b6fEd Tam sap_conf.VELOCITY_RANDOM_WALK_SPECTRAL_DENSITY_VALID ) { 18008c2d3d5afc51d3f35150f748f263870367771b6fEd Tam adapter->sendMsg(new LocEngSensorProperties(adapter, 18018c2d3d5afc51d3f35150f748f263870367771b6fEd Tam sap_conf.GYRO_BIAS_RANDOM_WALK_VALID, 18028c2d3d5afc51d3f35150f748f263870367771b6fEd Tam sap_conf.GYRO_BIAS_RANDOM_WALK, 18038c2d3d5afc51d3f35150f748f263870367771b6fEd Tam sap_conf.ACCEL_RANDOM_WALK_SPECTRAL_DENSITY_VALID, 18048c2d3d5afc51d3f35150f748f263870367771b6fEd Tam sap_conf.ACCEL_RANDOM_WALK_SPECTRAL_DENSITY, 18058c2d3d5afc51d3f35150f748f263870367771b6fEd Tam sap_conf.ANGLE_RANDOM_WALK_SPECTRAL_DENSITY_VALID, 18068c2d3d5afc51d3f35150f748f263870367771b6fEd Tam sap_conf.ANGLE_RANDOM_WALK_SPECTRAL_DENSITY, 18078c2d3d5afc51d3f35150f748f263870367771b6fEd Tam sap_conf.RATE_RANDOM_WALK_SPECTRAL_DENSITY_VALID, 18088c2d3d5afc51d3f35150f748f263870367771b6fEd Tam sap_conf.RATE_RANDOM_WALK_SPECTRAL_DENSITY, 18098c2d3d5afc51d3f35150f748f263870367771b6fEd Tam sap_conf.VELOCITY_RANDOM_WALK_SPECTRAL_DENSITY_VALID, 18108c2d3d5afc51d3f35150f748f263870367771b6fEd Tam sap_conf.VELOCITY_RANDOM_WALK_SPECTRAL_DENSITY)); 18118c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 18128c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 18138c2d3d5afc51d3f35150f748f263870367771b6fEd Tam adapter->sendMsg(new LocEngSensorPerfControlConfig(adapter, 18148c2d3d5afc51d3f35150f748f263870367771b6fEd Tam sap_conf.SENSOR_CONTROL_MODE, 18158c2d3d5afc51d3f35150f748f263870367771b6fEd Tam sap_conf.SENSOR_ACCEL_SAMPLES_PER_BATCH, 18168c2d3d5afc51d3f35150f748f263870367771b6fEd Tam sap_conf.SENSOR_ACCEL_BATCHES_PER_SEC, 18178c2d3d5afc51d3f35150f748f263870367771b6fEd Tam sap_conf.SENSOR_GYRO_SAMPLES_PER_BATCH, 18188c2d3d5afc51d3f35150f748f263870367771b6fEd Tam sap_conf.SENSOR_GYRO_BATCHES_PER_SEC, 18198c2d3d5afc51d3f35150f748f263870367771b6fEd Tam sap_conf.SENSOR_ACCEL_SAMPLES_PER_BATCH_HIGH, 18208c2d3d5afc51d3f35150f748f263870367771b6fEd Tam sap_conf.SENSOR_ACCEL_BATCHES_PER_SEC_HIGH, 18218c2d3d5afc51d3f35150f748f263870367771b6fEd Tam sap_conf.SENSOR_GYRO_SAMPLES_PER_BATCH_HIGH, 18228c2d3d5afc51d3f35150f748f263870367771b6fEd Tam sap_conf.SENSOR_GYRO_BATCHES_PER_SEC_HIGH, 18238c2d3d5afc51d3f35150f748f263870367771b6fEd Tam sap_conf.SENSOR_ALGORITHM_CONFIG_MASK)); 18248c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 18258c2d3d5afc51d3f35150f748f263870367771b6fEd Tam adapter->sendMsg(new LocEngEnableData(adapter, NULL, 0, (agpsStatus ? 1:0))); 18268c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 18278c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_xtra_version_check(loc_eng_data, gps_conf.XTRA_VERSION_CHECK); 18288c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 18298c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGD("loc_eng_reinit reinit() successful"); 18308c2d3d5afc51d3f35150f748f263870367771b6fEd Tam EXIT_LOG(%d, ret_val); 18318c2d3d5afc51d3f35150f748f263870367771b6fEd Tam return ret_val; 18328c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 18338c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 18348c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/*=========================================================================== 18358c2d3d5afc51d3f35150f748f263870367771b6fEd TamFUNCTION loc_eng_cleanup 18368c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 18378c2d3d5afc51d3f35150f748f263870367771b6fEd TamDESCRIPTION 18388c2d3d5afc51d3f35150f748f263870367771b6fEd Tam Cleans location engine. The location client handle will be released. 18398c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 18408c2d3d5afc51d3f35150f748f263870367771b6fEd TamDEPENDENCIES 18418c2d3d5afc51d3f35150f748f263870367771b6fEd Tam None 18428c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 18438c2d3d5afc51d3f35150f748f263870367771b6fEd TamRETURN VALUE 18448c2d3d5afc51d3f35150f748f263870367771b6fEd Tam None 18458c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 18468c2d3d5afc51d3f35150f748f263870367771b6fEd TamSIDE EFFECTS 18478c2d3d5afc51d3f35150f748f263870367771b6fEd Tam N/A 18488c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 18498c2d3d5afc51d3f35150f748f263870367771b6fEd Tam===========================================================================*/ 18508c2d3d5afc51d3f35150f748f263870367771b6fEd Tamvoid loc_eng_cleanup(loc_eng_data_s_type &loc_eng_data) 18518c2d3d5afc51d3f35150f748f263870367771b6fEd Tam{ 18528c2d3d5afc51d3f35150f748f263870367771b6fEd Tam ENTRY_LOG_CALLFLOW(); 18538c2d3d5afc51d3f35150f748f263870367771b6fEd Tam INIT_CHECK(loc_eng_data.adapter, return); 18548c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 18558c2d3d5afc51d3f35150f748f263870367771b6fEd Tam // XTRA has no state, so we are fine with it. 18568c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 18578c2d3d5afc51d3f35150f748f263870367771b6fEd Tam // we need to check and clear NI 18588c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#if 0 18598c2d3d5afc51d3f35150f748f263870367771b6fEd Tam // we need to check and clear ATL 18608c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (NULL != loc_eng_data.agnss_nif) { 18618c2d3d5afc51d3f35150f748f263870367771b6fEd Tam delete loc_eng_data.agnss_nif; 18628c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data.agnss_nif = NULL; 18638c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 18648c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (NULL != loc_eng_data.internet_nif) { 18658c2d3d5afc51d3f35150f748f263870367771b6fEd Tam delete loc_eng_data.internet_nif; 18668c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data.internet_nif = NULL; 18678c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 18688c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#endif 18698c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (loc_eng_data.adapter->isInSession()) 18708c2d3d5afc51d3f35150f748f263870367771b6fEd Tam { 18718c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGD("loc_eng_cleanup: fix not stopped. stop it now."); 18728c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_stop(loc_eng_data); 18738c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 18748c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 18758c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#if 0 // can't afford to actually clean up, for many reason. 18768c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 18778c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGD("loc_eng_init: client opened. close it now."); 18788c2d3d5afc51d3f35150f748f263870367771b6fEd Tam delete loc_eng_data.adapter; 18798c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data.adapter = NULL; 18808c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 18818c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_dmn_conn_loc_api_server_unblock(); 18828c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_dmn_conn_loc_api_server_join(); 18838c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 18848c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#endif 18858c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 18868c2d3d5afc51d3f35150f748f263870367771b6fEd Tam EXIT_LOG(%s, VOID_RET); 18878c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 18888c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 18898c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 18908c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/*=========================================================================== 18918c2d3d5afc51d3f35150f748f263870367771b6fEd TamFUNCTION loc_eng_start 18928c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 18938c2d3d5afc51d3f35150f748f263870367771b6fEd TamDESCRIPTION 18948c2d3d5afc51d3f35150f748f263870367771b6fEd Tam Starts the tracking session 18958c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 18968c2d3d5afc51d3f35150f748f263870367771b6fEd TamDEPENDENCIES 18978c2d3d5afc51d3f35150f748f263870367771b6fEd Tam None 18988c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 18998c2d3d5afc51d3f35150f748f263870367771b6fEd TamRETURN VALUE 19008c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 0: success 19018c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 19028c2d3d5afc51d3f35150f748f263870367771b6fEd TamSIDE EFFECTS 19038c2d3d5afc51d3f35150f748f263870367771b6fEd Tam N/A 19048c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 19058c2d3d5afc51d3f35150f748f263870367771b6fEd Tam===========================================================================*/ 19068c2d3d5afc51d3f35150f748f263870367771b6fEd Tamint loc_eng_start(loc_eng_data_s_type &loc_eng_data) 19078c2d3d5afc51d3f35150f748f263870367771b6fEd Tam{ 19088c2d3d5afc51d3f35150f748f263870367771b6fEd Tam ENTRY_LOG_CALLFLOW(); 19098c2d3d5afc51d3f35150f748f263870367771b6fEd Tam INIT_CHECK(loc_eng_data.adapter, return -1); 19108c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 19118c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if(! loc_eng_data.adapter->getUlpProxy()->sendStartFix()) 19128c2d3d5afc51d3f35150f748f263870367771b6fEd Tam { 19138c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data.adapter->sendMsg(new LocEngStartFix(loc_eng_data.adapter)); 19148c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 19158c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 19168c2d3d5afc51d3f35150f748f263870367771b6fEd Tam EXIT_LOG(%d, 0); 19178c2d3d5afc51d3f35150f748f263870367771b6fEd Tam return 0; 19188c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 19198c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 19208c2d3d5afc51d3f35150f748f263870367771b6fEd Tamstatic int loc_eng_start_handler(loc_eng_data_s_type &loc_eng_data) 19218c2d3d5afc51d3f35150f748f263870367771b6fEd Tam{ 19228c2d3d5afc51d3f35150f748f263870367771b6fEd Tam ENTRY_LOG(); 19238c2d3d5afc51d3f35150f748f263870367771b6fEd Tam int ret_val = LOC_API_ADAPTER_ERR_SUCCESS; 19248c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 19258c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (!loc_eng_data.adapter->isInSession()) { 19268c2d3d5afc51d3f35150f748f263870367771b6fEd Tam ret_val = loc_eng_data.adapter->startFix(); 19278c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 19288c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (ret_val == LOC_API_ADAPTER_ERR_SUCCESS || 19298c2d3d5afc51d3f35150f748f263870367771b6fEd Tam ret_val == LOC_API_ADAPTER_ERR_ENGINE_DOWN || 19308c2d3d5afc51d3f35150f748f263870367771b6fEd Tam ret_val == LOC_API_ADAPTER_ERR_PHONE_OFFLINE || 19318c2d3d5afc51d3f35150f748f263870367771b6fEd Tam ret_val == LOC_API_ADAPTER_ERR_INTERNAL) 19328c2d3d5afc51d3f35150f748f263870367771b6fEd Tam { 19338c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data.adapter->setInSession(TRUE); 19348c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 19358c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 19368c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 19378c2d3d5afc51d3f35150f748f263870367771b6fEd Tam EXIT_LOG(%d, ret_val); 19388c2d3d5afc51d3f35150f748f263870367771b6fEd Tam return ret_val; 19398c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 19408c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 19418c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/*=========================================================================== 19428c2d3d5afc51d3f35150f748f263870367771b6fEd TamFUNCTION loc_eng_stop_wrapper 19438c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 19448c2d3d5afc51d3f35150f748f263870367771b6fEd TamDESCRIPTION 19458c2d3d5afc51d3f35150f748f263870367771b6fEd Tam Stops the tracking session 19468c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 19478c2d3d5afc51d3f35150f748f263870367771b6fEd TamDEPENDENCIES 19488c2d3d5afc51d3f35150f748f263870367771b6fEd Tam None 19498c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 19508c2d3d5afc51d3f35150f748f263870367771b6fEd TamRETURN VALUE 19518c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 0: success 19528c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 19538c2d3d5afc51d3f35150f748f263870367771b6fEd TamSIDE EFFECTS 19548c2d3d5afc51d3f35150f748f263870367771b6fEd Tam N/A 19558c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 19568c2d3d5afc51d3f35150f748f263870367771b6fEd Tam===========================================================================*/ 19578c2d3d5afc51d3f35150f748f263870367771b6fEd Tamint loc_eng_stop(loc_eng_data_s_type &loc_eng_data) 19588c2d3d5afc51d3f35150f748f263870367771b6fEd Tam{ 19598c2d3d5afc51d3f35150f748f263870367771b6fEd Tam ENTRY_LOG_CALLFLOW(); 19608c2d3d5afc51d3f35150f748f263870367771b6fEd Tam INIT_CHECK(loc_eng_data.adapter, return -1); 19618c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 19628c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if(! loc_eng_data.adapter->getUlpProxy()->sendStopFix()) 19638c2d3d5afc51d3f35150f748f263870367771b6fEd Tam { 19648c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data.adapter->sendMsg(new LocEngStopFix(loc_eng_data.adapter)); 19658c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 19668c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 19678c2d3d5afc51d3f35150f748f263870367771b6fEd Tam EXIT_LOG(%d, 0); 19688c2d3d5afc51d3f35150f748f263870367771b6fEd Tam return 0; 19698c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 19708c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 19718c2d3d5afc51d3f35150f748f263870367771b6fEd Tamstatic int loc_eng_stop_handler(loc_eng_data_s_type &loc_eng_data) 19728c2d3d5afc51d3f35150f748f263870367771b6fEd Tam{ 19738c2d3d5afc51d3f35150f748f263870367771b6fEd Tam ENTRY_LOG(); 19748c2d3d5afc51d3f35150f748f263870367771b6fEd Tam int ret_val = LOC_API_ADAPTER_ERR_SUCCESS; 19758c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 19768c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (loc_eng_data.adapter->isInSession()) { 19778c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 19788c2d3d5afc51d3f35150f748f263870367771b6fEd Tam ret_val = loc_eng_data.adapter->stopFix(); 19798c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data.adapter->setInSession(FALSE); 19808c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 19818c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 19828c2d3d5afc51d3f35150f748f263870367771b6fEd Tam EXIT_LOG(%d, ret_val); 19838c2d3d5afc51d3f35150f748f263870367771b6fEd Tam return ret_val; 19848c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 19858c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 19868c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/*=========================================================================== 19878c2d3d5afc51d3f35150f748f263870367771b6fEd TamFUNCTION loc_eng_mute_one_session 19888c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 19898c2d3d5afc51d3f35150f748f263870367771b6fEd TamDESCRIPTION 19908c2d3d5afc51d3f35150f748f263870367771b6fEd Tam Mutes one session 19918c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 19928c2d3d5afc51d3f35150f748f263870367771b6fEd TamDEPENDENCIES 19938c2d3d5afc51d3f35150f748f263870367771b6fEd Tam None 19948c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 19958c2d3d5afc51d3f35150f748f263870367771b6fEd TamRETURN VALUE 19968c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 0: Success 19978c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 19988c2d3d5afc51d3f35150f748f263870367771b6fEd TamSIDE EFFECTS 19998c2d3d5afc51d3f35150f748f263870367771b6fEd Tam N/A 20008c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 20018c2d3d5afc51d3f35150f748f263870367771b6fEd Tam===========================================================================*/ 20028c2d3d5afc51d3f35150f748f263870367771b6fEd Tamvoid loc_eng_mute_one_session(loc_eng_data_s_type &loc_eng_data) 20038c2d3d5afc51d3f35150f748f263870367771b6fEd Tam{ 20048c2d3d5afc51d3f35150f748f263870367771b6fEd Tam ENTRY_LOG(); 20058c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data.mute_session_state = LOC_MUTE_SESS_WAIT; 20068c2d3d5afc51d3f35150f748f263870367771b6fEd Tam EXIT_LOG(%s, VOID_RET); 20078c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 20088c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 20098c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/*=========================================================================== 20108c2d3d5afc51d3f35150f748f263870367771b6fEd TamFUNCTION loc_eng_set_position_mode 20118c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 20128c2d3d5afc51d3f35150f748f263870367771b6fEd TamDESCRIPTION 20138c2d3d5afc51d3f35150f748f263870367771b6fEd Tam Sets the mode and fix frequency for the tracking session. 20148c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 20158c2d3d5afc51d3f35150f748f263870367771b6fEd TamDEPENDENCIES 20168c2d3d5afc51d3f35150f748f263870367771b6fEd Tam None 20178c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 20188c2d3d5afc51d3f35150f748f263870367771b6fEd TamRETURN VALUE 20198c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 0: success 20208c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 20218c2d3d5afc51d3f35150f748f263870367771b6fEd TamSIDE EFFECTS 20228c2d3d5afc51d3f35150f748f263870367771b6fEd Tam N/A 20238c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 20248c2d3d5afc51d3f35150f748f263870367771b6fEd Tam===========================================================================*/ 20258c2d3d5afc51d3f35150f748f263870367771b6fEd Tamint loc_eng_set_position_mode(loc_eng_data_s_type &loc_eng_data, 20268c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocPosMode ¶ms) 20278c2d3d5afc51d3f35150f748f263870367771b6fEd Tam{ 20288c2d3d5afc51d3f35150f748f263870367771b6fEd Tam ENTRY_LOG_CALLFLOW(); 20298c2d3d5afc51d3f35150f748f263870367771b6fEd Tam INIT_CHECK(loc_eng_data.adapter, return -1); 20308c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 20318c2d3d5afc51d3f35150f748f263870367771b6fEd Tam // The position mode for AUTO/GSS/QCA1530 can only be standalone 20328c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (!(gps_conf.CAPABILITIES & GPS_CAPABILITY_MSB) && 20338c2d3d5afc51d3f35150f748f263870367771b6fEd Tam !(gps_conf.CAPABILITIES & GPS_CAPABILITY_MSA) && 20348c2d3d5afc51d3f35150f748f263870367771b6fEd Tam (params.mode != LOC_POSITION_MODE_STANDALONE)) { 20358c2d3d5afc51d3f35150f748f263870367771b6fEd Tam params.mode = LOC_POSITION_MODE_STANDALONE; 20368c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGD("Position mode changed to standalone for target with AUTO/GSS/qca1530."); 20378c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 20388c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 20398c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if(! loc_eng_data.adapter->getUlpProxy()->sendFixMode(params)) 20408c2d3d5afc51d3f35150f748f263870367771b6fEd Tam { 20418c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocEngAdapter* adapter = loc_eng_data.adapter; 20428c2d3d5afc51d3f35150f748f263870367771b6fEd Tam adapter->sendMsg(new LocEngPositionMode(adapter, params)); 20438c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 20448c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 20458c2d3d5afc51d3f35150f748f263870367771b6fEd Tam EXIT_LOG(%d, 0); 20468c2d3d5afc51d3f35150f748f263870367771b6fEd Tam return 0; 20478c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 20488c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 20498c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/*=========================================================================== 20508c2d3d5afc51d3f35150f748f263870367771b6fEd TamFUNCTION loc_eng_inject_time 20518c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 20528c2d3d5afc51d3f35150f748f263870367771b6fEd TamDESCRIPTION 20538c2d3d5afc51d3f35150f748f263870367771b6fEd Tam This is used by Java native function to do time injection. 20548c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 20558c2d3d5afc51d3f35150f748f263870367771b6fEd TamDEPENDENCIES 20568c2d3d5afc51d3f35150f748f263870367771b6fEd Tam None 20578c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 20588c2d3d5afc51d3f35150f748f263870367771b6fEd TamRETURN VALUE 20598c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 0 20608c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 20618c2d3d5afc51d3f35150f748f263870367771b6fEd TamSIDE EFFECTS 20628c2d3d5afc51d3f35150f748f263870367771b6fEd Tam N/A 20638c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 20648c2d3d5afc51d3f35150f748f263870367771b6fEd Tam===========================================================================*/ 20658c2d3d5afc51d3f35150f748f263870367771b6fEd Tamint loc_eng_inject_time(loc_eng_data_s_type &loc_eng_data, GpsUtcTime time, 20668c2d3d5afc51d3f35150f748f263870367771b6fEd Tam int64_t timeReference, int uncertainty) 20678c2d3d5afc51d3f35150f748f263870367771b6fEd Tam{ 20688c2d3d5afc51d3f35150f748f263870367771b6fEd Tam ENTRY_LOG_CALLFLOW(); 20698c2d3d5afc51d3f35150f748f263870367771b6fEd Tam INIT_CHECK(loc_eng_data.adapter, return -1); 20708c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocEngAdapter* adapter = loc_eng_data.adapter; 20718c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 20728c2d3d5afc51d3f35150f748f263870367771b6fEd Tam adapter->sendMsg(new LocEngSetTime(adapter, time, timeReference, 20738c2d3d5afc51d3f35150f748f263870367771b6fEd Tam uncertainty)); 20748c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 20758c2d3d5afc51d3f35150f748f263870367771b6fEd Tam EXIT_LOG(%d, 0); 20768c2d3d5afc51d3f35150f748f263870367771b6fEd Tam return 0; 20778c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 20788c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 20798c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 20808c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/*=========================================================================== 20818c2d3d5afc51d3f35150f748f263870367771b6fEd TamFUNCTION loc_eng_inject_location 20828c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 20838c2d3d5afc51d3f35150f748f263870367771b6fEd TamDESCRIPTION 20848c2d3d5afc51d3f35150f748f263870367771b6fEd Tam This is used by Java native function to do location injection. 20858c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 20868c2d3d5afc51d3f35150f748f263870367771b6fEd TamDEPENDENCIES 20878c2d3d5afc51d3f35150f748f263870367771b6fEd Tam None 20888c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 20898c2d3d5afc51d3f35150f748f263870367771b6fEd TamRETURN VALUE 20908c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 0 : Successful 20918c2d3d5afc51d3f35150f748f263870367771b6fEd Tam error code : Failure 20928c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 20938c2d3d5afc51d3f35150f748f263870367771b6fEd TamSIDE EFFECTS 20948c2d3d5afc51d3f35150f748f263870367771b6fEd Tam N/A 20958c2d3d5afc51d3f35150f748f263870367771b6fEd Tam===========================================================================*/ 20968c2d3d5afc51d3f35150f748f263870367771b6fEd Tamint loc_eng_inject_location(loc_eng_data_s_type &loc_eng_data, double latitude, 20978c2d3d5afc51d3f35150f748f263870367771b6fEd Tam double longitude, float accuracy) 20988c2d3d5afc51d3f35150f748f263870367771b6fEd Tam{ 20998c2d3d5afc51d3f35150f748f263870367771b6fEd Tam ENTRY_LOG_CALLFLOW(); 21008c2d3d5afc51d3f35150f748f263870367771b6fEd Tam INIT_CHECK(loc_eng_data.adapter, return -1); 21018c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocEngAdapter* adapter = loc_eng_data.adapter; 21028c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if(adapter->mSupportsPositionInjection) 21038c2d3d5afc51d3f35150f748f263870367771b6fEd Tam { 21048c2d3d5afc51d3f35150f748f263870367771b6fEd Tam adapter->sendMsg(new LocEngInjectLocation(adapter, latitude, longitude, 21058c2d3d5afc51d3f35150f748f263870367771b6fEd Tam accuracy)); 21068c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 21078c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 21088c2d3d5afc51d3f35150f748f263870367771b6fEd Tam EXIT_LOG(%d, 0); 21098c2d3d5afc51d3f35150f748f263870367771b6fEd Tam return 0; 21108c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 21118c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 21128c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 21138c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/*=========================================================================== 21148c2d3d5afc51d3f35150f748f263870367771b6fEd TamFUNCTION loc_eng_delete_aiding_data 21158c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 21168c2d3d5afc51d3f35150f748f263870367771b6fEd TamDESCRIPTION 21178c2d3d5afc51d3f35150f748f263870367771b6fEd Tam This is used by Java native function to delete the aiding data. The function 21188c2d3d5afc51d3f35150f748f263870367771b6fEd Tam updates the global variable for the aiding data to be deleted. If the GPS 21198c2d3d5afc51d3f35150f748f263870367771b6fEd Tam engine is off, the aiding data will be deleted. Otherwise, the actual action 21208c2d3d5afc51d3f35150f748f263870367771b6fEd Tam will happen when gps engine is turned off. 21218c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 21228c2d3d5afc51d3f35150f748f263870367771b6fEd TamDEPENDENCIES 21238c2d3d5afc51d3f35150f748f263870367771b6fEd Tam Assumes the aiding data type specified in GpsAidingData matches with 21248c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC API specification. 21258c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 21268c2d3d5afc51d3f35150f748f263870367771b6fEd TamRETURN VALUE 21278c2d3d5afc51d3f35150f748f263870367771b6fEd Tam None 21288c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 21298c2d3d5afc51d3f35150f748f263870367771b6fEd TamSIDE EFFECTS 21308c2d3d5afc51d3f35150f748f263870367771b6fEd Tam N/A 21318c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 21328c2d3d5afc51d3f35150f748f263870367771b6fEd Tam===========================================================================*/ 21338c2d3d5afc51d3f35150f748f263870367771b6fEd Tamvoid loc_eng_delete_aiding_data(loc_eng_data_s_type &loc_eng_data, GpsAidingData f) 21348c2d3d5afc51d3f35150f748f263870367771b6fEd Tam{ 21358c2d3d5afc51d3f35150f748f263870367771b6fEd Tam ENTRY_LOG_CALLFLOW(); 21368c2d3d5afc51d3f35150f748f263870367771b6fEd Tam INIT_CHECK(loc_eng_data.adapter, return); 21378c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 21388c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data.adapter->sendMsg(new LocEngDelAidData(&loc_eng_data, f)); 21398c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 21408c2d3d5afc51d3f35150f748f263870367771b6fEd Tam EXIT_LOG(%s, VOID_RET); 21418c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 21428c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 21438c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/*=========================================================================== 21448c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 21458c2d3d5afc51d3f35150f748f263870367771b6fEd TamFUNCTION loc_inform_gps_state 21468c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 21478c2d3d5afc51d3f35150f748f263870367771b6fEd TamDESCRIPTION 21488c2d3d5afc51d3f35150f748f263870367771b6fEd Tam Informs the GPS Provider about the GPS status 21498c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 21508c2d3d5afc51d3f35150f748f263870367771b6fEd TamDEPENDENCIES 21518c2d3d5afc51d3f35150f748f263870367771b6fEd Tam None 21528c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 21538c2d3d5afc51d3f35150f748f263870367771b6fEd TamRETURN VALUE 21548c2d3d5afc51d3f35150f748f263870367771b6fEd Tam None 21558c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 21568c2d3d5afc51d3f35150f748f263870367771b6fEd TamSIDE EFFECTS 21578c2d3d5afc51d3f35150f748f263870367771b6fEd Tam N/A 21588c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 21598c2d3d5afc51d3f35150f748f263870367771b6fEd Tam===========================================================================*/ 21608c2d3d5afc51d3f35150f748f263870367771b6fEd Tamstatic void loc_inform_gps_status(loc_eng_data_s_type &loc_eng_data, GpsStatusValue status) 21618c2d3d5afc51d3f35150f748f263870367771b6fEd Tam{ 21628c2d3d5afc51d3f35150f748f263870367771b6fEd Tam ENTRY_LOG(); 21638c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 21648c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (loc_eng_data.status_cb) 21658c2d3d5afc51d3f35150f748f263870367771b6fEd Tam { 21668c2d3d5afc51d3f35150f748f263870367771b6fEd Tam GpsStatus gs = { sizeof(gs),status }; 21678c2d3d5afc51d3f35150f748f263870367771b6fEd Tam CALLBACK_LOG_CALLFLOW("status_cb", %s, 21688c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_get_gps_status_name(gs.status)); 21698c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data.status_cb(&gs); 21708c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 21718c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 21728c2d3d5afc51d3f35150f748f263870367771b6fEd Tam EXIT_LOG(%s, VOID_RET); 21738c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 21748c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 21758c2d3d5afc51d3f35150f748f263870367771b6fEd Tamstatic int loc_eng_get_zpp_handler(loc_eng_data_s_type &loc_eng_data) 21768c2d3d5afc51d3f35150f748f263870367771b6fEd Tam{ 21778c2d3d5afc51d3f35150f748f263870367771b6fEd Tam ENTRY_LOG(); 21788c2d3d5afc51d3f35150f748f263870367771b6fEd Tam int ret_val = LOC_API_ADAPTER_ERR_SUCCESS; 21798c2d3d5afc51d3f35150f748f263870367771b6fEd Tam UlpLocation location; 21808c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocPosTechMask tech_mask = LOC_POS_TECH_MASK_DEFAULT; 21818c2d3d5afc51d3f35150f748f263870367771b6fEd Tam GpsLocationExtended locationExtended; 21828c2d3d5afc51d3f35150f748f263870367771b6fEd Tam memset(&locationExtended, 0, sizeof (GpsLocationExtended)); 21838c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locationExtended.size = sizeof(locationExtended); 21848c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 21858c2d3d5afc51d3f35150f748f263870367771b6fEd Tam ret_val = loc_eng_data.adapter->getZpp(location.gpsLocation, tech_mask); 21868c2d3d5afc51d3f35150f748f263870367771b6fEd Tam //Mark the location source as from ZPP 21878c2d3d5afc51d3f35150f748f263870367771b6fEd Tam location.gpsLocation.flags |= LOCATION_HAS_SOURCE_INFO; 21888c2d3d5afc51d3f35150f748f263870367771b6fEd Tam location.position_source = ULP_LOCATION_IS_FROM_ZPP; 21898c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 21908c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data.adapter->getUlpProxy()->reportPosition(location, 21918c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locationExtended, 21928c2d3d5afc51d3f35150f748f263870367771b6fEd Tam NULL, 21938c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_SESS_SUCCESS, 21948c2d3d5afc51d3f35150f748f263870367771b6fEd Tam tech_mask); 21958c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 21968c2d3d5afc51d3f35150f748f263870367771b6fEd Tam EXIT_LOG(%d, ret_val); 21978c2d3d5afc51d3f35150f748f263870367771b6fEd Tam return ret_val; 21988c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 21998c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 22008c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/* 22018c2d3d5afc51d3f35150f748f263870367771b6fEd Tam Callback function passed to Data Services State Machine 22028c2d3d5afc51d3f35150f748f263870367771b6fEd Tam This becomes part of the state machine's servicer and 22038c2d3d5afc51d3f35150f748f263870367771b6fEd Tam is used to send requests to the data services client 22048c2d3d5afc51d3f35150f748f263870367771b6fEd Tam*/ 22058c2d3d5afc51d3f35150f748f263870367771b6fEd Tamstatic int dataCallCb(void *cb_data) 22068c2d3d5afc51d3f35150f748f263870367771b6fEd Tam{ 22078c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGD("Enter dataCallCb\n"); 22088c2d3d5afc51d3f35150f748f263870367771b6fEd Tam int ret=0; 22098c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if(cb_data != NULL) { 22108c2d3d5afc51d3f35150f748f263870367771b6fEd Tam dsCbData *cbData = (dsCbData *)cb_data; 22118c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocEngAdapter *locAdapter = (LocEngAdapter *)cbData->mAdapter; 22128c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if(cbData->action == GPS_REQUEST_AGPS_DATA_CONN) { 22138c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGD("dataCallCb GPS_REQUEST_AGPS_DATA_CONN\n"); 22148c2d3d5afc51d3f35150f748f263870367771b6fEd Tam ret = locAdapter->openAndStartDataCall(); 22158c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 22168c2d3d5afc51d3f35150f748f263870367771b6fEd Tam else if(cbData->action == GPS_RELEASE_AGPS_DATA_CONN) { 22178c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGD("dataCallCb GPS_RELEASE_AGPS_DATA_CONN\n"); 22188c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locAdapter->stopDataCall(); 22198c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 22208c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 22218c2d3d5afc51d3f35150f748f263870367771b6fEd Tam else { 22228c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGE("NULL argument received. Failing.\n"); 22238c2d3d5afc51d3f35150f748f263870367771b6fEd Tam ret = -1; 22248c2d3d5afc51d3f35150f748f263870367771b6fEd Tam goto err; 22258c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 22268c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 22278c2d3d5afc51d3f35150f748f263870367771b6fEd Tamerr: 22288c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGD("Exit dataCallCb ret = %d\n", ret); 22298c2d3d5afc51d3f35150f748f263870367771b6fEd Tam return ret; 22308c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 22318c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 22328c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/*=========================================================================== 22338c2d3d5afc51d3f35150f748f263870367771b6fEd TamFUNCTION loc_eng_agps_reinit 22348c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 22358c2d3d5afc51d3f35150f748f263870367771b6fEd TamDESCRIPTION 22368c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 2nd half of loc_eng_agps_init(), singled out for modem restart to use. 22378c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 22388c2d3d5afc51d3f35150f748f263870367771b6fEd TamDEPENDENCIES 22398c2d3d5afc51d3f35150f748f263870367771b6fEd Tam NONE 22408c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 22418c2d3d5afc51d3f35150f748f263870367771b6fEd TamRETURN VALUE 22428c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 0 22438c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 22448c2d3d5afc51d3f35150f748f263870367771b6fEd TamSIDE EFFECTS 22458c2d3d5afc51d3f35150f748f263870367771b6fEd Tam N/A 22468c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 22478c2d3d5afc51d3f35150f748f263870367771b6fEd Tam===========================================================================*/ 22488c2d3d5afc51d3f35150f748f263870367771b6fEd Tamstatic void loc_eng_agps_reinit(loc_eng_data_s_type &loc_eng_data) 22498c2d3d5afc51d3f35150f748f263870367771b6fEd Tam{ 22508c2d3d5afc51d3f35150f748f263870367771b6fEd Tam ENTRY_LOG(); 22518c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 22528c2d3d5afc51d3f35150f748f263870367771b6fEd Tam // Set server addresses which came before init 22538c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (loc_eng_data.supl_host_set) 22548c2d3d5afc51d3f35150f748f263870367771b6fEd Tam { 22558c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_set_server(loc_eng_data, LOC_AGPS_SUPL_SERVER, 22568c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data.supl_host_buf, 22578c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data.supl_port_buf); 22588c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 22598c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 22608c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (loc_eng_data.c2k_host_set) 22618c2d3d5afc51d3f35150f748f263870367771b6fEd Tam { 22628c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_set_server(loc_eng_data, LOC_AGPS_CDMA_PDE_SERVER, 22638c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data.c2k_host_buf, 22648c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data.c2k_port_buf); 22658c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 22668c2d3d5afc51d3f35150f748f263870367771b6fEd Tam EXIT_LOG(%s, VOID_RET); 22678c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 22688c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/*=========================================================================== 22698c2d3d5afc51d3f35150f748f263870367771b6fEd TamFUNCTION loc_eng_agps_init 22708c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 22718c2d3d5afc51d3f35150f748f263870367771b6fEd TamDESCRIPTION 22728c2d3d5afc51d3f35150f748f263870367771b6fEd Tam Initialize the AGps interface. 22738c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 22748c2d3d5afc51d3f35150f748f263870367771b6fEd TamDEPENDENCIES 22758c2d3d5afc51d3f35150f748f263870367771b6fEd Tam NONE 22768c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 22778c2d3d5afc51d3f35150f748f263870367771b6fEd TamRETURN VALUE 22788c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 0 22798c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 22808c2d3d5afc51d3f35150f748f263870367771b6fEd TamSIDE EFFECTS 22818c2d3d5afc51d3f35150f748f263870367771b6fEd Tam N/A 22828c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 22838c2d3d5afc51d3f35150f748f263870367771b6fEd Tam===========================================================================*/ 22848c2d3d5afc51d3f35150f748f263870367771b6fEd Tamvoid loc_eng_agps_init(loc_eng_data_s_type &loc_eng_data, AGpsExtCallbacks* callbacks) 22858c2d3d5afc51d3f35150f748f263870367771b6fEd Tam{ 22868c2d3d5afc51d3f35150f748f263870367771b6fEd Tam ENTRY_LOG_CALLFLOW(); 22878c2d3d5afc51d3f35150f748f263870367771b6fEd Tam INIT_CHECK(loc_eng_data.adapter, return); 22888c2d3d5afc51d3f35150f748f263870367771b6fEd Tam STATE_CHECK((NULL == loc_eng_data.agps_status_cb), 22898c2d3d5afc51d3f35150f748f263870367771b6fEd Tam "agps instance already initialized", 22908c2d3d5afc51d3f35150f748f263870367771b6fEd Tam return); 22918c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (callbacks == NULL) { 22928c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGE("loc_eng_agps_init: bad parameters cb %p", callbacks); 22938c2d3d5afc51d3f35150f748f263870367771b6fEd Tam EXIT_LOG(%s, VOID_RET); 22948c2d3d5afc51d3f35150f748f263870367771b6fEd Tam return; 22958c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 22968c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocEngAdapter* adapter = loc_eng_data.adapter; 22978c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data.agps_status_cb = callbacks->status_cb; 22988c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 22998c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data.internet_nif = new AgpsStateMachine(servicerTypeAgps, 23008c2d3d5afc51d3f35150f748f263870367771b6fEd Tam (void *)loc_eng_data.agps_status_cb, 23018c2d3d5afc51d3f35150f748f263870367771b6fEd Tam AGPS_TYPE_WWAN_ANY, 23028c2d3d5afc51d3f35150f748f263870367771b6fEd Tam false); 23038c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data.wifi_nif = new AgpsStateMachine(servicerTypeAgps, 23048c2d3d5afc51d3f35150f748f263870367771b6fEd Tam (void *)loc_eng_data.agps_status_cb, 23058c2d3d5afc51d3f35150f748f263870367771b6fEd Tam AGPS_TYPE_WIFI, 23068c2d3d5afc51d3f35150f748f263870367771b6fEd Tam true); 23078c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 23088c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if ((gps_conf.CAPABILITIES & GPS_CAPABILITY_MSA) || 23098c2d3d5afc51d3f35150f748f263870367771b6fEd Tam (gps_conf.CAPABILITIES & GPS_CAPABILITY_MSB)) { 23108c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data.agnss_nif = new AgpsStateMachine(servicerTypeAgps, 23118c2d3d5afc51d3f35150f748f263870367771b6fEd Tam (void *)loc_eng_data.agps_status_cb, 23128c2d3d5afc51d3f35150f748f263870367771b6fEd Tam AGPS_TYPE_SUPL, 23138c2d3d5afc51d3f35150f748f263870367771b6fEd Tam false); 23148c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 23158c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (adapter->mSupportsAgpsRequests) { 23168c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if(gps_conf.USE_EMERGENCY_PDN_FOR_EMERGENCY_SUPL) { 23178c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data.adapter->sendMsg(new LocEngDataClientInit(&loc_eng_data)); 23188c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 23198c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_dmn_conn_loc_api_server_launch(callbacks->create_thread_cb, 23208c2d3d5afc51d3f35150f748f263870367771b6fEd Tam NULL, NULL, &loc_eng_data); 23218c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 23228c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_agps_reinit(loc_eng_data); 23238c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 23248c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 23258c2d3d5afc51d3f35150f748f263870367771b6fEd Tam EXIT_LOG(%s, VOID_RET); 23268c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 23278c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 23288c2d3d5afc51d3f35150f748f263870367771b6fEd Tamstatic void deleteAidingData(loc_eng_data_s_type &logEng) { 23298c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (logEng.engine_status != GPS_STATUS_ENGINE_ON && 23308c2d3d5afc51d3f35150f748f263870367771b6fEd Tam logEng.aiding_data_for_deletion != 0) { 23318c2d3d5afc51d3f35150f748f263870367771b6fEd Tam logEng.adapter->deleteAidingData(logEng.aiding_data_for_deletion); 23328c2d3d5afc51d3f35150f748f263870367771b6fEd Tam logEng.aiding_data_for_deletion = 0; 23338c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 23348c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 23358c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 23368c2d3d5afc51d3f35150f748f263870367771b6fEd Tamstatic AgpsStateMachine* 23378c2d3d5afc51d3f35150f748f263870367771b6fEd TamgetAgpsStateMachine(loc_eng_data_s_type &locEng, AGpsExtType agpsType) { 23388c2d3d5afc51d3f35150f748f263870367771b6fEd Tam AgpsStateMachine* stateMachine; 23398c2d3d5afc51d3f35150f748f263870367771b6fEd Tam switch (agpsType) { 23408c2d3d5afc51d3f35150f748f263870367771b6fEd Tam case AGPS_TYPE_WIFI: { 23418c2d3d5afc51d3f35150f748f263870367771b6fEd Tam stateMachine = locEng.wifi_nif; 23428c2d3d5afc51d3f35150f748f263870367771b6fEd Tam break; 23438c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 23448c2d3d5afc51d3f35150f748f263870367771b6fEd Tam case AGPS_TYPE_INVALID: 23458c2d3d5afc51d3f35150f748f263870367771b6fEd Tam case AGPS_TYPE_SUPL: { 23468c2d3d5afc51d3f35150f748f263870367771b6fEd Tam stateMachine = locEng.agnss_nif; 23478c2d3d5afc51d3f35150f748f263870367771b6fEd Tam break; 23488c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 23498c2d3d5afc51d3f35150f748f263870367771b6fEd Tam case AGPS_TYPE_SUPL_ES: { 23508c2d3d5afc51d3f35150f748f263870367771b6fEd Tam locEng.ds_nif ? 23518c2d3d5afc51d3f35150f748f263870367771b6fEd Tam stateMachine = locEng.ds_nif: 23528c2d3d5afc51d3f35150f748f263870367771b6fEd Tam stateMachine = locEng.agnss_nif; 23538c2d3d5afc51d3f35150f748f263870367771b6fEd Tam break; 23548c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 23558c2d3d5afc51d3f35150f748f263870367771b6fEd Tam default: 23568c2d3d5afc51d3f35150f748f263870367771b6fEd Tam stateMachine = locEng.internet_nif; 23578c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 23588c2d3d5afc51d3f35150f748f263870367771b6fEd Tam return stateMachine; 23598c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 23608c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 23618c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/*=========================================================================== 23628c2d3d5afc51d3f35150f748f263870367771b6fEd TamFUNCTION loc_eng_agps_open 23638c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 23648c2d3d5afc51d3f35150f748f263870367771b6fEd TamDESCRIPTION 23658c2d3d5afc51d3f35150f748f263870367771b6fEd Tam This function is called when on-demand data connection opening is successful. 23668c2d3d5afc51d3f35150f748f263870367771b6fEd TamIt should inform engine about the data open result. 23678c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 23688c2d3d5afc51d3f35150f748f263870367771b6fEd TamDEPENDENCIES 23698c2d3d5afc51d3f35150f748f263870367771b6fEd Tam NONE 23708c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 23718c2d3d5afc51d3f35150f748f263870367771b6fEd TamRETURN VALUE 23728c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 0 23738c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 23748c2d3d5afc51d3f35150f748f263870367771b6fEd TamSIDE EFFECTS 23758c2d3d5afc51d3f35150f748f263870367771b6fEd Tam N/A 23768c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 23778c2d3d5afc51d3f35150f748f263870367771b6fEd Tam===========================================================================*/ 23788c2d3d5afc51d3f35150f748f263870367771b6fEd Tamint loc_eng_agps_open(loc_eng_data_s_type &loc_eng_data, AGpsExtType agpsType, 23798c2d3d5afc51d3f35150f748f263870367771b6fEd Tam const char* apn, AGpsBearerType bearerType) 23808c2d3d5afc51d3f35150f748f263870367771b6fEd Tam{ 23818c2d3d5afc51d3f35150f748f263870367771b6fEd Tam ENTRY_LOG_CALLFLOW(); 23828c2d3d5afc51d3f35150f748f263870367771b6fEd Tam INIT_CHECK(loc_eng_data.adapter && loc_eng_data.agps_status_cb, 23838c2d3d5afc51d3f35150f748f263870367771b6fEd Tam return -1); 23848c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 23858c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (apn == NULL) 23868c2d3d5afc51d3f35150f748f263870367771b6fEd Tam { 23878c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGE("APN Name NULL\n"); 23888c2d3d5afc51d3f35150f748f263870367771b6fEd Tam return 0; 23898c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 23908c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 23918c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGD("loc_eng_agps_open APN name = [%s]", apn); 23928c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 23938c2d3d5afc51d3f35150f748f263870367771b6fEd Tam int apn_len = smaller_of(strlen (apn), MAX_APN_LEN); 23948c2d3d5afc51d3f35150f748f263870367771b6fEd Tam AgpsStateMachine* sm = getAgpsStateMachine(loc_eng_data, agpsType); 23958c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 23968c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data.adapter->sendMsg( 23978c2d3d5afc51d3f35150f748f263870367771b6fEd Tam new LocEngAtlOpenSuccess(sm, apn, apn_len, bearerType)); 23988c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 23998c2d3d5afc51d3f35150f748f263870367771b6fEd Tam EXIT_LOG(%d, 0); 24008c2d3d5afc51d3f35150f748f263870367771b6fEd Tam return 0; 24018c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 24028c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 24038c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/*=========================================================================== 24048c2d3d5afc51d3f35150f748f263870367771b6fEd TamFUNCTION loc_eng_agps_closed 24058c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 24068c2d3d5afc51d3f35150f748f263870367771b6fEd TamDESCRIPTION 24078c2d3d5afc51d3f35150f748f263870367771b6fEd Tam This function is called when on-demand data connection closing is done. 24088c2d3d5afc51d3f35150f748f263870367771b6fEd TamIt should inform engine about the data close result. 24098c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 24108c2d3d5afc51d3f35150f748f263870367771b6fEd TamDEPENDENCIES 24118c2d3d5afc51d3f35150f748f263870367771b6fEd Tam NONE 24128c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 24138c2d3d5afc51d3f35150f748f263870367771b6fEd TamRETURN VALUE 24148c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 0 24158c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 24168c2d3d5afc51d3f35150f748f263870367771b6fEd TamSIDE EFFECTS 24178c2d3d5afc51d3f35150f748f263870367771b6fEd Tam N/A 24188c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 24198c2d3d5afc51d3f35150f748f263870367771b6fEd Tam===========================================================================*/ 24208c2d3d5afc51d3f35150f748f263870367771b6fEd Tamint loc_eng_agps_closed(loc_eng_data_s_type &loc_eng_data, AGpsExtType agpsType) 24218c2d3d5afc51d3f35150f748f263870367771b6fEd Tam{ 24228c2d3d5afc51d3f35150f748f263870367771b6fEd Tam ENTRY_LOG_CALLFLOW(); 24238c2d3d5afc51d3f35150f748f263870367771b6fEd Tam INIT_CHECK(loc_eng_data.adapter && loc_eng_data.agps_status_cb, 24248c2d3d5afc51d3f35150f748f263870367771b6fEd Tam return -1); 24258c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 24268c2d3d5afc51d3f35150f748f263870367771b6fEd Tam AgpsStateMachine* sm = getAgpsStateMachine(loc_eng_data, agpsType); 24278c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data.adapter->sendMsg(new LocEngAtlClosed(sm)); 24288c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 24298c2d3d5afc51d3f35150f748f263870367771b6fEd Tam EXIT_LOG(%d, 0); 24308c2d3d5afc51d3f35150f748f263870367771b6fEd Tam return 0; 24318c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 24328c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 24338c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/*=========================================================================== 24348c2d3d5afc51d3f35150f748f263870367771b6fEd TamFUNCTION loc_eng_agps_open_failed 24358c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 24368c2d3d5afc51d3f35150f748f263870367771b6fEd TamDESCRIPTION 24378c2d3d5afc51d3f35150f748f263870367771b6fEd Tam This function is called when on-demand data connection opening has failed. 24388c2d3d5afc51d3f35150f748f263870367771b6fEd TamIt should inform engine about the data open result. 24398c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 24408c2d3d5afc51d3f35150f748f263870367771b6fEd TamDEPENDENCIES 24418c2d3d5afc51d3f35150f748f263870367771b6fEd Tam NONE 24428c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 24438c2d3d5afc51d3f35150f748f263870367771b6fEd TamRETURN VALUE 24448c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 0 24458c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 24468c2d3d5afc51d3f35150f748f263870367771b6fEd TamSIDE EFFECTS 24478c2d3d5afc51d3f35150f748f263870367771b6fEd Tam N/A 24488c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 24498c2d3d5afc51d3f35150f748f263870367771b6fEd Tam===========================================================================*/ 24508c2d3d5afc51d3f35150f748f263870367771b6fEd Tamint loc_eng_agps_open_failed(loc_eng_data_s_type &loc_eng_data, AGpsExtType agpsType) 24518c2d3d5afc51d3f35150f748f263870367771b6fEd Tam{ 24528c2d3d5afc51d3f35150f748f263870367771b6fEd Tam ENTRY_LOG_CALLFLOW(); 24538c2d3d5afc51d3f35150f748f263870367771b6fEd Tam INIT_CHECK(loc_eng_data.adapter && loc_eng_data.agps_status_cb, 24548c2d3d5afc51d3f35150f748f263870367771b6fEd Tam return -1); 24558c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 24568c2d3d5afc51d3f35150f748f263870367771b6fEd Tam AgpsStateMachine* sm = getAgpsStateMachine(loc_eng_data, agpsType); 24578c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data.adapter->sendMsg(new LocEngAtlOpenFailed(sm)); 24588c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 24598c2d3d5afc51d3f35150f748f263870367771b6fEd Tam EXIT_LOG(%d, 0); 24608c2d3d5afc51d3f35150f748f263870367771b6fEd Tam return 0; 24618c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 24628c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 24638c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/*=========================================================================== 24648c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 24658c2d3d5afc51d3f35150f748f263870367771b6fEd TamFUNCTION resolve_in_addr 24668c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 24678c2d3d5afc51d3f35150f748f263870367771b6fEd TamDESCRIPTION 24688c2d3d5afc51d3f35150f748f263870367771b6fEd Tam Translates a hostname to in_addr struct 24698c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 24708c2d3d5afc51d3f35150f748f263870367771b6fEd TamDEPENDENCIES 24718c2d3d5afc51d3f35150f748f263870367771b6fEd Tam n/a 24728c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 24738c2d3d5afc51d3f35150f748f263870367771b6fEd TamRETURN VALUE 24748c2d3d5afc51d3f35150f748f263870367771b6fEd Tam TRUE if successful 24758c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 24768c2d3d5afc51d3f35150f748f263870367771b6fEd TamSIDE EFFECTS 24778c2d3d5afc51d3f35150f748f263870367771b6fEd Tam n/a 24788c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 24798c2d3d5afc51d3f35150f748f263870367771b6fEd Tam===========================================================================*/ 24808c2d3d5afc51d3f35150f748f263870367771b6fEd Tamstatic boolean resolve_in_addr(const char *host_addr, struct in_addr *in_addr_ptr) 24818c2d3d5afc51d3f35150f748f263870367771b6fEd Tam{ 24828c2d3d5afc51d3f35150f748f263870367771b6fEd Tam ENTRY_LOG(); 24838c2d3d5afc51d3f35150f748f263870367771b6fEd Tam boolean ret_val = TRUE; 24848c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 24858c2d3d5afc51d3f35150f748f263870367771b6fEd Tam struct hostent *hp; 24868c2d3d5afc51d3f35150f748f263870367771b6fEd Tam hp = gethostbyname(host_addr); 24878c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (hp != NULL) /* DNS OK */ 24888c2d3d5afc51d3f35150f748f263870367771b6fEd Tam { 24898c2d3d5afc51d3f35150f748f263870367771b6fEd Tam memcpy(in_addr_ptr, hp->h_addr_list[0], hp->h_length); 24908c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 24918c2d3d5afc51d3f35150f748f263870367771b6fEd Tam else 24928c2d3d5afc51d3f35150f748f263870367771b6fEd Tam { 24938c2d3d5afc51d3f35150f748f263870367771b6fEd Tam /* Try IP representation */ 24948c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (inet_aton(host_addr, in_addr_ptr) == 0) 24958c2d3d5afc51d3f35150f748f263870367771b6fEd Tam { 24968c2d3d5afc51d3f35150f748f263870367771b6fEd Tam /* IP not valid */ 24978c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGE("DNS query on '%s' failed\n", host_addr); 24988c2d3d5afc51d3f35150f748f263870367771b6fEd Tam ret_val = FALSE; 24998c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 25008c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 25018c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 25028c2d3d5afc51d3f35150f748f263870367771b6fEd Tam EXIT_LOG(%s, loc_logger_boolStr[ret_val!=0]); 25038c2d3d5afc51d3f35150f748f263870367771b6fEd Tam return ret_val; 25048c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 25058c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 25068c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/*=========================================================================== 25078c2d3d5afc51d3f35150f748f263870367771b6fEd TamFUNCTION loc_eng_set_server 25088c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 25098c2d3d5afc51d3f35150f748f263870367771b6fEd TamDESCRIPTION 25108c2d3d5afc51d3f35150f748f263870367771b6fEd Tam This is used to set the default AGPS server. Server address is obtained 25118c2d3d5afc51d3f35150f748f263870367771b6fEd Tam from gps.conf. 25128c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 25138c2d3d5afc51d3f35150f748f263870367771b6fEd TamDEPENDENCIES 25148c2d3d5afc51d3f35150f748f263870367771b6fEd Tam NONE 25158c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 25168c2d3d5afc51d3f35150f748f263870367771b6fEd TamRETURN VALUE 25178c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 0 25188c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 25198c2d3d5afc51d3f35150f748f263870367771b6fEd TamSIDE EFFECTS 25208c2d3d5afc51d3f35150f748f263870367771b6fEd Tam N/A 25218c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 25228c2d3d5afc51d3f35150f748f263870367771b6fEd Tam===========================================================================*/ 25238c2d3d5afc51d3f35150f748f263870367771b6fEd Tamstatic int loc_eng_set_server(loc_eng_data_s_type &loc_eng_data, 25248c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocServerType type, const char* hostname, int port) 25258c2d3d5afc51d3f35150f748f263870367771b6fEd Tam{ 25268c2d3d5afc51d3f35150f748f263870367771b6fEd Tam ENTRY_LOG(); 25278c2d3d5afc51d3f35150f748f263870367771b6fEd Tam int ret = 0; 25288c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocEngAdapter* adapter = loc_eng_data.adapter; 25298c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 25308c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (LOC_AGPS_SUPL_SERVER == type) { 25318c2d3d5afc51d3f35150f748f263870367771b6fEd Tam char url[MAX_URL_LEN]; 25328c2d3d5afc51d3f35150f748f263870367771b6fEd Tam unsigned int len = 0; 25338c2d3d5afc51d3f35150f748f263870367771b6fEd Tam const char nohost[] = "NONE"; 25348c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (hostname == NULL || 25358c2d3d5afc51d3f35150f748f263870367771b6fEd Tam strncasecmp(nohost, hostname, sizeof(nohost)) == 0) { 25368c2d3d5afc51d3f35150f748f263870367771b6fEd Tam url[0] = NULL; 25378c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } else { 25388c2d3d5afc51d3f35150f748f263870367771b6fEd Tam len = snprintf(url, sizeof(url), "%s:%u", hostname, (unsigned) port); 25398c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 25408c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 25418c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (sizeof(url) > len) { 25428c2d3d5afc51d3f35150f748f263870367771b6fEd Tam adapter->sendMsg(new LocEngSetServerUrl(adapter, url, len)); 25438c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 25448c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } else if (LOC_AGPS_CDMA_PDE_SERVER == type || 25458c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_AGPS_CUSTOM_PDE_SERVER == type || 25468c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_AGPS_MPC_SERVER == type) { 25478c2d3d5afc51d3f35150f748f263870367771b6fEd Tam struct in_addr addr; 25488c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (!resolve_in_addr(hostname, &addr)) 25498c2d3d5afc51d3f35150f748f263870367771b6fEd Tam { 25508c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGE("loc_eng_set_server, hostname %s cannot be resolved.\n", hostname); 25518c2d3d5afc51d3f35150f748f263870367771b6fEd Tam ret = -2; 25528c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } else { 25538c2d3d5afc51d3f35150f748f263870367771b6fEd Tam unsigned int ip = htonl(addr.s_addr); 25548c2d3d5afc51d3f35150f748f263870367771b6fEd Tam adapter->sendMsg(new LocEngSetServerIpv4(adapter, ip, port, type)); 25558c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 25568c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } else { 25578c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGE("loc_eng_set_server, type %d cannot be resolved.\n", type); 25588c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 25598c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 25608c2d3d5afc51d3f35150f748f263870367771b6fEd Tam EXIT_LOG(%d, ret); 25618c2d3d5afc51d3f35150f748f263870367771b6fEd Tam return ret; 25628c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 25638c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 25648c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/*=========================================================================== 25658c2d3d5afc51d3f35150f748f263870367771b6fEd TamFUNCTION loc_eng_set_server_proxy 25668c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 25678c2d3d5afc51d3f35150f748f263870367771b6fEd TamDESCRIPTION 25688c2d3d5afc51d3f35150f748f263870367771b6fEd Tam If loc_eng_set_server is called before loc_eng_init, it doesn't work. This 25698c2d3d5afc51d3f35150f748f263870367771b6fEd Tam proxy buffers server settings and calls loc_eng_set_server when the client is 25708c2d3d5afc51d3f35150f748f263870367771b6fEd Tam open. 25718c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 25728c2d3d5afc51d3f35150f748f263870367771b6fEd TamDEPENDENCIES 25738c2d3d5afc51d3f35150f748f263870367771b6fEd Tam NONE 25748c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 25758c2d3d5afc51d3f35150f748f263870367771b6fEd TamRETURN VALUE 25768c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 0 25778c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 25788c2d3d5afc51d3f35150f748f263870367771b6fEd TamSIDE EFFECTS 25798c2d3d5afc51d3f35150f748f263870367771b6fEd Tam N/A 25808c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 25818c2d3d5afc51d3f35150f748f263870367771b6fEd Tam===========================================================================*/ 25828c2d3d5afc51d3f35150f748f263870367771b6fEd Tamint loc_eng_set_server_proxy(loc_eng_data_s_type &loc_eng_data, 25838c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocServerType type, 25848c2d3d5afc51d3f35150f748f263870367771b6fEd Tam const char* hostname, int port) 25858c2d3d5afc51d3f35150f748f263870367771b6fEd Tam{ 25868c2d3d5afc51d3f35150f748f263870367771b6fEd Tam ENTRY_LOG_CALLFLOW(); 25878c2d3d5afc51d3f35150f748f263870367771b6fEd Tam int ret_val = 0; 25888c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 25898c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (NULL != loc_eng_data.adapter) 25908c2d3d5afc51d3f35150f748f263870367771b6fEd Tam { 25918c2d3d5afc51d3f35150f748f263870367771b6fEd Tam ret_val = loc_eng_set_server(loc_eng_data, type, hostname, port); 25928c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } else { 25938c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGW("set_server called before init. save the address, type: %d, hostname: %s, port: %d", 25948c2d3d5afc51d3f35150f748f263870367771b6fEd Tam (int) type, hostname, port); 25958c2d3d5afc51d3f35150f748f263870367771b6fEd Tam switch (type) 25968c2d3d5afc51d3f35150f748f263870367771b6fEd Tam { 25978c2d3d5afc51d3f35150f748f263870367771b6fEd Tam case LOC_AGPS_SUPL_SERVER: 25988c2d3d5afc51d3f35150f748f263870367771b6fEd Tam strlcpy(loc_eng_data.supl_host_buf, hostname, 25998c2d3d5afc51d3f35150f748f263870367771b6fEd Tam sizeof(loc_eng_data.supl_host_buf)); 26008c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data.supl_port_buf = port; 26018c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data.supl_host_set = 1; 26028c2d3d5afc51d3f35150f748f263870367771b6fEd Tam break; 26038c2d3d5afc51d3f35150f748f263870367771b6fEd Tam case LOC_AGPS_CDMA_PDE_SERVER: 26048c2d3d5afc51d3f35150f748f263870367771b6fEd Tam strlcpy(loc_eng_data.c2k_host_buf, hostname, 26058c2d3d5afc51d3f35150f748f263870367771b6fEd Tam sizeof(loc_eng_data.c2k_host_buf)); 26068c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data.c2k_port_buf = port; 26078c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data.c2k_host_set = 1; 26088c2d3d5afc51d3f35150f748f263870367771b6fEd Tam break; 26098c2d3d5afc51d3f35150f748f263870367771b6fEd Tam default: 26108c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGE("loc_eng_set_server_proxy, unknown server type = %d", (int) type); 26118c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 26128c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 26138c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 26148c2d3d5afc51d3f35150f748f263870367771b6fEd Tam EXIT_LOG(%d, ret_val); 26158c2d3d5afc51d3f35150f748f263870367771b6fEd Tam return ret_val; 26168c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 26178c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 26188c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/*=========================================================================== 26198c2d3d5afc51d3f35150f748f263870367771b6fEd TamFUNCTION loc_eng_agps_ril_update_network_availability 26208c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 26218c2d3d5afc51d3f35150f748f263870367771b6fEd TamDESCRIPTION 26228c2d3d5afc51d3f35150f748f263870367771b6fEd Tam Sets data call allow vs disallow flag to modem 26238c2d3d5afc51d3f35150f748f263870367771b6fEd Tam This is the only member of sLocEngAGpsRilInterface implemented. 26248c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 26258c2d3d5afc51d3f35150f748f263870367771b6fEd TamDEPENDENCIES 26268c2d3d5afc51d3f35150f748f263870367771b6fEd Tam None 26278c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 26288c2d3d5afc51d3f35150f748f263870367771b6fEd TamRETURN VALUE 26298c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 0: success 26308c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 26318c2d3d5afc51d3f35150f748f263870367771b6fEd TamSIDE EFFECTS 26328c2d3d5afc51d3f35150f748f263870367771b6fEd Tam N/A 26338c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 26348c2d3d5afc51d3f35150f748f263870367771b6fEd Tam===========================================================================*/ 26358c2d3d5afc51d3f35150f748f263870367771b6fEd Tamvoid loc_eng_agps_ril_update_network_availability(loc_eng_data_s_type &loc_eng_data, 26368c2d3d5afc51d3f35150f748f263870367771b6fEd Tam int available, const char* apn) 26378c2d3d5afc51d3f35150f748f263870367771b6fEd Tam{ 26388c2d3d5afc51d3f35150f748f263870367771b6fEd Tam ENTRY_LOG_CALLFLOW(); 26398c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 26408c2d3d5afc51d3f35150f748f263870367771b6fEd Tam //This is to store the status of data availability over the network. 26418c2d3d5afc51d3f35150f748f263870367771b6fEd Tam //If GPS is not enabled, the INIT_CHECK will fail and the modem will 26428c2d3d5afc51d3f35150f748f263870367771b6fEd Tam //not be updated with the network's availability. Since the data status 26438c2d3d5afc51d3f35150f748f263870367771b6fEd Tam //can change before GPS is enabled the, storing the status will enable 26448c2d3d5afc51d3f35150f748f263870367771b6fEd Tam //us to inform the modem after GPS is enabled 26458c2d3d5afc51d3f35150f748f263870367771b6fEd Tam agpsStatus = available; 26468c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 26478c2d3d5afc51d3f35150f748f263870367771b6fEd Tam INIT_CHECK(loc_eng_data.adapter, return); 26488c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (apn != NULL) 26498c2d3d5afc51d3f35150f748f263870367771b6fEd Tam { 26508c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGD("loc_eng_agps_ril_update_network_availability: APN Name = [%s]\n", apn); 26518c2d3d5afc51d3f35150f748f263870367771b6fEd Tam int apn_len = smaller_of(strlen (apn), MAX_APN_LEN); 26528c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocEngAdapter* adapter = loc_eng_data.adapter; 26538c2d3d5afc51d3f35150f748f263870367771b6fEd Tam adapter->sendMsg(new LocEngEnableData(adapter, apn, apn_len, available)); 26548c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 26558c2d3d5afc51d3f35150f748f263870367771b6fEd Tam EXIT_LOG(%s, VOID_RET); 26568c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 26578c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 26588c2d3d5afc51d3f35150f748f263870367771b6fEd Tamint loc_eng_agps_install_certificates(loc_eng_data_s_type &loc_eng_data, 26598c2d3d5afc51d3f35150f748f263870367771b6fEd Tam const DerEncodedCertificate* certificates, 26608c2d3d5afc51d3f35150f748f263870367771b6fEd Tam size_t numberOfCerts) 26618c2d3d5afc51d3f35150f748f263870367771b6fEd Tam{ 26628c2d3d5afc51d3f35150f748f263870367771b6fEd Tam ENTRY_LOG_CALLFLOW(); 26638c2d3d5afc51d3f35150f748f263870367771b6fEd Tam int ret_val = AGPS_CERTIFICATE_OPERATION_SUCCESS; 26648c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 26658c2d3d5afc51d3f35150f748f263870367771b6fEd Tam uint32_t slotBitMask = gps_conf.AGPS_CERT_WRITABLE_MASK; 26668c2d3d5afc51d3f35150f748f263870367771b6fEd Tam uint32_t slotCount = 0; 26678c2d3d5afc51d3f35150f748f263870367771b6fEd Tam for (uint32_t slotBitMaskCounter=slotBitMask; slotBitMaskCounter; slotCount++) { 26688c2d3d5afc51d3f35150f748f263870367771b6fEd Tam slotBitMaskCounter &= slotBitMaskCounter - 1; 26698c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 26708c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGD("SlotBitMask=%u SlotCount=%u NumberOfCerts=%u", 26718c2d3d5afc51d3f35150f748f263870367771b6fEd Tam slotBitMask, slotCount, numberOfCerts); 26728c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 26738c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocEngAdapter* adapter = loc_eng_data.adapter; 26748c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 26758c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (numberOfCerts == 0) { 26768c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGE("No certs to install, since numberOfCerts is zero"); 26778c2d3d5afc51d3f35150f748f263870367771b6fEd Tam ret_val = AGPS_CERTIFICATE_OPERATION_SUCCESS; 26788c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } else if (!adapter) { 26798c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGE("adapter is null!"); 26808c2d3d5afc51d3f35150f748f263870367771b6fEd Tam ret_val = AGPS_CERTIFICATE_ERROR_GENERIC; 26818c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } else if (slotCount < numberOfCerts) { 26828c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGE("Not enough cert slots (%u) to install %u certs!", 26838c2d3d5afc51d3f35150f748f263870367771b6fEd Tam slotCount, numberOfCerts); 26848c2d3d5afc51d3f35150f748f263870367771b6fEd Tam ret_val = AGPS_CERTIFICATE_ERROR_TOO_MANY_CERTIFICATES; 26858c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } else { 26868c2d3d5afc51d3f35150f748f263870367771b6fEd Tam for (int i=0; i < numberOfCerts; ++i) 26878c2d3d5afc51d3f35150f748f263870367771b6fEd Tam { 26888c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (certificates[i].length > AGPS_CERTIFICATE_MAX_LENGTH) { 26898c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGE("cert#(%u) length of %u is too big! greater than %u", 26908c2d3d5afc51d3f35150f748f263870367771b6fEd Tam certificates[i].length, AGPS_CERTIFICATE_MAX_LENGTH); 26918c2d3d5afc51d3f35150f748f263870367771b6fEd Tam ret_val = AGPS_CERTIFICATE_ERROR_GENERIC; 26928c2d3d5afc51d3f35150f748f263870367771b6fEd Tam break; 26938c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 26948c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 26958c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 26968c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (ret_val == AGPS_CERTIFICATE_OPERATION_SUCCESS) { 26978c2d3d5afc51d3f35150f748f263870367771b6fEd Tam adapter->sendMsg(new LocEngInstallAGpsCert(adapter, 26988c2d3d5afc51d3f35150f748f263870367771b6fEd Tam certificates, 26998c2d3d5afc51d3f35150f748f263870367771b6fEd Tam numberOfCerts, 27008c2d3d5afc51d3f35150f748f263870367771b6fEd Tam slotBitMask)); 27018c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 27028c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 27038c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 27048c2d3d5afc51d3f35150f748f263870367771b6fEd Tam EXIT_LOG(%d, ret_val); 27058c2d3d5afc51d3f35150f748f263870367771b6fEd Tam return ret_val; 27068c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 27078c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 27088c2d3d5afc51d3f35150f748f263870367771b6fEd Tamvoid loc_eng_configuration_update (loc_eng_data_s_type &loc_eng_data, 27098c2d3d5afc51d3f35150f748f263870367771b6fEd Tam const char* config_data, int32_t length) 27108c2d3d5afc51d3f35150f748f263870367771b6fEd Tam{ 27118c2d3d5afc51d3f35150f748f263870367771b6fEd Tam ENTRY_LOG_CALLFLOW(); 27128c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 27138c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (config_data && length > 0) { 27148c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_gps_cfg_s_type gps_conf_tmp = gps_conf; 27158c2d3d5afc51d3f35150f748f263870367771b6fEd Tam UTIL_UPDATE_CONF(config_data, length, gps_conf_table); 27168c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LocEngAdapter* adapter = loc_eng_data.adapter; 27178c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 27188c2d3d5afc51d3f35150f748f263870367771b6fEd Tam // it is possible that HAL is not init'ed at this time 27198c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (adapter) { 27208c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (gps_conf_tmp.SUPL_VER != gps_conf.SUPL_VER) { 27218c2d3d5afc51d3f35150f748f263870367771b6fEd Tam adapter->sendMsg(new LocEngSuplVer(adapter, gps_conf.SUPL_VER)); 27228c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 27238c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (gps_conf_tmp.LPP_PROFILE != gps_conf.LPP_PROFILE) { 27248c2d3d5afc51d3f35150f748f263870367771b6fEd Tam adapter->sendMsg(new LocEngLppConfig(adapter, gps_conf.LPP_PROFILE)); 27258c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 27268c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (gps_conf_tmp.A_GLONASS_POS_PROTOCOL_SELECT != gps_conf.A_GLONASS_POS_PROTOCOL_SELECT) { 27278c2d3d5afc51d3f35150f748f263870367771b6fEd Tam adapter->sendMsg(new LocEngAGlonassProtocol(adapter, 27288c2d3d5afc51d3f35150f748f263870367771b6fEd Tam gps_conf.A_GLONASS_POS_PROTOCOL_SELECT)); 27298c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 27308c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (gps_conf_tmp.SUPL_MODE != gps_conf.SUPL_MODE) { 27318c2d3d5afc51d3f35150f748f263870367771b6fEd Tam adapter->sendMsg(new LocEngSuplMode(adapter->getUlpProxy())); 27328c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 27338c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 27348c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 27358c2d3d5afc51d3f35150f748f263870367771b6fEd Tam gps_conf_tmp.SUPL_VER = gps_conf.SUPL_VER; 27368c2d3d5afc51d3f35150f748f263870367771b6fEd Tam gps_conf_tmp.LPP_PROFILE = gps_conf.LPP_PROFILE; 27378c2d3d5afc51d3f35150f748f263870367771b6fEd Tam gps_conf_tmp.A_GLONASS_POS_PROTOCOL_SELECT = gps_conf.A_GLONASS_POS_PROTOCOL_SELECT; 27388c2d3d5afc51d3f35150f748f263870367771b6fEd Tam gps_conf_tmp.GPS_LOCK = gps_conf.GPS_LOCK; 27398c2d3d5afc51d3f35150f748f263870367771b6fEd Tam gps_conf = gps_conf_tmp; 27408c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 27418c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 27428c2d3d5afc51d3f35150f748f263870367771b6fEd Tam EXIT_LOG(%s, VOID_RET); 27438c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 27448c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 27458c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/*=========================================================================== 27468c2d3d5afc51d3f35150f748f263870367771b6fEd TamFUNCTION loc_eng_report_status 27478c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 27488c2d3d5afc51d3f35150f748f263870367771b6fEd TamDESCRIPTION 27498c2d3d5afc51d3f35150f748f263870367771b6fEd Tam Reports GPS engine state to Java layer. 27508c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 27518c2d3d5afc51d3f35150f748f263870367771b6fEd TamDEPENDENCIES 27528c2d3d5afc51d3f35150f748f263870367771b6fEd Tam N/A 27538c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 27548c2d3d5afc51d3f35150f748f263870367771b6fEd TamRETURN VALUE 27558c2d3d5afc51d3f35150f748f263870367771b6fEd Tam N/A 27568c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 27578c2d3d5afc51d3f35150f748f263870367771b6fEd TamSIDE EFFECTS 27588c2d3d5afc51d3f35150f748f263870367771b6fEd Tam N/A 27598c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 27608c2d3d5afc51d3f35150f748f263870367771b6fEd Tam===========================================================================*/ 27618c2d3d5afc51d3f35150f748f263870367771b6fEd Tamstatic void loc_eng_report_status (loc_eng_data_s_type &loc_eng_data, GpsStatusValue status) 27628c2d3d5afc51d3f35150f748f263870367771b6fEd Tam{ 27638c2d3d5afc51d3f35150f748f263870367771b6fEd Tam ENTRY_LOG(); 27648c2d3d5afc51d3f35150f748f263870367771b6fEd Tam // Switch from WAIT to MUTE, for "engine on" or "session begin" event 27658c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (status == GPS_STATUS_SESSION_BEGIN || status == GPS_STATUS_ENGINE_ON) 27668c2d3d5afc51d3f35150f748f263870367771b6fEd Tam { 27678c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (loc_eng_data.mute_session_state == LOC_MUTE_SESS_WAIT) 27688c2d3d5afc51d3f35150f748f263870367771b6fEd Tam { 27698c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGD("loc_eng_report_status: mute_session_state changed from WAIT to IN SESSION"); 27708c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data.mute_session_state = LOC_MUTE_SESS_IN_SESSION; 27718c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 27728c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 27738c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 27748c2d3d5afc51d3f35150f748f263870367771b6fEd Tam // Switch off MUTE session 27758c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (loc_eng_data.mute_session_state == LOC_MUTE_SESS_IN_SESSION && 27768c2d3d5afc51d3f35150f748f263870367771b6fEd Tam (status == GPS_STATUS_SESSION_END || status == GPS_STATUS_ENGINE_OFF)) 27778c2d3d5afc51d3f35150f748f263870367771b6fEd Tam { 27788c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGD("loc_eng_report_status: mute_session_state changed from IN SESSION to NONE"); 27798c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data.mute_session_state = LOC_MUTE_SESS_NONE; 27808c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 27818c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 27828c2d3d5afc51d3f35150f748f263870367771b6fEd Tam // Session End is not reported during Android navigating state 27838c2d3d5afc51d3f35150f748f263870367771b6fEd Tam boolean navigating = loc_eng_data.adapter->isInSession(); 27848c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (status != GPS_STATUS_NONE && 27858c2d3d5afc51d3f35150f748f263870367771b6fEd Tam !(status == GPS_STATUS_SESSION_END && navigating) && 27868c2d3d5afc51d3f35150f748f263870367771b6fEd Tam !(status == GPS_STATUS_SESSION_BEGIN && !navigating)) 27878c2d3d5afc51d3f35150f748f263870367771b6fEd Tam { 27888c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (loc_eng_data.mute_session_state != LOC_MUTE_SESS_IN_SESSION) 27898c2d3d5afc51d3f35150f748f263870367771b6fEd Tam { 27908c2d3d5afc51d3f35150f748f263870367771b6fEd Tam // Inform GpsLocationProvider about mNavigating status 27918c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_inform_gps_status(loc_eng_data, status); 27928c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 27938c2d3d5afc51d3f35150f748f263870367771b6fEd Tam else { 27948c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGD("loc_eng_report_status: muting the status report."); 27958c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 27968c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 27978c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 27988c2d3d5afc51d3f35150f748f263870367771b6fEd Tam // Only keeps ENGINE ON/OFF in engine_status 27998c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (status == GPS_STATUS_ENGINE_ON || status == GPS_STATUS_ENGINE_OFF) 28008c2d3d5afc51d3f35150f748f263870367771b6fEd Tam { 28018c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data.engine_status = status; 28028c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 28038c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 28048c2d3d5afc51d3f35150f748f263870367771b6fEd Tam // Only keeps SESSION BEGIN/END in fix_session_status 28058c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (status == GPS_STATUS_SESSION_BEGIN || status == GPS_STATUS_SESSION_END) 28068c2d3d5afc51d3f35150f748f263870367771b6fEd Tam { 28078c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data.fix_session_status = status; 28088c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 28098c2d3d5afc51d3f35150f748f263870367771b6fEd Tam EXIT_LOG(%s, VOID_RET); 28108c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 28118c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 28128c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/*=========================================================================== 28138c2d3d5afc51d3f35150f748f263870367771b6fEd TamFUNCTION loc_eng_handle_engine_down 28148c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_handle_engine_up 28158c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 28168c2d3d5afc51d3f35150f748f263870367771b6fEd TamDESCRIPTION 28178c2d3d5afc51d3f35150f748f263870367771b6fEd Tam Calls this function when it is detected that modem restart is happening. 28188c2d3d5afc51d3f35150f748f263870367771b6fEd Tam Either we detected the modem is down or received modem up event. 28198c2d3d5afc51d3f35150f748f263870367771b6fEd Tam This must be called from the deferred thread to avoid race condition. 28208c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 28218c2d3d5afc51d3f35150f748f263870367771b6fEd TamDEPENDENCIES 28228c2d3d5afc51d3f35150f748f263870367771b6fEd Tam None 28238c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 28248c2d3d5afc51d3f35150f748f263870367771b6fEd TamRETURN VALUE 28258c2d3d5afc51d3f35150f748f263870367771b6fEd Tam None 28268c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 28278c2d3d5afc51d3f35150f748f263870367771b6fEd TamSIDE EFFECTS 28288c2d3d5afc51d3f35150f748f263870367771b6fEd Tam N/A 28298c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 28308c2d3d5afc51d3f35150f748f263870367771b6fEd Tam===========================================================================*/ 28318c2d3d5afc51d3f35150f748f263870367771b6fEd Tamvoid loc_eng_handle_engine_down(loc_eng_data_s_type &loc_eng_data) 28328c2d3d5afc51d3f35150f748f263870367771b6fEd Tam{ 28338c2d3d5afc51d3f35150f748f263870367771b6fEd Tam ENTRY_LOG(); 28348c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_ni_reset_on_engine_restart(loc_eng_data); 28358c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_report_status(loc_eng_data, GPS_STATUS_ENGINE_OFF); 28368c2d3d5afc51d3f35150f748f263870367771b6fEd Tam EXIT_LOG(%s, VOID_RET); 28378c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 28388c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 28398c2d3d5afc51d3f35150f748f263870367771b6fEd Tamvoid loc_eng_handle_engine_up(loc_eng_data_s_type &loc_eng_data) 28408c2d3d5afc51d3f35150f748f263870367771b6fEd Tam{ 28418c2d3d5afc51d3f35150f748f263870367771b6fEd Tam ENTRY_LOG(); 28428c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_reinit(loc_eng_data); 28438c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 28448c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data.adapter->requestPowerVote(); 28458c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 28468c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (loc_eng_data.agps_status_cb != NULL) { 28478c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (loc_eng_data.agnss_nif) 28488c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data.agnss_nif->dropAllSubscribers(); 28498c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (loc_eng_data.internet_nif) 28508c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data.internet_nif->dropAllSubscribers(); 28518c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 28528c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_agps_reinit(loc_eng_data); 28538c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 28548c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 28558c2d3d5afc51d3f35150f748f263870367771b6fEd Tam // modem is back up. If we crashed in the middle of navigating, we restart. 28568c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (loc_eng_data.adapter->isInSession()) { 28578c2d3d5afc51d3f35150f748f263870367771b6fEd Tam // This sets the copy in adapter to modem 28588c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data.adapter->setPositionMode(NULL); 28598c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data.adapter->setInSession(false); 28608c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_start_handler(loc_eng_data); 28618c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 28628c2d3d5afc51d3f35150f748f263870367771b6fEd Tam EXIT_LOG(%s, VOID_RET); 28638c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 28648c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 28658c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#ifdef USE_GLIB 28668c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/*=========================================================================== 28678c2d3d5afc51d3f35150f748f263870367771b6fEd TamFUNCTION set_sched_policy 28688c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 28698c2d3d5afc51d3f35150f748f263870367771b6fEd TamDESCRIPTION 28708c2d3d5afc51d3f35150f748f263870367771b6fEd Tam Local copy of this function which bypasses android set_sched_policy 28718c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 28728c2d3d5afc51d3f35150f748f263870367771b6fEd TamDEPENDENCIES 28738c2d3d5afc51d3f35150f748f263870367771b6fEd Tam None 28748c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 28758c2d3d5afc51d3f35150f748f263870367771b6fEd TamRETURN VALUE 28768c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 0 28778c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 28788c2d3d5afc51d3f35150f748f263870367771b6fEd TamSIDE EFFECTS 28798c2d3d5afc51d3f35150f748f263870367771b6fEd Tam N/A 28808c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 28818c2d3d5afc51d3f35150f748f263870367771b6fEd Tam===========================================================================*/ 28828c2d3d5afc51d3f35150f748f263870367771b6fEd Tamstatic int set_sched_policy(int tid, SchedPolicy policy) 28838c2d3d5afc51d3f35150f748f263870367771b6fEd Tam{ 28848c2d3d5afc51d3f35150f748f263870367771b6fEd Tam return 0; 28858c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 28868c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#endif /* USE_GLIB */ 28878c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 28888c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/*=========================================================================== 28898c2d3d5afc51d3f35150f748f263870367771b6fEd TamFUNCTION loc_eng_read_config 28908c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 28918c2d3d5afc51d3f35150f748f263870367771b6fEd TamDESCRIPTION 28928c2d3d5afc51d3f35150f748f263870367771b6fEd Tam Initiates the reading of the gps config file stored in /etc dir 28938c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 28948c2d3d5afc51d3f35150f748f263870367771b6fEd TamDEPENDENCIES 28958c2d3d5afc51d3f35150f748f263870367771b6fEd Tam None 28968c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 28978c2d3d5afc51d3f35150f748f263870367771b6fEd TamRETURN VALUE 28988c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 0: success 28998c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 29008c2d3d5afc51d3f35150f748f263870367771b6fEd TamSIDE EFFECTS 29018c2d3d5afc51d3f35150f748f263870367771b6fEd Tam N/A 29028c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 29038c2d3d5afc51d3f35150f748f263870367771b6fEd Tam===========================================================================*/ 29048c2d3d5afc51d3f35150f748f263870367771b6fEd Tamint loc_eng_read_config(void) 29058c2d3d5afc51d3f35150f748f263870367771b6fEd Tam{ 29068c2d3d5afc51d3f35150f748f263870367771b6fEd Tam ENTRY_LOG_CALLFLOW(); 29078c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if(configAlreadyRead == false) 29088c2d3d5afc51d3f35150f748f263870367771b6fEd Tam { 29098c2d3d5afc51d3f35150f748f263870367771b6fEd Tam // Initialize our defaults before reading of configuration file overwrites them. 29108c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_default_parameters(); 29118c2d3d5afc51d3f35150f748f263870367771b6fEd Tam // We only want to parse the conf file once. This is a good place to ensure that. 29128c2d3d5afc51d3f35150f748f263870367771b6fEd Tam // In fact one day the conf file should go into context. 29138c2d3d5afc51d3f35150f748f263870367771b6fEd Tam UTIL_READ_CONF(GPS_CONF_FILE, gps_conf_table); 29148c2d3d5afc51d3f35150f748f263870367771b6fEd Tam UTIL_READ_CONF(SAP_CONF_FILE, sap_conf_table); 29158c2d3d5afc51d3f35150f748f263870367771b6fEd Tam configAlreadyRead = true; 29168c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } else { 29178c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGV("GPS Config file has already been read\n"); 29188c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } 29198c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 29208c2d3d5afc51d3f35150f748f263870367771b6fEd Tam EXIT_LOG(%d, 0); 29218c2d3d5afc51d3f35150f748f263870367771b6fEd Tam return 0; 29228c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 29238c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 29248c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/*=========================================================================== 29258c2d3d5afc51d3f35150f748f263870367771b6fEd TamFUNCTION loc_eng_gps_measurement_init 29268c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 29278c2d3d5afc51d3f35150f748f263870367771b6fEd TamDESCRIPTION 29288c2d3d5afc51d3f35150f748f263870367771b6fEd Tam Initialize gps measurement module. 29298c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 29308c2d3d5afc51d3f35150f748f263870367771b6fEd TamDEPENDENCIES 29318c2d3d5afc51d3f35150f748f263870367771b6fEd Tam N/A 29328c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 29338c2d3d5afc51d3f35150f748f263870367771b6fEd TamRETURN VALUE 29348c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 0: success 29358c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 29368c2d3d5afc51d3f35150f748f263870367771b6fEd TamSIDE EFFECTS 29378c2d3d5afc51d3f35150f748f263870367771b6fEd Tam N/A 29388c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 29398c2d3d5afc51d3f35150f748f263870367771b6fEd Tam===========================================================================*/ 29408c2d3d5afc51d3f35150f748f263870367771b6fEd Tamint loc_eng_gps_measurement_init(loc_eng_data_s_type &loc_eng_data, 29418c2d3d5afc51d3f35150f748f263870367771b6fEd Tam GpsMeasurementCallbacks* callbacks) 29428c2d3d5afc51d3f35150f748f263870367771b6fEd Tam{ 29438c2d3d5afc51d3f35150f748f263870367771b6fEd Tam ENTRY_LOG_CALLFLOW(); 29448c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 29458c2d3d5afc51d3f35150f748f263870367771b6fEd Tam STATE_CHECK((NULL == loc_eng_data.gps_measurement_cb), 29468c2d3d5afc51d3f35150f748f263870367771b6fEd Tam "gps measurement already initialized", 29478c2d3d5afc51d3f35150f748f263870367771b6fEd Tam return GPS_MEASUREMENT_ERROR_ALREADY_INIT); 29488c2d3d5afc51d3f35150f748f263870367771b6fEd Tam STATE_CHECK((callbacks != NULL), 29498c2d3d5afc51d3f35150f748f263870367771b6fEd Tam "callbacks can not be NULL", 29508c2d3d5afc51d3f35150f748f263870367771b6fEd Tam return GPS_MEASUREMENT_ERROR_GENERIC); 29518c2d3d5afc51d3f35150f748f263870367771b6fEd Tam STATE_CHECK(loc_eng_data.adapter, 29528c2d3d5afc51d3f35150f748f263870367771b6fEd Tam "GpsInterface must be initialized first", 29538c2d3d5afc51d3f35150f748f263870367771b6fEd Tam return GPS_MEASUREMENT_ERROR_GENERIC); 29548c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 29558c2d3d5afc51d3f35150f748f263870367771b6fEd Tam // updated the mask 29568c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_API_ADAPTER_EVENT_MASK_T event = LOC_API_ADAPTER_BIT_GNSS_MEASUREMENT; 29578c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data.adapter->sendMsg(new LocEngUpdateRegistrationMask( 29588c2d3d5afc51d3f35150f748f263870367771b6fEd Tam &loc_eng_data, 29598c2d3d5afc51d3f35150f748f263870367771b6fEd Tam event, 29608c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_REGISTRATION_MASK_ENABLED)); 29618c2d3d5afc51d3f35150f748f263870367771b6fEd Tam // set up the callback 29628c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data.gps_measurement_cb = callbacks->measurement_callback; 29638c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOGD ("%s, event masks updated successfully", __func__); 29648c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 29658c2d3d5afc51d3f35150f748f263870367771b6fEd Tam return GPS_MEASUREMENT_OPERATION_SUCCESS; 29668c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 29678c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 29688c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/*=========================================================================== 29698c2d3d5afc51d3f35150f748f263870367771b6fEd TamFUNCTION loc_eng_gps_measurement_close 29708c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 29718c2d3d5afc51d3f35150f748f263870367771b6fEd TamDESCRIPTION 29728c2d3d5afc51d3f35150f748f263870367771b6fEd Tam Close gps measurement module. 29738c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 29748c2d3d5afc51d3f35150f748f263870367771b6fEd TamDEPENDENCIES 29758c2d3d5afc51d3f35150f748f263870367771b6fEd Tam N/A 29768c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 29778c2d3d5afc51d3f35150f748f263870367771b6fEd TamRETURN VALUE 29788c2d3d5afc51d3f35150f748f263870367771b6fEd Tam N/A 29798c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 29808c2d3d5afc51d3f35150f748f263870367771b6fEd TamSIDE EFFECTS 29818c2d3d5afc51d3f35150f748f263870367771b6fEd Tam N/A 29828c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 29838c2d3d5afc51d3f35150f748f263870367771b6fEd Tam===========================================================================*/ 29848c2d3d5afc51d3f35150f748f263870367771b6fEd Tamvoid loc_eng_gps_measurement_close(loc_eng_data_s_type &loc_eng_data) 29858c2d3d5afc51d3f35150f748f263870367771b6fEd Tam{ 29868c2d3d5afc51d3f35150f748f263870367771b6fEd Tam ENTRY_LOG_CALLFLOW(); 29878c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 29888c2d3d5afc51d3f35150f748f263870367771b6fEd Tam INIT_CHECK(loc_eng_data.adapter, return); 29898c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 29908c2d3d5afc51d3f35150f748f263870367771b6fEd Tam // updated the mask 29918c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_API_ADAPTER_EVENT_MASK_T event = LOC_API_ADAPTER_BIT_GNSS_MEASUREMENT; 29928c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data.adapter->sendMsg(new LocEngUpdateRegistrationMask( 29938c2d3d5afc51d3f35150f748f263870367771b6fEd Tam &loc_eng_data, 29948c2d3d5afc51d3f35150f748f263870367771b6fEd Tam event, 29958c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_REGISTRATION_MASK_DISABLED)); 29968c2d3d5afc51d3f35150f748f263870367771b6fEd Tam // set up the callback 29978c2d3d5afc51d3f35150f748f263870367771b6fEd Tam loc_eng_data.gps_measurement_cb = NULL; 29988c2d3d5afc51d3f35150f748f263870367771b6fEd Tam EXIT_LOG(%d, 0); 29998c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 3000