1bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo/* Copyright (c) 2011-2014, The Linux Foundation. All rights reserved. 2bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * 3bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * Redistribution and use in source and binary forms, with or without 4bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * modification, are permitted provided that the following conditions are 5bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * met: 6bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * * Redistributions of source code must retain the above copyright 7bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * notice, this list of conditions and the following disclaimer. 8bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * * Redistributions in binary form must reproduce the above 9bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * copyright notice, this list of conditions and the following 10bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * disclaimer in the documentation and/or other materials provided 11bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * with the distribution. 12bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * * Neither the name of The Linux Foundation, nor the names of its 13bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * contributors may be used to endorse or promote products derived 14bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * from this software without specific prior written permission. 15bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * 16bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 17bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 18bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 19bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 20bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 23bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 24bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 25bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 26bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * 28bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo */ 29bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 30bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo#define LOG_NDDEBUG 0 31bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo#define LOG_TAG "LocSvc_afw" 32bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 33bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo#include <hardware/gps.h> 34bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo#include <gps_extended.h> 35bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo#include <loc_eng.h> 36bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo#include <loc_target.h> 37bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo#include <loc_log.h> 38bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo#include <fcntl.h> 39bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo#include <errno.h> 40bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo#include <dlfcn.h> 41bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo#include <sys/types.h> 42bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo#include <sys/stat.h> 43bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo#include <fcntl.h> 44bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo#include <errno.h> 45bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo#include <LocDualContext.h> 46bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo#include <cutils/properties.h> 47bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 48bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russousing namespace loc_core; 49bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 50bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo//Globals defns 51bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic gps_location_callback gps_loc_cb = NULL; 52bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic gps_sv_status_callback gps_sv_cb = NULL; 53bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic agps_status_callback agps_status_cb = NULL; 54bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 55bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic void local_loc_cb(UlpLocation* location, void* locExt); 56bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic void local_sv_cb(GpsSvStatus* sv_status, void* svExt); 57bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic void loc_agps_status_cb(AGpsStatus* status); 58bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 59bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic const GpsGeofencingInterface* get_geofence_interface(void); 60bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 61bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo// Function declarations for sLocEngInterface 62bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic int loc_init(GpsCallbacks* callbacks); 63bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic int loc_start(); 64bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic int loc_stop(); 65bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic void loc_cleanup(); 66bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic int loc_inject_time(GpsUtcTime time, int64_t timeReference, int uncertainty); 67bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic int loc_inject_location(double latitude, double longitude, float accuracy); 68bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic void loc_delete_aiding_data(GpsAidingData f); 69bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic int loc_set_position_mode(GpsPositionMode mode, GpsPositionRecurrence recurrence, 70bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo uint32_t min_interval, uint32_t preferred_accuracy, 71bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo uint32_t preferred_time); 72bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic const void* loc_get_extension(const char* name); 73bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic void loc_close_mdm_node(); 74bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo// Defines the GpsInterface in gps.h 75bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic const GpsInterface sLocEngInterface = 76bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo{ 77bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo sizeof(GpsInterface), 78bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo loc_init, 79bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo loc_start, 80bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo loc_stop, 81bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo loc_cleanup, 82bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo loc_inject_time, 83bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo loc_inject_location, 84bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo loc_delete_aiding_data, 85bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo loc_set_position_mode, 86bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo loc_get_extension 87bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo}; 88bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 89bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo// Function declarations for sLocEngAGpsInterface 90bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic void loc_agps_init(AGpsCallbacks* callbacks); 91bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic int loc_agps_open(const char* apn); 92bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic int loc_agps_closed(); 93bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic int loc_agps_open_failed(); 94bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic int loc_agps_set_server(AGpsType type, const char *hostname, int port); 95bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic int loc_agps_open_with_apniptype( const char* apn, ApnIpType apnIpType); 96bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 97bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic const AGpsInterface sLocEngAGpsInterface = 98bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo{ 99bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo sizeof(AGpsInterface), 100bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo loc_agps_init, 101bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo loc_agps_open, 102bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo loc_agps_closed, 103bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo loc_agps_open_failed, 104bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo loc_agps_set_server, 105bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo loc_agps_open_with_apniptype 106bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo}; 107bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 108bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic int loc_xtra_init(GpsXtraCallbacks* callbacks); 109bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic int loc_xtra_inject_data(char* data, int length); 110bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 111bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic const GpsXtraInterface sLocEngXTRAInterface = 112bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo{ 113bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo sizeof(GpsXtraInterface), 114bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo loc_xtra_init, 115bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo loc_xtra_inject_data 116bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo}; 117bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 118bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic void loc_ni_init(GpsNiCallbacks *callbacks); 119bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic void loc_ni_respond(int notif_id, GpsUserResponseType user_response); 120bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 121bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic const GpsNiInterface sLocEngNiInterface = 122bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo{ 123bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo sizeof(GpsNiInterface), 124bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo loc_ni_init, 125bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo loc_ni_respond, 126bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo}; 127bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 128bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo// For shutting down MDM in fusion devices 129bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic int mdm_fd = -1; 130bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic int loc_gps_measurement_init(GpsMeasurementCallbacks* callbacks); 131bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic void loc_gps_measurement_close(); 132bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 133bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic const GpsMeasurementInterface sLocEngGpsMeasurementInterface = 134bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo{ 135bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo sizeof(GpsMeasurementInterface), 136bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo loc_gps_measurement_init, 137bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo loc_gps_measurement_close 138bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo}; 139bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 140bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic void loc_agps_ril_init( AGpsRilCallbacks* callbacks ); 141bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic void loc_agps_ril_set_ref_location(const AGpsRefLocation *agps_reflocation, size_t sz_struct); 142bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic void loc_agps_ril_set_set_id(AGpsSetIDType type, const char* setid); 143bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic void loc_agps_ril_ni_message(uint8_t *msg, size_t len); 144bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic void loc_agps_ril_update_network_state(int connected, int type, int roaming, const char* extra_info); 145bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic void loc_agps_ril_update_network_availability(int avaiable, const char* apn); 146bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 147bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic const AGpsRilInterface sLocEngAGpsRilInterface = 148bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo{ 149bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo sizeof(AGpsRilInterface), 150bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo loc_agps_ril_init, 151bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo loc_agps_ril_set_ref_location, 152bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo loc_agps_ril_set_set_id, 153bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo loc_agps_ril_ni_message, 154bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo loc_agps_ril_update_network_state, 155bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo loc_agps_ril_update_network_availability 156bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo}; 157bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 158bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic int loc_agps_install_certificates(const DerEncodedCertificate* certificates, 159bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo size_t length); 160bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic int loc_agps_revoke_certificates(const Sha1CertificateFingerprint* fingerprints, 161bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo size_t length); 162bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 163bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic const SuplCertificateInterface sLocEngAGpsCertInterface = 164bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo{ 165bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo sizeof(SuplCertificateInterface), 166bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo loc_agps_install_certificates, 167bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo loc_agps_revoke_certificates 168bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo}; 169bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 170bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic void loc_configuration_update(const char* config_data, int32_t length); 171bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 172bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic const GnssConfigurationInterface sLocEngConfigInterface = 173bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo{ 174bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo sizeof(GnssConfigurationInterface), 175bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo loc_configuration_update 176bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo}; 177bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 178bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic loc_eng_data_s_type loc_afw_data; 179bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic int gss_fd = -1; 180bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 181bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo/*=========================================================================== 182bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoFUNCTION gps_get_hardware_interface 183bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 184bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoDESCRIPTION 185bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo Returns the GPS hardware interaface based on LOC API 186bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo if GPS is enabled. 187bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 188bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoDEPENDENCIES 189bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo None 190bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 191bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoRETURN VALUE 192bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 0: success 193bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 194bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoSIDE EFFECTS 195bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo N/A 196bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 197bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo===========================================================================*/ 198bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russoconst GpsInterface* gps_get_hardware_interface () 199bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo{ 200bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo ENTRY_LOG_CALLFLOW(); 201bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo const GpsInterface* ret_val; 202bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 203bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo char propBuf[PROPERTY_VALUE_MAX]; 204bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 205bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo loc_eng_read_config(); 206bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 207bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo // check to see if GPS should be disabled 208bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo property_get("gps.disable", propBuf, ""); 209bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo if (propBuf[0] == '1') 210bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo { 211bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo LOC_LOGD("gps_get_interface returning NULL because gps.disable=1\n"); 212bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo ret_val = NULL; 213bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo } else { 214bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo ret_val = &sLocEngInterface; 215bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo } 216bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 217bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo loc_eng_read_config(); 218bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 219bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo EXIT_LOG(%p, ret_val); 220bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo return ret_val; 221bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo} 222bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 223bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo// for gps.c 224bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russoextern "C" const GpsInterface* get_gps_interface() 225bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo{ 226bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo unsigned int target = TARGET_DEFAULT; 227bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo loc_eng_read_config(); 228bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 229bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo target = loc_get_target(); 230bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo LOC_LOGD("Target name check returned %s", loc_get_target_name(target)); 231bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 232bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo int gnssType = getTargetGnssType(target); 233bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo switch (gnssType) 234bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo { 235bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo case GNSS_GSS: 236bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo //APQ8064 237bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo gps_conf.CAPABILITIES &= ~(GPS_CAPABILITY_MSA | GPS_CAPABILITY_MSB); 238bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo gss_fd = open("/dev/gss", O_RDONLY); 239bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo if (gss_fd < 0) { 240bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo LOC_LOGE("GSS open failed: %s\n", strerror(errno)); 241bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo } 242bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo else { 243bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo LOC_LOGD("GSS open success! CAPABILITIES %0lx\n", 244bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo gps_conf.CAPABILITIES); 245bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo } 246bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo break; 247bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo case GNSS_NONE: 248bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo //MPQ8064 249bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo LOC_LOGE("No GPS HW on this target. Not returning interface."); 250bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo return NULL; 251bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo case GNSS_QCA1530: 252bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo // qca1530 chip is present 253bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo gps_conf.CAPABILITIES &= ~(GPS_CAPABILITY_MSA | GPS_CAPABILITY_MSB); 254bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo LOC_LOGD("qca1530 present: CAPABILITIES %0lx\n", gps_conf.CAPABILITIES); 255bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo break; 256bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo } 257bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo return &sLocEngInterface; 258bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo} 259bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 260bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo/*=========================================================================== 261bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoFUNCTION loc_init 262bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 263bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoDESCRIPTION 264bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo Initialize the location engine, this include setting up global datas 265bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo and registers location engien with loc api service. 266bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 267bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoDEPENDENCIES 268bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo None 269bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 270bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoRETURN VALUE 271bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 0: success 272bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 273bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoSIDE EFFECTS 274bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo N/Ax 275bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 276bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo===========================================================================*/ 277bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic int loc_init(GpsCallbacks* callbacks) 278bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo{ 279bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo int retVal = -1; 280bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo int i = 0; 281bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo ENTRY_LOG(); 282bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo LOC_API_ADAPTER_EVENT_MASK_T event; 283bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 284bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo if (NULL == callbacks) { 285bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo LOC_LOGE("loc_init failed. cb = NULL\n"); 286bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo EXIT_LOG(%d, retVal); 287bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo return retVal; 288bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo } 289bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 290bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo event = LOC_API_ADAPTER_BIT_PARSED_POSITION_REPORT | 291bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo LOC_API_ADAPTER_BIT_SATELLITE_REPORT | 292bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo LOC_API_ADAPTER_BIT_LOCATION_SERVER_REQUEST | 293bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo LOC_API_ADAPTER_BIT_ASSISTANCE_DATA_REQUEST | 294bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo LOC_API_ADAPTER_BIT_IOCTL_REPORT | 295bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo LOC_API_ADAPTER_BIT_STATUS_REPORT | 296bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo LOC_API_ADAPTER_BIT_NMEA_1HZ_REPORT | 297bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo LOC_API_ADAPTER_BIT_NI_NOTIFY_VERIFY_REQUEST; 298bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 299bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo LocCallbacks clientCallbacks = {local_loc_cb, /* location_cb */ 300bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo callbacks->status_cb, /* status_cb */ 301bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo local_sv_cb, /* sv_status_cb */ 302bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo callbacks->nmea_cb, /* nmea_cb */ 303bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo callbacks->set_capabilities_cb, /* set_capabilities_cb */ 304bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo callbacks->acquire_wakelock_cb, /* acquire_wakelock_cb */ 305bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo callbacks->release_wakelock_cb, /* release_wakelock_cb */ 306bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo callbacks->create_thread_cb, /* create_thread_cb */ 307bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo NULL, /* location_ext_parser */ 308bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo NULL, /* sv_ext_parser */ 309bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo callbacks->request_utc_time_cb, /* request_utc_time_cb */ 310bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo loc_close_mdm_node /*loc_shutdown_cb*/}; 311bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 312bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo gps_loc_cb = callbacks->location_cb; 313bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo gps_sv_cb = callbacks->sv_status_cb; 314bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 315bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo retVal = loc_eng_init(loc_afw_data, &clientCallbacks, event, NULL); 316bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo loc_afw_data.adapter->mSupportsAgpsRequests = !loc_afw_data.adapter->hasAgpsExtendedCapabilities(); 317bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo loc_afw_data.adapter->mSupportsPositionInjection = !loc_afw_data.adapter->hasCPIExtendedCapabilities(); 318bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo loc_afw_data.adapter->setGpsLockMsg(0); 319bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo loc_afw_data.adapter->requestUlp(gps_conf.CAPABILITIES); 320bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 321bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo if(retVal) { 322bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo LOC_LOGE("loc_eng_init() fail!"); 323bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo goto err; 324bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo } 325bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 326bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo loc_afw_data.adapter->setPowerVoteRight(loc_get_target() == TARGET_QCA1530); 327bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo loc_afw_data.adapter->setPowerVote(true); 328bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 329bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo LOC_LOGD("loc_eng_init() success!"); 330bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 331bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo#ifdef PLATFORM_MSM8084 332bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo if (mdm_fd < 0) { 333bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo int (*open_first_external_modem)(void); 334bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo const char *name = "libdetectmodem.so"; 335bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo const char *func = "open_first_external_modem"; 336bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo const char *error; 337bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 338bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo void *lib = ::dlopen(name, RTLD_NOW); 339bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo error = ::dlerror(); 340bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo if (!lib) { 341bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo LOC_LOGE("%s: could not find %s: %s", __func__, name, error); 342bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo goto err; 343bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo } 344bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 345bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo open_first_external_modem = NULL; 346bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo *(void **)(&open_first_external_modem) = ::dlsym(lib, func); 347bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo error = ::dlerror(); 348bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 349bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo if (!open_first_external_modem) { 350bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo LOC_LOGE("%s: could not find symbol %s in %s: %s", 351bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo __func__, func, name, error); 352bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo } 353bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo else { 354bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo errno = 0; 355bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo mdm_fd = open_first_external_modem(); 356bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo if (mdm_fd < 0) { 357bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo LOC_LOGE("%s: %s failed: %s\n", __func__, func, strerror(errno)); 358bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo } 359bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo else { 360bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo LOC_LOGD("%s: external power up modem opened successfully\n", __func__); 361bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo } 362bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo } 363bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo dlclose(lib); 364bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo } else { 365bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo LOC_LOGD("powerup_node has been opened before"); 366bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo } 367bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo#endif //PLATFORM_MSM8084 368bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russoerr: 369bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo EXIT_LOG(%d, retVal); 370bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo return retVal; 371bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo} 372bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 373bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo/*=========================================================================== 374bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoFUNCTION loc_close_mdm_node 375bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 376bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoDESCRIPTION 377bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo closes mdm_fd which is the modem powerup node obtained in loc_init 378bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 379bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoDEPENDENCIES 380bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo None 381bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 382bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoRETURN VALUE 383bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo None 384bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 385bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoSIDE EFFECTS 386bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo N/A 387bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 388bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo===========================================================================*/ 389bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic void loc_close_mdm_node() 390bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo{ 391bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo ENTRY_LOG(); 392bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo if (mdm_fd >= 0) { 393bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo LOC_LOGD("closing the powerup node"); 394bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo close(mdm_fd); 395bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo mdm_fd = -1; 396bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo LOC_LOGD("finished closing the powerup node"); 397bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo } else { 398bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo LOC_LOGD("powerup node has not been opened yet."); 399bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo } 400bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 401bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo EXIT_LOG(%s, VOID_RET); 402bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo} 403bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 404bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo/*=========================================================================== 405bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoFUNCTION loc_cleanup 406bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 407bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoDESCRIPTION 408bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo Cleans location engine. The location client handle will be released. 409bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 410bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoDEPENDENCIES 411bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo None 412bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 413bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoRETURN VALUE 414bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo None 415bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 416bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoSIDE EFFECTS 417bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo N/A 418bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 419bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo===========================================================================*/ 420bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic void loc_cleanup() 421bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo{ 422bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo ENTRY_LOG(); 423bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 424bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo loc_afw_data.adapter->setPowerVote(false); 425bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo loc_afw_data.adapter->setGpsLockMsg(gps_conf.GPS_LOCK); 426bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 427bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo loc_eng_cleanup(loc_afw_data); 428bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo loc_close_mdm_node(); 429bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo gps_loc_cb = NULL; 430bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo gps_sv_cb = NULL; 431bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 432bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo EXIT_LOG(%s, VOID_RET); 433bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo} 434bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 435bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo/*=========================================================================== 436bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoFUNCTION loc_start 437bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 438bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoDESCRIPTION 439bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo Starts the tracking session 440bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 441bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoDEPENDENCIES 442bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo None 443bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 444bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoRETURN VALUE 445bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 0: success 446bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 447bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoSIDE EFFECTS 448bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo N/A 449bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 450bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo===========================================================================*/ 451bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic int loc_start() 452bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo{ 453bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo ENTRY_LOG(); 454bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo int ret_val = loc_eng_start(loc_afw_data); 455bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 456bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo EXIT_LOG(%d, ret_val); 457bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo return ret_val; 458bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo} 459bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 460bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo/*=========================================================================== 461bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoFUNCTION loc_stop 462bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 463bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoDESCRIPTION 464bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo Stops the tracking session 465bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 466bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoDEPENDENCIES 467bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo None 468bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 469bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoRETURN VALUE 470bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 0: success 471bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 472bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoSIDE EFFECTS 473bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo N/A 474bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 475bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo===========================================================================*/ 476bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic int loc_stop() 477bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo{ 478bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo ENTRY_LOG(); 479bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo int ret_val = -1; 480bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo ret_val = loc_eng_stop(loc_afw_data); 481bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 482bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo EXIT_LOG(%d, ret_val); 483bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo return ret_val; 484bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo} 485bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 486bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo/*=========================================================================== 487bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoFUNCTION loc_set_position_mode 488bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 489bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoDESCRIPTION 490bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo Sets the mode and fix frequency for the tracking session. 491bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 492bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoDEPENDENCIES 493bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo None 494bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 495bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoRETURN VALUE 496bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 0: success 497bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 498bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoSIDE EFFECTS 499bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo N/A 500bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 501bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo===========================================================================*/ 502bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic int loc_set_position_mode(GpsPositionMode mode, 503bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo GpsPositionRecurrence recurrence, 504bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo uint32_t min_interval, 505bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo uint32_t preferred_accuracy, 506bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo uint32_t preferred_time) 507bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo{ 508bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo ENTRY_LOG(); 509bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo int ret_val = -1; 510bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo LocPositionMode locMode; 511bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo switch (mode) { 512bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo case GPS_POSITION_MODE_MS_BASED: 513bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo locMode = LOC_POSITION_MODE_MS_BASED; 514bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo break; 515bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo case GPS_POSITION_MODE_MS_ASSISTED: 516bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo locMode = LOC_POSITION_MODE_MS_ASSISTED; 517bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo break; 518bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo default: 519bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo locMode = LOC_POSITION_MODE_STANDALONE; 520bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo break; 521bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo } 522bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 523bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo LocPosMode params(locMode, recurrence, min_interval, 524bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo preferred_accuracy, preferred_time, NULL, NULL); 525bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo ret_val = loc_eng_set_position_mode(loc_afw_data, params); 526bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 527bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo EXIT_LOG(%d, ret_val); 528bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo return ret_val; 529bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo} 530bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 531bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo/*=========================================================================== 532bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoFUNCTION loc_inject_time 533bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 534bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoDESCRIPTION 535bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo This is used by Java native function to do time injection. 536bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 537bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoDEPENDENCIES 538bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo None 539bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 540bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoRETURN VALUE 541bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 0 542bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 543bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoSIDE EFFECTS 544bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo N/A 545bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 546bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo===========================================================================*/ 547bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic int loc_inject_time(GpsUtcTime time, int64_t timeReference, int uncertainty) 548bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo{ 549bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo ENTRY_LOG(); 550bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo int ret_val = 0; 551bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 552bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo ret_val = loc_eng_inject_time(loc_afw_data, time, 553bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo timeReference, uncertainty); 554bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 555bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo EXIT_LOG(%d, ret_val); 556bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo return ret_val; 557bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo} 558bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 559bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 560bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo/*=========================================================================== 561bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoFUNCTION loc_inject_location 562bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 563bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoDESCRIPTION 564bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo This is used by Java native function to do location injection. 565bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 566bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoDEPENDENCIES 567bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo None 568bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 569bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoRETURN VALUE 570bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 0 : Successful 571bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo error code : Failure 572bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 573bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoSIDE EFFECTS 574bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo N/A 575bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo===========================================================================*/ 576bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic int loc_inject_location(double latitude, double longitude, float accuracy) 577bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo{ 578bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo static bool initialized = false; 579bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo static bool enable_cpi = true; 580bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo ENTRY_LOG(); 581bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 582bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo if (accuracy < 1000) 583bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo { 584bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo accuracy = 1000; 585bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo } 586bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 587bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo int ret_val = 0; 588bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo ret_val = loc_eng_inject_location(loc_afw_data, latitude, longitude, accuracy); 589bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 590bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo if(!initialized) 591bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo { 592bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo char value[PROPERTY_VALUE_MAX]; 593bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo memset(value, 0, sizeof(value)); 594bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo (void)property_get("persist.gps.qc_nlp_in_use", value, "0"); 595bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo if(0 == strcmp(value, "1")) 596bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo { 597bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo enable_cpi = false; 598bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo LOC_LOGI("GPS HAL coarse position injection disabled"); 599bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo } 600bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo else 601bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo { 602bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo LOC_LOGI("GPS HAL coarse position injection enabled"); 603bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo } 604bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo initialized = true; 605bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo } 606bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 607bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo if(enable_cpi) 608bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo { 609bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo ret_val = loc_eng_inject_location(loc_afw_data, latitude, longitude, accuracy); 610bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo } 611bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo EXIT_LOG(%d, ret_val); 612bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo return ret_val; 613bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo} 614bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 615bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 616bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo/*=========================================================================== 617bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoFUNCTION loc_delete_aiding_data 618bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 619bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoDESCRIPTION 620bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo This is used by Java native function to delete the aiding data. The function 621bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo updates the global variable for the aiding data to be deleted. If the GPS 622bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo engine is off, the aiding data will be deleted. Otherwise, the actual action 623bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo will happen when gps engine is turned off. 624bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 625bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoDEPENDENCIES 626bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo Assumes the aiding data type specified in GpsAidingData matches with 627bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo LOC API specification. 628bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 629bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoRETURN VALUE 630bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo None 631bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 632bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoSIDE EFFECTS 633bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo N/A 634bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 635bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo===========================================================================*/ 636bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic void loc_delete_aiding_data(GpsAidingData f) 637bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo{ 638bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo ENTRY_LOG(); 639bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo loc_eng_delete_aiding_data(loc_afw_data, f); 640bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 641bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo EXIT_LOG(%s, VOID_RET); 642bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo} 643bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 644bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russoconst GpsGeofencingInterface* get_geofence_interface(void) 645bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo{ 646bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo ENTRY_LOG(); 647bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo void *handle; 648bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo const char *error; 649bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo typedef const GpsGeofencingInterface* (*get_gps_geofence_interface_function) (void); 650bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo get_gps_geofence_interface_function get_gps_geofence_interface; 651bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo static const GpsGeofencingInterface* geofence_interface = NULL; 652bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 653bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo dlerror(); /* Clear any existing error */ 654bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 655bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo handle = dlopen ("libgeofence.so", RTLD_NOW); 656bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 657bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo if (!handle) 658bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo { 659bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo if ((error = dlerror()) != NULL) { 660bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo LOC_LOGE ("%s, dlopen for libgeofence.so failed, error = %s\n", __func__, error); 661bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo } 662bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo goto exit; 663bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo } 664bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo dlerror(); /* Clear any existing error */ 665bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo get_gps_geofence_interface = (get_gps_geofence_interface_function)dlsym(handle, "gps_geofence_get_interface"); 666bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo if ((error = dlerror()) != NULL) { 667bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo LOC_LOGE ("%s, dlsym for get_gps_geofence_interface failed, error = %s\n", __func__, error); 668bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo goto exit; 669bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo } 670bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 671bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo geofence_interface = get_gps_geofence_interface(); 672bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 673bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russoexit: 674bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo EXIT_LOG(%d, geofence_interface == NULL); 675bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo return geofence_interface; 676bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo} 677bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo/*=========================================================================== 678bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoFUNCTION loc_get_extension 679bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 680bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoDESCRIPTION 681bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo Get the gps extension to support XTRA. 682bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 683bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoDEPENDENCIES 684bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo N/A 685bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 686bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoRETURN VALUE 687bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo The GPS extension interface. 688bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 689bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoSIDE EFFECTS 690bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo N/A 691bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 692bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo===========================================================================*/ 693bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russoconst void* loc_get_extension(const char* name) 694bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo{ 695bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo ENTRY_LOG(); 696bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo const void* ret_val = NULL; 697bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 698bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo LOC_LOGD("%s:%d] For Interface = %s\n",__func__, __LINE__, name); 699bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo if (strcmp(name, GPS_XTRA_INTERFACE) == 0) 700bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo { 701bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo ret_val = &sLocEngXTRAInterface; 702bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo } 703bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo else if (strcmp(name, AGPS_INTERFACE) == 0) 704bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo { 705bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo ret_val = &sLocEngAGpsInterface; 706bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo } 707bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo else if (strcmp(name, GPS_NI_INTERFACE) == 0) 708bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo { 709bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo ret_val = &sLocEngNiInterface; 710bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo } 711bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo else if (strcmp(name, AGPS_RIL_INTERFACE) == 0) 712bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo { 713bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo char baseband[PROPERTY_VALUE_MAX]; 714bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo property_get("ro.baseband", baseband, "msm"); 715bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo if (strcmp(baseband, "csfb") == 0) 716bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo { 717bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo ret_val = &sLocEngAGpsRilInterface; 718bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo } 719bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo } 720bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo else if (strcmp(name, GPS_GEOFENCING_INTERFACE) == 0) 721bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo { 722bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo if ((gps_conf.CAPABILITIES | GPS_CAPABILITY_GEOFENCING) == gps_conf.CAPABILITIES ){ 723bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo ret_val = get_geofence_interface(); 724bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo } 725bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo } 726bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo else if (strcmp(name, SUPL_CERTIFICATE_INTERFACE) == 0) 727bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo { 728bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo ret_val = &sLocEngAGpsCertInterface; 729bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo } 730bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo else if (strcmp(name, GNSS_CONFIGURATION_INTERFACE) == 0) 731bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo { 732bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo ret_val = &sLocEngConfigInterface; 733bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo } 734bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo else if (strcmp(name, GPS_MEASUREMENT_INTERFACE) == 0) 735bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo { 736bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo ret_val = &sLocEngGpsMeasurementInterface; 737bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo } 738bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo else 739bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo { 740bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo LOC_LOGE ("get_extension: Invalid interface passed in\n"); 741bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo } 742bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo EXIT_LOG(%p, ret_val); 743bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo return ret_val; 744bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo} 745bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 746bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo/*=========================================================================== 747bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoFUNCTION loc_agps_init 748bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 749bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoDESCRIPTION 750bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo Initialize the AGps interface. 751bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 752bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoDEPENDENCIES 753bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo NONE 754bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 755bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoRETURN VALUE 756bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 0 757bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 758bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoSIDE EFFECTS 759bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo N/A 760bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 761bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo===========================================================================*/ 762bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic void loc_agps_init(AGpsCallbacks* callbacks) 763bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo{ 764bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo ENTRY_LOG(); 765bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo if (agps_status_cb == NULL) { 766bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo agps_status_cb = callbacks->status_cb; 767bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo callbacks->status_cb = loc_agps_status_cb; 768bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo } 769bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo loc_eng_agps_init(loc_afw_data, (AGpsExtCallbacks*)callbacks); 770bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo EXIT_LOG(%s, VOID_RET); 771bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo} 772bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 773bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo/*=========================================================================== 774bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoFUNCTION loc_agps_open 775bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 776bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoDESCRIPTION 777bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo This function is called when on-demand data connection opening is successful. 778bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoIt should inform ARM 9 about the data open result. 779bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 780bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoDEPENDENCIES 781bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo NONE 782bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 783bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoRETURN VALUE 784bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 0 785bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 786bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoSIDE EFFECTS 787bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo N/A 788bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 789bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo===========================================================================*/ 790bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic int loc_agps_open(const char* apn) 791bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo{ 792bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo ENTRY_LOG(); 793bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo AGpsType agpsType = AGPS_TYPE_SUPL; 794bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo AGpsBearerType bearerType = AGPS_APN_BEARER_IPV4; 795bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo int ret_val = loc_eng_agps_open(loc_afw_data, agpsType, apn, bearerType); 796bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 797bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo EXIT_LOG(%d, ret_val); 798bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo return ret_val; 799bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo} 800bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 801bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo/*=========================================================================== 802bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoFUNCTION loc_agps_open_with_apniptype 803bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 804bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoDESCRIPTION 805bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo This function is called when on-demand data connection opening is successful. 806bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoIt should inform ARM 9 about the data open result. 807bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 808bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoDEPENDENCIES 809bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo NONE 810bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 811bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoRETURN VALUE 812bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 0 813bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 814bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoSIDE EFFECTS 815bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo N/A 816bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 817bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo===========================================================================*/ 818bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic int loc_agps_open_with_apniptype(const char* apn, ApnIpType apnIpType) 819bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo{ 820bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo ENTRY_LOG(); 821bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo AGpsType agpsType = AGPS_TYPE_SUPL; 822bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo AGpsBearerType bearerType; 823bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 824bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo switch (apnIpType) { 825bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo case APN_IP_IPV4: 826bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo bearerType = AGPS_APN_BEARER_IPV4; 827bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo break; 828bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo case APN_IP_IPV6: 829bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo bearerType = AGPS_APN_BEARER_IPV6; 830bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo break; 831bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo case APN_IP_IPV4V6: 832bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo bearerType = AGPS_APN_BEARER_IPV4V6; 833bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo break; 834bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo default: 835d7b1204cc565f482a6067953cebe25b16cc2a148Dante Russo bearerType = AGPS_APN_BEARER_IPV4; 836bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo break; 837bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo } 838bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 839bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo int ret_val = loc_eng_agps_open(loc_afw_data, agpsType, apn, bearerType); 840bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 841bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo EXIT_LOG(%d, ret_val); 842bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo return ret_val; 843bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo} 844bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 845bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo/*=========================================================================== 846bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoFUNCTION loc_agps_closed 847bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 848bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoDESCRIPTION 849bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo This function is called when on-demand data connection closing is done. 850bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoIt should inform ARM 9 about the data close result. 851bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 852bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoDEPENDENCIES 853bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo NONE 854bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 855bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoRETURN VALUE 856bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 0 857bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 858bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoSIDE EFFECTS 859bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo N/A 860bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 861bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo===========================================================================*/ 862bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic int loc_agps_closed() 863bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo{ 864bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo ENTRY_LOG(); 865bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo AGpsType agpsType = AGPS_TYPE_SUPL; 866bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo int ret_val = loc_eng_agps_closed(loc_afw_data, agpsType); 867bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 868bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo EXIT_LOG(%d, ret_val); 869bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo return ret_val; 870bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo} 871bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 872bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo/*=========================================================================== 873bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoFUNCTION loc_agps_open_failed 874bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 875bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoDESCRIPTION 876bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo This function is called when on-demand data connection opening has failed. 877bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoIt should inform ARM 9 about the data open result. 878bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 879bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoDEPENDENCIES 880bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo NONE 881bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 882bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoRETURN VALUE 883bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 0 884bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 885bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoSIDE EFFECTS 886bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo N/A 887bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 888bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo===========================================================================*/ 889bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russoint loc_agps_open_failed() 890bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo{ 891bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo ENTRY_LOG(); 892bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo AGpsType agpsType = AGPS_TYPE_SUPL; 893bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo int ret_val = loc_eng_agps_open_failed(loc_afw_data, agpsType); 894bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 895bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo EXIT_LOG(%d, ret_val); 896bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo return ret_val; 897bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo} 898bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 899bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo/*=========================================================================== 900bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoFUNCTION loc_agps_set_server 901bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 902bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoDESCRIPTION 903bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo If loc_eng_set_server is called before loc_eng_init, it doesn't work. This 904bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo proxy buffers server settings and calls loc_eng_set_server when the client is 905bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo open. 906bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 907bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoDEPENDENCIES 908bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo NONE 909bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 910bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoRETURN VALUE 911bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 0 912bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 913bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoSIDE EFFECTS 914bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo N/A 915bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 916bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo===========================================================================*/ 917bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic int loc_agps_set_server(AGpsType type, const char* hostname, int port) 918bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo{ 919bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo ENTRY_LOG(); 920bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo LocServerType serverType; 921bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo switch (type) { 922bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo case AGPS_TYPE_SUPL: 923bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo serverType = LOC_AGPS_SUPL_SERVER; 924bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo break; 925bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo case AGPS_TYPE_C2K: 926bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo serverType = LOC_AGPS_CDMA_PDE_SERVER; 927bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo break; 928bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo default: 929bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo serverType = LOC_AGPS_SUPL_SERVER; 930bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo } 931bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo int ret_val = loc_eng_set_server_proxy(loc_afw_data, serverType, hostname, port); 932bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 933bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo EXIT_LOG(%d, ret_val); 934bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo return ret_val; 935bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo} 936bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 937bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo/*=========================================================================== 938bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoFUNCTIONf571 939bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo loc_xtra_init 940bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 941bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoDESCRIPTION 942bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo Initialize XTRA module. 943bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 944bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoDEPENDENCIES 945bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo None 946bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 947bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoRETURN VALUE 948bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 0: success 949bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 950bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoSIDE EFFECTS 951bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo N/A 952bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 953bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo===========================================================================*/ 954bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic int loc_xtra_init(GpsXtraCallbacks* callbacks) 955bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo{ 956bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo ENTRY_LOG(); 957bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo int ret_val = loc_eng_xtra_init(loc_afw_data, (GpsXtraExtCallbacks*)callbacks); 958bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 959bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo EXIT_LOG(%d, ret_val); 960bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo return ret_val; 961bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo} 962bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 963bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 964bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo/*=========================================================================== 965bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoFUNCTION loc_xtra_inject_data 966bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 967bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoDESCRIPTION 968bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo Initialize XTRA module. 969bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 970bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoDEPENDENCIES 971bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo None 972bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 973bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoRETURN VALUE 974bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 0: success 975bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 976bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoSIDE EFFECTS 977bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo N/A 978bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 979bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo===========================================================================*/ 980bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic int loc_xtra_inject_data(char* data, int length) 981bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo{ 982bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo ENTRY_LOG(); 983bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo int ret_val = -1; 984bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo if( (data != NULL) && ((unsigned int)length <= XTRA_DATA_MAX_SIZE)) 985bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo ret_val = loc_eng_xtra_inject_data(loc_afw_data, data, length); 986bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo else 987bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo LOC_LOGE("%s, Could not inject XTRA data. Buffer address: %p, length: %d", 988bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo __func__, data, length); 989bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo EXIT_LOG(%d, ret_val); 990bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo return ret_val; 991bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo} 992bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 993bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo/*=========================================================================== 994bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoFUNCTION loc_gps_measurement_init 995bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 996bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoDESCRIPTION 997bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo This function initializes the gps measurement interface 998bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 999bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoDEPENDENCIES 1000bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo NONE 1001bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 1002bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoRETURN VALUE 1003bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo None 1004bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 1005bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoSIDE EFFECTS 1006bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo N/A 1007bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 1008bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo===========================================================================*/ 1009bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic int loc_gps_measurement_init(GpsMeasurementCallbacks* callbacks) 1010bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo{ 1011bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo ENTRY_LOG(); 1012bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo int ret_val = loc_eng_gps_measurement_init(loc_afw_data, 1013bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo callbacks); 1014bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 1015bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo EXIT_LOG(%d, ret_val); 1016bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo return ret_val; 1017bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo} 1018bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 1019bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo/*=========================================================================== 1020bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoFUNCTION loc_gps_measurement_close 1021bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 1022bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoDESCRIPTION 1023bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo This function closes the gps measurement interface 1024bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 1025bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoDEPENDENCIES 1026bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo NONE 1027bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 1028bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoRETURN VALUE 1029bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo None 1030bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 1031bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoSIDE EFFECTS 1032bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo N/A 1033bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 1034bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo===========================================================================*/ 1035bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic void loc_gps_measurement_close() 1036bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo{ 1037bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo ENTRY_LOG(); 1038bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo loc_eng_gps_measurement_close(loc_afw_data); 1039bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 1040bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo EXIT_LOG(%s, VOID_RET); 1041bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo} 1042bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 1043bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo/*=========================================================================== 1044bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoFUNCTION loc_ni_init 1045bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 1046bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoDESCRIPTION 1047bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo This function initializes the NI interface 1048bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 1049bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoDEPENDENCIES 1050bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo NONE 1051bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 1052bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoRETURN VALUE 1053bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo None 1054bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 1055bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoSIDE EFFECTS 1056bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo N/A 1057bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 1058bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo===========================================================================*/ 1059bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russovoid loc_ni_init(GpsNiCallbacks *callbacks) 1060bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo{ 1061bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo ENTRY_LOG(); 1062bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo loc_eng_ni_init(loc_afw_data,(GpsNiExtCallbacks*) callbacks); 1063bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo EXIT_LOG(%s, VOID_RET); 1064bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo} 1065bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 1066bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo/*=========================================================================== 1067bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoFUNCTION loc_ni_respond 1068bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 1069bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoDESCRIPTION 1070bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo This function sends an NI respond to the modem processor 1071bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 1072bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoDEPENDENCIES 1073bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo NONE 1074bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 1075bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoRETURN VALUE 1076bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo None 1077bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 1078bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoSIDE EFFECTS 1079bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo N/A 1080bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 1081bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo===========================================================================*/ 1082bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russovoid loc_ni_respond(int notif_id, GpsUserResponseType user_response) 1083bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo{ 1084bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo ENTRY_LOG(); 1085bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo loc_eng_ni_respond(loc_afw_data, notif_id, user_response); 1086bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo EXIT_LOG(%s, VOID_RET); 1087bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo} 1088bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 1089bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo// Below stub functions are members of sLocEngAGpsRilInterface 1090bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic void loc_agps_ril_init( AGpsRilCallbacks* callbacks ) {} 1091bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic void loc_agps_ril_set_ref_location(const AGpsRefLocation *agps_reflocation, size_t sz_struct) {} 1092bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic void loc_agps_ril_set_set_id(AGpsSetIDType type, const char* setid) {} 1093bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic void loc_agps_ril_ni_message(uint8_t *msg, size_t len) {} 1094bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic void loc_agps_ril_update_network_state(int connected, int type, int roaming, const char* extra_info) {} 1095bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 1096bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo/*=========================================================================== 1097bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoFUNCTION loc_agps_ril_update_network_availability 1098bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 1099bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoDESCRIPTION 1100bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo Sets data call allow vs disallow flag to modem 1101bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo This is the only member of sLocEngAGpsRilInterface implemented. 1102bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 1103bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoDEPENDENCIES 1104bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo None 1105bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 1106bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoRETURN VALUE 1107bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 0: success 1108bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 1109bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoSIDE EFFECTS 1110bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo N/A 1111bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 1112bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo===========================================================================*/ 1113bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic void loc_agps_ril_update_network_availability(int available, const char* apn) 1114bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo{ 1115bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo ENTRY_LOG(); 1116bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo loc_eng_agps_ril_update_network_availability(loc_afw_data, available, apn); 1117bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo EXIT_LOG(%s, VOID_RET); 1118bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo} 1119bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 1120bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic int loc_agps_install_certificates(const DerEncodedCertificate* certificates, 1121bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo size_t length) 1122bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo{ 1123bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo ENTRY_LOG(); 1124bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo int ret_val = loc_eng_agps_install_certificates(loc_afw_data, certificates, length); 1125bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo EXIT_LOG(%d, ret_val); 1126bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo return ret_val; 1127bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo} 1128bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic int loc_agps_revoke_certificates(const Sha1CertificateFingerprint* fingerprints, 1129bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo size_t length) 1130bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo{ 1131bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo ENTRY_LOG(); 1132bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo LOC_LOGE("agps_revoke_certificates not supported"); 1133bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo int ret_val = AGPS_CERTIFICATE_ERROR_GENERIC; 1134bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo EXIT_LOG(%d, ret_val); 1135bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo return ret_val; 1136bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo} 1137bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 1138bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic void loc_configuration_update(const char* config_data, int32_t length) 1139bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo{ 1140bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo ENTRY_LOG(); 1141bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo loc_eng_configuration_update(loc_afw_data, config_data, length); 1142bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo EXIT_LOG(%s, VOID_RET); 1143bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo} 1144bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 1145bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic void local_loc_cb(UlpLocation* location, void* locExt) 1146bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo{ 1147bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo ENTRY_LOG(); 1148bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo if (NULL != location) { 1149bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo CALLBACK_LOG_CALLFLOW("location_cb - from", %d, location->position_source); 1150bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 1151bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo if (NULL != gps_loc_cb) { 1152bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo gps_loc_cb(&location->gpsLocation); 1153bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo } 1154bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo } 1155bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo EXIT_LOG(%s, VOID_RET); 1156bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo} 1157bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 1158bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic void local_sv_cb(GpsSvStatus* sv_status, void* svExt) 1159bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo{ 1160bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo ENTRY_LOG(); 1161bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo if (NULL != gps_sv_cb) { 1162bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo CALLBACK_LOG_CALLFLOW("sv_status_cb -", %d, sv_status->num_svs); 1163bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo gps_sv_cb(sv_status); 1164bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo } 1165bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo EXIT_LOG(%s, VOID_RET); 1166bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo} 1167bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 1168bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostatic void loc_agps_status_cb(AGpsStatus* status) 1169bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo{ 1170bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo ENTRY_LOG(); 1171bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 1172bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo if (NULL != agps_status_cb) { 1173bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo size_t realSize = sizeof(AGpsStatus); 1174bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo LOC_LOGD("agps_status size=%d real-size=%d", status->size, realSize); 1175bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo status->size = realSize; 1176bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo agps_status_cb(status); 1177bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo } 1178bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo EXIT_LOG(%s, VOID_RET); 1179bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo} 1180bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 1181