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