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