14035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin/* Copyright (c) 2009-2015, The Linux Foundation. All rights reserved. 24035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin * 34035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin * Redistribution and use in source and binary forms, with or without 44035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin * modification, are permitted provided that the following conditions are 54035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin * met: 64035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin * * Redistributions of source code must retain the above copyright 74035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin * notice, this list of conditions and the following disclaimer. 84035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin * * Redistributions in binary form must reproduce the above 94035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin * copyright notice, this list of conditions and the following 104035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin * disclaimer in the documentation and/or other materials provided 114035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin * with the distribution. 124035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin * * Neither the name of The Linux Foundation, nor the names of its 134035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin * contributors may be used to endorse or promote products derived 144035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin * from this software without specific prior written permission. 154035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin * 164035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 174035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 184035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 194035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 204035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 214035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 224035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 234035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 244035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 254035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 264035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 274035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin * 284035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin */ 294035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 304035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin#define LOG_NDDEBUG 0 314035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin#define LOG_TAG "LocSvc_eng" 324035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 334035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin#include <stdint.h> 344035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin#include <stdio.h> 354035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin#include <stdlib.h> 364035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin#include <unistd.h> 374035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin#include <dlfcn.h> 384035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin#include <ctype.h> 394035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin#include <math.h> 404035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin#include <pthread.h> 414035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin#include <arpa/inet.h> 424035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin#include <netinet/in.h> /* struct sockaddr_in */ 434035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin#include <sys/socket.h> 444035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin#include <sys/time.h> 454035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin#include <netdb.h> 464035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin#include <time.h> 474035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin#include <new> 484035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin#include <LocEngAdapter.h> 494035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 504035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin#include <cutils/sched_policy.h> 514035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin#ifndef USE_GLIB 524035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin#include <utils/SystemClock.h> 534035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin#include <utils/Log.h> 544035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin#endif /* USE_GLIB */ 554035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 564035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin#ifdef USE_GLIB 574035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin#include <glib.h> 584035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin#include <sys/syscall.h> 594035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin#endif /* USE_GLIB */ 604035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 614035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin#include <string.h> 624035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 634035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin#include <loc_eng.h> 644035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin#include <loc_eng_ni.h> 654035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin#include <loc_eng_dmn_conn.h> 664035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin#include <loc_eng_dmn_conn_handler.h> 674035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin#include <loc_eng_msg.h> 684035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin#include <loc_eng_nmea.h> 694035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin#include <msg_q.h> 704035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin#include <loc.h> 714035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin#include "log_util.h" 724035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin#include "platform_lib_includes.h" 734035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin#include "loc_core_log.h" 744035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin#include "loc_eng_log.h" 754035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 764035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin#define SUCCESS TRUE 774035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin#define FAILURE FALSE 784035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 794035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin#ifndef GPS_CONF_FILE 804035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin#define GPS_CONF_FILE "/etc/gps.conf" //??? platform independent 814035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin#endif 824035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 834035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin#ifndef SAP_CONF_FILE 844035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin#define SAP_CONF_FILE "/etc/sap.conf" 854035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin#endif 864035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 874035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin#define XTRA1_GPSONEXTRA "xtra1.gpsonextra.net" 884035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 894035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinusing namespace loc_core; 904035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 914035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinboolean configAlreadyRead = false; 924035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinunsigned int agpsStatus = 0; 934035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinloc_gps_cfg_s_type gps_conf; 944035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinloc_sap_cfg_s_type sap_conf; 954035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 964035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin/* Parameter spec table */ 974035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinstatic const loc_param_s_type gps_conf_table[] = 984035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin{ 994035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin {"GPS_LOCK", &gps_conf.GPS_LOCK, NULL, 'n'}, 1004035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin {"SUPL_VER", &gps_conf.SUPL_VER, NULL, 'n'}, 1014035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin {"LPP_PROFILE", &gps_conf.LPP_PROFILE, NULL, 'n'}, 1024035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin {"A_GLONASS_POS_PROTOCOL_SELECT", &gps_conf.A_GLONASS_POS_PROTOCOL_SELECT, NULL, 'n'}, 1034035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin {"AGPS_CERT_WRITABLE_MASK", &gps_conf.AGPS_CERT_WRITABLE_MASK, NULL, 'n'}, 1044035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin {"SUPL_MODE", &gps_conf.SUPL_MODE, NULL, 'n'}, 1054035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin {"INTERMEDIATE_POS", &gps_conf.INTERMEDIATE_POS, NULL, 'n'}, 1064035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin {"ACCURACY_THRES", &gps_conf.ACCURACY_THRES, NULL, 'n'}, 1074035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin {"NMEA_PROVIDER", &gps_conf.NMEA_PROVIDER, NULL, 'n'}, 1084035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin {"CAPABILITIES", &gps_conf.CAPABILITIES, NULL, 'n'}, 1094035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin {"XTRA_VERSION_CHECK", &gps_conf.XTRA_VERSION_CHECK, NULL, 'n'}, 1104035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin {"XTRA_SERVER_1", &gps_conf.XTRA_SERVER_1, NULL, 's'}, 1114035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin {"XTRA_SERVER_2", &gps_conf.XTRA_SERVER_2, NULL, 's'}, 1124035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin {"XTRA_SERVER_3", &gps_conf.XTRA_SERVER_3, NULL, 's'}, 1134035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin {"USE_EMERGENCY_PDN_FOR_EMERGENCY_SUPL", &gps_conf.USE_EMERGENCY_PDN_FOR_EMERGENCY_SUPL, NULL, 'n'}, 1144035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin}; 1154035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 1164035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinstatic const loc_param_s_type sap_conf_table[] = 1174035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin{ 1184035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin {"GYRO_BIAS_RANDOM_WALK", &sap_conf.GYRO_BIAS_RANDOM_WALK, &sap_conf.GYRO_BIAS_RANDOM_WALK_VALID, 'f'}, 1194035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin {"ACCEL_RANDOM_WALK_SPECTRAL_DENSITY", &sap_conf.ACCEL_RANDOM_WALK_SPECTRAL_DENSITY, &sap_conf.ACCEL_RANDOM_WALK_SPECTRAL_DENSITY_VALID, 'f'}, 1204035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin {"ANGLE_RANDOM_WALK_SPECTRAL_DENSITY", &sap_conf.ANGLE_RANDOM_WALK_SPECTRAL_DENSITY, &sap_conf.ANGLE_RANDOM_WALK_SPECTRAL_DENSITY_VALID, 'f'}, 1214035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin {"RATE_RANDOM_WALK_SPECTRAL_DENSITY", &sap_conf.RATE_RANDOM_WALK_SPECTRAL_DENSITY, &sap_conf.RATE_RANDOM_WALK_SPECTRAL_DENSITY_VALID, 'f'}, 1224035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin {"VELOCITY_RANDOM_WALK_SPECTRAL_DENSITY", &sap_conf.VELOCITY_RANDOM_WALK_SPECTRAL_DENSITY, &sap_conf.VELOCITY_RANDOM_WALK_SPECTRAL_DENSITY_VALID, 'f'}, 1234035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin {"SENSOR_ACCEL_BATCHES_PER_SEC", &sap_conf.SENSOR_ACCEL_BATCHES_PER_SEC, NULL, 'n'}, 1244035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin {"SENSOR_ACCEL_SAMPLES_PER_BATCH", &sap_conf.SENSOR_ACCEL_SAMPLES_PER_BATCH, NULL, 'n'}, 1254035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin {"SENSOR_GYRO_BATCHES_PER_SEC", &sap_conf.SENSOR_GYRO_BATCHES_PER_SEC, NULL, 'n'}, 1264035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin {"SENSOR_GYRO_SAMPLES_PER_BATCH", &sap_conf.SENSOR_GYRO_SAMPLES_PER_BATCH, NULL, 'n'}, 1274035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin {"SENSOR_ACCEL_BATCHES_PER_SEC_HIGH", &sap_conf.SENSOR_ACCEL_BATCHES_PER_SEC_HIGH, NULL, 'n'}, 1284035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin {"SENSOR_ACCEL_SAMPLES_PER_BATCH_HIGH", &sap_conf.SENSOR_ACCEL_SAMPLES_PER_BATCH_HIGH, NULL, 'n'}, 1294035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin {"SENSOR_GYRO_BATCHES_PER_SEC_HIGH", &sap_conf.SENSOR_GYRO_BATCHES_PER_SEC_HIGH, NULL, 'n'}, 1304035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin {"SENSOR_GYRO_SAMPLES_PER_BATCH_HIGH", &sap_conf.SENSOR_GYRO_SAMPLES_PER_BATCH_HIGH, NULL, 'n'}, 1314035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin {"SENSOR_CONTROL_MODE", &sap_conf.SENSOR_CONTROL_MODE, NULL, 'n'}, 1324035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin {"SENSOR_USAGE", &sap_conf.SENSOR_USAGE, NULL, 'n'}, 1334035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin {"SENSOR_ALGORITHM_CONFIG_MASK", &sap_conf.SENSOR_ALGORITHM_CONFIG_MASK, NULL, 'n'}, 1344035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin {"SENSOR_PROVIDER", &sap_conf.SENSOR_PROVIDER, NULL, 'n'} 1354035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin}; 1364035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 1374035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinstatic void loc_default_parameters(void) 1384035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin{ 1394035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin /*Defaults for gps.conf*/ 1404035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin gps_conf.INTERMEDIATE_POS = 0; 1414035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin gps_conf.ACCURACY_THRES = 0; 1424035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin gps_conf.NMEA_PROVIDER = 0; 1434035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin gps_conf.GPS_LOCK = 0; 1444035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin gps_conf.SUPL_VER = 0x10000; 1454035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin gps_conf.SUPL_MODE = 0x3; 1464035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin gps_conf.CAPABILITIES = 0x7; 1474035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin /* LTE Positioning Profile configuration is disable by default*/ 1484035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin gps_conf.LPP_PROFILE = 0; 1494035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin /*By default no positioning protocol is selected on A-GLONASS system*/ 1504035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin gps_conf.A_GLONASS_POS_PROTOCOL_SELECT = 0; 1514035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin /*XTRA version check is disabled by default*/ 1524035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin gps_conf.XTRA_VERSION_CHECK=0; 1534035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin /*Use emergency PDN by default*/ 1544035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin gps_conf.USE_EMERGENCY_PDN_FOR_EMERGENCY_SUPL = 1; 1554035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 1564035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin /*Defaults for sap.conf*/ 1574035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin sap_conf.GYRO_BIAS_RANDOM_WALK = 0; 1584035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin sap_conf.SENSOR_ACCEL_BATCHES_PER_SEC = 2; 1594035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin sap_conf.SENSOR_ACCEL_SAMPLES_PER_BATCH = 5; 1604035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin sap_conf.SENSOR_GYRO_BATCHES_PER_SEC = 2; 1614035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin sap_conf.SENSOR_GYRO_SAMPLES_PER_BATCH = 5; 1624035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin sap_conf.SENSOR_ACCEL_BATCHES_PER_SEC_HIGH = 4; 1634035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin sap_conf.SENSOR_ACCEL_SAMPLES_PER_BATCH_HIGH = 25; 1644035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin sap_conf.SENSOR_GYRO_BATCHES_PER_SEC_HIGH = 4; 1654035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin sap_conf.SENSOR_GYRO_SAMPLES_PER_BATCH_HIGH = 25; 1664035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin sap_conf.SENSOR_CONTROL_MODE = 0; /* AUTO */ 1674035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin sap_conf.SENSOR_USAGE = 0; /* Enabled */ 1684035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin sap_conf.SENSOR_ALGORITHM_CONFIG_MASK = 0; /* INS Disabled = FALSE*/ 1694035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin /* Values MUST be set by OEMs in configuration for sensor-assisted 1704035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin navigation to work. There are NO default values */ 1714035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin sap_conf.ACCEL_RANDOM_WALK_SPECTRAL_DENSITY = 0; 1724035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin sap_conf.ANGLE_RANDOM_WALK_SPECTRAL_DENSITY = 0; 1734035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin sap_conf.RATE_RANDOM_WALK_SPECTRAL_DENSITY = 0; 1744035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin sap_conf.VELOCITY_RANDOM_WALK_SPECTRAL_DENSITY = 0; 1754035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin sap_conf.GYRO_BIAS_RANDOM_WALK_VALID = 0; 1764035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin sap_conf.ACCEL_RANDOM_WALK_SPECTRAL_DENSITY_VALID = 0; 1774035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin sap_conf.ANGLE_RANDOM_WALK_SPECTRAL_DENSITY_VALID = 0; 1784035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin sap_conf.RATE_RANDOM_WALK_SPECTRAL_DENSITY_VALID = 0; 1794035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin sap_conf.VELOCITY_RANDOM_WALK_SPECTRAL_DENSITY_VALID = 0; 1804035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin /* default provider is SSC */ 1814035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin sap_conf.SENSOR_PROVIDER = 1; 1824035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 1834035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin /* None of the 10 slots for agps certificates are writable by default */ 1844035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin gps_conf.AGPS_CERT_WRITABLE_MASK = 0; 1854035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 1864035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 1874035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin// 2nd half of init(), singled out for 1884035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin// modem restart to use. 1894035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinstatic int loc_eng_reinit(loc_eng_data_s_type &loc_eng_data); 1904035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinstatic void loc_eng_agps_reinit(loc_eng_data_s_type &loc_eng_data); 1914035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 1924035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinstatic int loc_eng_set_server(loc_eng_data_s_type &loc_eng_data, 1934035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocServerType type, const char *hostname, int port); 1944035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin// Internal functions 1954035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinstatic void loc_inform_gps_status(loc_eng_data_s_type &loc_eng_data, 1964035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin GpsStatusValue status); 1974035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinstatic void loc_eng_report_status(loc_eng_data_s_type &loc_eng_data, 1984035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin GpsStatusValue status); 1994035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinstatic void loc_eng_process_conn_request(loc_eng_data_s_type &loc_eng_data, 2004035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin int connHandle, AGpsType agps_type); 2014035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinstatic void loc_eng_agps_close_status(loc_eng_data_s_type &loc_eng_data, int is_succ); 2024035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinstatic void loc_eng_handle_engine_down(loc_eng_data_s_type &loc_eng_data) ; 2034035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinstatic void loc_eng_handle_engine_up(loc_eng_data_s_type &loc_eng_data) ; 2044035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 2054035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinstatic int loc_eng_start_handler(loc_eng_data_s_type &loc_eng_data); 2064035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinstatic int loc_eng_stop_handler(loc_eng_data_s_type &loc_eng_data); 2074035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinstatic int loc_eng_get_zpp_handler(loc_eng_data_s_type &loc_eng_data); 2084035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinstatic void deleteAidingData(loc_eng_data_s_type &logEng); 2094035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinstatic AgpsStateMachine* 2104035be28a255eaa5605dbd9abeb2340db584249cPatrick TjingetAgpsStateMachine(loc_eng_data_s_type& logEng, AGpsExtType agpsType); 2114035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinstatic int dataCallCb(void *cb_data); 2124035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinstatic void update_aiding_data_for_deletion(loc_eng_data_s_type& loc_eng_data) { 2134035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (loc_eng_data.engine_status != GPS_STATUS_ENGINE_ON && 2144035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data.aiding_data_for_deletion != 0) 2154035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin { 2164035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data.adapter->deleteAidingData(loc_eng_data.aiding_data_for_deletion); 2174035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data.aiding_data_for_deletion = 0; 2184035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 2194035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 2204035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 2214035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinstatic void* noProc(void* data) 2224035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin{ 2234035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin return NULL; 2244035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 2254035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 2264035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin/********************************************************************* 2274035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin * definitions of the static messages used in the file 2284035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin *********************************************************************/ 2294035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin// case LOC_ENG_MSG_REQUEST_NI: 2304035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinLocEngRequestNi::LocEngRequestNi(void* locEng, 2314035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin GpsNiNotification ¬if, 2324035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin const void* data) : 2334035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocMsg(), mLocEng(locEng), mNotify(notif), mPayload(data) { 2344035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 2354035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 2364035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinvoid LocEngRequestNi::proc() const { 2374035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_ni_request_handler(*((loc_eng_data_s_type*)mLocEng), 2384035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin &mNotify, mPayload); 2394035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 2404035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinvoid LocEngRequestNi::locallog() const 2414035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin{ 2424035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGV("id: %d\n type: %s\n flags: %d\n time out: %d\n " 2434035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin "default response: %s\n requestor id encoding: %s\n" 2444035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin " text encoding: %s\n passThroughData: %p", 2454035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mNotify.notification_id, 2464035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_get_ni_type_name(mNotify.ni_type), 2474035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mNotify.notify_flags, 2484035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mNotify.timeout, 2494035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_get_ni_response_name(mNotify.default_response), 2504035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_get_ni_encoding_name(mNotify.requestor_id_encoding), 2514035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_get_ni_encoding_name(mNotify.text_encoding), 2524035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mPayload); 2534035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 2544035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjininline void LocEngRequestNi::log() const { 2554035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 2564035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 2574035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 2584035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin// case LOC_ENG_MSG_INFORM_NI_RESPONSE: 2594035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin// in loc_eng_ni.cpp 2604035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 2614035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin// case LOC_ENG_MSG_START_FIX: 2624035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinLocEngStartFix::LocEngStartFix(LocEngAdapter* adapter) : 2634035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocMsg(), mAdapter(adapter) 2644035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin{ 2654035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 2664035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 2674035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjininline void LocEngStartFix::proc() const 2684035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin{ 2694035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data_s_type* locEng = (loc_eng_data_s_type*)mAdapter->getOwner(); 2704035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_start_handler(*locEng); 2714035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 2724035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjininline void LocEngStartFix::locallog() const 2734035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin{ 2744035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGV("LocEngStartFix"); 2754035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 2764035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjininline void LocEngStartFix::log() const 2774035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin{ 2784035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 2794035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 2804035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinvoid LocEngStartFix::send() const { 2814035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mAdapter->sendMsg(this); 2824035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 2834035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 2844035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin// case LOC_ENG_MSG_STOP_FIX: 2854035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinLocEngStopFix::LocEngStopFix(LocEngAdapter* adapter) : 2864035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocMsg(), mAdapter(adapter) 2874035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin{ 2884035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 2894035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 2904035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjininline void LocEngStopFix::proc() const 2914035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin{ 2924035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data_s_type* locEng = (loc_eng_data_s_type*)mAdapter->getOwner(); 2934035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_stop_handler(*locEng); 2944035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 2954035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjininline void LocEngStopFix::locallog() const 2964035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin{ 2974035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGV("LocEngStopFix"); 2984035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 2994035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjininline void LocEngStopFix::log() const 3004035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin{ 3014035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 3024035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 3034035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinvoid LocEngStopFix::send() const { 3044035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mAdapter->sendMsg(this); 3054035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 3064035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 3074035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin// case LOC_ENG_MSG_SET_POSITION_MODE: 3084035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinLocEngPositionMode::LocEngPositionMode(LocEngAdapter* adapter, 3094035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocPosMode &mode) : 3104035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocMsg(), mAdapter(adapter), mPosMode(mode) 3114035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin{ 3124035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mPosMode.logv(); 3134035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 3144035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjininline void LocEngPositionMode::proc() const { 3154035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mAdapter->setPositionMode(&mPosMode); 3164035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 3174035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjininline void LocEngPositionMode::log() const { 3184035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mPosMode.logv(); 3194035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 3204035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinvoid LocEngPositionMode::send() const { 3214035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mAdapter->sendMsg(this); 3224035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 3234035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 3244035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinLocEngGetZpp::LocEngGetZpp(LocEngAdapter* adapter) : 3254035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocMsg(), mAdapter(adapter) 3264035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin{ 3274035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 3284035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 3294035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjininline void LocEngGetZpp::proc() const 3304035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin{ 3314035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data_s_type* locEng = (loc_eng_data_s_type*)mAdapter->getOwner(); 3324035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_get_zpp_handler(*locEng); 3334035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 3344035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjininline void LocEngGetZpp::locallog() const 3354035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin{ 3364035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGV("LocEngGetZpp"); 3374035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 3384035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjininline void LocEngGetZpp::log() const 3394035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin{ 3404035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 3414035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 3424035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinvoid LocEngGetZpp::send() const { 3434035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mAdapter->sendMsg(this); 3444035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 3454035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 3464035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinstruct LocEngSetTime : public LocMsg { 3474035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocEngAdapter* mAdapter; 3484035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin const GpsUtcTime mTime; 3494035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin const int64_t mTimeReference; 3504035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin const int mUncertainty; 3514035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline LocEngSetTime(LocEngAdapter* adapter, 3524035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin GpsUtcTime t, int64_t tf, int unc) : 3534035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocMsg(), mAdapter(adapter), 3544035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mTime(t), mTimeReference(tf), mUncertainty(unc) 3554035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin { 3564035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 3574035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 3584035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline virtual void proc() const { 3594035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mAdapter->setTime(mTime, mTimeReference, mUncertainty); 3604035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 3614035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline void locallog() const { 3624035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGV("time: %lld\n timeReference: %lld\n uncertainty: %d", 3634035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mTime, mTimeReference, mUncertainty); 3644035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 3654035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline virtual void log() const { 3664035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 3674035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 3684035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin}; 3694035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 3704035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin // case LOC_ENG_MSG_INJECT_LOCATION: 3714035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinstruct LocEngInjectLocation : public LocMsg { 3724035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocEngAdapter* mAdapter; 3734035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin const double mLatitude; 3744035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin const double mLongitude; 3754035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin const float mAccuracy; 3764035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline LocEngInjectLocation(LocEngAdapter* adapter, 3774035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin double lat, double lon, float accur) : 3784035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocMsg(), mAdapter(adapter), 3794035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mLatitude(lat), mLongitude(lon), mAccuracy(accur) 3804035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin { 3814035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 3824035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 3834035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline virtual void proc() const { 3844035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mAdapter->injectPosition(mLatitude, mLongitude, mAccuracy); 3854035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 3864035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline void locallog() const { 3874035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGV("latitude: %f\n longitude: %f\n accuracy: %f", 3884035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mLatitude, mLongitude, mAccuracy); 3894035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 3904035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline virtual void log() const { 3914035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 3924035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 3934035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin}; 3944035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 3954035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin// case LOC_ENG_MSG_SET_SERVER_IPV4: 3964035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinstruct LocEngSetServerIpv4 : public LocMsg { 3974035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocEngAdapter* mAdapter; 3984035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin const unsigned int mNlAddr; 3994035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin const int mPort; 4004035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin const LocServerType mServerType; 4014035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline LocEngSetServerIpv4(LocEngAdapter* adapter, 4024035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin unsigned int ip, 4034035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin int port, 4044035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocServerType type) : 4054035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocMsg(), mAdapter(adapter), 4064035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mNlAddr(ip), mPort(port), mServerType(type) 4074035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin { 4084035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 4094035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 4104035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline virtual void proc() const { 4114035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mAdapter->setServer(mNlAddr, mPort, mServerType); 4124035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 4134035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline void locallog() const { 4144035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGV("LocEngSetServerIpv4 - addr: %x, port: %d, type: %s", 4154035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mNlAddr, mPort, loc_get_server_type_name(mServerType)); 4164035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 4174035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline virtual void log() const { 4184035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 4194035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 4204035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin}; 4214035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 4224035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin// case LOC_ENG_MSG_SET_SERVER_URL: 4234035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinstruct LocEngSetServerUrl : public LocMsg { 4244035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocEngAdapter* mAdapter; 4254035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin const int mLen; 4264035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin char* mUrl; 4274035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline LocEngSetServerUrl(LocEngAdapter* adapter, 4284035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin char* urlString, 4294035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin int url_len) : 4304035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocMsg(), mAdapter(adapter), 4314035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mLen(url_len), mUrl(new char[mLen+1]) 4324035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin { 4334035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin memcpy((void*)mUrl, (void*)urlString, url_len); 4344035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mUrl[mLen] = 0; 4354035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 4364035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 4374035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline ~LocEngSetServerUrl() 4384035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin { 4394035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin delete[] mUrl; 4404035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 4414035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline virtual void proc() const { 4424035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mAdapter->setServer(mUrl, mLen); 4434035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 4444035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline void locallog() const { 4454035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGV("LocEngSetServerUrl - url: %s", mUrl); 4464035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 4474035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline virtual void log() const { 4484035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 4494035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 4504035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin}; 4514035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 4524035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin// case LOC_ENG_MSG_A_GLONASS_PROTOCOL: 4534035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinstruct LocEngAGlonassProtocol : public LocMsg { 4544035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocEngAdapter* mAdapter; 4554035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin const unsigned long mAGlonassProtocl; 4564035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline LocEngAGlonassProtocol(LocEngAdapter* adapter, 4574035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin unsigned long protocol) : 4584035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocMsg(), mAdapter(adapter), mAGlonassProtocl(protocol) 4594035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin { 4604035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 4614035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 4624035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline virtual void proc() const { 4634035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mAdapter->setAGLONASSProtocol(mAGlonassProtocl); 4644035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 4654035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline void locallog() const { 4664035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGV("A-GLONASS protocol: 0x%lx", mAGlonassProtocl); 4674035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 4684035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline virtual void log() const { 4694035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 4704035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 4714035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin}; 4724035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 4734035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin// case LOC_ENG_MSG_SUPL_VERSION: 4744035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinstruct LocEngSuplVer : public LocMsg { 4754035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocEngAdapter* mAdapter; 4764035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin const int mSuplVer; 4774035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline LocEngSuplVer(LocEngAdapter* adapter, 4784035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin int suplVer) : 4794035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocMsg(), mAdapter(adapter), mSuplVer(suplVer) 4804035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin { 4814035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 4824035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 4834035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline virtual void proc() const { 4844035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mAdapter->setSUPLVersion(mSuplVer); 4854035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 4864035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline void locallog() const { 4874035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGV("SUPL Version: %d", mSuplVer); 4884035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 4894035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline virtual void log() const { 4904035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 4914035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 4924035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin}; 4934035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 4944035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinstruct LocEngSuplMode : public LocMsg { 4954035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin UlpProxyBase* mUlp; 4964035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 4974035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline LocEngSuplMode(UlpProxyBase* ulp) : 4984035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocMsg(), mUlp(ulp) 4994035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin { 5004035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 5014035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 5024035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline virtual void proc() const { 5034035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mUlp->setCapabilities(getCarrierCapabilities()); 5044035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 5054035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline void locallog() const { 5064035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 5074035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline virtual void log() const { 5084035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 5094035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 5104035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin}; 5114035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 5124035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin// case LOC_ENG_MSG_LPP_CONFIG: 5134035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinstruct LocEngLppConfig : public LocMsg { 5144035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocEngAdapter* mAdapter; 5154035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin const int mLppConfig; 5164035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline LocEngLppConfig(LocEngAdapter* adapter, 5174035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin int lppConfig) : 5184035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocMsg(), mAdapter(adapter), mLppConfig(lppConfig) 5194035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin { 5204035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 5214035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 5224035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline virtual void proc() const { 5234035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mAdapter->setLPPConfig(mLppConfig); 5244035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 5254035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline void locallog() const { 5264035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGV("LocEngLppConfig - profile: %d", mLppConfig); 5274035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 5284035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline virtual void log() const { 5294035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 5304035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 5314035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin}; 5324035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 5334035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin// case LOC_ENG_MSG_SET_SENSOR_CONTROL_CONFIG: 5344035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinstruct LocEngSensorControlConfig : public LocMsg { 5354035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocEngAdapter* mAdapter; 5364035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin const int mSensorsDisabled; 5374035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin const int mSensorProvider; 5384035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline LocEngSensorControlConfig(LocEngAdapter* adapter, 5394035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin int sensorsDisabled, int sensorProvider) : 5404035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocMsg(), mAdapter(adapter), mSensorsDisabled(sensorsDisabled), 5414035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mSensorProvider(sensorProvider) 5424035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin { 5434035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 5444035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 5454035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline virtual void proc() const { 5464035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mAdapter->setSensorControlConfig(mSensorsDisabled, mSensorProvider); 5474035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 5484035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline void locallog() const { 5494035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGV("LocEngSensorControlConfig - Sensors Disabled: %d, Sensor Provider: %d", 5504035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mSensorsDisabled, mSensorProvider); 5514035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 5524035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline virtual void log() const { 5534035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 5544035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 5554035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin}; 5564035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 5574035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin// case LOC_ENG_MSG_SET_SENSOR_PROPERTIES: 5584035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinstruct LocEngSensorProperties : public LocMsg { 5594035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocEngAdapter* mAdapter; 5604035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin const bool mGyroBiasVarianceRandomWalkValid; 5614035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin const float mGyroBiasVarianceRandomWalk; 5624035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin const bool mAccelRandomWalkValid; 5634035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin const float mAccelRandomWalk; 5644035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin const bool mAngleRandomWalkValid; 5654035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin const float mAngleRandomWalk; 5664035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin const bool mRateRandomWalkValid; 5674035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin const float mRateRandomWalk; 5684035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin const bool mVelocityRandomWalkValid; 5694035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin const float mVelocityRandomWalk; 5704035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline LocEngSensorProperties(LocEngAdapter* adapter, 5714035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin bool gyroBiasRandomWalk_valid, 5724035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin float gyroBiasRandomWalk, 5734035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin bool accelRandomWalk_valid, 5744035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin float accelRandomWalk, 5754035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin bool angleRandomWalk_valid, 5764035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin float angleRandomWalk, 5774035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin bool rateRandomWalk_valid, 5784035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin float rateRandomWalk, 5794035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin bool velocityRandomWalk_valid, 5804035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin float velocityRandomWalk) : 5814035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocMsg(), mAdapter(adapter), 5824035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mGyroBiasVarianceRandomWalkValid(gyroBiasRandomWalk_valid), 5834035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mGyroBiasVarianceRandomWalk(gyroBiasRandomWalk), 5844035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mAccelRandomWalkValid(accelRandomWalk_valid), 5854035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mAccelRandomWalk(accelRandomWalk), 5864035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mAngleRandomWalkValid(angleRandomWalk_valid), 5874035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mAngleRandomWalk(angleRandomWalk), 5884035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mRateRandomWalkValid(rateRandomWalk_valid), 5894035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mRateRandomWalk(rateRandomWalk), 5904035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mVelocityRandomWalkValid(velocityRandomWalk_valid), 5914035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mVelocityRandomWalk(velocityRandomWalk) 5924035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin { 5934035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 5944035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 5954035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline virtual void proc() const { 5964035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mAdapter->setSensorProperties(mGyroBiasVarianceRandomWalkValid, 5974035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mGyroBiasVarianceRandomWalk, 5984035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mAccelRandomWalkValid, 5994035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mAccelRandomWalk, 6004035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mAngleRandomWalkValid, 6014035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mAngleRandomWalk, 6024035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mRateRandomWalkValid, 6034035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mRateRandomWalk, 6044035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mVelocityRandomWalkValid, 6054035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mVelocityRandomWalk); 6064035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 6074035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline void locallog() const { 6084035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGV("Sensor properties validity, Gyro Random walk: %d " 6094035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin "Accel Random Walk: %d " 6104035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin "Angle Random Walk: %d Rate Random Walk: %d " 6114035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin "Velocity Random Walk: %d\n" 6124035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin "Sensor properties, Gyro Random walk: %f " 6134035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin "Accel Random Walk: %f " 6144035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin "Angle Random Walk: %f Rate Random Walk: %f " 6154035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin "Velocity Random Walk: %f", 6164035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mGyroBiasVarianceRandomWalkValid, 6174035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mAccelRandomWalkValid, 6184035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mAngleRandomWalkValid, 6194035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mRateRandomWalkValid, 6204035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mVelocityRandomWalkValid, 6214035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mGyroBiasVarianceRandomWalk, 6224035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mAccelRandomWalk, 6234035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mAngleRandomWalk, 6244035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mRateRandomWalk, 6254035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mVelocityRandomWalk 6264035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin ); 6274035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 6284035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline virtual void log() const { 6294035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 6304035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 6314035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin}; 6324035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 6334035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin// case LOC_ENG_MSG_SET_SENSOR_PERF_CONTROL_CONFIG: 6344035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinstruct LocEngSensorPerfControlConfig : public LocMsg { 6354035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocEngAdapter* mAdapter; 6364035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin const int mControlMode; 6374035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin const int mAccelSamplesPerBatch; 6384035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin const int mAccelBatchesPerSec; 6394035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin const int mGyroSamplesPerBatch; 6404035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin const int mGyroBatchesPerSec; 6414035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin const int mAccelSamplesPerBatchHigh; 6424035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin const int mAccelBatchesPerSecHigh; 6434035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin const int mGyroSamplesPerBatchHigh; 6444035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin const int mGyroBatchesPerSecHigh; 6454035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin const int mAlgorithmConfig; 6464035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline LocEngSensorPerfControlConfig(LocEngAdapter* adapter, 6474035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin int controlMode, 6484035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin int accelSamplesPerBatch, 6494035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin int accelBatchesPerSec, 6504035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin int gyroSamplesPerBatch, 6514035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin int gyroBatchesPerSec, 6524035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin int accelSamplesPerBatchHigh, 6534035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin int accelBatchesPerSecHigh, 6544035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin int gyroSamplesPerBatchHigh, 6554035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin int gyroBatchesPerSecHigh, 6564035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin int algorithmConfig) : 6574035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocMsg(), mAdapter(adapter), 6584035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mControlMode(controlMode), 6594035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mAccelSamplesPerBatch(accelSamplesPerBatch), 6604035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mAccelBatchesPerSec(accelBatchesPerSec), 6614035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mGyroSamplesPerBatch(gyroSamplesPerBatch), 6624035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mGyroBatchesPerSec(gyroBatchesPerSec), 6634035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mAccelSamplesPerBatchHigh(accelSamplesPerBatchHigh), 6644035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mAccelBatchesPerSecHigh(accelBatchesPerSecHigh), 6654035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mGyroSamplesPerBatchHigh(gyroSamplesPerBatchHigh), 6664035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mGyroBatchesPerSecHigh(gyroBatchesPerSecHigh), 6674035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mAlgorithmConfig(algorithmConfig) 6684035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin { 6694035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 6704035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 6714035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline virtual void proc() const { 6724035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mAdapter->setSensorPerfControlConfig(mControlMode, 6734035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mAccelSamplesPerBatch, 6744035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mAccelBatchesPerSec, 6754035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mGyroSamplesPerBatch, 6764035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mGyroBatchesPerSec, 6774035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mAccelSamplesPerBatchHigh, 6784035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mAccelBatchesPerSecHigh, 6794035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mGyroSamplesPerBatchHigh, 6804035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mGyroBatchesPerSecHigh, 6814035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mAlgorithmConfig); 6824035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 6834035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline void locallog() const { 6844035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGV("Sensor Perf Control Config (performanceControlMode)(%u) " 6854035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin "accel(#smp,#batches) (%u,%u) " 6864035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin "gyro(#smp,#batches) (%u,%u), " 6874035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin "accel_high(#smp,#batches) (%u,%u) " 6884035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin "gyro_high(#smp,#batches) (%u,%u), " 6894035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin "algorithmConfig(%u)\n", 6904035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mControlMode, 6914035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mAccelSamplesPerBatch, mAccelBatchesPerSec, 6924035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mGyroSamplesPerBatch, mGyroBatchesPerSec, 6934035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mAccelSamplesPerBatchHigh, mAccelBatchesPerSecHigh, 6944035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mGyroSamplesPerBatchHigh, mGyroBatchesPerSecHigh, 6954035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mAlgorithmConfig); 6964035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 6974035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline virtual void log() const { 6984035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 6994035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 7004035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin}; 7014035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 7024035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin// case LOC_ENG_MSG_EXT_POWER_CONFIG: 7034035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinstruct LocEngExtPowerConfig : public LocMsg { 7044035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocEngAdapter* mAdapter; 7054035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin const int mIsBatteryCharging; 7064035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline LocEngExtPowerConfig(LocEngAdapter* adapter, 7074035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin int isBatteryCharging) : 7084035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocMsg(), mAdapter(adapter), 7094035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mIsBatteryCharging(isBatteryCharging) 7104035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin { 7114035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 7124035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 7134035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline virtual void proc() const { 7144035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mAdapter->setExtPowerConfig(mIsBatteryCharging); 7154035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 7164035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline void locallog() const { 7174035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGV("LocEngExtPowerConfig - isBatteryCharging: %d", 7184035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mIsBatteryCharging); 7194035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 7204035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline virtual void log() const { 7214035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 7224035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 7234035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin}; 7244035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 7254035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin// case LOC_ENG_MSG_REPORT_POSITION: 7264035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinLocEngReportPosition::LocEngReportPosition(LocAdapterBase* adapter, 7274035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin UlpLocation &loc, 7284035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin GpsLocationExtended &locExtended, 7294035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin void* locExt, 7304035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin enum loc_sess_status st, 7314035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocPosTechMask technology) : 7324035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocMsg(), mAdapter(adapter), mLocation(loc), 7334035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mLocationExtended(locExtended), 7344035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mLocationExt(((loc_eng_data_s_type*) 7354035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin ((LocEngAdapter*) 7364035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin (mAdapter))->getOwner())->location_ext_parser(locExt)), 7374035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mStatus(st), mTechMask(technology) 7384035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin{ 7394035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 7404035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 7414035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinvoid LocEngReportPosition::proc() const { 7424035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocEngAdapter* adapter = (LocEngAdapter*)mAdapter; 7434035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data_s_type* locEng = (loc_eng_data_s_type*)adapter->getOwner(); 7444035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 7454035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (locEng->mute_session_state != LOC_MUTE_SESS_IN_SESSION) { 7464035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin bool reported = false; 7474035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (locEng->location_cb != NULL) { 7484035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (LOC_SESS_FAILURE == mStatus) { 7494035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin // in case we want to handle the failure case 7504035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locEng->location_cb(NULL, NULL); 7514035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin reported = true; 7524035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 7534035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin // what's in the else if is... (line by line) 7544035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin // 1. this is a final fix; and 7554035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin // 1.1 it is a Satellite fix; or 7564035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin // 1.2 it is a sensor fix 7574035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin // 2. (must be intermediate fix... implicit) 7584035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin // 2.1 we accepte intermediate; and 7594035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin // 2.2 it is NOT the case that 7604035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin // 2.2.1 there is inaccuracy; and 7614035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin // 2.2.2 we care about inaccuracy; and 7624035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin // 2.2.3 the inaccuracy exceeds our tolerance 7634035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin else if ((LOC_SESS_SUCCESS == mStatus && 7644035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin ((LOC_POS_TECH_MASK_SATELLITE | 7654035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_POS_TECH_MASK_SENSORS | 7664035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_POS_TECH_MASK_HYBRID) & 7674035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mTechMask)) || 7684035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin (LOC_SESS_INTERMEDIATE == locEng->intermediateFix && 7694035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin !((mLocation.gpsLocation.flags & 7704035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin GPS_LOCATION_HAS_ACCURACY) && 7714035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin (gps_conf.ACCURACY_THRES != 0) && 7724035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin (mLocation.gpsLocation.accuracy > 7734035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin gps_conf.ACCURACY_THRES)))) { 7744035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locEng->location_cb((UlpLocation*)&(mLocation), 7754035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin (void*)mLocationExt); 7764035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin reported = true; 7774035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 7784035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 7794035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 7804035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin // if we have reported this fix 7814035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (reported && 7824035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin // and if this is a singleshot 7834035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin GPS_POSITION_RECURRENCE_SINGLE == 7844035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locEng->adapter->getPositionMode().recurrence) { 7854035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (LOC_SESS_INTERMEDIATE == mStatus) { 7864035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin // modem could be still working for a final fix, 7874035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin // although we no longer need it. So stopFix(). 7884035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locEng->adapter->stopFix(); 7894035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 7904035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin // turn off the session flag. 7914035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locEng->adapter->setInSession(false); 7924035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 7934035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 7944035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGV("LocEngReportPosition::proc() - generateNmea: %d, position source: %d, " 7954035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin "engine_status: %d, isInSession: %d", 7964035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locEng->generateNmea, mLocation.position_source, 7974035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locEng->engine_status, locEng->adapter->isInSession()); 7984035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 7994035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (locEng->generateNmea && 8004035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locEng->adapter->isInSession()) 8014035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin { 8024035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin unsigned char generate_nmea = reported && 8034035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin (mStatus != LOC_SESS_FAILURE); 8044035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_nmea_generate_pos(locEng, mLocation, mLocationExtended, 8054035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin generate_nmea); 8064035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 8074035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 8084035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin // Free the allocated memory for rawData 8094035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin UlpLocation* gp = (UlpLocation*)&(mLocation); 8104035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (gp != NULL && gp->rawData != NULL) 8114035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin { 8124035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin delete (char*)gp->rawData; 8134035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin gp->rawData = NULL; 8144035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin gp->rawDataSize = 0; 8154035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 8164035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 8174035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 8184035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinvoid LocEngReportPosition::locallog() const { 8194035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGV("LocEngReportPosition"); 8204035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 8214035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinvoid LocEngReportPosition::log() const { 8224035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 8234035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 8244035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinvoid LocEngReportPosition::send() const { 8254035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mAdapter->sendMsg(this); 8264035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 8274035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 8284035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 8294035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin// case LOC_ENG_MSG_REPORT_SV: 8304035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinLocEngReportSv::LocEngReportSv(LocAdapterBase* adapter, 8312e0c5f2f0d31e06a817de185fda694ba79f82ce0Dante Russo QtiGnssSvStatus &sv, 8324035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin GpsLocationExtended &locExtended, 8334035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin void* svExt) : 8344035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocMsg(), mAdapter(adapter), mSvStatus(sv), 8354035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mLocationExtended(locExtended), 8364035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mSvExt(((loc_eng_data_s_type*) 8374035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin ((LocEngAdapter*) 8384035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin (mAdapter))->getOwner())->sv_ext_parser(svExt)) 8394035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin{ 8404035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 8414035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 8424035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinvoid LocEngReportSv::proc() const { 8434035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocEngAdapter* adapter = (LocEngAdapter*)mAdapter; 8444035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data_s_type* locEng = (loc_eng_data_s_type*)adapter->getOwner(); 8454035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 8464035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (locEng->mute_session_state != LOC_MUTE_SESS_IN_SESSION) 8474035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin { 8484035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (locEng->sv_status_cb != NULL) { 8494035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locEng->sv_status_cb((GpsSvStatus*)&(mSvStatus), 8504035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin (void*)mSvExt); 8514035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 8524035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 8534035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (locEng->generateNmea) 8544035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin { 8554035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_nmea_generate_sv(locEng, mSvStatus, mLocationExtended); 8564035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 8574035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 8584035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 8594035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinvoid LocEngReportSv::locallog() const { 8604035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGV("%s:%d] LocEngReportSv",__func__, __LINE__); 8614035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 8624035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjininline void LocEngReportSv::log() const { 8634035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 8644035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 8654035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinvoid LocEngReportSv::send() const { 8664035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mAdapter->sendMsg(this); 8674035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 8684035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 8694035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin// case LOC_ENG_MSG_REPORT_STATUS: 8704035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinLocEngReportStatus::LocEngReportStatus(LocAdapterBase* adapter, 8714035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin GpsStatusValue engineStatus) : 8724035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocMsg(), mAdapter(adapter), mStatus(engineStatus) 8734035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin{ 8744035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 8754035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 8764035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjininline void LocEngReportStatus::proc() const 8774035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin{ 8784035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocEngAdapter* adapter = (LocEngAdapter*)mAdapter; 8794035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data_s_type* locEng = (loc_eng_data_s_type*)adapter->getOwner(); 8804035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 8814035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_report_status(*locEng, mStatus); 8824035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin update_aiding_data_for_deletion(*locEng); 8834035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 8844035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjininline void LocEngReportStatus::locallog() const { 8854035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGV("LocEngReportStatus"); 8864035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 8874035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjininline void LocEngReportStatus::log() const { 8884035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 8894035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 8904035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 8914035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin// case LOC_ENG_MSG_REPORT_NMEA: 8924035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinLocEngReportNmea::LocEngReportNmea(void* locEng, 8934035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin const char* data, int len) : 8944035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocMsg(), mLocEng(locEng), mNmea(new char[len]), mLen(len) 8954035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin{ 8964035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin memcpy((void*)mNmea, (void*)data, len); 8974035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 8984035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 8994035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinvoid LocEngReportNmea::proc() const { 9004035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data_s_type* locEng = (loc_eng_data_s_type*) mLocEng; 9014035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 9024035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin struct timeval tv; 9034035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin gettimeofday(&tv, (struct timezone *) NULL); 9044035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin int64_t now = tv.tv_sec * 1000LL + tv.tv_usec / 1000; 9054035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin CALLBACK_LOG_CALLFLOW("nmea_cb", %d, mLen); 9064035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 9074035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (locEng->nmea_cb != NULL) 9084035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locEng->nmea_cb(now, mNmea, mLen); 9094035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 9104035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjininline void LocEngReportNmea::locallog() const { 9114035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGV("LocEngReportNmea"); 9124035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 9134035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjininline void LocEngReportNmea::log() const { 9144035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 9154035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 9164035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 9174035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin// case LOC_ENG_MSG_REPORT_XTRA_SERVER: 9184035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinLocEngReportXtraServer::LocEngReportXtraServer(void* locEng, 9194035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin const char *url1, 9204035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin const char *url2, 9214035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin const char *url3, 9224035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin const int maxlength) : 9234035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocMsg(), mLocEng(locEng), mMaxLen(maxlength), 9244035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mServers(new char[3*(mMaxLen+1)]) 9254035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin{ 9264035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin char * cptr = mServers; 9274035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin memset(mServers, 0, 3*(mMaxLen+1)); 9284035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 9294035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin // Override modem URLs with uncommented gps.conf urls 9304035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if( gps_conf.XTRA_SERVER_1[0] != '\0' ) { 9314035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin url1 = &gps_conf.XTRA_SERVER_1[0]; 9324035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 9334035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if( gps_conf.XTRA_SERVER_2[0] != '\0' ) { 9344035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin url2 = &gps_conf.XTRA_SERVER_2[0]; 9354035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 9364035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if( gps_conf.XTRA_SERVER_3[0] != '\0' ) { 9374035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin url3 = &gps_conf.XTRA_SERVER_3[0]; 9384035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 9394035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin // copy non xtra1.gpsonextra.net URLs into the forwarding buffer. 9404035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if( NULL == strcasestr(url1, XTRA1_GPSONEXTRA) ) { 9414035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin strlcpy(cptr, url1, mMaxLen + 1); 9424035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin cptr += mMaxLen + 1; 9434035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 9444035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if( NULL == strcasestr(url2, XTRA1_GPSONEXTRA) ) { 9454035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin strlcpy(cptr, url2, mMaxLen + 1); 9464035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin cptr += mMaxLen + 1; 9474035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 9484035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if( NULL == strcasestr(url3, XTRA1_GPSONEXTRA) ) { 9494035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin strlcpy(cptr, url3, mMaxLen + 1); 9504035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 9514035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 9524035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 9534035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 9544035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinvoid LocEngReportXtraServer::proc() const { 9554035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_xtra_data_s_type* locEngXtra = 9564035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin &(((loc_eng_data_s_type*)mLocEng)->xtra_module_data); 9574035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 9584035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (locEngXtra->report_xtra_server_cb != NULL) { 9594035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin CALLBACK_LOG_CALLFLOW("report_xtra_server_cb", %s, mServers); 9604035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locEngXtra->report_xtra_server_cb(mServers, 9614035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin &(mServers[mMaxLen+1]), 9624035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin &(mServers[(mMaxLen+1)<<1])); 9634035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } else { 9644035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGE("Callback function for request xtra is NULL"); 9654035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 9664035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 9674035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjininline void LocEngReportXtraServer::locallog() const { 9684035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGV("LocEngReportXtraServers: server1: %s\n server2: %s\n" 9694035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin " server3: %s\n", 9704035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mServers, &mServers[mMaxLen+1], &mServers[(mMaxLen+1)<<1]); 9714035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 9724035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjininline void LocEngReportXtraServer::log() const { 9734035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 9744035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 9754035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 9764035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin// case LOC_ENG_MSG_REQUEST_BIT: 9774035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin// case LOC_ENG_MSG_RELEASE_BIT: 9784035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinLocEngReqRelBIT::LocEngReqRelBIT(void* locEng, AGpsExtType type, 9794035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin int ipv4, char* ipv6, bool isReq) : 9804035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocMsg(), mLocEng(locEng), mType(type), mIPv4Addr(ipv4), 9814035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mIPv6Addr(ipv6 ? new char[16] : NULL), mIsReq(isReq) { 9824035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (NULL != ipv6) 9834035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin memcpy(mIPv6Addr, ipv6, 16); 9844035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 9854035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 9864035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjininline LocEngReqRelBIT::~LocEngReqRelBIT() { 9874035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (mIPv6Addr) { 9884035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin delete[] mIPv6Addr; 9894035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 9904035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 9914035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinvoid LocEngReqRelBIT::proc() const { 9924035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data_s_type* locEng = (loc_eng_data_s_type*)mLocEng; 9934035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin BITSubscriber s(getAgpsStateMachine(*locEng, mType), 9944035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mIPv4Addr, mIPv6Addr); 9954035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin AgpsStateMachine* sm = (AgpsStateMachine*)s.mStateMachine; 9964035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 9974035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (mIsReq) { 9984035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin sm->subscribeRsrc((Subscriber*)&s); 9994035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } else { 10004035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin sm->unsubscribeRsrc((Subscriber*)&s); 10014035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 10024035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 10034035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjininline void LocEngReqRelBIT::locallog() const { 10044035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGV("LocEngRequestBIT - ipv4: %d.%d.%d.%d, ipv6: %s", 10054035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin (unsigned char)mIPv4Addr, 10064035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin (unsigned char)(mIPv4Addr>>8), 10074035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin (unsigned char)(mIPv4Addr>>16), 10084035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin (unsigned char)(mIPv4Addr>>24), 10094035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin NULL != mIPv6Addr ? mIPv6Addr : ""); 10104035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 10114035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjininline void LocEngReqRelBIT::log() const { 10124035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 10134035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 10144035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinvoid LocEngReqRelBIT::send() const { 10154035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data_s_type* locEng = (loc_eng_data_s_type*)mLocEng; 10164035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locEng->adapter->sendMsg(this); 10174035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 10184035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 10194035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin// case LOC_ENG_MSG_RELEASE_BIT: 10204035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinstruct LocEngReleaseBIT : public LocMsg { 10214035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin const BITSubscriber mSubscriber; 10224035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline LocEngReleaseBIT(const AgpsStateMachine* stateMachine, 10234035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin unsigned int ipv4, char* ipv6) : 10244035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocMsg(), 10254035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mSubscriber(stateMachine, ipv4, ipv6) 10264035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin { 10274035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 10284035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 10294035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline virtual void proc() const 10304035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin { 10314035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin AgpsStateMachine* sm = (AgpsStateMachine*)mSubscriber.mStateMachine; 10324035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin sm->unsubscribeRsrc((Subscriber*)&mSubscriber); 10334035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 10344035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline void locallog() const { 10354035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGV("LocEngReleaseBIT - ipv4: %d.%d.%d.%d, ipv6: %s", 10364035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin (unsigned char)(mSubscriber.ID>>24), 10374035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin (unsigned char)(mSubscriber.ID>>16), 10384035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin (unsigned char)(mSubscriber.ID>>8), 10394035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin (unsigned char)mSubscriber.ID, 10404035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin NULL != mSubscriber.mIPv6Addr ? mSubscriber.mIPv6Addr : ""); 10414035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 10424035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin virtual void log() const { 10434035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 10444035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 10454035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin}; 10464035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 10474035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin// LocEngSuplEsOpened 10484035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinLocEngSuplEsOpened::LocEngSuplEsOpened(void* locEng) : 10494035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocMsg(), mLocEng(locEng) { 10504035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 10514035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 10524035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinvoid LocEngSuplEsOpened::proc() const { 10534035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data_s_type* locEng = (loc_eng_data_s_type*)mLocEng; 10544035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (locEng->ds_nif) { 10554035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin AgpsStateMachine* sm = locEng->ds_nif; 10564035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin sm->onRsrcEvent(RSRC_GRANTED); 10574035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 10584035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 10594035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinvoid LocEngSuplEsOpened::locallog() const { 10604035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGV("LocEngSuplEsOpened"); 10614035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 10624035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinvoid LocEngSuplEsOpened::log() const { 10634035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 10644035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 10654035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 10664035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin// LocEngSuplEsClosed 10674035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinLocEngSuplEsClosed::LocEngSuplEsClosed(void* locEng) : 10684035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocMsg(), mLocEng(locEng) { 10694035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 10704035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 10714035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinvoid LocEngSuplEsClosed::proc() const { 10724035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data_s_type* locEng = (loc_eng_data_s_type*)mLocEng; 10734035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (locEng->ds_nif) { 10744035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin AgpsStateMachine* sm = locEng->ds_nif; 10754035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin sm->onRsrcEvent(RSRC_RELEASED); 10764035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 10774035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 10784035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinvoid LocEngSuplEsClosed::locallog() const { 10794035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGV("LocEngSuplEsClosed"); 10804035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 10814035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinvoid LocEngSuplEsClosed::log() const { 10824035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 10834035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 10844035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 10854035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 10864035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin// case LOC_ENG_MSG_REQUEST_SUPL_ES: 10874035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinLocEngRequestSuplEs::LocEngRequestSuplEs(void* locEng, int id) : 10884035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocMsg(), mLocEng(locEng), mID(id) { 10894035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 10904035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 10914035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinvoid LocEngRequestSuplEs::proc() const { 10924035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data_s_type* locEng = (loc_eng_data_s_type*)mLocEng; 10934035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (locEng->ds_nif) { 10944035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin AgpsStateMachine* sm = locEng->ds_nif; 10954035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin DSSubscriber s(sm, mID); 10964035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin sm->subscribeRsrc((Subscriber*)&s); 10974035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 10984035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin else if (locEng->agnss_nif) { 10994035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin AgpsStateMachine *sm = locEng->agnss_nif; 11004035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin ATLSubscriber s(mID, 11014035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin sm, 11024035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locEng->adapter, 11034035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin false); 11044035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin sm->subscribeRsrc((Subscriber*)&s); 11054035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGD("%s:%d]: Using regular ATL for SUPL ES", __func__, __LINE__); 11064035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 11074035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin else { 11084035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locEng->adapter->atlOpenStatus(mID, 0, NULL, -1, -1); 11094035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 11104035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 11114035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjininline void LocEngRequestSuplEs::locallog() const { 11124035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGV("LocEngRequestSuplEs"); 11134035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 11144035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjininline void LocEngRequestSuplEs::log() const { 11154035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 11164035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 11174035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 11184035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin// case LOC_ENG_MSG_REQUEST_ATL: 11194035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinLocEngRequestATL::LocEngRequestATL(void* locEng, int id, 11204035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin AGpsExtType agps_type) : 11214035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocMsg(), mLocEng(locEng), mID(id), mType(agps_type) { 11224035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 11234035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 11244035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinvoid LocEngRequestATL::proc() const { 11254035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data_s_type* locEng = (loc_eng_data_s_type*)mLocEng; 11264035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin AgpsStateMachine* sm = (AgpsStateMachine*) 11274035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin getAgpsStateMachine(*locEng, mType); 11284035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (sm) { 11294035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin ATLSubscriber s(mID, 11304035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin sm, 11314035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locEng->adapter, 11324035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin AGPS_TYPE_INVALID == mType); 11334035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin sm->subscribeRsrc((Subscriber*)&s); 11344035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } else { 11354035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locEng->adapter->atlOpenStatus(mID, 0, NULL, -1, mType); 11364035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 11374035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 11384035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjininline void LocEngRequestATL::locallog() const { 11394035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGV("LocEngRequestATL"); 11404035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 11414035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjininline void LocEngRequestATL::log() const { 11424035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 11434035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 11444035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 11454035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin// case LOC_ENG_MSG_RELEASE_ATL: 11464035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinLocEngReleaseATL::LocEngReleaseATL(void* locEng, int id) : 11474035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocMsg(), mLocEng(locEng), mID(id) { 11484035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 11494035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 11504035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinvoid LocEngReleaseATL::proc() const { 11514035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data_s_type* locEng = (loc_eng_data_s_type*)mLocEng; 11524035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 11534035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (locEng->agnss_nif) { 11544035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin ATLSubscriber s1(mID, locEng->agnss_nif, locEng->adapter, false); 11554035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (locEng->agnss_nif->unsubscribeRsrc((Subscriber*)&s1)) { 11564035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGD("%s:%d]: Unsubscribed from agnss_nif", 11574035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin __func__, __LINE__); 11584035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin return; 11594035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 11604035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 11614035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 11624035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (locEng->internet_nif) { 11634035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin ATLSubscriber s2(mID, locEng->internet_nif, locEng->adapter, false); 11644035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (locEng->internet_nif->unsubscribeRsrc((Subscriber*)&s2)) { 11654035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGD("%s:%d]: Unsubscribed from internet_nif", 11664035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin __func__, __LINE__); 11674035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin return; 11684035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 11694035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 11704035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 11714035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (locEng->ds_nif) { 11724035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin DSSubscriber s3(locEng->ds_nif, mID); 11734035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (locEng->ds_nif->unsubscribeRsrc((Subscriber*)&s3)) { 11744035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGD("%s:%d]: Unsubscribed from ds_nif", 11754035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin __func__, __LINE__); 11764035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin return; 11774035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 11784035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 11794035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 11804035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGW("%s:%d]: Could not release ATL. " 11814035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin "No subscribers found\n", 11824035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin __func__, __LINE__); 11834035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locEng->adapter->atlCloseStatus(mID, 0); 11844035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 11854035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjininline void LocEngReleaseATL::locallog() const { 11864035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGV("LocEngReleaseATL"); 11874035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 11884035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjininline void LocEngReleaseATL::log() const { 11894035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 11904035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 11914035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 11924035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin// case LOC_ENG_MSG_REQUEST_WIFI: 11934035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin// case LOC_ENG_MSG_RELEASE_WIFI: 11944035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinLocEngReqRelWifi::LocEngReqRelWifi(void* locEng, AGpsExtType type, 11954035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_if_req_sender_id_e_type sender_id, 11964035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin char* s, char* p, bool isReq) : 11974035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocMsg(), mLocEng(locEng), mType(type), mSenderId(sender_id), 11984035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mSSID(NULL == s ? NULL : new char[SSID_BUF_SIZE]), 11994035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mPassword(NULL == p ? NULL : new char[SSID_BUF_SIZE]), 12004035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mIsReq(isReq) { 12014035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (NULL != s) 12024035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin strlcpy(mSSID, s, SSID_BUF_SIZE); 12034035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (NULL != p) 12044035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin strlcpy(mPassword, p, SSID_BUF_SIZE); 12054035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 12064035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 12074035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinLocEngReqRelWifi::~LocEngReqRelWifi() { 12084035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (NULL != mSSID) { 12094035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin delete[] mSSID; 12104035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 12114035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (NULL != mPassword) { 12124035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin delete[] mPassword; 12134035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 12144035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 12154035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinvoid LocEngReqRelWifi::proc() const { 12164035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data_s_type* locEng = (loc_eng_data_s_type*)mLocEng; 12174035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (locEng->wifi_nif) { 12184035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin WIFISubscriber s(locEng->wifi_nif, mSSID, mPassword, mSenderId); 12194035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (mIsReq) { 12204035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locEng->wifi_nif->subscribeRsrc((Subscriber*)&s); 12214035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } else { 12224035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locEng->wifi_nif->unsubscribeRsrc((Subscriber*)&s); 12234035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 12244035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } else { 12254035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locEng->adapter->atlOpenStatus(mSenderId, 0, NULL, -1, mType); 12264035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 12274035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 12284035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjininline void LocEngReqRelWifi::locallog() const { 12294035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGV("%s - senderId: %d, ssid: %s, password: %s", 12304035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mIsReq ? "LocEngRequestWifi" : "LocEngReleaseWifi", 12314035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mSenderId, 12324035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin NULL != mSSID ? mSSID : "", 12334035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin NULL != mPassword ? mPassword : ""); 12344035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 12354035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjininline void LocEngReqRelWifi::log() const { 12364035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 12374035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 12384035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinvoid LocEngReqRelWifi::send() const { 12394035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data_s_type* locEng = (loc_eng_data_s_type*)mLocEng; 12404035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locEng->adapter->sendMsg(this); 12414035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 12424035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 12434035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin// case LOC_ENG_MSG_REQUEST_XTRA_DATA: 12444035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinLocEngRequestXtra::LocEngRequestXtra(void* locEng) : 12454035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mLocEng(locEng) { 12464035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 12474035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 12484035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinvoid LocEngRequestXtra::proc() const 12494035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin{ 12504035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_xtra_data_s_type* locEngXtra = 12514035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin &(((loc_eng_data_s_type*)mLocEng)->xtra_module_data); 12524035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 12534035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (locEngXtra->download_request_cb != NULL) { 12544035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin CALLBACK_LOG_CALLFLOW("download_request_cb", %p, mLocEng); 12554035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locEngXtra->download_request_cb(); 12564035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } else { 12574035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGE("Callback function for request xtra is NULL"); 12584035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 12594035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 12604035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjininline void LocEngRequestXtra::locallog() const { 12614035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGV("LocEngReqXtra"); 12624035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 12634035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjininline void LocEngRequestXtra::log() const { 12644035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 12654035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 12664035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 12674035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin// case LOC_ENG_MSG_REQUEST_TIME: 12684035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinLocEngRequestTime::LocEngRequestTime(void* locEng) : 12694035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocMsg(), mLocEng(locEng) 12704035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin{ 12714035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 12724035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 12734035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinvoid LocEngRequestTime::proc() const { 12744035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data_s_type* locEng = (loc_eng_data_s_type*)mLocEng; 12754035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (gps_conf.CAPABILITIES & GPS_CAPABILITY_ON_DEMAND_TIME) { 12764035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (locEng->request_utc_time_cb != NULL) { 12774035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locEng->request_utc_time_cb(); 12784035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } else { 12794035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGE("Callback function for request time is NULL"); 12804035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 12814035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 12824035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 12834035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjininline void LocEngRequestTime::locallog() const { 12844035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGV("LocEngReqTime"); 12854035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 12864035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjininline void LocEngRequestTime::log() const { 12874035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 12884035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 12894035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 12904035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin// case LOC_ENG_MSG_DELETE_AIDING_DATA: 12914035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinstruct LocEngDelAidData : public LocMsg { 12924035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data_s_type* mLocEng; 12934035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin const GpsAidingData mType; 12944035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline LocEngDelAidData(loc_eng_data_s_type* locEng, 12954035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin GpsAidingData f) : 12964035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocMsg(), mLocEng(locEng), mType(f) 12974035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin { 12984035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 12994035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 13004035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline virtual void proc() const { 13014035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mLocEng->aiding_data_for_deletion = mType; 13024035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin update_aiding_data_for_deletion(*mLocEng); 13034035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 13044035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline void locallog() const { 13054035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGV("aiding data msak %d", mType); 13064035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 13074035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin virtual void log() const { 13084035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 13094035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 13104035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin}; 13114035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 13124035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin// case LOC_ENG_MSG_ENABLE_DATA: 13134035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinstruct LocEngEnableData : public LocMsg { 13144035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocEngAdapter* mAdapter; 13154035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin const int mEnable; 13164035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin char* mAPN; 13174035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin const int mLen; 13184035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline LocEngEnableData(LocEngAdapter* adapter, 13194035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin const char* name, int len, int enable) : 13204035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocMsg(), mAdapter(adapter), 13214035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mEnable(enable), mAPN(NULL), mLen(len) 13224035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin { 13234035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (NULL != name) { 13244035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mAPN = new char[len+1]; 13254035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin memcpy((void*)mAPN, (void*)name, len); 13264035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mAPN[len] = 0; 13274035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 13284035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 13294035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 13304035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline ~LocEngEnableData() { 13314035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (NULL != mAPN) { 13324035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin delete[] mAPN; 13334035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 13344035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 13354035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline virtual void proc() const { 13364035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mAdapter->enableData(mEnable); 13374035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (NULL != mAPN) { 13384035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mAdapter->setAPN(mAPN, mLen); 13394035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 13404035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 13414035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline void locallog() const { 13424035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGV("apn: %s\n enable: %d", 13434035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin (NULL == mAPN) ? "NULL" : mAPN, mEnable); 13444035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 13454035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline virtual void log() const { 13464035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 13474035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 13484035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin}; 13494035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 13504035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin// case LOC_ENG_MSG_INJECT_XTRA_DATA: 13514035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin// loc_eng_xtra.cpp 13524035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 13534035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin// case LOC_ENG_MSG_SET_CAPABILITIES: 13544035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinstruct LocEngSetCapabilities : public LocMsg { 13554035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data_s_type* mLocEng; 13564035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline LocEngSetCapabilities(loc_eng_data_s_type* locEng) : 13574035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocMsg(), mLocEng(locEng) 13584035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin { 13594035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 13604035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 13614035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline virtual void proc() const { 13624035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (NULL != mLocEng->set_capabilities_cb) { 13634035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGV("calling set_capabilities_cb 0x%x", 13644035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin gps_conf.CAPABILITIES); 13654035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mLocEng->set_capabilities_cb(gps_conf.CAPABILITIES); 13664035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } else { 13674035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGV("set_capabilities_cb is NULL.\n"); 13684035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 13694035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 13704035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline void locallog() const 13714035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin { 13724035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGV("LocEngSetCapabilities"); 13734035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 13744035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline virtual void log() const 13754035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin { 13764035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 13774035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 13784035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin}; 13794035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 13804035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin// case LOC_ENG_MSG_LOC_INIT: 13814035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinstruct LocEngInit : public LocMsg { 13824035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data_s_type* mLocEng; 13834035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline LocEngInit(loc_eng_data_s_type* locEng) : 13844035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocMsg(), mLocEng(locEng) 13854035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin { 13864035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 13874035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 13884035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline virtual void proc() const { 13894035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_reinit(*mLocEng); 13904035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin // set the capabilities 13914035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mLocEng->adapter->sendMsg(new LocEngSetCapabilities(mLocEng)); 13924035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 13934035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline void locallog() const 13944035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin { 13954035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGV("LocEngInit"); 13964035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 13974035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline virtual void log() const 13984035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin { 13994035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 14004035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 14014035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin}; 14024035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 14034035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin// case LOC_ENG_MSG_REQUEST_XTRA_SERVER: 14044035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin// loc_eng_xtra.cpp 14054035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 14064035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin// case LOC_ENG_MSG_ATL_OPEN_SUCCESS: 14074035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinstruct LocEngAtlOpenSuccess : public LocMsg { 14084035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin AgpsStateMachine* mStateMachine; 14094035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin const int mLen; 14104035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin char* mAPN; 14114035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin const AGpsBearerType mBearerType; 14124035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline LocEngAtlOpenSuccess(AgpsStateMachine* statemachine, 14134035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin const char* name, 14144035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin int len, 14154035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin AGpsBearerType btype) : 14164035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocMsg(), 14174035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mStateMachine(statemachine), mLen(len), 14184035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mAPN(new char[len+1]), mBearerType(btype) 14194035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin { 14204035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin memcpy((void*)mAPN, (void*)name, len); 14214035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mAPN[len] = 0; 14224035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 14234035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 14244035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline ~LocEngAtlOpenSuccess() 14254035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin { 14264035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin delete[] mAPN; 14274035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 14284035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline virtual void proc() const { 14294035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mStateMachine->setBearer(mBearerType); 14304035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mStateMachine->setAPN(mAPN, mLen); 14314035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mStateMachine->onRsrcEvent(RSRC_GRANTED); 14324035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 14334035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline void locallog() const { 14344035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGV("LocEngAtlOpenSuccess agps type: %s\n apn: %s\n" 14354035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin " bearer type: %s", 14364035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_get_agps_type_name(mStateMachine->getType()), 14374035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mAPN, 14384035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_get_agps_bear_name(mBearerType)); 14394035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 14404035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline virtual void log() const { 14414035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 14424035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 14434035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin}; 14444035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 14454035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin// case LOC_ENG_MSG_ATL_CLOSED: 14464035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinstruct LocEngAtlClosed : public LocMsg { 14474035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin AgpsStateMachine* mStateMachine; 14484035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline LocEngAtlClosed(AgpsStateMachine* statemachine) : 14494035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocMsg(), mStateMachine(statemachine) { 14504035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 14514035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 14524035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline virtual void proc() const { 14534035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mStateMachine->onRsrcEvent(RSRC_RELEASED); 14544035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 14554035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline void locallog() const { 14564035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGV("LocEngAtlClosed"); 14574035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 14584035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline virtual void log() const { 14594035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 14604035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 14614035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin}; 14624035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 14634035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin// case LOC_ENG_MSG_ATL_OPEN_FAILED: 14644035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinstruct LocEngAtlOpenFailed : public LocMsg { 14654035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin AgpsStateMachine* mStateMachine; 14664035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline LocEngAtlOpenFailed(AgpsStateMachine* statemachine) : 14674035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocMsg(), mStateMachine(statemachine) { 14684035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 14694035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 14704035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline virtual void proc() const { 14714035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mStateMachine->onRsrcEvent(RSRC_DENIED); 14724035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 14734035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline void locallog() const { 14744035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGV("LocEngAtlOpenFailed"); 14754035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 14764035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline virtual void log() const { 14774035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 14784035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 14794035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin}; 14804035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 14814035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin// case LOC_ENG_MSG_ENGINE_DOWN: 14824035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinLocEngDown::LocEngDown(void* locEng) : 14834035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocMsg(), mLocEng(locEng) { 14844035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 14854035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 14864035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjininline void LocEngDown::proc() const { 14874035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data_s_type* locEng = (loc_eng_data_s_type*)mLocEng; 14884035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_handle_engine_down(*locEng); 14894035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 14904035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjininline void LocEngDown::locallog() const { 14914035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGV("LocEngDown"); 14924035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 14934035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjininline void LocEngDown::log() const { 14944035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 14954035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 14964035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 14974035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin// case LOC_ENG_MSG_ENGINE_UP: 14984035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinLocEngUp::LocEngUp(void* locEng) : 14994035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocMsg(), mLocEng(locEng) { 15004035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 15014035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 15024035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjininline void LocEngUp::proc() const { 15034035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data_s_type* locEng = (loc_eng_data_s_type*)mLocEng; 15044035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_handle_engine_up(*locEng); 15054035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 15064035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjininline void LocEngUp::locallog() const { 15074035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGV("LocEngUp"); 15084035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 15094035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjininline void LocEngUp::log() const { 15104035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 15114035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 15124035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 15134035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinstruct LocEngDataClientInit : public LocMsg { 15144035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data_s_type* mLocEng; 15154035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline LocEngDataClientInit(loc_eng_data_s_type* locEng) : 15164035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocMsg(), mLocEng(locEng) { 15174035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 15184035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 15194035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin virtual void proc() const { 15204035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data_s_type *locEng = (loc_eng_data_s_type *)mLocEng; 15214035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if(!locEng->adapter->initDataServiceClient()) { 15224035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locEng->ds_nif = new DSStateMachine(servicerTypeExt, 15234035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin (void *)dataCallCb, 15244035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locEng->adapter); 15254035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 15264035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 15274035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin void locallog() const { 15284035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGV("LocEngDataClientInit\n"); 15294035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 15304035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin virtual void log() const { 15314035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 15324035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 15334035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin}; 15344035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 15354035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinstruct LocEngInstallAGpsCert : public LocMsg { 15364035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocEngAdapter* mpAdapter; 15374035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin const size_t mNumberOfCerts; 15384035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin const uint32_t mSlotBitMask; 15394035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin DerEncodedCertificate* mpData; 15404035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline LocEngInstallAGpsCert(LocEngAdapter* adapter, 15414035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin const DerEncodedCertificate* pData, 15424035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin size_t numberOfCerts, 15434035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin uint32_t slotBitMask) : 15444035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocMsg(), mpAdapter(adapter), 15454035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mNumberOfCerts(numberOfCerts), mSlotBitMask(slotBitMask), 15464035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mpData(new DerEncodedCertificate[mNumberOfCerts]) 15474035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin { 15484035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin for (int i=0; i < mNumberOfCerts; i++) { 15494035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mpData[i].data = new u_char[pData[i].length]; 15504035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (mpData[i].data) { 15514035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin memcpy(mpData[i].data, (void*)pData[i].data, pData[i].length); 15524035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mpData[i].length = pData[i].length; 15534035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } else { 15544035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGE("malloc failed for cert#%d", i); 15554035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin break; 15564035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 15574035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 15584035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 15594035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 15604035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline ~LocEngInstallAGpsCert() 15614035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin { 15624035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin for (int i=0; i < mNumberOfCerts; i++) { 15634035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (mpData[i].data) { 15644035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin delete[] mpData[i].data; 15654035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 15664035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 15674035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin delete[] mpData; 15684035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 15694035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline virtual void proc() const { 15704035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mpAdapter->installAGpsCert(mpData, mNumberOfCerts, mSlotBitMask); 15714035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 15724035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline void locallog() const { 15734035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGV("LocEngInstallAGpsCert - certs=%u mask=%u", 15744035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mNumberOfCerts, mSlotBitMask); 15754035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 15764035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline virtual void log() const { 15774035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 15784035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 15794035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin}; 15804035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 15814035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinstruct LocEngUpdateRegistrationMask : public LocMsg { 15824035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data_s_type* mLocEng; 15834035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_API_ADAPTER_EVENT_MASK_T mMask; 15844035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_registration_mask_status mIsEnabled; 15854035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline LocEngUpdateRegistrationMask(loc_eng_data_s_type* locEng, 15864035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_API_ADAPTER_EVENT_MASK_T mask, 15874035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_registration_mask_status isEnabled) : 15884035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocMsg(), mLocEng(locEng), mMask(mask), mIsEnabled(isEnabled) { 15894035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 15904035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 15914035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline virtual void proc() const { 15924035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data_s_type *locEng = (loc_eng_data_s_type *)mLocEng; 15934035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locEng->adapter->updateRegistrationMask(mMask, 15944035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mIsEnabled); 15954035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 15964035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin void locallog() const { 15974035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGV("LocEngUpdateRegistrationMask\n"); 15984035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 15994035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin virtual void log() const { 16004035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 16014035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 16024035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin}; 16034035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 16044035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinstruct LocEngGnssConstellationConfig : public LocMsg { 16054035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocEngAdapter* mAdapter; 16064035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline LocEngGnssConstellationConfig(LocEngAdapter* adapter) : 16074035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocMsg(), mAdapter(adapter) { 16084035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 16094035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 16104035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin inline virtual void proc() const { 16114035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (mAdapter->gnssConstellationConfig()) { 16124035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGV("Modem supports GNSS measurements\n"); 16134035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin gps_conf.CAPABILITIES |= GPS_CAPABILITY_MEASUREMENTS; 16144035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } else { 16154035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGV("Modem does not support GNSS measurements\n"); 16164035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 16174035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 16184035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin void locallog() const { 16194035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGV("LocEngGnssConstellationConfig\n"); 16204035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 16214035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin virtual void log() const { 16224035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 16234035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 16244035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin}; 16254035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 16264035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin// case LOC_ENG_MSG_REPORT_GNSS_MEASUREMENT: 16274035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinLocEngReportGpsMeasurement::LocEngReportGpsMeasurement(void* locEng, 16284035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin GpsData &gpsData) : 16294035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocMsg(), mLocEng(locEng), mGpsData(gpsData) 16304035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin{ 16314035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 16324035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 16334035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinvoid LocEngReportGpsMeasurement::proc() const { 16344035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data_s_type* locEng = (loc_eng_data_s_type*) mLocEng; 16354035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (locEng->mute_session_state != LOC_MUTE_SESS_IN_SESSION) 16364035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin { 16374035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (locEng->gps_measurement_cb != NULL) { 16384035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locEng->gps_measurement_cb((GpsData*)&(mGpsData)); 16394035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 16404035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 16414035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 16424035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinvoid LocEngReportGpsMeasurement::locallog() const { 16434035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin IF_LOC_LOGV { 16444035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGV("%s:%d]: Received in GPS HAL." 16454035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin "GNSS Measurements count: %d \n", 16464035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin __func__, __LINE__, mGpsData.measurement_count); 16474035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin for (int i =0; i< mGpsData.measurement_count && i < GPS_MAX_SVS; i++) { 16484035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGV(" GNSS measurement data in GPS HAL: \n" 16494035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin " GPS_HAL => Measurement ID | prn | time_offset_ns | state |" 16504035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin " received_gps_tow_ns| c_n0_dbhz | pseudorange_rate_mps |" 16514035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin " pseudorange_rate_uncertainty_mps |" 16524035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin " accumulated_delta_range_state | flags \n" 16534035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin " GPS_HAL => %d | %d | %f | %d | %lld | %f | %f | %f | %d | %d \n", 16544035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin i, 16554035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mGpsData.measurements[i].prn, 16564035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mGpsData.measurements[i].time_offset_ns, 16574035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mGpsData.measurements[i].state, 16584035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mGpsData.measurements[i].received_gps_tow_ns, 16594035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mGpsData.measurements[i].c_n0_dbhz, 16604035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mGpsData.measurements[i].pseudorange_rate_mps, 16614035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mGpsData.measurements[i].pseudorange_rate_uncertainty_mps, 16624035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mGpsData.measurements[i].accumulated_delta_range_state, 16634035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mGpsData.measurements[i].flags); 16644035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 16654035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGV(" GPS_HAL => Clocks Info: type | time_ns \n" 16664035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin " GPS_HAL => Clocks Info: %d | %lld", mGpsData.clock.type, 16674035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin mGpsData.clock.time_ns); 16684035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 16694035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 16704035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjininline void LocEngReportGpsMeasurement::log() const { 16714035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locallog(); 16724035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 16734035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 16744035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin/********************************************************************* 16754035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin * Initialization checking macros 16764035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin *********************************************************************/ 16774035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin#define STATE_CHECK(ctx, x, ret) \ 16784035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (!(ctx)) \ 16794035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin { \ 16804035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin /* Not intialized, abort */\ 16814035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGE("%s: log_eng state error: %s", __func__, x); \ 16824035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin EXIT_LOG(%s, x); \ 16834035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin ret; \ 16844035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 16854035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin#define INIT_CHECK(ctx, ret) STATE_CHECK(ctx, "instance not initialized", ret) 16864035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 16874035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinuint32_t getCarrierCapabilities() { 16884035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin #define carrierMSA (uint32_t)0x2 16894035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin #define carrierMSB (uint32_t)0x1 16904035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin #define gpsConfMSA (uint32_t)0x4 16914035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin #define gpsConfMSB (uint32_t)0x2 16924035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin uint32_t capabilities = gps_conf.CAPABILITIES; 16934035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if ((gps_conf.SUPL_MODE & carrierMSA) != carrierMSA) { 16944035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin capabilities &= ~gpsConfMSA; 16954035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 16964035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if ((gps_conf.SUPL_MODE & carrierMSB) != carrierMSB) { 16974035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin capabilities &= ~gpsConfMSB; 16984035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 16994035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 17004035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGV("getCarrierCapabilities: CAPABILITIES %x, SUPL_MODE %x, carrier capabilities %x", 17014035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin gps_conf.CAPABILITIES, gps_conf.SUPL_MODE, capabilities); 17024035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin return capabilities; 17034035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 17044035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 17054035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin/*=========================================================================== 17064035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinFUNCTION loc_eng_init 17074035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 17084035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinDESCRIPTION 17094035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin Initialize the location engine, this include setting up global datas 17104035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin and registers location engien with loc api service. 17114035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 17124035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinDEPENDENCIES 17134035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin None 17144035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 17154035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinRETURN VALUE 17164035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 0: success 17174035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 17184035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinSIDE EFFECTS 17194035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin N/A 17204035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 17214035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin===========================================================================*/ 17224035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinint loc_eng_init(loc_eng_data_s_type &loc_eng_data, LocCallbacks* callbacks, 17234035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_API_ADAPTER_EVENT_MASK_T event, ContextBase* context) 17244035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 17254035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin{ 17264035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin int ret_val = 0; 17274035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 17284035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin ENTRY_LOG_CALLFLOW(); 17294035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (NULL == callbacks || 0 == event) { 17304035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGE("loc_eng_init: bad parameters cb %p eMask %d", callbacks, event); 17314035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin ret_val = -1; 17324035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin EXIT_LOG(%d, ret_val); 17334035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin return ret_val; 17344035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 17354035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 17364035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin STATE_CHECK((NULL == loc_eng_data.adapter), 17374035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin "instance already initialized", return 0); 17384035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 17394035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin memset(&loc_eng_data, 0, sizeof (loc_eng_data)); 17404035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 17414035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin // Save callbacks 17424035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data.location_cb = callbacks->location_cb; 17434035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data.sv_status_cb = callbacks->sv_status_cb; 17444035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data.status_cb = callbacks->status_cb; 17454035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data.nmea_cb = callbacks->nmea_cb; 17464035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data.set_capabilities_cb = callbacks->set_capabilities_cb; 17474035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data.acquire_wakelock_cb = callbacks->acquire_wakelock_cb; 17484035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data.release_wakelock_cb = callbacks->release_wakelock_cb; 17494035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data.request_utc_time_cb = callbacks->request_utc_time_cb; 17504035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data.location_ext_parser = callbacks->location_ext_parser ? 17514035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin callbacks->location_ext_parser : noProc; 17524035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data.sv_ext_parser = callbacks->sv_ext_parser ? 17534035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin callbacks->sv_ext_parser : noProc; 17544035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data.intermediateFix = gps_conf.INTERMEDIATE_POS; 17554035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin // initial states taken care of by the memset above 17564035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin // loc_eng_data.engine_status -- GPS_STATUS_NONE; 17574035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin // loc_eng_data.fix_session_status -- GPS_STATUS_NONE; 17584035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin // loc_eng_data.mute_session_state -- LOC_MUTE_SESS_NONE; 17594035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 17604035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if ((event & LOC_API_ADAPTER_BIT_NMEA_1HZ_REPORT) && (gps_conf.NMEA_PROVIDER == NMEA_PROVIDER_AP)) 17614035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin { 17624035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin event = event ^ LOC_API_ADAPTER_BIT_NMEA_1HZ_REPORT; // unregister for modem NMEA report 17634035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data.generateNmea = true; 17644035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 17654035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin else 17664035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin { 17674035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data.generateNmea = false; 17684035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 17694035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 17704035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data.adapter = 17714035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin new LocEngAdapter(event, &loc_eng_data, context, 17724035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin (LocThread::tCreate)callbacks->create_thread_cb); 17734035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 17744035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGD("loc_eng_init created client, id = %p\n", 17754035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data.adapter); 17764035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data.adapter->sendMsg(new LocEngInit(&loc_eng_data)); 17774035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 17784035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin EXIT_LOG(%d, ret_val); 17794035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin return ret_val; 17804035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 17814035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 17824035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinstatic int loc_eng_reinit(loc_eng_data_s_type &loc_eng_data) 17834035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin{ 17844035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin ENTRY_LOG(); 17854035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin int ret_val = LOC_API_ADAPTER_ERR_SUCCESS; 17864035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocEngAdapter* adapter = loc_eng_data.adapter; 17874035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 17884035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin adapter->sendMsg(new LocEngGnssConstellationConfig(adapter)); 17894035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin adapter->sendMsg(new LocEngSuplVer(adapter, gps_conf.SUPL_VER)); 17904035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin adapter->sendMsg(new LocEngLppConfig(adapter, gps_conf.LPP_PROFILE)); 17914035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin adapter->sendMsg(new LocEngSensorControlConfig(adapter, sap_conf.SENSOR_USAGE, 17924035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin sap_conf.SENSOR_PROVIDER)); 17934035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin adapter->sendMsg(new LocEngAGlonassProtocol(adapter, gps_conf.A_GLONASS_POS_PROTOCOL_SELECT)); 17944035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 17954035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin /* Make sure at least one of the sensor property is specified by the user in the gps.conf file. */ 17964035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if( sap_conf.GYRO_BIAS_RANDOM_WALK_VALID || 17974035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin sap_conf.ACCEL_RANDOM_WALK_SPECTRAL_DENSITY_VALID || 17984035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin sap_conf.ANGLE_RANDOM_WALK_SPECTRAL_DENSITY_VALID || 17994035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin sap_conf.RATE_RANDOM_WALK_SPECTRAL_DENSITY_VALID || 18004035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin sap_conf.VELOCITY_RANDOM_WALK_SPECTRAL_DENSITY_VALID ) { 18014035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin adapter->sendMsg(new LocEngSensorProperties(adapter, 18024035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin sap_conf.GYRO_BIAS_RANDOM_WALK_VALID, 18034035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin sap_conf.GYRO_BIAS_RANDOM_WALK, 18044035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin sap_conf.ACCEL_RANDOM_WALK_SPECTRAL_DENSITY_VALID, 18054035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin sap_conf.ACCEL_RANDOM_WALK_SPECTRAL_DENSITY, 18064035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin sap_conf.ANGLE_RANDOM_WALK_SPECTRAL_DENSITY_VALID, 18074035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin sap_conf.ANGLE_RANDOM_WALK_SPECTRAL_DENSITY, 18084035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin sap_conf.RATE_RANDOM_WALK_SPECTRAL_DENSITY_VALID, 18094035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin sap_conf.RATE_RANDOM_WALK_SPECTRAL_DENSITY, 18104035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin sap_conf.VELOCITY_RANDOM_WALK_SPECTRAL_DENSITY_VALID, 18114035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin sap_conf.VELOCITY_RANDOM_WALK_SPECTRAL_DENSITY)); 18124035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 18134035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 18144035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin adapter->sendMsg(new LocEngSensorPerfControlConfig(adapter, 18154035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin sap_conf.SENSOR_CONTROL_MODE, 18164035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin sap_conf.SENSOR_ACCEL_SAMPLES_PER_BATCH, 18174035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin sap_conf.SENSOR_ACCEL_BATCHES_PER_SEC, 18184035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin sap_conf.SENSOR_GYRO_SAMPLES_PER_BATCH, 18194035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin sap_conf.SENSOR_GYRO_BATCHES_PER_SEC, 18204035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin sap_conf.SENSOR_ACCEL_SAMPLES_PER_BATCH_HIGH, 18214035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin sap_conf.SENSOR_ACCEL_BATCHES_PER_SEC_HIGH, 18224035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin sap_conf.SENSOR_GYRO_SAMPLES_PER_BATCH_HIGH, 18234035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin sap_conf.SENSOR_GYRO_BATCHES_PER_SEC_HIGH, 18244035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin sap_conf.SENSOR_ALGORITHM_CONFIG_MASK)); 18254035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 18264035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin adapter->sendMsg(new LocEngEnableData(adapter, NULL, 0, (agpsStatus ? 1:0))); 18274035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 18284035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_xtra_version_check(loc_eng_data, gps_conf.XTRA_VERSION_CHECK); 18294035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 18304035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGD("loc_eng_reinit reinit() successful"); 18314035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin EXIT_LOG(%d, ret_val); 18324035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin return ret_val; 18334035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 18344035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 18354035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin/*=========================================================================== 18364035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinFUNCTION loc_eng_cleanup 18374035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 18384035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinDESCRIPTION 18394035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin Cleans location engine. The location client handle will be released. 18404035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 18414035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinDEPENDENCIES 18424035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin None 18434035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 18444035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinRETURN VALUE 18454035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin None 18464035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 18474035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinSIDE EFFECTS 18484035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin N/A 18494035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 18504035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin===========================================================================*/ 18514035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinvoid loc_eng_cleanup(loc_eng_data_s_type &loc_eng_data) 18524035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin{ 18534035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin ENTRY_LOG_CALLFLOW(); 18544035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin INIT_CHECK(loc_eng_data.adapter, return); 18554035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 18564035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin // XTRA has no state, so we are fine with it. 18574035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 18584035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin // we need to check and clear NI 18594035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin#if 0 18604035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin // we need to check and clear ATL 18614035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (NULL != loc_eng_data.agnss_nif) { 18624035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin delete loc_eng_data.agnss_nif; 18634035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data.agnss_nif = NULL; 18644035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 18654035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (NULL != loc_eng_data.internet_nif) { 18664035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin delete loc_eng_data.internet_nif; 18674035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data.internet_nif = NULL; 18684035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 18694035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin#endif 18704035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (loc_eng_data.adapter->isInSession()) 18714035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin { 18724035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGD("loc_eng_cleanup: fix not stopped. stop it now."); 18734035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_stop(loc_eng_data); 18744035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 18754035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 18764035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin#if 0 // can't afford to actually clean up, for many reason. 18774035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 18784035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGD("loc_eng_init: client opened. close it now."); 18794035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin delete loc_eng_data.adapter; 18804035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data.adapter = NULL; 18814035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 18824035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_dmn_conn_loc_api_server_unblock(); 18834035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_dmn_conn_loc_api_server_join(); 18844035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 18854035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin#endif 18864035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 18874035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin EXIT_LOG(%s, VOID_RET); 18884035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 18894035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 18904035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 18914035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin/*=========================================================================== 18924035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinFUNCTION loc_eng_start 18934035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 18944035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinDESCRIPTION 18954035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin Starts the tracking session 18964035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 18974035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinDEPENDENCIES 18984035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin None 18994035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 19004035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinRETURN VALUE 19014035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 0: success 19024035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 19034035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinSIDE EFFECTS 19044035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin N/A 19054035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 19064035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin===========================================================================*/ 19074035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinint loc_eng_start(loc_eng_data_s_type &loc_eng_data) 19084035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin{ 19094035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin ENTRY_LOG_CALLFLOW(); 19104035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin INIT_CHECK(loc_eng_data.adapter, return -1); 19114035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 19124035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if(! loc_eng_data.adapter->getUlpProxy()->sendStartFix()) 19134035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin { 19144035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data.adapter->sendMsg(new LocEngStartFix(loc_eng_data.adapter)); 19154035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 19164035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 19174035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin EXIT_LOG(%d, 0); 19184035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin return 0; 19194035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 19204035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 19214035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinstatic int loc_eng_start_handler(loc_eng_data_s_type &loc_eng_data) 19224035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin{ 19234035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin ENTRY_LOG(); 19244035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin int ret_val = LOC_API_ADAPTER_ERR_SUCCESS; 19254035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 19264035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (!loc_eng_data.adapter->isInSession()) { 19274035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin ret_val = loc_eng_data.adapter->startFix(); 19284035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 19294035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (ret_val == LOC_API_ADAPTER_ERR_SUCCESS || 19304035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin ret_val == LOC_API_ADAPTER_ERR_ENGINE_DOWN || 19314035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin ret_val == LOC_API_ADAPTER_ERR_PHONE_OFFLINE || 19324035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin ret_val == LOC_API_ADAPTER_ERR_INTERNAL) 19334035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin { 19344035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data.adapter->setInSession(TRUE); 19354035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 19364035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 19374035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 19384035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin EXIT_LOG(%d, ret_val); 19394035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin return ret_val; 19404035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 19414035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 19424035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin/*=========================================================================== 19434035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinFUNCTION loc_eng_stop_wrapper 19444035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 19454035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinDESCRIPTION 19464035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin Stops the tracking session 19474035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 19484035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinDEPENDENCIES 19494035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin None 19504035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 19514035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinRETURN VALUE 19524035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 0: success 19534035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 19544035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinSIDE EFFECTS 19554035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin N/A 19564035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 19574035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin===========================================================================*/ 19584035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinint loc_eng_stop(loc_eng_data_s_type &loc_eng_data) 19594035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin{ 19604035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin ENTRY_LOG_CALLFLOW(); 19614035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin INIT_CHECK(loc_eng_data.adapter, return -1); 19624035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 19634035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if(! loc_eng_data.adapter->getUlpProxy()->sendStopFix()) 19644035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin { 19654035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data.adapter->sendMsg(new LocEngStopFix(loc_eng_data.adapter)); 19664035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 19674035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 19684035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin EXIT_LOG(%d, 0); 19694035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin return 0; 19704035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 19714035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 19724035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinstatic int loc_eng_stop_handler(loc_eng_data_s_type &loc_eng_data) 19734035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin{ 19744035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin ENTRY_LOG(); 19754035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin int ret_val = LOC_API_ADAPTER_ERR_SUCCESS; 19764035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 19774035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (loc_eng_data.adapter->isInSession()) { 19784035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 19794035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin ret_val = loc_eng_data.adapter->stopFix(); 19804035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data.adapter->setInSession(FALSE); 19814035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 19824035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 19834035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin EXIT_LOG(%d, ret_val); 19844035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin return ret_val; 19854035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 19864035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 19874035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin/*=========================================================================== 19884035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinFUNCTION loc_eng_mute_one_session 19894035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 19904035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinDESCRIPTION 19914035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin Mutes one session 19924035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 19934035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinDEPENDENCIES 19944035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin None 19954035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 19964035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinRETURN VALUE 19974035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 0: Success 19984035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 19994035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinSIDE EFFECTS 20004035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin N/A 20014035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 20024035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin===========================================================================*/ 20034035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinvoid loc_eng_mute_one_session(loc_eng_data_s_type &loc_eng_data) 20044035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin{ 20054035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin ENTRY_LOG(); 20064035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data.mute_session_state = LOC_MUTE_SESS_WAIT; 20074035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin EXIT_LOG(%s, VOID_RET); 20084035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 20094035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 20104035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin/*=========================================================================== 20114035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinFUNCTION loc_eng_set_position_mode 20124035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 20134035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinDESCRIPTION 20144035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin Sets the mode and fix frequency for the tracking session. 20154035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 20164035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinDEPENDENCIES 20174035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin None 20184035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 20194035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinRETURN VALUE 20204035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 0: success 20214035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 20224035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinSIDE EFFECTS 20234035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin N/A 20244035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 20254035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin===========================================================================*/ 20264035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinint loc_eng_set_position_mode(loc_eng_data_s_type &loc_eng_data, 20274035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocPosMode ¶ms) 20284035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin{ 20294035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin ENTRY_LOG_CALLFLOW(); 20304035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin INIT_CHECK(loc_eng_data.adapter, return -1); 20314035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 20324035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin // The position mode for AUTO/GSS/QCA1530 can only be standalone 20334035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (!(gps_conf.CAPABILITIES & GPS_CAPABILITY_MSB) && 20344035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin !(gps_conf.CAPABILITIES & GPS_CAPABILITY_MSA) && 20354035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin (params.mode != LOC_POSITION_MODE_STANDALONE)) { 20364035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin params.mode = LOC_POSITION_MODE_STANDALONE; 20374035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGD("Position mode changed to standalone for target with AUTO/GSS/qca1530."); 20384035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 20394035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 20404035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if(! loc_eng_data.adapter->getUlpProxy()->sendFixMode(params)) 20414035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin { 20424035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocEngAdapter* adapter = loc_eng_data.adapter; 20434035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin adapter->sendMsg(new LocEngPositionMode(adapter, params)); 20444035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 20454035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 20464035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin EXIT_LOG(%d, 0); 20474035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin return 0; 20484035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 20494035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 20504035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin/*=========================================================================== 20514035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinFUNCTION loc_eng_inject_time 20524035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 20534035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinDESCRIPTION 20544035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin This is used by Java native function to do time injection. 20554035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 20564035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinDEPENDENCIES 20574035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin None 20584035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 20594035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinRETURN VALUE 20604035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 0 20614035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 20624035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinSIDE EFFECTS 20634035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin N/A 20644035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 20654035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin===========================================================================*/ 20664035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinint loc_eng_inject_time(loc_eng_data_s_type &loc_eng_data, GpsUtcTime time, 20674035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin int64_t timeReference, int uncertainty) 20684035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin{ 20694035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin ENTRY_LOG_CALLFLOW(); 20704035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin INIT_CHECK(loc_eng_data.adapter, return -1); 20714035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocEngAdapter* adapter = loc_eng_data.adapter; 20724035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 20734035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin adapter->sendMsg(new LocEngSetTime(adapter, time, timeReference, 20744035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin uncertainty)); 20754035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 20764035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin EXIT_LOG(%d, 0); 20774035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin return 0; 20784035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 20794035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 20804035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 20814035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin/*=========================================================================== 20824035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinFUNCTION loc_eng_inject_location 20834035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 20844035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinDESCRIPTION 20854035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin This is used by Java native function to do location injection. 20864035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 20874035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinDEPENDENCIES 20884035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin None 20894035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 20904035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinRETURN VALUE 20914035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 0 : Successful 20924035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin error code : Failure 20934035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 20944035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinSIDE EFFECTS 20954035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin N/A 20964035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin===========================================================================*/ 20974035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinint loc_eng_inject_location(loc_eng_data_s_type &loc_eng_data, double latitude, 20984035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin double longitude, float accuracy) 20994035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin{ 21004035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin ENTRY_LOG_CALLFLOW(); 21014035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin INIT_CHECK(loc_eng_data.adapter, return -1); 21024035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocEngAdapter* adapter = loc_eng_data.adapter; 21034035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if(adapter->mSupportsPositionInjection) 21044035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin { 21054035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin adapter->sendMsg(new LocEngInjectLocation(adapter, latitude, longitude, 21064035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin accuracy)); 21074035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 21084035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 21094035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin EXIT_LOG(%d, 0); 21104035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin return 0; 21114035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 21124035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 21134035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 21144035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin/*=========================================================================== 21154035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinFUNCTION loc_eng_delete_aiding_data 21164035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 21174035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinDESCRIPTION 21184035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin This is used by Java native function to delete the aiding data. The function 21194035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin updates the global variable for the aiding data to be deleted. If the GPS 21204035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin engine is off, the aiding data will be deleted. Otherwise, the actual action 21214035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin will happen when gps engine is turned off. 21224035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 21234035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinDEPENDENCIES 21244035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin Assumes the aiding data type specified in GpsAidingData matches with 21254035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC API specification. 21264035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 21274035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinRETURN VALUE 21284035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin None 21294035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 21304035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinSIDE EFFECTS 21314035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin N/A 21324035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 21334035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin===========================================================================*/ 21344035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinvoid loc_eng_delete_aiding_data(loc_eng_data_s_type &loc_eng_data, GpsAidingData f) 21354035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin{ 21364035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin ENTRY_LOG_CALLFLOW(); 21374035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin INIT_CHECK(loc_eng_data.adapter, return); 21384035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 21394035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data.adapter->sendMsg(new LocEngDelAidData(&loc_eng_data, f)); 21404035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 21414035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin EXIT_LOG(%s, VOID_RET); 21424035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 21434035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 21444035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin/*=========================================================================== 21454035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 21464035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinFUNCTION loc_inform_gps_state 21474035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 21484035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinDESCRIPTION 21494035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin Informs the GPS Provider about the GPS status 21504035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 21514035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinDEPENDENCIES 21524035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin None 21534035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 21544035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinRETURN VALUE 21554035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin None 21564035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 21574035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinSIDE EFFECTS 21584035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin N/A 21594035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 21604035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin===========================================================================*/ 21614035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinstatic void loc_inform_gps_status(loc_eng_data_s_type &loc_eng_data, GpsStatusValue status) 21624035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin{ 21634035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin ENTRY_LOG(); 21644035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 21654035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (loc_eng_data.status_cb) 21664035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin { 21674035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin GpsStatus gs = { sizeof(gs),status }; 21684035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin CALLBACK_LOG_CALLFLOW("status_cb", %s, 21694035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_get_gps_status_name(gs.status)); 21704035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data.status_cb(&gs); 21714035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 21724035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 21734035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin EXIT_LOG(%s, VOID_RET); 21744035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 21754035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 21764035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinstatic int loc_eng_get_zpp_handler(loc_eng_data_s_type &loc_eng_data) 21774035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin{ 21784035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin ENTRY_LOG(); 21794035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin int ret_val = LOC_API_ADAPTER_ERR_SUCCESS; 21804035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin UlpLocation location; 21814035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocPosTechMask tech_mask = LOC_POS_TECH_MASK_DEFAULT; 21824035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin GpsLocationExtended locationExtended; 21834035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin memset(&locationExtended, 0, sizeof (GpsLocationExtended)); 21844035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locationExtended.size = sizeof(locationExtended); 21854035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 21864035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin ret_val = loc_eng_data.adapter->getZpp(location.gpsLocation, tech_mask); 21874035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin //Mark the location source as from ZPP 21884035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin location.gpsLocation.flags |= LOCATION_HAS_SOURCE_INFO; 21894035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin location.position_source = ULP_LOCATION_IS_FROM_ZPP; 21904035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 21914035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data.adapter->getUlpProxy()->reportPosition(location, 21924035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locationExtended, 21934035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin NULL, 21944035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_SESS_SUCCESS, 21954035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin tech_mask); 21964035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 21974035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin EXIT_LOG(%d, ret_val); 21984035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin return ret_val; 21994035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 22004035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 22014035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin/* 22024035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin Callback function passed to Data Services State Machine 22034035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin This becomes part of the state machine's servicer and 22044035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin is used to send requests to the data services client 22054035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin*/ 22064035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinstatic int dataCallCb(void *cb_data) 22074035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin{ 22084035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGD("Enter dataCallCb\n"); 22094035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin int ret=0; 22104035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if(cb_data != NULL) { 22114035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin dsCbData *cbData = (dsCbData *)cb_data; 22124035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocEngAdapter *locAdapter = (LocEngAdapter *)cbData->mAdapter; 22134035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if(cbData->action == GPS_REQUEST_AGPS_DATA_CONN) { 22144035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGD("dataCallCb GPS_REQUEST_AGPS_DATA_CONN\n"); 22154035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin ret = locAdapter->openAndStartDataCall(); 22164035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 22174035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin else if(cbData->action == GPS_RELEASE_AGPS_DATA_CONN) { 22184035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGD("dataCallCb GPS_RELEASE_AGPS_DATA_CONN\n"); 22194035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locAdapter->stopDataCall(); 22204035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 22214035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 22224035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin else { 22234035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGE("NULL argument received. Failing.\n"); 22244035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin ret = -1; 22254035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin goto err; 22264035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 22274035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 22284035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinerr: 22294035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGD("Exit dataCallCb ret = %d\n", ret); 22304035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin return ret; 22314035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 22324035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 22334035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin/*=========================================================================== 22344035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinFUNCTION loc_eng_agps_reinit 22354035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 22364035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinDESCRIPTION 22374035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 2nd half of loc_eng_agps_init(), singled out for modem restart to use. 22384035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 22394035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinDEPENDENCIES 22404035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin NONE 22414035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 22424035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinRETURN VALUE 22434035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 0 22444035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 22454035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinSIDE EFFECTS 22464035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin N/A 22474035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 22484035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin===========================================================================*/ 22494035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinstatic void loc_eng_agps_reinit(loc_eng_data_s_type &loc_eng_data) 22504035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin{ 22514035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin ENTRY_LOG(); 22524035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 22534035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin // Set server addresses which came before init 22544035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (loc_eng_data.supl_host_set) 22554035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin { 22564035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_set_server(loc_eng_data, LOC_AGPS_SUPL_SERVER, 22574035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data.supl_host_buf, 22584035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data.supl_port_buf); 22594035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 22604035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 22614035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (loc_eng_data.c2k_host_set) 22624035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin { 22634035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_set_server(loc_eng_data, LOC_AGPS_CDMA_PDE_SERVER, 22644035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data.c2k_host_buf, 22654035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data.c2k_port_buf); 22664035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 22674035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin EXIT_LOG(%s, VOID_RET); 22684035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 22694035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin/*=========================================================================== 22704035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinFUNCTION loc_eng_agps_init 22714035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 22724035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinDESCRIPTION 22734035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin Initialize the AGps interface. 22744035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 22754035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinDEPENDENCIES 22764035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin NONE 22774035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 22784035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinRETURN VALUE 22794035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 0 22804035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 22814035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinSIDE EFFECTS 22824035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin N/A 22834035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 22844035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin===========================================================================*/ 22854035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinvoid loc_eng_agps_init(loc_eng_data_s_type &loc_eng_data, AGpsExtCallbacks* callbacks) 22864035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin{ 22874035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin ENTRY_LOG_CALLFLOW(); 22884035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin INIT_CHECK(loc_eng_data.adapter, return); 22894035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin STATE_CHECK((NULL == loc_eng_data.agps_status_cb), 22904035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin "agps instance already initialized", 22914035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin return); 22924035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (callbacks == NULL) { 22934035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGE("loc_eng_agps_init: bad parameters cb %p", callbacks); 22944035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin EXIT_LOG(%s, VOID_RET); 22954035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin return; 22964035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 22974035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocEngAdapter* adapter = loc_eng_data.adapter; 22984035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data.agps_status_cb = callbacks->status_cb; 22994035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 23004035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data.internet_nif = new AgpsStateMachine(servicerTypeAgps, 23014035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin (void *)loc_eng_data.agps_status_cb, 23024035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin AGPS_TYPE_WWAN_ANY, 23034035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin false); 23044035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data.wifi_nif = new AgpsStateMachine(servicerTypeAgps, 23054035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin (void *)loc_eng_data.agps_status_cb, 23064035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin AGPS_TYPE_WIFI, 23074035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin true); 23084035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 23094035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if ((gps_conf.CAPABILITIES & GPS_CAPABILITY_MSA) || 23104035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin (gps_conf.CAPABILITIES & GPS_CAPABILITY_MSB)) { 23114035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data.agnss_nif = new AgpsStateMachine(servicerTypeAgps, 23124035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin (void *)loc_eng_data.agps_status_cb, 23134035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin AGPS_TYPE_SUPL, 23144035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin false); 23154035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 23164035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (adapter->mSupportsAgpsRequests) { 23174035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if(gps_conf.USE_EMERGENCY_PDN_FOR_EMERGENCY_SUPL) { 23184035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data.adapter->sendMsg(new LocEngDataClientInit(&loc_eng_data)); 23194035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 23204035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_dmn_conn_loc_api_server_launch(callbacks->create_thread_cb, 23214035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin NULL, NULL, &loc_eng_data); 23224035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 23234035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_agps_reinit(loc_eng_data); 23244035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 23254035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 23264035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin EXIT_LOG(%s, VOID_RET); 23274035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 23284035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 23294035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinstatic void deleteAidingData(loc_eng_data_s_type &logEng) { 23304035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (logEng.engine_status != GPS_STATUS_ENGINE_ON && 23314035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin logEng.aiding_data_for_deletion != 0) { 23324035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin logEng.adapter->deleteAidingData(logEng.aiding_data_for_deletion); 23334035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin logEng.aiding_data_for_deletion = 0; 23344035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 23354035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 23364035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 23374035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinstatic AgpsStateMachine* 23384035be28a255eaa5605dbd9abeb2340db584249cPatrick TjingetAgpsStateMachine(loc_eng_data_s_type &locEng, AGpsExtType agpsType) { 23394035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin AgpsStateMachine* stateMachine; 23404035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin switch (agpsType) { 23414035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin case AGPS_TYPE_WIFI: { 23424035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin stateMachine = locEng.wifi_nif; 23434035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin break; 23444035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 23454035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin case AGPS_TYPE_INVALID: 23464035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin case AGPS_TYPE_SUPL: { 23474035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin stateMachine = locEng.agnss_nif; 23484035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin break; 23494035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 23504035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin case AGPS_TYPE_SUPL_ES: { 23514035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin locEng.ds_nif ? 23524035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin stateMachine = locEng.ds_nif: 23534035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin stateMachine = locEng.agnss_nif; 23544035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin break; 23554035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 23564035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin default: 23574035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin stateMachine = locEng.internet_nif; 23584035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 23594035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin return stateMachine; 23604035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 23614035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 23624035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin/*=========================================================================== 23634035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinFUNCTION loc_eng_agps_open 23644035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 23654035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinDESCRIPTION 23664035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin This function is called when on-demand data connection opening is successful. 23674035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinIt should inform engine about the data open result. 23684035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 23694035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinDEPENDENCIES 23704035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin NONE 23714035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 23724035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinRETURN VALUE 23734035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 0 23744035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 23754035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinSIDE EFFECTS 23764035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin N/A 23774035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 23784035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin===========================================================================*/ 23794035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinint loc_eng_agps_open(loc_eng_data_s_type &loc_eng_data, AGpsExtType agpsType, 23804035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin const char* apn, AGpsBearerType bearerType) 23814035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin{ 23824035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin ENTRY_LOG_CALLFLOW(); 23834035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin INIT_CHECK(loc_eng_data.adapter && loc_eng_data.agps_status_cb, 23844035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin return -1); 23854035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 23864035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (apn == NULL) 23874035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin { 23884035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGE("APN Name NULL\n"); 23894035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin return 0; 23904035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 23914035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 23924035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGD("loc_eng_agps_open APN name = [%s]", apn); 23934035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 23944035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin int apn_len = smaller_of(strlen (apn), MAX_APN_LEN); 23954035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin AgpsStateMachine* sm = getAgpsStateMachine(loc_eng_data, agpsType); 23964035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 23974035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data.adapter->sendMsg( 23984035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin new LocEngAtlOpenSuccess(sm, apn, apn_len, bearerType)); 23994035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 24004035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin EXIT_LOG(%d, 0); 24014035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin return 0; 24024035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 24034035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 24044035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin/*=========================================================================== 24054035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinFUNCTION loc_eng_agps_closed 24064035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 24074035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinDESCRIPTION 24084035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin This function is called when on-demand data connection closing is done. 24094035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinIt should inform engine about the data close result. 24104035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 24114035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinDEPENDENCIES 24124035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin NONE 24134035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 24144035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinRETURN VALUE 24154035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 0 24164035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 24174035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinSIDE EFFECTS 24184035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin N/A 24194035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 24204035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin===========================================================================*/ 24214035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinint loc_eng_agps_closed(loc_eng_data_s_type &loc_eng_data, AGpsExtType agpsType) 24224035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin{ 24234035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin ENTRY_LOG_CALLFLOW(); 24244035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin INIT_CHECK(loc_eng_data.adapter && loc_eng_data.agps_status_cb, 24254035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin return -1); 24264035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 24274035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin AgpsStateMachine* sm = getAgpsStateMachine(loc_eng_data, agpsType); 24284035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data.adapter->sendMsg(new LocEngAtlClosed(sm)); 24294035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 24304035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin EXIT_LOG(%d, 0); 24314035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin return 0; 24324035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 24334035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 24344035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin/*=========================================================================== 24354035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinFUNCTION loc_eng_agps_open_failed 24364035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 24374035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinDESCRIPTION 24384035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin This function is called when on-demand data connection opening has failed. 24394035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinIt should inform engine about the data open result. 24404035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 24414035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinDEPENDENCIES 24424035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin NONE 24434035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 24444035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinRETURN VALUE 24454035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 0 24464035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 24474035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinSIDE EFFECTS 24484035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin N/A 24494035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 24504035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin===========================================================================*/ 24514035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinint loc_eng_agps_open_failed(loc_eng_data_s_type &loc_eng_data, AGpsExtType agpsType) 24524035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin{ 24534035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin ENTRY_LOG_CALLFLOW(); 24544035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin INIT_CHECK(loc_eng_data.adapter && loc_eng_data.agps_status_cb, 24554035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin return -1); 24564035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 24574035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin AgpsStateMachine* sm = getAgpsStateMachine(loc_eng_data, agpsType); 24584035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data.adapter->sendMsg(new LocEngAtlOpenFailed(sm)); 24594035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 24604035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin EXIT_LOG(%d, 0); 24614035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin return 0; 24624035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 24634035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 24644035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin/*=========================================================================== 24654035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 24664035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinFUNCTION resolve_in_addr 24674035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 24684035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinDESCRIPTION 24694035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin Translates a hostname to in_addr struct 24704035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 24714035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinDEPENDENCIES 24724035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin n/a 24734035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 24744035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinRETURN VALUE 24754035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin TRUE if successful 24764035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 24774035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinSIDE EFFECTS 24784035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin n/a 24794035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 24804035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin===========================================================================*/ 24814035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinstatic boolean resolve_in_addr(const char *host_addr, struct in_addr *in_addr_ptr) 24824035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin{ 24834035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin ENTRY_LOG(); 24844035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin boolean ret_val = TRUE; 24854035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 24864035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin struct hostent *hp; 24874035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin hp = gethostbyname(host_addr); 24884035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (hp != NULL) /* DNS OK */ 24894035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin { 24904035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin memcpy(in_addr_ptr, hp->h_addr_list[0], hp->h_length); 24914035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 24924035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin else 24934035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin { 24944035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin /* Try IP representation */ 24954035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (inet_aton(host_addr, in_addr_ptr) == 0) 24964035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin { 24974035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin /* IP not valid */ 24984035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGE("DNS query on '%s' failed\n", host_addr); 24994035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin ret_val = FALSE; 25004035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 25014035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 25024035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 25034035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin EXIT_LOG(%s, loc_logger_boolStr[ret_val!=0]); 25044035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin return ret_val; 25054035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 25064035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 25074035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin/*=========================================================================== 25084035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinFUNCTION loc_eng_set_server 25094035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 25104035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinDESCRIPTION 25114035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin This is used to set the default AGPS server. Server address is obtained 25124035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin from gps.conf. 25134035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 25144035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinDEPENDENCIES 25154035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin NONE 25164035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 25174035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinRETURN VALUE 25184035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 0 25194035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 25204035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinSIDE EFFECTS 25214035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin N/A 25224035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 25234035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin===========================================================================*/ 25244035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinstatic int loc_eng_set_server(loc_eng_data_s_type &loc_eng_data, 25254035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocServerType type, const char* hostname, int port) 25264035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin{ 25274035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin ENTRY_LOG(); 25284035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin int ret = 0; 25294035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocEngAdapter* adapter = loc_eng_data.adapter; 25304035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 25314035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (LOC_AGPS_SUPL_SERVER == type) { 25324035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin char url[MAX_URL_LEN]; 25334035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin unsigned int len = 0; 25344035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin const char nohost[] = "NONE"; 25354035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (hostname == NULL || 25364035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin strncasecmp(nohost, hostname, sizeof(nohost)) == 0) { 25374035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin url[0] = NULL; 25384035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } else { 25394035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin len = snprintf(url, sizeof(url), "%s:%u", hostname, (unsigned) port); 25404035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 25414035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 25424035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (sizeof(url) > len) { 25434035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin adapter->sendMsg(new LocEngSetServerUrl(adapter, url, len)); 25444035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 25454035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } else if (LOC_AGPS_CDMA_PDE_SERVER == type || 25464035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_AGPS_CUSTOM_PDE_SERVER == type || 25474035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_AGPS_MPC_SERVER == type) { 25484035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin struct in_addr addr; 25494035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (!resolve_in_addr(hostname, &addr)) 25504035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin { 25514035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGE("loc_eng_set_server, hostname %s cannot be resolved.\n", hostname); 25524035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin ret = -2; 25534035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } else { 25544035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin unsigned int ip = htonl(addr.s_addr); 25554035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin adapter->sendMsg(new LocEngSetServerIpv4(adapter, ip, port, type)); 25564035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 25574035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } else { 25584035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGE("loc_eng_set_server, type %d cannot be resolved.\n", type); 25594035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 25604035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 25614035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin EXIT_LOG(%d, ret); 25624035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin return ret; 25634035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 25644035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 25654035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin/*=========================================================================== 25664035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinFUNCTION loc_eng_set_server_proxy 25674035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 25684035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinDESCRIPTION 25694035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin If loc_eng_set_server is called before loc_eng_init, it doesn't work. This 25704035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin proxy buffers server settings and calls loc_eng_set_server when the client is 25714035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin open. 25724035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 25734035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinDEPENDENCIES 25744035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin NONE 25754035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 25764035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinRETURN VALUE 25774035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 0 25784035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 25794035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinSIDE EFFECTS 25804035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin N/A 25814035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 25824035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin===========================================================================*/ 25834035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinint loc_eng_set_server_proxy(loc_eng_data_s_type &loc_eng_data, 25844035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocServerType type, 25854035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin const char* hostname, int port) 25864035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin{ 25874035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin ENTRY_LOG_CALLFLOW(); 25884035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin int ret_val = 0; 25894035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 25904035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGV("save the address, type: %d, hostname: %s, port: %d", 25914035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin (int) type, hostname, port); 25924035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin switch (type) 25934035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin { 25944035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin case LOC_AGPS_SUPL_SERVER: 25954035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin strlcpy(loc_eng_data.supl_host_buf, hostname, 25964035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin sizeof(loc_eng_data.supl_host_buf)); 25974035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data.supl_port_buf = port; 25984035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data.supl_host_set = 1; 25994035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin break; 26004035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin case LOC_AGPS_CDMA_PDE_SERVER: 26014035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin strlcpy(loc_eng_data.c2k_host_buf, hostname, 26024035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin sizeof(loc_eng_data.c2k_host_buf)); 26034035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data.c2k_port_buf = port; 26044035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data.c2k_host_set = 1; 26054035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin break; 26064035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin default: 26074035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGE("loc_eng_set_server_proxy, unknown server type = %d", (int) type); 26084035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 26094035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 26104035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (NULL != loc_eng_data.adapter) 26114035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin { 26124035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin ret_val = loc_eng_set_server(loc_eng_data, type, hostname, port); 26134035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 26144035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 26154035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin EXIT_LOG(%d, ret_val); 26164035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin return ret_val; 26174035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 26184035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 26194035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin/*=========================================================================== 26204035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinFUNCTION loc_eng_agps_ril_update_network_availability 26214035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 26224035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinDESCRIPTION 26234035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin Sets data call allow vs disallow flag to modem 26244035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin This is the only member of sLocEngAGpsRilInterface implemented. 26254035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 26264035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinDEPENDENCIES 26274035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin None 26284035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 26294035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinRETURN VALUE 26304035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 0: success 26314035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 26324035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinSIDE EFFECTS 26334035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin N/A 26344035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 26354035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin===========================================================================*/ 26364035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinvoid loc_eng_agps_ril_update_network_availability(loc_eng_data_s_type &loc_eng_data, 26374035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin int available, const char* apn) 26384035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin{ 26394035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin ENTRY_LOG_CALLFLOW(); 26404035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 26414035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin //This is to store the status of data availability over the network. 26424035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin //If GPS is not enabled, the INIT_CHECK will fail and the modem will 26434035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin //not be updated with the network's availability. Since the data status 26444035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin //can change before GPS is enabled the, storing the status will enable 26454035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin //us to inform the modem after GPS is enabled 26464035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin agpsStatus = available; 26474035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 26484035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin INIT_CHECK(loc_eng_data.adapter, return); 26494035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (apn != NULL) 26504035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin { 26514035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGD("loc_eng_agps_ril_update_network_availability: APN Name = [%s]\n", apn); 26524035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin int apn_len = smaller_of(strlen (apn), MAX_APN_LEN); 26534035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocEngAdapter* adapter = loc_eng_data.adapter; 26544035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin adapter->sendMsg(new LocEngEnableData(adapter, apn, apn_len, available)); 26554035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 26564035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin EXIT_LOG(%s, VOID_RET); 26574035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 26584035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 26594035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinint loc_eng_agps_install_certificates(loc_eng_data_s_type &loc_eng_data, 26604035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin const DerEncodedCertificate* certificates, 26614035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin size_t numberOfCerts) 26624035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin{ 26634035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin ENTRY_LOG_CALLFLOW(); 26644035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin int ret_val = AGPS_CERTIFICATE_OPERATION_SUCCESS; 26654035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 26664035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin uint32_t slotBitMask = gps_conf.AGPS_CERT_WRITABLE_MASK; 26674035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin uint32_t slotCount = 0; 26684035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin for (uint32_t slotBitMaskCounter=slotBitMask; slotBitMaskCounter; slotCount++) { 26694035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin slotBitMaskCounter &= slotBitMaskCounter - 1; 26704035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 26714035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGD("SlotBitMask=%u SlotCount=%u NumberOfCerts=%u", 26724035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin slotBitMask, slotCount, numberOfCerts); 26734035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 26744035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocEngAdapter* adapter = loc_eng_data.adapter; 26754035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 26764035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (numberOfCerts == 0) { 26774035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGE("No certs to install, since numberOfCerts is zero"); 26784035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin ret_val = AGPS_CERTIFICATE_OPERATION_SUCCESS; 26794035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } else if (!adapter) { 26804035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGE("adapter is null!"); 26814035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin ret_val = AGPS_CERTIFICATE_ERROR_GENERIC; 26824035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } else if (slotCount < numberOfCerts) { 26834035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGE("Not enough cert slots (%u) to install %u certs!", 26844035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin slotCount, numberOfCerts); 26854035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin ret_val = AGPS_CERTIFICATE_ERROR_TOO_MANY_CERTIFICATES; 26864035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } else { 26874035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin for (int i=0; i < numberOfCerts; ++i) 26884035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin { 26894035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (certificates[i].length > AGPS_CERTIFICATE_MAX_LENGTH) { 26904035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGE("cert#(%u) length of %u is too big! greater than %u", 26914035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin certificates[i].length, AGPS_CERTIFICATE_MAX_LENGTH); 26924035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin ret_val = AGPS_CERTIFICATE_ERROR_GENERIC; 26934035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin break; 26944035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 26954035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 26964035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 26974035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (ret_val == AGPS_CERTIFICATE_OPERATION_SUCCESS) { 26984035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin adapter->sendMsg(new LocEngInstallAGpsCert(adapter, 26994035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin certificates, 27004035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin numberOfCerts, 27014035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin slotBitMask)); 27024035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 27034035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 27044035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 27054035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin EXIT_LOG(%d, ret_val); 27064035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin return ret_val; 27074035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 27084035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 27094035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinvoid loc_eng_configuration_update (loc_eng_data_s_type &loc_eng_data, 27104035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin const char* config_data, int32_t length) 27114035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin{ 27124035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin ENTRY_LOG_CALLFLOW(); 27134035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 27144035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (config_data && length > 0) { 27154035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_gps_cfg_s_type gps_conf_tmp = gps_conf; 27164035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin UTIL_UPDATE_CONF(config_data, length, gps_conf_table); 27174035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LocEngAdapter* adapter = loc_eng_data.adapter; 27184035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 27194035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin // it is possible that HAL is not init'ed at this time 27204035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (adapter) { 27214035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (gps_conf_tmp.SUPL_VER != gps_conf.SUPL_VER) { 27224035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin adapter->sendMsg(new LocEngSuplVer(adapter, gps_conf.SUPL_VER)); 27234035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 27244035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (gps_conf_tmp.LPP_PROFILE != gps_conf.LPP_PROFILE) { 27254035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin adapter->sendMsg(new LocEngLppConfig(adapter, gps_conf.LPP_PROFILE)); 27264035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 27274035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (gps_conf_tmp.A_GLONASS_POS_PROTOCOL_SELECT != gps_conf.A_GLONASS_POS_PROTOCOL_SELECT) { 27284035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin adapter->sendMsg(new LocEngAGlonassProtocol(adapter, 27294035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin gps_conf.A_GLONASS_POS_PROTOCOL_SELECT)); 27304035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 27314035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (gps_conf_tmp.SUPL_MODE != gps_conf.SUPL_MODE) { 27324035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin adapter->sendMsg(new LocEngSuplMode(adapter->getUlpProxy())); 27334035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 27344035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 27354035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 27364035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin gps_conf_tmp.SUPL_VER = gps_conf.SUPL_VER; 27374035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin gps_conf_tmp.LPP_PROFILE = gps_conf.LPP_PROFILE; 27384035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin gps_conf_tmp.A_GLONASS_POS_PROTOCOL_SELECT = gps_conf.A_GLONASS_POS_PROTOCOL_SELECT; 27394035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin gps_conf_tmp.GPS_LOCK = gps_conf.GPS_LOCK; 27404035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin gps_conf = gps_conf_tmp; 27414035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 27424035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 27434035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin EXIT_LOG(%s, VOID_RET); 27444035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 27454035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 27464035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin/*=========================================================================== 27474035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinFUNCTION loc_eng_report_status 27484035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 27494035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinDESCRIPTION 27504035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin Reports GPS engine state to Java layer. 27514035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 27524035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinDEPENDENCIES 27534035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin N/A 27544035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 27554035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinRETURN VALUE 27564035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin N/A 27574035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 27584035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinSIDE EFFECTS 27594035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin N/A 27604035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 27614035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin===========================================================================*/ 27624035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinstatic void loc_eng_report_status (loc_eng_data_s_type &loc_eng_data, GpsStatusValue status) 27634035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin{ 27644035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin ENTRY_LOG(); 27654035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin // Switch from WAIT to MUTE, for "engine on" or "session begin" event 27664035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (status == GPS_STATUS_SESSION_BEGIN || status == GPS_STATUS_ENGINE_ON) 27674035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin { 27684035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (loc_eng_data.mute_session_state == LOC_MUTE_SESS_WAIT) 27694035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin { 27704035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGD("loc_eng_report_status: mute_session_state changed from WAIT to IN SESSION"); 27714035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data.mute_session_state = LOC_MUTE_SESS_IN_SESSION; 27724035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 27734035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 27744035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 27754035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin // Switch off MUTE session 27764035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (loc_eng_data.mute_session_state == LOC_MUTE_SESS_IN_SESSION && 27774035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin (status == GPS_STATUS_SESSION_END || status == GPS_STATUS_ENGINE_OFF)) 27784035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin { 27794035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGD("loc_eng_report_status: mute_session_state changed from IN SESSION to NONE"); 27804035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data.mute_session_state = LOC_MUTE_SESS_NONE; 27814035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 27824035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 27834035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin // Session End is not reported during Android navigating state 27844035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin boolean navigating = loc_eng_data.adapter->isInSession(); 27854035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (status != GPS_STATUS_NONE && 27864035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin !(status == GPS_STATUS_SESSION_END && navigating) && 27874035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin !(status == GPS_STATUS_SESSION_BEGIN && !navigating)) 27884035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin { 27894035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (loc_eng_data.mute_session_state != LOC_MUTE_SESS_IN_SESSION) 27904035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin { 27914035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin // Inform GpsLocationProvider about mNavigating status 27924035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_inform_gps_status(loc_eng_data, status); 27934035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 27944035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin else { 27954035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGD("loc_eng_report_status: muting the status report."); 27964035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 27974035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 27984035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 27994035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin // Only keeps ENGINE ON/OFF in engine_status 28004035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (status == GPS_STATUS_ENGINE_ON || status == GPS_STATUS_ENGINE_OFF) 28014035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin { 28024035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data.engine_status = status; 28034035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 28044035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 28054035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin // Only keeps SESSION BEGIN/END in fix_session_status 28064035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (status == GPS_STATUS_SESSION_BEGIN || status == GPS_STATUS_SESSION_END) 28074035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin { 28084035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data.fix_session_status = status; 28094035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 28104035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin EXIT_LOG(%s, VOID_RET); 28114035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 28124035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 28134035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin/*=========================================================================== 28144035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinFUNCTION loc_eng_handle_engine_down 28154035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_handle_engine_up 28164035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 28174035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinDESCRIPTION 28184035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin Calls this function when it is detected that modem restart is happening. 28194035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin Either we detected the modem is down or received modem up event. 28204035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin This must be called from the deferred thread to avoid race condition. 28214035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 28224035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinDEPENDENCIES 28234035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin None 28244035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 28254035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinRETURN VALUE 28264035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin None 28274035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 28284035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinSIDE EFFECTS 28294035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin N/A 28304035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 28314035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin===========================================================================*/ 28324035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinvoid loc_eng_handle_engine_down(loc_eng_data_s_type &loc_eng_data) 28334035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin{ 28344035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin ENTRY_LOG(); 28354035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_ni_reset_on_engine_restart(loc_eng_data); 28364035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_report_status(loc_eng_data, GPS_STATUS_ENGINE_OFF); 28374035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin EXIT_LOG(%s, VOID_RET); 28384035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 28394035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 28404035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinvoid loc_eng_handle_engine_up(loc_eng_data_s_type &loc_eng_data) 28414035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin{ 28424035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin ENTRY_LOG(); 28434035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_reinit(loc_eng_data); 28444035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 28454035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data.adapter->requestPowerVote(); 28464035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 28474035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (loc_eng_data.agps_status_cb != NULL) { 28484035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (loc_eng_data.agnss_nif) 28494035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data.agnss_nif->dropAllSubscribers(); 28504035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (loc_eng_data.internet_nif) 28514035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data.internet_nif->dropAllSubscribers(); 28524035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 28534035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_agps_reinit(loc_eng_data); 28544035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 28554035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 28564035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin // modem is back up. If we crashed in the middle of navigating, we restart. 28574035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if (loc_eng_data.adapter->isInSession()) { 28584035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin // This sets the copy in adapter to modem 28594035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data.adapter->setInSession(false); 28604035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data.adapter->sendMsg(new LocEngStartFix(loc_eng_data.adapter)); 28614035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 28624035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin EXIT_LOG(%s, VOID_RET); 28634035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 28644035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 28654035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin#ifdef USE_GLIB 28664035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin/*=========================================================================== 28674035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinFUNCTION set_sched_policy 28684035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 28694035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinDESCRIPTION 28704035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin Local copy of this function which bypasses android set_sched_policy 28714035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 28724035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinDEPENDENCIES 28734035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin None 28744035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 28754035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinRETURN VALUE 28764035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 0 28774035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 28784035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinSIDE EFFECTS 28794035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin N/A 28804035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 28814035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin===========================================================================*/ 28824035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinstatic int set_sched_policy(int tid, SchedPolicy policy) 28834035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin{ 28844035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin return 0; 28854035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 28864035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin#endif /* USE_GLIB */ 28874035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 28884035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin/*=========================================================================== 28894035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinFUNCTION loc_eng_read_config 28904035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 28914035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinDESCRIPTION 28924035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin Initiates the reading of the gps config file stored in /etc dir 28934035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 28944035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinDEPENDENCIES 28954035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin None 28964035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 28974035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinRETURN VALUE 28984035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 0: success 28994035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 29004035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinSIDE EFFECTS 29014035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin N/A 29024035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 29034035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin===========================================================================*/ 29044035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinint loc_eng_read_config(void) 29054035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin{ 29064035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin ENTRY_LOG_CALLFLOW(); 29074035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin if(configAlreadyRead == false) 29084035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin { 29094035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin // Initialize our defaults before reading of configuration file overwrites them. 29104035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_default_parameters(); 29114035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin // We only want to parse the conf file once. This is a good place to ensure that. 29124035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin // In fact one day the conf file should go into context. 29134035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin UTIL_READ_CONF(GPS_CONF_FILE, gps_conf_table); 29144035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin UTIL_READ_CONF(SAP_CONF_FILE, sap_conf_table); 29154035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin configAlreadyRead = true; 29164035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } else { 29174035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGV("GPS Config file has already been read\n"); 29184035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin } 29194035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 29204035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin EXIT_LOG(%d, 0); 29214035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin return 0; 29224035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 29234035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 29244035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin/*=========================================================================== 29254035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinFUNCTION loc_eng_gps_measurement_init 29264035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 29274035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinDESCRIPTION 29284035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin Initialize gps measurement module. 29294035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 29304035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinDEPENDENCIES 29314035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin N/A 29324035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 29334035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinRETURN VALUE 29344035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 0: success 29354035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 29364035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinSIDE EFFECTS 29374035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin N/A 29384035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 29394035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin===========================================================================*/ 29404035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinint loc_eng_gps_measurement_init(loc_eng_data_s_type &loc_eng_data, 29414035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin GpsMeasurementCallbacks* callbacks) 29424035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin{ 29434035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin ENTRY_LOG_CALLFLOW(); 29444035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 29454035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin STATE_CHECK((NULL == loc_eng_data.gps_measurement_cb), 29464035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin "gps measurement already initialized", 29474035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin return GPS_MEASUREMENT_ERROR_ALREADY_INIT); 29484035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin STATE_CHECK((callbacks != NULL), 29494035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin "callbacks can not be NULL", 29504035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin return GPS_MEASUREMENT_ERROR_GENERIC); 29514035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin STATE_CHECK(loc_eng_data.adapter, 29524035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin "GpsInterface must be initialized first", 29534035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin return GPS_MEASUREMENT_ERROR_GENERIC); 29544035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 29554035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin // updated the mask 29564035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_API_ADAPTER_EVENT_MASK_T event = LOC_API_ADAPTER_BIT_GNSS_MEASUREMENT; 29574035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data.adapter->sendMsg(new LocEngUpdateRegistrationMask( 29584035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin &loc_eng_data, 29594035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin event, 29604035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_REGISTRATION_MASK_ENABLED)); 29614035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin // set up the callback 29624035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data.gps_measurement_cb = callbacks->measurement_callback; 29634035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_LOGD ("%s, event masks updated successfully", __func__); 29644035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 29654035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin return GPS_MEASUREMENT_OPERATION_SUCCESS; 29664035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 29674035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 29684035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin/*=========================================================================== 29694035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinFUNCTION loc_eng_gps_measurement_close 29704035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 29714035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinDESCRIPTION 29724035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin Close gps measurement module. 29734035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 29744035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinDEPENDENCIES 29754035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin N/A 29764035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 29774035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinRETURN VALUE 29784035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin N/A 29794035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 29804035be28a255eaa5605dbd9abeb2340db584249cPatrick TjinSIDE EFFECTS 29814035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin N/A 29824035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 29834035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin===========================================================================*/ 29844035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjinvoid loc_eng_gps_measurement_close(loc_eng_data_s_type &loc_eng_data) 29854035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin{ 29864035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin ENTRY_LOG_CALLFLOW(); 29874035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 29884035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin INIT_CHECK(loc_eng_data.adapter, return); 29894035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin 29904035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin // updated the mask 29914035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_API_ADAPTER_EVENT_MASK_T event = LOC_API_ADAPTER_BIT_GNSS_MEASUREMENT; 29924035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data.adapter->sendMsg(new LocEngUpdateRegistrationMask( 29934035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin &loc_eng_data, 29944035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin event, 29954035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin LOC_REGISTRATION_MASK_DISABLED)); 29964035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin // set up the callback 29974035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin loc_eng_data.gps_measurement_cb = NULL; 29984035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin EXIT_LOG(%d, 0); 29994035be28a255eaa5605dbd9abeb2340db584249cPatrick Tjin} 3000