147ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo/* Copyright (c) 2011-2014, The Linux Foundation. All rights reserved. 234ee09551764b045fdc02df754157473125edf60Kevin Tang * 334ee09551764b045fdc02df754157473125edf60Kevin Tang * Redistribution and use in source and binary forms, with or without 434ee09551764b045fdc02df754157473125edf60Kevin Tang * modification, are permitted provided that the following conditions are 534ee09551764b045fdc02df754157473125edf60Kevin Tang * met: 634ee09551764b045fdc02df754157473125edf60Kevin Tang * * Redistributions of source code must retain the above copyright 734ee09551764b045fdc02df754157473125edf60Kevin Tang * notice, this list of conditions and the following disclaimer. 834ee09551764b045fdc02df754157473125edf60Kevin Tang * * Redistributions in binary form must reproduce the above 934ee09551764b045fdc02df754157473125edf60Kevin Tang * copyright notice, this list of conditions and the following 1034ee09551764b045fdc02df754157473125edf60Kevin Tang * disclaimer in the documentation and/or other materials provided 1134ee09551764b045fdc02df754157473125edf60Kevin Tang * with the distribution. 12e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo * * Neither the name of The Linux Foundation, nor the names of its 1334ee09551764b045fdc02df754157473125edf60Kevin Tang * contributors may be used to endorse or promote products derived 1434ee09551764b045fdc02df754157473125edf60Kevin Tang * from this software without specific prior written permission. 1534ee09551764b045fdc02df754157473125edf60Kevin Tang * 1634ee09551764b045fdc02df754157473125edf60Kevin Tang * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 1734ee09551764b045fdc02df754157473125edf60Kevin Tang * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 1834ee09551764b045fdc02df754157473125edf60Kevin Tang * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 1934ee09551764b045fdc02df754157473125edf60Kevin Tang * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 2034ee09551764b045fdc02df754157473125edf60Kevin Tang * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 2134ee09551764b045fdc02df754157473125edf60Kevin Tang * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 2234ee09551764b045fdc02df754157473125edf60Kevin Tang * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 2334ee09551764b045fdc02df754157473125edf60Kevin Tang * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 2434ee09551764b045fdc02df754157473125edf60Kevin Tang * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 2534ee09551764b045fdc02df754157473125edf60Kevin Tang * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 2634ee09551764b045fdc02df754157473125edf60Kevin Tang * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2734ee09551764b045fdc02df754157473125edf60Kevin Tang * 2834ee09551764b045fdc02df754157473125edf60Kevin Tang */ 2934ee09551764b045fdc02df754157473125edf60Kevin Tang 3034ee09551764b045fdc02df754157473125edf60Kevin Tang#define LOG_NDDEBUG 0 3134ee09551764b045fdc02df754157473125edf60Kevin Tang#define LOG_TAG "LocSvc_afw" 3234ee09551764b045fdc02df754157473125edf60Kevin Tang 3334ee09551764b045fdc02df754157473125edf60Kevin Tang#include <hardware/gps.h> 34e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo#include <gps_extended.h> 3534ee09551764b045fdc02df754157473125edf60Kevin Tang#include <loc_eng.h> 36e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo#include <loc_target.h> 3734ee09551764b045fdc02df754157473125edf60Kevin Tang#include <loc_log.h> 38c65fed03538cb5e4a5b62d3ca114ff3cc5e87e60Mekala Natarajan#include <fcntl.h> 39c65fed03538cb5e4a5b62d3ca114ff3cc5e87e60Mekala Natarajan#include <errno.h> 40e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo#include <dlfcn.h> 41e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo#include <sys/types.h> 42e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo#include <sys/stat.h> 43e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo#include <fcntl.h> 44e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo#include <errno.h> 45e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo#include <LocDualContext.h> 46e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo#include <cutils/properties.h> 4787543bf77178d77edc23ed0043b76c0eb6ec3eccDante Russo 48e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russousing namespace loc_core; 49e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo 50bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo#define LOC_PM_CLIENT_NAME "GPS" 51bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 52e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo//Globals defns 5334ee09551764b045fdc02df754157473125edf60Kevin Tangstatic gps_location_callback gps_loc_cb = NULL; 5434ee09551764b045fdc02df754157473125edf60Kevin Tangstatic gps_sv_status_callback gps_sv_cb = NULL; 5534ee09551764b045fdc02df754157473125edf60Kevin Tang 56e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russostatic void local_loc_cb(UlpLocation* location, void* locExt); 57e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russostatic void local_sv_cb(GpsSvStatus* sv_status, void* svExt); 5834ee09551764b045fdc02df754157473125edf60Kevin Tang 5923d1e163c382baf6f395af46b34d309db0cb5c29Dante Russostatic const GpsGeofencingInterface* get_geofence_interface(void); 6023d1e163c382baf6f395af46b34d309db0cb5c29Dante Russo 6134ee09551764b045fdc02df754157473125edf60Kevin Tang// Function declarations for sLocEngInterface 6234ee09551764b045fdc02df754157473125edf60Kevin Tangstatic int loc_init(GpsCallbacks* callbacks); 6334ee09551764b045fdc02df754157473125edf60Kevin Tangstatic int loc_start(); 6434ee09551764b045fdc02df754157473125edf60Kevin Tangstatic int loc_stop(); 6534ee09551764b045fdc02df754157473125edf60Kevin Tangstatic void loc_cleanup(); 6634ee09551764b045fdc02df754157473125edf60Kevin Tangstatic int loc_inject_time(GpsUtcTime time, int64_t timeReference, int uncertainty); 6734ee09551764b045fdc02df754157473125edf60Kevin Tangstatic int loc_inject_location(double latitude, double longitude, float accuracy); 6834ee09551764b045fdc02df754157473125edf60Kevin Tangstatic void loc_delete_aiding_data(GpsAidingData f); 6934ee09551764b045fdc02df754157473125edf60Kevin Tangstatic int loc_set_position_mode(GpsPositionMode mode, GpsPositionRecurrence recurrence, 7034ee09551764b045fdc02df754157473125edf60Kevin Tang uint32_t min_interval, uint32_t preferred_accuracy, 7134ee09551764b045fdc02df754157473125edf60Kevin Tang uint32_t preferred_time); 7234ee09551764b045fdc02df754157473125edf60Kevin Tangstatic const void* loc_get_extension(const char* name); 7334ee09551764b045fdc02df754157473125edf60Kevin Tang// Defines the GpsInterface in gps.h 7434ee09551764b045fdc02df754157473125edf60Kevin Tangstatic const GpsInterface sLocEngInterface = 7534ee09551764b045fdc02df754157473125edf60Kevin Tang{ 7634ee09551764b045fdc02df754157473125edf60Kevin Tang sizeof(GpsInterface), 7734ee09551764b045fdc02df754157473125edf60Kevin Tang loc_init, 7834ee09551764b045fdc02df754157473125edf60Kevin Tang loc_start, 7934ee09551764b045fdc02df754157473125edf60Kevin Tang loc_stop, 8034ee09551764b045fdc02df754157473125edf60Kevin Tang loc_cleanup, 8134ee09551764b045fdc02df754157473125edf60Kevin Tang loc_inject_time, 8234ee09551764b045fdc02df754157473125edf60Kevin Tang loc_inject_location, 8334ee09551764b045fdc02df754157473125edf60Kevin Tang loc_delete_aiding_data, 8434ee09551764b045fdc02df754157473125edf60Kevin Tang loc_set_position_mode, 8534ee09551764b045fdc02df754157473125edf60Kevin Tang loc_get_extension 8634ee09551764b045fdc02df754157473125edf60Kevin Tang}; 8734ee09551764b045fdc02df754157473125edf60Kevin Tang 8834ee09551764b045fdc02df754157473125edf60Kevin Tang// Function declarations for sLocEngAGpsInterface 8934ee09551764b045fdc02df754157473125edf60Kevin Tangstatic void loc_agps_init(AGpsCallbacks* callbacks); 9034ee09551764b045fdc02df754157473125edf60Kevin Tangstatic int loc_agps_open(const char* apn); 9134ee09551764b045fdc02df754157473125edf60Kevin Tangstatic int loc_agps_closed(); 9234ee09551764b045fdc02df754157473125edf60Kevin Tangstatic int loc_agps_open_failed(); 9334ee09551764b045fdc02df754157473125edf60Kevin Tangstatic int loc_agps_set_server(AGpsType type, const char *hostname, int port); 940d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russostatic int loc_agps_open_with_apniptype( const char* apn, ApnIpType apnIpType); 9534ee09551764b045fdc02df754157473125edf60Kevin Tang 960d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russostatic const AGpsInterface sLocEngAGpsInterface = 9734ee09551764b045fdc02df754157473125edf60Kevin Tang{ 980d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo sizeof(AGpsInterface), 9934ee09551764b045fdc02df754157473125edf60Kevin Tang loc_agps_init, 10034ee09551764b045fdc02df754157473125edf60Kevin Tang loc_agps_open, 10134ee09551764b045fdc02df754157473125edf60Kevin Tang loc_agps_closed, 10234ee09551764b045fdc02df754157473125edf60Kevin Tang loc_agps_open_failed, 1030d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo loc_agps_set_server, 1040d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo loc_agps_open_with_apniptype 10534ee09551764b045fdc02df754157473125edf60Kevin Tang}; 10634ee09551764b045fdc02df754157473125edf60Kevin Tang 10734ee09551764b045fdc02df754157473125edf60Kevin Tangstatic int loc_xtra_init(GpsXtraCallbacks* callbacks); 10834ee09551764b045fdc02df754157473125edf60Kevin Tangstatic int loc_xtra_inject_data(char* data, int length); 10934ee09551764b045fdc02df754157473125edf60Kevin Tang 11034ee09551764b045fdc02df754157473125edf60Kevin Tangstatic const GpsXtraInterface sLocEngXTRAInterface = 11134ee09551764b045fdc02df754157473125edf60Kevin Tang{ 11234ee09551764b045fdc02df754157473125edf60Kevin Tang sizeof(GpsXtraInterface), 11334ee09551764b045fdc02df754157473125edf60Kevin Tang loc_xtra_init, 11434ee09551764b045fdc02df754157473125edf60Kevin Tang loc_xtra_inject_data 11534ee09551764b045fdc02df754157473125edf60Kevin Tang}; 11634ee09551764b045fdc02df754157473125edf60Kevin Tang 11734ee09551764b045fdc02df754157473125edf60Kevin Tangstatic void loc_ni_init(GpsNiCallbacks *callbacks); 11834ee09551764b045fdc02df754157473125edf60Kevin Tangstatic void loc_ni_respond(int notif_id, GpsUserResponseType user_response); 11934ee09551764b045fdc02df754157473125edf60Kevin Tang 120fe660078f05f448ececb0b1170ecd79e600db440Kevin Tangstatic const GpsNiInterface sLocEngNiInterface = 12134ee09551764b045fdc02df754157473125edf60Kevin Tang{ 12234ee09551764b045fdc02df754157473125edf60Kevin Tang sizeof(GpsNiInterface), 12334ee09551764b045fdc02df754157473125edf60Kevin Tang loc_ni_init, 12434ee09551764b045fdc02df754157473125edf60Kevin Tang loc_ni_respond, 12534ee09551764b045fdc02df754157473125edf60Kevin Tang}; 12634ee09551764b045fdc02df754157473125edf60Kevin Tang 1278aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastavastatic int loc_gps_measurement_init(GpsMeasurementCallbacks* callbacks); 1288aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastavastatic void loc_gps_measurement_close(); 1298aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava 1308aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastavastatic const GpsMeasurementInterface sLocEngGpsMeasurementInterface = 1318aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava{ 1328aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava sizeof(GpsMeasurementInterface), 1338aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava loc_gps_measurement_init, 1348aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava loc_gps_measurement_close 1358aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava}; 13647ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo 13734ee09551764b045fdc02df754157473125edf60Kevin Tangstatic void loc_agps_ril_init( AGpsRilCallbacks* callbacks ); 13834ee09551764b045fdc02df754157473125edf60Kevin Tangstatic void loc_agps_ril_set_ref_location(const AGpsRefLocation *agps_reflocation, size_t sz_struct); 13934ee09551764b045fdc02df754157473125edf60Kevin Tangstatic void loc_agps_ril_set_set_id(AGpsSetIDType type, const char* setid); 14034ee09551764b045fdc02df754157473125edf60Kevin Tangstatic void loc_agps_ril_ni_message(uint8_t *msg, size_t len); 14134ee09551764b045fdc02df754157473125edf60Kevin Tangstatic void loc_agps_ril_update_network_state(int connected, int type, int roaming, const char* extra_info); 14234ee09551764b045fdc02df754157473125edf60Kevin Tangstatic void loc_agps_ril_update_network_availability(int avaiable, const char* apn); 14334ee09551764b045fdc02df754157473125edf60Kevin Tang 14434ee09551764b045fdc02df754157473125edf60Kevin Tangstatic const AGpsRilInterface sLocEngAGpsRilInterface = 14534ee09551764b045fdc02df754157473125edf60Kevin Tang{ 14634ee09551764b045fdc02df754157473125edf60Kevin Tang sizeof(AGpsRilInterface), 14734ee09551764b045fdc02df754157473125edf60Kevin Tang loc_agps_ril_init, 14834ee09551764b045fdc02df754157473125edf60Kevin Tang loc_agps_ril_set_ref_location, 14934ee09551764b045fdc02df754157473125edf60Kevin Tang loc_agps_ril_set_set_id, 15034ee09551764b045fdc02df754157473125edf60Kevin Tang loc_agps_ril_ni_message, 15134ee09551764b045fdc02df754157473125edf60Kevin Tang loc_agps_ril_update_network_state, 15234ee09551764b045fdc02df754157473125edf60Kevin Tang loc_agps_ril_update_network_availability 15334ee09551764b045fdc02df754157473125edf60Kevin Tang}; 15434ee09551764b045fdc02df754157473125edf60Kevin Tang 1551d4940024c54e7d1e63f73edd5054a18a7a01b63Dante Russostatic int loc_agps_install_certificates(const DerEncodedCertificate* certificates, 1561d4940024c54e7d1e63f73edd5054a18a7a01b63Dante Russo size_t length); 1571d4940024c54e7d1e63f73edd5054a18a7a01b63Dante Russostatic int loc_agps_revoke_certificates(const Sha1CertificateFingerprint* fingerprints, 1581d4940024c54e7d1e63f73edd5054a18a7a01b63Dante Russo size_t length); 1591d4940024c54e7d1e63f73edd5054a18a7a01b63Dante Russo 1601d4940024c54e7d1e63f73edd5054a18a7a01b63Dante Russostatic const SuplCertificateInterface sLocEngAGpsCertInterface = 1611d4940024c54e7d1e63f73edd5054a18a7a01b63Dante Russo{ 1621d4940024c54e7d1e63f73edd5054a18a7a01b63Dante Russo sizeof(SuplCertificateInterface), 1631d4940024c54e7d1e63f73edd5054a18a7a01b63Dante Russo loc_agps_install_certificates, 1641d4940024c54e7d1e63f73edd5054a18a7a01b63Dante Russo loc_agps_revoke_certificates 1651d4940024c54e7d1e63f73edd5054a18a7a01b63Dante Russo}; 1661d4940024c54e7d1e63f73edd5054a18a7a01b63Dante Russo 167fe660078f05f448ececb0b1170ecd79e600db440Kevin Tangstatic void loc_configuration_update(const char* config_data, int32_t length); 168fe660078f05f448ececb0b1170ecd79e600db440Kevin Tang 169fe660078f05f448ececb0b1170ecd79e600db440Kevin Tangstatic const GnssConfigurationInterface sLocEngConfigInterface = 170fe660078f05f448ececb0b1170ecd79e600db440Kevin Tang{ 171fe660078f05f448ececb0b1170ecd79e600db440Kevin Tang sizeof(GnssConfigurationInterface), 172fe660078f05f448ececb0b1170ecd79e600db440Kevin Tang loc_configuration_update 173fe660078f05f448ececb0b1170ecd79e600db440Kevin Tang}; 174fe660078f05f448ececb0b1170ecd79e600db440Kevin Tang 17534ee09551764b045fdc02df754157473125edf60Kevin Tangstatic loc_eng_data_s_type loc_afw_data; 17647ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russostatic int gss_fd = -1; 1770c7fdf015bfdb33b14a990b280c38386cb8e1f9cVineeta Srivastavastatic int sGnssType = GNSS_UNKNOWN; 17834ee09551764b045fdc02df754157473125edf60Kevin Tang/*=========================================================================== 17934ee09551764b045fdc02df754157473125edf60Kevin TangFUNCTION gps_get_hardware_interface 18034ee09551764b045fdc02df754157473125edf60Kevin Tang 18134ee09551764b045fdc02df754157473125edf60Kevin TangDESCRIPTION 18234ee09551764b045fdc02df754157473125edf60Kevin Tang Returns the GPS hardware interaface based on LOC API 18334ee09551764b045fdc02df754157473125edf60Kevin Tang if GPS is enabled. 18434ee09551764b045fdc02df754157473125edf60Kevin Tang 18534ee09551764b045fdc02df754157473125edf60Kevin TangDEPENDENCIES 18634ee09551764b045fdc02df754157473125edf60Kevin Tang None 18734ee09551764b045fdc02df754157473125edf60Kevin Tang 18834ee09551764b045fdc02df754157473125edf60Kevin TangRETURN VALUE 18934ee09551764b045fdc02df754157473125edf60Kevin Tang 0: success 19034ee09551764b045fdc02df754157473125edf60Kevin Tang 19134ee09551764b045fdc02df754157473125edf60Kevin TangSIDE EFFECTS 19234ee09551764b045fdc02df754157473125edf60Kevin Tang N/A 19334ee09551764b045fdc02df754157473125edf60Kevin Tang 19434ee09551764b045fdc02df754157473125edf60Kevin Tang===========================================================================*/ 19534ee09551764b045fdc02df754157473125edf60Kevin Tangconst GpsInterface* gps_get_hardware_interface () 19634ee09551764b045fdc02df754157473125edf60Kevin Tang{ 19734ee09551764b045fdc02df754157473125edf60Kevin Tang ENTRY_LOG_CALLFLOW(); 19834ee09551764b045fdc02df754157473125edf60Kevin Tang const GpsInterface* ret_val; 19934ee09551764b045fdc02df754157473125edf60Kevin Tang 20034ee09551764b045fdc02df754157473125edf60Kevin Tang char propBuf[PROPERTY_VALUE_MAX]; 20134ee09551764b045fdc02df754157473125edf60Kevin Tang 202e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo loc_eng_read_config(); 203e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo 20434ee09551764b045fdc02df754157473125edf60Kevin Tang // check to see if GPS should be disabled 20534ee09551764b045fdc02df754157473125edf60Kevin Tang property_get("gps.disable", propBuf, ""); 20634ee09551764b045fdc02df754157473125edf60Kevin Tang if (propBuf[0] == '1') 20734ee09551764b045fdc02df754157473125edf60Kevin Tang { 20834ee09551764b045fdc02df754157473125edf60Kevin Tang LOC_LOGD("gps_get_interface returning NULL because gps.disable=1\n"); 20934ee09551764b045fdc02df754157473125edf60Kevin Tang ret_val = NULL; 21034ee09551764b045fdc02df754157473125edf60Kevin Tang } else { 21134ee09551764b045fdc02df754157473125edf60Kevin Tang ret_val = &sLocEngInterface; 21234ee09551764b045fdc02df754157473125edf60Kevin Tang } 21334ee09551764b045fdc02df754157473125edf60Kevin Tang 214e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo loc_eng_read_config(); 215e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo 21634ee09551764b045fdc02df754157473125edf60Kevin Tang EXIT_LOG(%p, ret_val); 21734ee09551764b045fdc02df754157473125edf60Kevin Tang return ret_val; 21834ee09551764b045fdc02df754157473125edf60Kevin Tang} 21934ee09551764b045fdc02df754157473125edf60Kevin Tang 22034ee09551764b045fdc02df754157473125edf60Kevin Tang// for gps.c 22134ee09551764b045fdc02df754157473125edf60Kevin Tangextern "C" const GpsInterface* get_gps_interface() 22234ee09551764b045fdc02df754157473125edf60Kevin Tang{ 223e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo unsigned int target = TARGET_DEFAULT; 224e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo loc_eng_read_config(); 225e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo 22647ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo target = loc_get_target(); 227e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo LOC_LOGD("Target name check returned %s", loc_get_target_name(target)); 22847ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo 2290c7fdf015bfdb33b14a990b280c38386cb8e1f9cVineeta Srivastava sGnssType = getTargetGnssType(target); 2300c7fdf015bfdb33b14a990b280c38386cb8e1f9cVineeta Srivastava switch (sGnssType) 23147ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo { 23247ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo case GNSS_GSS: 233bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo case GNSS_AUTO: 234e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo //APQ8064 235c65fed03538cb5e4a5b62d3ca114ff3cc5e87e60Mekala Natarajan gps_conf.CAPABILITIES &= ~(GPS_CAPABILITY_MSA | GPS_CAPABILITY_MSB); 236c65fed03538cb5e4a5b62d3ca114ff3cc5e87e60Mekala Natarajan gss_fd = open("/dev/gss", O_RDONLY); 237c65fed03538cb5e4a5b62d3ca114ff3cc5e87e60Mekala Natarajan if (gss_fd < 0) { 238c65fed03538cb5e4a5b62d3ca114ff3cc5e87e60Mekala Natarajan LOC_LOGE("GSS open failed: %s\n", strerror(errno)); 239c65fed03538cb5e4a5b62d3ca114ff3cc5e87e60Mekala Natarajan } 240e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo else { 241e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo LOC_LOGD("GSS open success! CAPABILITIES %0lx\n", 242e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo gps_conf.CAPABILITIES); 243e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo } 24447ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo break; 24547ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo case GNSS_NONE: 24647ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo //MPQ8064 24747ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo LOC_LOGE("No GPS HW on this target. Not returning interface."); 248e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo return NULL; 24947ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo case GNSS_QCA1530: 25047ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo // qca1530 chip is present 25147ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo gps_conf.CAPABILITIES &= ~(GPS_CAPABILITY_MSA | GPS_CAPABILITY_MSB); 25247ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo LOC_LOGD("qca1530 present: CAPABILITIES %0lx\n", gps_conf.CAPABILITIES); 25347ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo break; 254c65fed03538cb5e4a5b62d3ca114ff3cc5e87e60Mekala Natarajan } 25534ee09551764b045fdc02df754157473125edf60Kevin Tang return &sLocEngInterface; 25634ee09551764b045fdc02df754157473125edf60Kevin Tang} 257e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo 25834ee09551764b045fdc02df754157473125edf60Kevin Tang/*=========================================================================== 25934ee09551764b045fdc02df754157473125edf60Kevin TangFUNCTION loc_init 26034ee09551764b045fdc02df754157473125edf60Kevin Tang 26134ee09551764b045fdc02df754157473125edf60Kevin TangDESCRIPTION 26234ee09551764b045fdc02df754157473125edf60Kevin Tang Initialize the location engine, this include setting up global datas 26334ee09551764b045fdc02df754157473125edf60Kevin Tang and registers location engien with loc api service. 26434ee09551764b045fdc02df754157473125edf60Kevin Tang 26534ee09551764b045fdc02df754157473125edf60Kevin TangDEPENDENCIES 26634ee09551764b045fdc02df754157473125edf60Kevin Tang None 26734ee09551764b045fdc02df754157473125edf60Kevin Tang 26834ee09551764b045fdc02df754157473125edf60Kevin TangRETURN VALUE 26934ee09551764b045fdc02df754157473125edf60Kevin Tang 0: success 27034ee09551764b045fdc02df754157473125edf60Kevin Tang 27134ee09551764b045fdc02df754157473125edf60Kevin TangSIDE EFFECTS 27234ee09551764b045fdc02df754157473125edf60Kevin Tang N/Ax 27334ee09551764b045fdc02df754157473125edf60Kevin Tang 27434ee09551764b045fdc02df754157473125edf60Kevin Tang===========================================================================*/ 27534ee09551764b045fdc02df754157473125edf60Kevin Tangstatic int loc_init(GpsCallbacks* callbacks) 27634ee09551764b045fdc02df754157473125edf60Kevin Tang{ 277e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo int retVal = -1; 27834ee09551764b045fdc02df754157473125edf60Kevin Tang ENTRY_LOG(); 279e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo LOC_API_ADAPTER_EVENT_MASK_T event; 280e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo 281e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo if (NULL == callbacks) { 282e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo LOC_LOGE("loc_init failed. cb = NULL\n"); 283e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo EXIT_LOG(%d, retVal); 284e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo return retVal; 285e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo } 286e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo 287e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo event = LOC_API_ADAPTER_BIT_PARSED_POSITION_REPORT | 288e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo LOC_API_ADAPTER_BIT_SATELLITE_REPORT | 289e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo LOC_API_ADAPTER_BIT_LOCATION_SERVER_REQUEST | 290e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo LOC_API_ADAPTER_BIT_ASSISTANCE_DATA_REQUEST | 291e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo LOC_API_ADAPTER_BIT_IOCTL_REPORT | 292e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo LOC_API_ADAPTER_BIT_STATUS_REPORT | 293e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo LOC_API_ADAPTER_BIT_NMEA_1HZ_REPORT | 294e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo LOC_API_ADAPTER_BIT_NI_NOTIFY_VERIFY_REQUEST; 295e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo 296e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo LocCallbacks clientCallbacks = {local_loc_cb, /* location_cb */ 29734ee09551764b045fdc02df754157473125edf60Kevin Tang callbacks->status_cb, /* status_cb */ 298e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo local_sv_cb, /* sv_status_cb */ 29934ee09551764b045fdc02df754157473125edf60Kevin Tang callbacks->nmea_cb, /* nmea_cb */ 30034ee09551764b045fdc02df754157473125edf60Kevin Tang callbacks->set_capabilities_cb, /* set_capabilities_cb */ 30134ee09551764b045fdc02df754157473125edf60Kevin Tang callbacks->acquire_wakelock_cb, /* acquire_wakelock_cb */ 30234ee09551764b045fdc02df754157473125edf60Kevin Tang callbacks->release_wakelock_cb, /* release_wakelock_cb */ 30334ee09551764b045fdc02df754157473125edf60Kevin Tang callbacks->create_thread_cb, /* create_thread_cb */ 30434ee09551764b045fdc02df754157473125edf60Kevin Tang NULL, /* location_ext_parser */ 305e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo NULL, /* sv_ext_parser */ 30647ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo callbacks->request_utc_time_cb, /* request_utc_time_cb */ 3070c7fdf015bfdb33b14a990b280c38386cb8e1f9cVineeta Srivastava }; 308e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo 30934ee09551764b045fdc02df754157473125edf60Kevin Tang gps_loc_cb = callbacks->location_cb; 31034ee09551764b045fdc02df754157473125edf60Kevin Tang gps_sv_cb = callbacks->sv_status_cb; 31134ee09551764b045fdc02df754157473125edf60Kevin Tang 31247ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo retVal = loc_eng_init(loc_afw_data, &clientCallbacks, event, NULL); 31347ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo loc_afw_data.adapter->mSupportsAgpsRequests = !loc_afw_data.adapter->hasAgpsExtendedCapabilities(); 31447ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo loc_afw_data.adapter->mSupportsPositionInjection = !loc_afw_data.adapter->hasCPIExtendedCapabilities(); 315bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo loc_afw_data.adapter->mSupportsTimeInjection = !loc_afw_data.adapter->hasCPIExtendedCapabilities(); 316b2c66a082ebe2a2f887783810d4fb3a31fd547cdKevin Tang loc_afw_data.adapter->setGpsLockMsg(0); 317bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo loc_afw_data.adapter->requestUlp(getCarrierCapabilities()); 31847ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo 31947ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo if(retVal) { 32047ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo LOC_LOGE("loc_eng_init() fail!"); 32147ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo goto err; 32247ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo } 32334ee09551764b045fdc02df754157473125edf60Kevin Tang 32447ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo loc_afw_data.adapter->setPowerVoteRight(loc_get_target() == TARGET_QCA1530); 32547ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo loc_afw_data.adapter->setPowerVote(true); 32647ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo 32747ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo LOC_LOGD("loc_eng_init() success!"); 32887543bf77178d77edc23ed0043b76c0eb6ec3eccDante Russo 32947ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russoerr: 330e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo EXIT_LOG(%d, retVal); 331e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo return retVal; 33234ee09551764b045fdc02df754157473125edf60Kevin Tang} 33334ee09551764b045fdc02df754157473125edf60Kevin Tang 33434ee09551764b045fdc02df754157473125edf60Kevin Tang/*=========================================================================== 33534ee09551764b045fdc02df754157473125edf60Kevin TangFUNCTION loc_cleanup 33634ee09551764b045fdc02df754157473125edf60Kevin Tang 33734ee09551764b045fdc02df754157473125edf60Kevin TangDESCRIPTION 33834ee09551764b045fdc02df754157473125edf60Kevin Tang Cleans location engine. The location client handle will be released. 33934ee09551764b045fdc02df754157473125edf60Kevin Tang 34034ee09551764b045fdc02df754157473125edf60Kevin TangDEPENDENCIES 34134ee09551764b045fdc02df754157473125edf60Kevin Tang None 34234ee09551764b045fdc02df754157473125edf60Kevin Tang 34334ee09551764b045fdc02df754157473125edf60Kevin TangRETURN VALUE 34434ee09551764b045fdc02df754157473125edf60Kevin Tang None 34534ee09551764b045fdc02df754157473125edf60Kevin Tang 34634ee09551764b045fdc02df754157473125edf60Kevin TangSIDE EFFECTS 34734ee09551764b045fdc02df754157473125edf60Kevin Tang N/A 34834ee09551764b045fdc02df754157473125edf60Kevin Tang 34934ee09551764b045fdc02df754157473125edf60Kevin Tang===========================================================================*/ 35034ee09551764b045fdc02df754157473125edf60Kevin Tangstatic void loc_cleanup() 35134ee09551764b045fdc02df754157473125edf60Kevin Tang{ 35234ee09551764b045fdc02df754157473125edf60Kevin Tang ENTRY_LOG(); 35347ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo 35447ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo loc_afw_data.adapter->setPowerVote(false); 355b2c66a082ebe2a2f887783810d4fb3a31fd547cdKevin Tang loc_afw_data.adapter->setGpsLockMsg(gps_conf.GPS_LOCK); 35647ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo 35734ee09551764b045fdc02df754157473125edf60Kevin Tang loc_eng_cleanup(loc_afw_data); 35834ee09551764b045fdc02df754157473125edf60Kevin Tang gps_loc_cb = NULL; 35934ee09551764b045fdc02df754157473125edf60Kevin Tang gps_sv_cb = NULL; 360e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo 36134ee09551764b045fdc02df754157473125edf60Kevin Tang EXIT_LOG(%s, VOID_RET); 36234ee09551764b045fdc02df754157473125edf60Kevin Tang} 36334ee09551764b045fdc02df754157473125edf60Kevin Tang 36434ee09551764b045fdc02df754157473125edf60Kevin Tang/*=========================================================================== 36534ee09551764b045fdc02df754157473125edf60Kevin TangFUNCTION loc_start 36634ee09551764b045fdc02df754157473125edf60Kevin Tang 36734ee09551764b045fdc02df754157473125edf60Kevin TangDESCRIPTION 36834ee09551764b045fdc02df754157473125edf60Kevin Tang Starts the tracking session 36934ee09551764b045fdc02df754157473125edf60Kevin Tang 37034ee09551764b045fdc02df754157473125edf60Kevin TangDEPENDENCIES 37134ee09551764b045fdc02df754157473125edf60Kevin Tang None 37234ee09551764b045fdc02df754157473125edf60Kevin Tang 37334ee09551764b045fdc02df754157473125edf60Kevin TangRETURN VALUE 37434ee09551764b045fdc02df754157473125edf60Kevin Tang 0: success 37534ee09551764b045fdc02df754157473125edf60Kevin Tang 37634ee09551764b045fdc02df754157473125edf60Kevin TangSIDE EFFECTS 37734ee09551764b045fdc02df754157473125edf60Kevin Tang N/A 37834ee09551764b045fdc02df754157473125edf60Kevin Tang 37934ee09551764b045fdc02df754157473125edf60Kevin Tang===========================================================================*/ 38034ee09551764b045fdc02df754157473125edf60Kevin Tangstatic int loc_start() 38134ee09551764b045fdc02df754157473125edf60Kevin Tang{ 38234ee09551764b045fdc02df754157473125edf60Kevin Tang ENTRY_LOG(); 38334ee09551764b045fdc02df754157473125edf60Kevin Tang int ret_val = loc_eng_start(loc_afw_data); 38434ee09551764b045fdc02df754157473125edf60Kevin Tang 38534ee09551764b045fdc02df754157473125edf60Kevin Tang EXIT_LOG(%d, ret_val); 38634ee09551764b045fdc02df754157473125edf60Kevin Tang return ret_val; 38734ee09551764b045fdc02df754157473125edf60Kevin Tang} 38834ee09551764b045fdc02df754157473125edf60Kevin Tang 38934ee09551764b045fdc02df754157473125edf60Kevin Tang/*=========================================================================== 39034ee09551764b045fdc02df754157473125edf60Kevin TangFUNCTION loc_stop 39134ee09551764b045fdc02df754157473125edf60Kevin Tang 39234ee09551764b045fdc02df754157473125edf60Kevin TangDESCRIPTION 39334ee09551764b045fdc02df754157473125edf60Kevin Tang Stops the tracking session 39434ee09551764b045fdc02df754157473125edf60Kevin Tang 39534ee09551764b045fdc02df754157473125edf60Kevin TangDEPENDENCIES 39634ee09551764b045fdc02df754157473125edf60Kevin Tang None 39734ee09551764b045fdc02df754157473125edf60Kevin Tang 39834ee09551764b045fdc02df754157473125edf60Kevin TangRETURN VALUE 39934ee09551764b045fdc02df754157473125edf60Kevin Tang 0: success 40034ee09551764b045fdc02df754157473125edf60Kevin Tang 40134ee09551764b045fdc02df754157473125edf60Kevin TangSIDE EFFECTS 40234ee09551764b045fdc02df754157473125edf60Kevin Tang N/A 40334ee09551764b045fdc02df754157473125edf60Kevin Tang 40434ee09551764b045fdc02df754157473125edf60Kevin Tang===========================================================================*/ 40534ee09551764b045fdc02df754157473125edf60Kevin Tangstatic int loc_stop() 40634ee09551764b045fdc02df754157473125edf60Kevin Tang{ 40734ee09551764b045fdc02df754157473125edf60Kevin Tang ENTRY_LOG(); 408e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo int ret_val = -1; 409e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo ret_val = loc_eng_stop(loc_afw_data); 41034ee09551764b045fdc02df754157473125edf60Kevin Tang 41134ee09551764b045fdc02df754157473125edf60Kevin Tang EXIT_LOG(%d, ret_val); 41234ee09551764b045fdc02df754157473125edf60Kevin Tang return ret_val; 41334ee09551764b045fdc02df754157473125edf60Kevin Tang} 41434ee09551764b045fdc02df754157473125edf60Kevin Tang 41534ee09551764b045fdc02df754157473125edf60Kevin Tang/*=========================================================================== 41634ee09551764b045fdc02df754157473125edf60Kevin TangFUNCTION loc_set_position_mode 41734ee09551764b045fdc02df754157473125edf60Kevin Tang 41834ee09551764b045fdc02df754157473125edf60Kevin TangDESCRIPTION 41934ee09551764b045fdc02df754157473125edf60Kevin Tang Sets the mode and fix frequency for the tracking session. 42034ee09551764b045fdc02df754157473125edf60Kevin Tang 42134ee09551764b045fdc02df754157473125edf60Kevin TangDEPENDENCIES 42234ee09551764b045fdc02df754157473125edf60Kevin Tang None 42334ee09551764b045fdc02df754157473125edf60Kevin Tang 42434ee09551764b045fdc02df754157473125edf60Kevin TangRETURN VALUE 42534ee09551764b045fdc02df754157473125edf60Kevin Tang 0: success 42634ee09551764b045fdc02df754157473125edf60Kevin Tang 42734ee09551764b045fdc02df754157473125edf60Kevin TangSIDE EFFECTS 42834ee09551764b045fdc02df754157473125edf60Kevin Tang N/A 42934ee09551764b045fdc02df754157473125edf60Kevin Tang 43034ee09551764b045fdc02df754157473125edf60Kevin Tang===========================================================================*/ 43134ee09551764b045fdc02df754157473125edf60Kevin Tangstatic int loc_set_position_mode(GpsPositionMode mode, 43234ee09551764b045fdc02df754157473125edf60Kevin Tang GpsPositionRecurrence recurrence, 43334ee09551764b045fdc02df754157473125edf60Kevin Tang uint32_t min_interval, 43434ee09551764b045fdc02df754157473125edf60Kevin Tang uint32_t preferred_accuracy, 43534ee09551764b045fdc02df754157473125edf60Kevin Tang uint32_t preferred_time) 43634ee09551764b045fdc02df754157473125edf60Kevin Tang{ 43734ee09551764b045fdc02df754157473125edf60Kevin Tang ENTRY_LOG(); 438e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo int ret_val = -1; 43934ee09551764b045fdc02df754157473125edf60Kevin Tang LocPositionMode locMode; 44034ee09551764b045fdc02df754157473125edf60Kevin Tang switch (mode) { 44134ee09551764b045fdc02df754157473125edf60Kevin Tang case GPS_POSITION_MODE_MS_BASED: 44234ee09551764b045fdc02df754157473125edf60Kevin Tang locMode = LOC_POSITION_MODE_MS_BASED; 44334ee09551764b045fdc02df754157473125edf60Kevin Tang break; 44434ee09551764b045fdc02df754157473125edf60Kevin Tang case GPS_POSITION_MODE_MS_ASSISTED: 44534ee09551764b045fdc02df754157473125edf60Kevin Tang locMode = LOC_POSITION_MODE_MS_ASSISTED; 44634ee09551764b045fdc02df754157473125edf60Kevin Tang break; 44734ee09551764b045fdc02df754157473125edf60Kevin Tang default: 44834ee09551764b045fdc02df754157473125edf60Kevin Tang locMode = LOC_POSITION_MODE_STANDALONE; 44934ee09551764b045fdc02df754157473125edf60Kevin Tang break; 45034ee09551764b045fdc02df754157473125edf60Kevin Tang } 451e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo 452e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo LocPosMode params(locMode, recurrence, min_interval, 453e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo preferred_accuracy, preferred_time, NULL, NULL); 454e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo ret_val = loc_eng_set_position_mode(loc_afw_data, params); 45534ee09551764b045fdc02df754157473125edf60Kevin Tang 45634ee09551764b045fdc02df754157473125edf60Kevin Tang EXIT_LOG(%d, ret_val); 45734ee09551764b045fdc02df754157473125edf60Kevin Tang return ret_val; 45834ee09551764b045fdc02df754157473125edf60Kevin Tang} 45934ee09551764b045fdc02df754157473125edf60Kevin Tang 46034ee09551764b045fdc02df754157473125edf60Kevin Tang/*=========================================================================== 46134ee09551764b045fdc02df754157473125edf60Kevin TangFUNCTION loc_inject_time 46234ee09551764b045fdc02df754157473125edf60Kevin Tang 46334ee09551764b045fdc02df754157473125edf60Kevin TangDESCRIPTION 46434ee09551764b045fdc02df754157473125edf60Kevin Tang This is used by Java native function to do time injection. 46534ee09551764b045fdc02df754157473125edf60Kevin Tang 46634ee09551764b045fdc02df754157473125edf60Kevin TangDEPENDENCIES 46734ee09551764b045fdc02df754157473125edf60Kevin Tang None 46834ee09551764b045fdc02df754157473125edf60Kevin Tang 46934ee09551764b045fdc02df754157473125edf60Kevin TangRETURN VALUE 47034ee09551764b045fdc02df754157473125edf60Kevin Tang 0 47134ee09551764b045fdc02df754157473125edf60Kevin Tang 47234ee09551764b045fdc02df754157473125edf60Kevin TangSIDE EFFECTS 47334ee09551764b045fdc02df754157473125edf60Kevin Tang N/A 47434ee09551764b045fdc02df754157473125edf60Kevin Tang 47534ee09551764b045fdc02df754157473125edf60Kevin Tang===========================================================================*/ 47634ee09551764b045fdc02df754157473125edf60Kevin Tangstatic int loc_inject_time(GpsUtcTime time, int64_t timeReference, int uncertainty) 47734ee09551764b045fdc02df754157473125edf60Kevin Tang{ 47834ee09551764b045fdc02df754157473125edf60Kevin Tang ENTRY_LOG(); 479e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo int ret_val = 0; 480e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo 481e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo ret_val = loc_eng_inject_time(loc_afw_data, time, 482e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo timeReference, uncertainty); 48334ee09551764b045fdc02df754157473125edf60Kevin Tang 48434ee09551764b045fdc02df754157473125edf60Kevin Tang EXIT_LOG(%d, ret_val); 48534ee09551764b045fdc02df754157473125edf60Kevin Tang return ret_val; 48634ee09551764b045fdc02df754157473125edf60Kevin Tang} 48734ee09551764b045fdc02df754157473125edf60Kevin Tang 48834ee09551764b045fdc02df754157473125edf60Kevin Tang 48934ee09551764b045fdc02df754157473125edf60Kevin Tang/*=========================================================================== 49034ee09551764b045fdc02df754157473125edf60Kevin TangFUNCTION loc_inject_location 49134ee09551764b045fdc02df754157473125edf60Kevin Tang 49234ee09551764b045fdc02df754157473125edf60Kevin TangDESCRIPTION 49334ee09551764b045fdc02df754157473125edf60Kevin Tang This is used by Java native function to do location injection. 49434ee09551764b045fdc02df754157473125edf60Kevin Tang 49534ee09551764b045fdc02df754157473125edf60Kevin TangDEPENDENCIES 49634ee09551764b045fdc02df754157473125edf60Kevin Tang None 49734ee09551764b045fdc02df754157473125edf60Kevin Tang 49834ee09551764b045fdc02df754157473125edf60Kevin TangRETURN VALUE 49934ee09551764b045fdc02df754157473125edf60Kevin Tang 0 : Successful 50034ee09551764b045fdc02df754157473125edf60Kevin Tang error code : Failure 50134ee09551764b045fdc02df754157473125edf60Kevin Tang 50234ee09551764b045fdc02df754157473125edf60Kevin TangSIDE EFFECTS 50334ee09551764b045fdc02df754157473125edf60Kevin Tang N/A 50434ee09551764b045fdc02df754157473125edf60Kevin Tang===========================================================================*/ 50534ee09551764b045fdc02df754157473125edf60Kevin Tangstatic int loc_inject_location(double latitude, double longitude, float accuracy) 50634ee09551764b045fdc02df754157473125edf60Kevin Tang{ 50734ee09551764b045fdc02df754157473125edf60Kevin Tang ENTRY_LOG(); 50834ee09551764b045fdc02df754157473125edf60Kevin Tang 50947ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo int ret_val = 0; 51047ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo ret_val = loc_eng_inject_location(loc_afw_data, latitude, longitude, accuracy); 51147ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo 51234ee09551764b045fdc02df754157473125edf60Kevin Tang EXIT_LOG(%d, ret_val); 51334ee09551764b045fdc02df754157473125edf60Kevin Tang return ret_val; 51434ee09551764b045fdc02df754157473125edf60Kevin Tang} 51534ee09551764b045fdc02df754157473125edf60Kevin Tang 51634ee09551764b045fdc02df754157473125edf60Kevin Tang 51734ee09551764b045fdc02df754157473125edf60Kevin Tang/*=========================================================================== 51834ee09551764b045fdc02df754157473125edf60Kevin TangFUNCTION loc_delete_aiding_data 51934ee09551764b045fdc02df754157473125edf60Kevin Tang 52034ee09551764b045fdc02df754157473125edf60Kevin TangDESCRIPTION 52134ee09551764b045fdc02df754157473125edf60Kevin Tang This is used by Java native function to delete the aiding data. The function 52234ee09551764b045fdc02df754157473125edf60Kevin Tang updates the global variable for the aiding data to be deleted. If the GPS 52334ee09551764b045fdc02df754157473125edf60Kevin Tang engine is off, the aiding data will be deleted. Otherwise, the actual action 52434ee09551764b045fdc02df754157473125edf60Kevin Tang will happen when gps engine is turned off. 52534ee09551764b045fdc02df754157473125edf60Kevin Tang 52634ee09551764b045fdc02df754157473125edf60Kevin TangDEPENDENCIES 52734ee09551764b045fdc02df754157473125edf60Kevin Tang Assumes the aiding data type specified in GpsAidingData matches with 52834ee09551764b045fdc02df754157473125edf60Kevin Tang LOC API specification. 52934ee09551764b045fdc02df754157473125edf60Kevin Tang 53034ee09551764b045fdc02df754157473125edf60Kevin TangRETURN VALUE 53134ee09551764b045fdc02df754157473125edf60Kevin Tang None 53234ee09551764b045fdc02df754157473125edf60Kevin Tang 53334ee09551764b045fdc02df754157473125edf60Kevin TangSIDE EFFECTS 53434ee09551764b045fdc02df754157473125edf60Kevin Tang N/A 53534ee09551764b045fdc02df754157473125edf60Kevin Tang 53634ee09551764b045fdc02df754157473125edf60Kevin Tang===========================================================================*/ 53734ee09551764b045fdc02df754157473125edf60Kevin Tangstatic void loc_delete_aiding_data(GpsAidingData f) 53834ee09551764b045fdc02df754157473125edf60Kevin Tang{ 53934ee09551764b045fdc02df754157473125edf60Kevin Tang ENTRY_LOG(); 54034ee09551764b045fdc02df754157473125edf60Kevin Tang loc_eng_delete_aiding_data(loc_afw_data, f); 54134ee09551764b045fdc02df754157473125edf60Kevin Tang 54234ee09551764b045fdc02df754157473125edf60Kevin Tang EXIT_LOG(%s, VOID_RET); 54334ee09551764b045fdc02df754157473125edf60Kevin Tang} 54434ee09551764b045fdc02df754157473125edf60Kevin Tang 54523d1e163c382baf6f395af46b34d309db0cb5c29Dante Russoconst GpsGeofencingInterface* get_geofence_interface(void) 54623d1e163c382baf6f395af46b34d309db0cb5c29Dante Russo{ 54723d1e163c382baf6f395af46b34d309db0cb5c29Dante Russo ENTRY_LOG(); 54823d1e163c382baf6f395af46b34d309db0cb5c29Dante Russo void *handle; 54923d1e163c382baf6f395af46b34d309db0cb5c29Dante Russo const char *error; 55023d1e163c382baf6f395af46b34d309db0cb5c29Dante Russo typedef const GpsGeofencingInterface* (*get_gps_geofence_interface_function) (void); 55123d1e163c382baf6f395af46b34d309db0cb5c29Dante Russo get_gps_geofence_interface_function get_gps_geofence_interface; 55223d1e163c382baf6f395af46b34d309db0cb5c29Dante Russo static const GpsGeofencingInterface* geofence_interface = NULL; 55323d1e163c382baf6f395af46b34d309db0cb5c29Dante Russo 55423d1e163c382baf6f395af46b34d309db0cb5c29Dante Russo dlerror(); /* Clear any existing error */ 55523d1e163c382baf6f395af46b34d309db0cb5c29Dante Russo 55623d1e163c382baf6f395af46b34d309db0cb5c29Dante Russo handle = dlopen ("libgeofence.so", RTLD_NOW); 55723d1e163c382baf6f395af46b34d309db0cb5c29Dante Russo 55823d1e163c382baf6f395af46b34d309db0cb5c29Dante Russo if (!handle) 55923d1e163c382baf6f395af46b34d309db0cb5c29Dante Russo { 56023d1e163c382baf6f395af46b34d309db0cb5c29Dante Russo if ((error = dlerror()) != NULL) { 56123d1e163c382baf6f395af46b34d309db0cb5c29Dante Russo LOC_LOGE ("%s, dlopen for libgeofence.so failed, error = %s\n", __func__, error); 56223d1e163c382baf6f395af46b34d309db0cb5c29Dante Russo } 56323d1e163c382baf6f395af46b34d309db0cb5c29Dante Russo goto exit; 56423d1e163c382baf6f395af46b34d309db0cb5c29Dante Russo } 56523d1e163c382baf6f395af46b34d309db0cb5c29Dante Russo dlerror(); /* Clear any existing error */ 56623d1e163c382baf6f395af46b34d309db0cb5c29Dante Russo get_gps_geofence_interface = (get_gps_geofence_interface_function)dlsym(handle, "gps_geofence_get_interface"); 567bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo if ((error = dlerror()) != NULL && NULL != get_gps_geofence_interface) { 568e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo LOC_LOGE ("%s, dlsym for get_gps_geofence_interface failed, error = %s\n", __func__, error); 56923d1e163c382baf6f395af46b34d309db0cb5c29Dante Russo goto exit; 57023d1e163c382baf6f395af46b34d309db0cb5c29Dante Russo } 57123d1e163c382baf6f395af46b34d309db0cb5c29Dante Russo 57223d1e163c382baf6f395af46b34d309db0cb5c29Dante Russo geofence_interface = get_gps_geofence_interface(); 57323d1e163c382baf6f395af46b34d309db0cb5c29Dante Russo 57423d1e163c382baf6f395af46b34d309db0cb5c29Dante Russoexit: 57523d1e163c382baf6f395af46b34d309db0cb5c29Dante Russo EXIT_LOG(%d, geofence_interface == NULL); 57623d1e163c382baf6f395af46b34d309db0cb5c29Dante Russo return geofence_interface; 57723d1e163c382baf6f395af46b34d309db0cb5c29Dante Russo} 57834ee09551764b045fdc02df754157473125edf60Kevin Tang/*=========================================================================== 57934ee09551764b045fdc02df754157473125edf60Kevin TangFUNCTION loc_get_extension 58034ee09551764b045fdc02df754157473125edf60Kevin Tang 58134ee09551764b045fdc02df754157473125edf60Kevin TangDESCRIPTION 58234ee09551764b045fdc02df754157473125edf60Kevin Tang Get the gps extension to support XTRA. 58334ee09551764b045fdc02df754157473125edf60Kevin Tang 58434ee09551764b045fdc02df754157473125edf60Kevin TangDEPENDENCIES 58534ee09551764b045fdc02df754157473125edf60Kevin Tang N/A 58634ee09551764b045fdc02df754157473125edf60Kevin Tang 58734ee09551764b045fdc02df754157473125edf60Kevin TangRETURN VALUE 58834ee09551764b045fdc02df754157473125edf60Kevin Tang The GPS extension interface. 58934ee09551764b045fdc02df754157473125edf60Kevin Tang 59034ee09551764b045fdc02df754157473125edf60Kevin TangSIDE EFFECTS 59134ee09551764b045fdc02df754157473125edf60Kevin Tang N/A 59234ee09551764b045fdc02df754157473125edf60Kevin Tang 59334ee09551764b045fdc02df754157473125edf60Kevin Tang===========================================================================*/ 594e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russoconst void* loc_get_extension(const char* name) 59534ee09551764b045fdc02df754157473125edf60Kevin Tang{ 59634ee09551764b045fdc02df754157473125edf60Kevin Tang ENTRY_LOG(); 59734ee09551764b045fdc02df754157473125edf60Kevin Tang const void* ret_val = NULL; 59834ee09551764b045fdc02df754157473125edf60Kevin Tang 599e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo LOC_LOGD("%s:%d] For Interface = %s\n",__func__, __LINE__, name); 60034ee09551764b045fdc02df754157473125edf60Kevin Tang if (strcmp(name, GPS_XTRA_INTERFACE) == 0) 60134ee09551764b045fdc02df754157473125edf60Kevin Tang { 602e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo ret_val = &sLocEngXTRAInterface; 60334ee09551764b045fdc02df754157473125edf60Kevin Tang } 60434ee09551764b045fdc02df754157473125edf60Kevin Tang else if (strcmp(name, AGPS_INTERFACE) == 0) 60534ee09551764b045fdc02df754157473125edf60Kevin Tang { 60647ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo ret_val = &sLocEngAGpsInterface; 60734ee09551764b045fdc02df754157473125edf60Kevin Tang } 60834ee09551764b045fdc02df754157473125edf60Kevin Tang else if (strcmp(name, GPS_NI_INTERFACE) == 0) 60934ee09551764b045fdc02df754157473125edf60Kevin Tang { 610e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo ret_val = &sLocEngNiInterface; 61134ee09551764b045fdc02df754157473125edf60Kevin Tang } 61234ee09551764b045fdc02df754157473125edf60Kevin Tang else if (strcmp(name, AGPS_RIL_INTERFACE) == 0) 61334ee09551764b045fdc02df754157473125edf60Kevin Tang { 614e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo char baseband[PROPERTY_VALUE_MAX]; 615e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo property_get("ro.baseband", baseband, "msm"); 616e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo if (strcmp(baseband, "csfb") == 0) 617e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo { 618e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo ret_val = &sLocEngAGpsRilInterface; 619e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo } 62034ee09551764b045fdc02df754157473125edf60Kevin Tang } 62123d1e163c382baf6f395af46b34d309db0cb5c29Dante Russo else if (strcmp(name, GPS_GEOFENCING_INTERFACE) == 0) 62223d1e163c382baf6f395af46b34d309db0cb5c29Dante Russo { 623e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo if ((gps_conf.CAPABILITIES | GPS_CAPABILITY_GEOFENCING) == gps_conf.CAPABILITIES ){ 624e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo ret_val = get_geofence_interface(); 625e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo } 62634ee09551764b045fdc02df754157473125edf60Kevin Tang } 6271d4940024c54e7d1e63f73edd5054a18a7a01b63Dante Russo else if (strcmp(name, SUPL_CERTIFICATE_INTERFACE) == 0) 6281d4940024c54e7d1e63f73edd5054a18a7a01b63Dante Russo { 6291d4940024c54e7d1e63f73edd5054a18a7a01b63Dante Russo ret_val = &sLocEngAGpsCertInterface; 6301d4940024c54e7d1e63f73edd5054a18a7a01b63Dante Russo } 631fe660078f05f448ececb0b1170ecd79e600db440Kevin Tang else if (strcmp(name, GNSS_CONFIGURATION_INTERFACE) == 0) 632fe660078f05f448ececb0b1170ecd79e600db440Kevin Tang { 633fe660078f05f448ececb0b1170ecd79e600db440Kevin Tang ret_val = &sLocEngConfigInterface; 634fe660078f05f448ececb0b1170ecd79e600db440Kevin Tang } 6358aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava else if (strcmp(name, GPS_MEASUREMENT_INTERFACE) == 0) 6368aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava { 6378aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava ret_val = &sLocEngGpsMeasurementInterface; 6388aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava } 63934ee09551764b045fdc02df754157473125edf60Kevin Tang else 64034ee09551764b045fdc02df754157473125edf60Kevin Tang { 64134ee09551764b045fdc02df754157473125edf60Kevin Tang LOC_LOGE ("get_extension: Invalid interface passed in\n"); 64234ee09551764b045fdc02df754157473125edf60Kevin Tang } 64334ee09551764b045fdc02df754157473125edf60Kevin Tang EXIT_LOG(%p, ret_val); 64434ee09551764b045fdc02df754157473125edf60Kevin Tang return ret_val; 64534ee09551764b045fdc02df754157473125edf60Kevin Tang} 64634ee09551764b045fdc02df754157473125edf60Kevin Tang 64734ee09551764b045fdc02df754157473125edf60Kevin Tang/*=========================================================================== 64834ee09551764b045fdc02df754157473125edf60Kevin TangFUNCTION loc_agps_init 64934ee09551764b045fdc02df754157473125edf60Kevin Tang 65034ee09551764b045fdc02df754157473125edf60Kevin TangDESCRIPTION 65134ee09551764b045fdc02df754157473125edf60Kevin Tang Initialize the AGps interface. 65234ee09551764b045fdc02df754157473125edf60Kevin Tang 65334ee09551764b045fdc02df754157473125edf60Kevin TangDEPENDENCIES 65434ee09551764b045fdc02df754157473125edf60Kevin Tang NONE 65534ee09551764b045fdc02df754157473125edf60Kevin Tang 65634ee09551764b045fdc02df754157473125edf60Kevin TangRETURN VALUE 65734ee09551764b045fdc02df754157473125edf60Kevin Tang 0 65834ee09551764b045fdc02df754157473125edf60Kevin Tang 65934ee09551764b045fdc02df754157473125edf60Kevin TangSIDE EFFECTS 66034ee09551764b045fdc02df754157473125edf60Kevin Tang N/A 66134ee09551764b045fdc02df754157473125edf60Kevin Tang 66234ee09551764b045fdc02df754157473125edf60Kevin Tang===========================================================================*/ 66334ee09551764b045fdc02df754157473125edf60Kevin Tangstatic void loc_agps_init(AGpsCallbacks* callbacks) 66434ee09551764b045fdc02df754157473125edf60Kevin Tang{ 66534ee09551764b045fdc02df754157473125edf60Kevin Tang ENTRY_LOG(); 666e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo loc_eng_agps_init(loc_afw_data, (AGpsExtCallbacks*)callbacks); 66734ee09551764b045fdc02df754157473125edf60Kevin Tang EXIT_LOG(%s, VOID_RET); 66834ee09551764b045fdc02df754157473125edf60Kevin Tang} 66934ee09551764b045fdc02df754157473125edf60Kevin Tang 67034ee09551764b045fdc02df754157473125edf60Kevin Tang/*=========================================================================== 67134ee09551764b045fdc02df754157473125edf60Kevin TangFUNCTION loc_agps_open 67234ee09551764b045fdc02df754157473125edf60Kevin Tang 67334ee09551764b045fdc02df754157473125edf60Kevin TangDESCRIPTION 67434ee09551764b045fdc02df754157473125edf60Kevin Tang This function is called when on-demand data connection opening is successful. 67534ee09551764b045fdc02df754157473125edf60Kevin TangIt should inform ARM 9 about the data open result. 67634ee09551764b045fdc02df754157473125edf60Kevin Tang 67734ee09551764b045fdc02df754157473125edf60Kevin TangDEPENDENCIES 67834ee09551764b045fdc02df754157473125edf60Kevin Tang NONE 67934ee09551764b045fdc02df754157473125edf60Kevin Tang 68034ee09551764b045fdc02df754157473125edf60Kevin TangRETURN VALUE 68134ee09551764b045fdc02df754157473125edf60Kevin Tang 0 68234ee09551764b045fdc02df754157473125edf60Kevin Tang 68334ee09551764b045fdc02df754157473125edf60Kevin TangSIDE EFFECTS 68434ee09551764b045fdc02df754157473125edf60Kevin Tang N/A 68534ee09551764b045fdc02df754157473125edf60Kevin Tang 68634ee09551764b045fdc02df754157473125edf60Kevin Tang===========================================================================*/ 68734ee09551764b045fdc02df754157473125edf60Kevin Tangstatic int loc_agps_open(const char* apn) 68834ee09551764b045fdc02df754157473125edf60Kevin Tang{ 68934ee09551764b045fdc02df754157473125edf60Kevin Tang ENTRY_LOG(); 690e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo AGpsType agpsType = AGPS_TYPE_SUPL; 691e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo AGpsBearerType bearerType = AGPS_APN_BEARER_IPV4; 692e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo int ret_val = loc_eng_agps_open(loc_afw_data, agpsType, apn, bearerType); 69334ee09551764b045fdc02df754157473125edf60Kevin Tang 69434ee09551764b045fdc02df754157473125edf60Kevin Tang EXIT_LOG(%d, ret_val); 69534ee09551764b045fdc02df754157473125edf60Kevin Tang return ret_val; 69634ee09551764b045fdc02df754157473125edf60Kevin Tang} 69734ee09551764b045fdc02df754157473125edf60Kevin Tang 69834ee09551764b045fdc02df754157473125edf60Kevin Tang/*=========================================================================== 6990d00b9e0690547ad06eef43a5f1c77a31e8885dcDante RussoFUNCTION loc_agps_open_with_apniptype 7000d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo 7010d00b9e0690547ad06eef43a5f1c77a31e8885dcDante RussoDESCRIPTION 7020d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo This function is called when on-demand data connection opening is successful. 7030d00b9e0690547ad06eef43a5f1c77a31e8885dcDante RussoIt should inform ARM 9 about the data open result. 7040d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo 7050d00b9e0690547ad06eef43a5f1c77a31e8885dcDante RussoDEPENDENCIES 7060d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo NONE 7070d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo 7080d00b9e0690547ad06eef43a5f1c77a31e8885dcDante RussoRETURN VALUE 7090d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo 0 7100d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo 7110d00b9e0690547ad06eef43a5f1c77a31e8885dcDante RussoSIDE EFFECTS 7120d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo N/A 7130d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo 7140d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo===========================================================================*/ 7150d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russostatic int loc_agps_open_with_apniptype(const char* apn, ApnIpType apnIpType) 7160d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo{ 7170d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo ENTRY_LOG(); 7180d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo AGpsType agpsType = AGPS_TYPE_SUPL; 7190d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo AGpsBearerType bearerType; 7200d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo 7210d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo switch (apnIpType) { 7220d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo case APN_IP_IPV4: 7230d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo bearerType = AGPS_APN_BEARER_IPV4; 7240d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo break; 7250d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo case APN_IP_IPV6: 7260d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo bearerType = AGPS_APN_BEARER_IPV6; 7270d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo break; 7280d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo case APN_IP_IPV4V6: 7290d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo bearerType = AGPS_APN_BEARER_IPV4V6; 7300d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo break; 7310d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo default: 732d7b1204cc565f482a6067953cebe25b16cc2a148Dante Russo bearerType = AGPS_APN_BEARER_IPV4; 7330d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo break; 7340d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo } 7350d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo 7360d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo int ret_val = loc_eng_agps_open(loc_afw_data, agpsType, apn, bearerType); 7370d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo 7380d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo EXIT_LOG(%d, ret_val); 7390d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo return ret_val; 7400d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo} 7410d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo 7420d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo/*=========================================================================== 74334ee09551764b045fdc02df754157473125edf60Kevin TangFUNCTION loc_agps_closed 74434ee09551764b045fdc02df754157473125edf60Kevin Tang 74534ee09551764b045fdc02df754157473125edf60Kevin TangDESCRIPTION 74634ee09551764b045fdc02df754157473125edf60Kevin Tang This function is called when on-demand data connection closing is done. 74734ee09551764b045fdc02df754157473125edf60Kevin TangIt should inform ARM 9 about the data close result. 74834ee09551764b045fdc02df754157473125edf60Kevin Tang 74934ee09551764b045fdc02df754157473125edf60Kevin TangDEPENDENCIES 75034ee09551764b045fdc02df754157473125edf60Kevin Tang NONE 75134ee09551764b045fdc02df754157473125edf60Kevin Tang 75234ee09551764b045fdc02df754157473125edf60Kevin TangRETURN VALUE 75334ee09551764b045fdc02df754157473125edf60Kevin Tang 0 75434ee09551764b045fdc02df754157473125edf60Kevin Tang 75534ee09551764b045fdc02df754157473125edf60Kevin TangSIDE EFFECTS 75634ee09551764b045fdc02df754157473125edf60Kevin Tang N/A 75734ee09551764b045fdc02df754157473125edf60Kevin Tang 75834ee09551764b045fdc02df754157473125edf60Kevin Tang===========================================================================*/ 75934ee09551764b045fdc02df754157473125edf60Kevin Tangstatic int loc_agps_closed() 76034ee09551764b045fdc02df754157473125edf60Kevin Tang{ 76134ee09551764b045fdc02df754157473125edf60Kevin Tang ENTRY_LOG(); 762e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo AGpsType agpsType = AGPS_TYPE_SUPL; 763e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo int ret_val = loc_eng_agps_closed(loc_afw_data, agpsType); 76434ee09551764b045fdc02df754157473125edf60Kevin Tang 76534ee09551764b045fdc02df754157473125edf60Kevin Tang EXIT_LOG(%d, ret_val); 76634ee09551764b045fdc02df754157473125edf60Kevin Tang return ret_val; 76734ee09551764b045fdc02df754157473125edf60Kevin Tang} 76834ee09551764b045fdc02df754157473125edf60Kevin Tang 76934ee09551764b045fdc02df754157473125edf60Kevin Tang/*=========================================================================== 77034ee09551764b045fdc02df754157473125edf60Kevin TangFUNCTION loc_agps_open_failed 77134ee09551764b045fdc02df754157473125edf60Kevin Tang 77234ee09551764b045fdc02df754157473125edf60Kevin TangDESCRIPTION 77334ee09551764b045fdc02df754157473125edf60Kevin Tang This function is called when on-demand data connection opening has failed. 77434ee09551764b045fdc02df754157473125edf60Kevin TangIt should inform ARM 9 about the data open result. 77534ee09551764b045fdc02df754157473125edf60Kevin Tang 77634ee09551764b045fdc02df754157473125edf60Kevin TangDEPENDENCIES 77734ee09551764b045fdc02df754157473125edf60Kevin Tang NONE 77834ee09551764b045fdc02df754157473125edf60Kevin Tang 77934ee09551764b045fdc02df754157473125edf60Kevin TangRETURN VALUE 78034ee09551764b045fdc02df754157473125edf60Kevin Tang 0 78134ee09551764b045fdc02df754157473125edf60Kevin Tang 78234ee09551764b045fdc02df754157473125edf60Kevin TangSIDE EFFECTS 78334ee09551764b045fdc02df754157473125edf60Kevin Tang N/A 78434ee09551764b045fdc02df754157473125edf60Kevin Tang 78534ee09551764b045fdc02df754157473125edf60Kevin Tang===========================================================================*/ 78634ee09551764b045fdc02df754157473125edf60Kevin Tangint loc_agps_open_failed() 78734ee09551764b045fdc02df754157473125edf60Kevin Tang{ 78834ee09551764b045fdc02df754157473125edf60Kevin Tang ENTRY_LOG(); 789e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo AGpsType agpsType = AGPS_TYPE_SUPL; 790e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo int ret_val = loc_eng_agps_open_failed(loc_afw_data, agpsType); 79134ee09551764b045fdc02df754157473125edf60Kevin Tang 79234ee09551764b045fdc02df754157473125edf60Kevin Tang EXIT_LOG(%d, ret_val); 79334ee09551764b045fdc02df754157473125edf60Kevin Tang return ret_val; 79434ee09551764b045fdc02df754157473125edf60Kevin Tang} 79534ee09551764b045fdc02df754157473125edf60Kevin Tang 79634ee09551764b045fdc02df754157473125edf60Kevin Tang/*=========================================================================== 79734ee09551764b045fdc02df754157473125edf60Kevin TangFUNCTION loc_agps_set_server 79834ee09551764b045fdc02df754157473125edf60Kevin Tang 79934ee09551764b045fdc02df754157473125edf60Kevin TangDESCRIPTION 80034ee09551764b045fdc02df754157473125edf60Kevin Tang If loc_eng_set_server is called before loc_eng_init, it doesn't work. This 80134ee09551764b045fdc02df754157473125edf60Kevin Tang proxy buffers server settings and calls loc_eng_set_server when the client is 80234ee09551764b045fdc02df754157473125edf60Kevin Tang open. 80334ee09551764b045fdc02df754157473125edf60Kevin Tang 80434ee09551764b045fdc02df754157473125edf60Kevin TangDEPENDENCIES 80534ee09551764b045fdc02df754157473125edf60Kevin Tang NONE 80634ee09551764b045fdc02df754157473125edf60Kevin Tang 80734ee09551764b045fdc02df754157473125edf60Kevin TangRETURN VALUE 80834ee09551764b045fdc02df754157473125edf60Kevin Tang 0 80934ee09551764b045fdc02df754157473125edf60Kevin Tang 81034ee09551764b045fdc02df754157473125edf60Kevin TangSIDE EFFECTS 81134ee09551764b045fdc02df754157473125edf60Kevin Tang N/A 81234ee09551764b045fdc02df754157473125edf60Kevin Tang 81334ee09551764b045fdc02df754157473125edf60Kevin Tang===========================================================================*/ 81434ee09551764b045fdc02df754157473125edf60Kevin Tangstatic int loc_agps_set_server(AGpsType type, const char* hostname, int port) 81534ee09551764b045fdc02df754157473125edf60Kevin Tang{ 81634ee09551764b045fdc02df754157473125edf60Kevin Tang ENTRY_LOG(); 81734ee09551764b045fdc02df754157473125edf60Kevin Tang LocServerType serverType; 81834ee09551764b045fdc02df754157473125edf60Kevin Tang switch (type) { 81934ee09551764b045fdc02df754157473125edf60Kevin Tang case AGPS_TYPE_SUPL: 82034ee09551764b045fdc02df754157473125edf60Kevin Tang serverType = LOC_AGPS_SUPL_SERVER; 82134ee09551764b045fdc02df754157473125edf60Kevin Tang break; 82234ee09551764b045fdc02df754157473125edf60Kevin Tang case AGPS_TYPE_C2K: 82334ee09551764b045fdc02df754157473125edf60Kevin Tang serverType = LOC_AGPS_CDMA_PDE_SERVER; 82434ee09551764b045fdc02df754157473125edf60Kevin Tang break; 825e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo default: 826e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo serverType = LOC_AGPS_SUPL_SERVER; 82734ee09551764b045fdc02df754157473125edf60Kevin Tang } 82834ee09551764b045fdc02df754157473125edf60Kevin Tang int ret_val = loc_eng_set_server_proxy(loc_afw_data, serverType, hostname, port); 82934ee09551764b045fdc02df754157473125edf60Kevin Tang 83034ee09551764b045fdc02df754157473125edf60Kevin Tang EXIT_LOG(%d, ret_val); 83134ee09551764b045fdc02df754157473125edf60Kevin Tang return ret_val; 83234ee09551764b045fdc02df754157473125edf60Kevin Tang} 83334ee09551764b045fdc02df754157473125edf60Kevin Tang 83434ee09551764b045fdc02df754157473125edf60Kevin Tang/*=========================================================================== 835e14a6c846df2ce4bb1847e4250991f7c52fd793dDante RussoFUNCTIONf571 836e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo loc_xtra_init 83734ee09551764b045fdc02df754157473125edf60Kevin Tang 83834ee09551764b045fdc02df754157473125edf60Kevin TangDESCRIPTION 83934ee09551764b045fdc02df754157473125edf60Kevin Tang Initialize XTRA module. 84034ee09551764b045fdc02df754157473125edf60Kevin Tang 84134ee09551764b045fdc02df754157473125edf60Kevin TangDEPENDENCIES 84234ee09551764b045fdc02df754157473125edf60Kevin Tang None 84334ee09551764b045fdc02df754157473125edf60Kevin Tang 84434ee09551764b045fdc02df754157473125edf60Kevin TangRETURN VALUE 84534ee09551764b045fdc02df754157473125edf60Kevin Tang 0: success 84634ee09551764b045fdc02df754157473125edf60Kevin Tang 84734ee09551764b045fdc02df754157473125edf60Kevin TangSIDE EFFECTS 84834ee09551764b045fdc02df754157473125edf60Kevin Tang N/A 84934ee09551764b045fdc02df754157473125edf60Kevin Tang 85034ee09551764b045fdc02df754157473125edf60Kevin Tang===========================================================================*/ 85134ee09551764b045fdc02df754157473125edf60Kevin Tangstatic int loc_xtra_init(GpsXtraCallbacks* callbacks) 85234ee09551764b045fdc02df754157473125edf60Kevin Tang{ 85334ee09551764b045fdc02df754157473125edf60Kevin Tang ENTRY_LOG(); 8540c7fdf015bfdb33b14a990b280c38386cb8e1f9cVineeta Srivastava GpsXtraExtCallbacks extCallbacks; 8550c7fdf015bfdb33b14a990b280c38386cb8e1f9cVineeta Srivastava memset(&extCallbacks, 0, sizeof(extCallbacks)); 8560c7fdf015bfdb33b14a990b280c38386cb8e1f9cVineeta Srivastava extCallbacks.download_request_cb = callbacks->download_request_cb; 8570c7fdf015bfdb33b14a990b280c38386cb8e1f9cVineeta Srivastava int ret_val = loc_eng_xtra_init(loc_afw_data, &extCallbacks); 85834ee09551764b045fdc02df754157473125edf60Kevin Tang 85934ee09551764b045fdc02df754157473125edf60Kevin Tang EXIT_LOG(%d, ret_val); 86034ee09551764b045fdc02df754157473125edf60Kevin Tang return ret_val; 86134ee09551764b045fdc02df754157473125edf60Kevin Tang} 86234ee09551764b045fdc02df754157473125edf60Kevin Tang 86334ee09551764b045fdc02df754157473125edf60Kevin Tang 86434ee09551764b045fdc02df754157473125edf60Kevin Tang/*=========================================================================== 86534ee09551764b045fdc02df754157473125edf60Kevin TangFUNCTION loc_xtra_inject_data 86634ee09551764b045fdc02df754157473125edf60Kevin Tang 86734ee09551764b045fdc02df754157473125edf60Kevin TangDESCRIPTION 86834ee09551764b045fdc02df754157473125edf60Kevin Tang Initialize XTRA module. 86934ee09551764b045fdc02df754157473125edf60Kevin Tang 87034ee09551764b045fdc02df754157473125edf60Kevin TangDEPENDENCIES 87134ee09551764b045fdc02df754157473125edf60Kevin Tang None 87234ee09551764b045fdc02df754157473125edf60Kevin Tang 87334ee09551764b045fdc02df754157473125edf60Kevin TangRETURN VALUE 87434ee09551764b045fdc02df754157473125edf60Kevin Tang 0: success 87534ee09551764b045fdc02df754157473125edf60Kevin Tang 87634ee09551764b045fdc02df754157473125edf60Kevin TangSIDE EFFECTS 87734ee09551764b045fdc02df754157473125edf60Kevin Tang N/A 87834ee09551764b045fdc02df754157473125edf60Kevin Tang 87934ee09551764b045fdc02df754157473125edf60Kevin Tang===========================================================================*/ 88034ee09551764b045fdc02df754157473125edf60Kevin Tangstatic int loc_xtra_inject_data(char* data, int length) 88134ee09551764b045fdc02df754157473125edf60Kevin Tang{ 88234ee09551764b045fdc02df754157473125edf60Kevin Tang ENTRY_LOG(); 883bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo int ret_val = -1; 884bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo if( (data != NULL) && ((unsigned int)length <= XTRA_DATA_MAX_SIZE)) 885bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo ret_val = loc_eng_xtra_inject_data(loc_afw_data, data, length); 886bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo else 887bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo LOC_LOGE("%s, Could not inject XTRA data. Buffer address: %p, length: %d", 888bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo __func__, data, length); 88934ee09551764b045fdc02df754157473125edf60Kevin Tang EXIT_LOG(%d, ret_val); 89034ee09551764b045fdc02df754157473125edf60Kevin Tang return ret_val; 89134ee09551764b045fdc02df754157473125edf60Kevin Tang} 89234ee09551764b045fdc02df754157473125edf60Kevin Tang 89334ee09551764b045fdc02df754157473125edf60Kevin Tang/*=========================================================================== 8948aac9d301fc5aa83071492803f4335b73f2604e3Vineeta SrivastavaFUNCTION loc_gps_measurement_init 8958aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava 8968aac9d301fc5aa83071492803f4335b73f2604e3Vineeta SrivastavaDESCRIPTION 8978aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava This function initializes the gps measurement interface 8988aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava 8998aac9d301fc5aa83071492803f4335b73f2604e3Vineeta SrivastavaDEPENDENCIES 9008aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava NONE 9018aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava 9028aac9d301fc5aa83071492803f4335b73f2604e3Vineeta SrivastavaRETURN VALUE 9038aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava None 9048aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava 9058aac9d301fc5aa83071492803f4335b73f2604e3Vineeta SrivastavaSIDE EFFECTS 9068aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava N/A 9078aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava 9088aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava===========================================================================*/ 9098aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastavastatic int loc_gps_measurement_init(GpsMeasurementCallbacks* callbacks) 9108aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava{ 9118aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava ENTRY_LOG(); 9128aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava int ret_val = loc_eng_gps_measurement_init(loc_afw_data, 9138aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava callbacks); 9148aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava 9158aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava EXIT_LOG(%d, ret_val); 9168aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava return ret_val; 9178aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava} 9188aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava 9198aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava/*=========================================================================== 9208aac9d301fc5aa83071492803f4335b73f2604e3Vineeta SrivastavaFUNCTION loc_gps_measurement_close 9218aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava 9228aac9d301fc5aa83071492803f4335b73f2604e3Vineeta SrivastavaDESCRIPTION 9238aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava This function closes the gps measurement interface 9248aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava 9258aac9d301fc5aa83071492803f4335b73f2604e3Vineeta SrivastavaDEPENDENCIES 9268aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava NONE 9278aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava 9288aac9d301fc5aa83071492803f4335b73f2604e3Vineeta SrivastavaRETURN VALUE 9298aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava None 9308aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava 9318aac9d301fc5aa83071492803f4335b73f2604e3Vineeta SrivastavaSIDE EFFECTS 9328aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava N/A 9338aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava 9348aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava===========================================================================*/ 9358aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastavastatic void loc_gps_measurement_close() 9368aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava{ 9378aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava ENTRY_LOG(); 9388aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava loc_eng_gps_measurement_close(loc_afw_data); 9398aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava 9408aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava EXIT_LOG(%s, VOID_RET); 9418aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava} 9428aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava 9438aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava/*=========================================================================== 94434ee09551764b045fdc02df754157473125edf60Kevin TangFUNCTION loc_ni_init 94534ee09551764b045fdc02df754157473125edf60Kevin Tang 94634ee09551764b045fdc02df754157473125edf60Kevin TangDESCRIPTION 94734ee09551764b045fdc02df754157473125edf60Kevin Tang This function initializes the NI interface 94834ee09551764b045fdc02df754157473125edf60Kevin Tang 94934ee09551764b045fdc02df754157473125edf60Kevin TangDEPENDENCIES 95034ee09551764b045fdc02df754157473125edf60Kevin Tang NONE 95134ee09551764b045fdc02df754157473125edf60Kevin Tang 95234ee09551764b045fdc02df754157473125edf60Kevin TangRETURN VALUE 95334ee09551764b045fdc02df754157473125edf60Kevin Tang None 95434ee09551764b045fdc02df754157473125edf60Kevin Tang 95534ee09551764b045fdc02df754157473125edf60Kevin TangSIDE EFFECTS 95634ee09551764b045fdc02df754157473125edf60Kevin Tang N/A 95734ee09551764b045fdc02df754157473125edf60Kevin Tang 95834ee09551764b045fdc02df754157473125edf60Kevin Tang===========================================================================*/ 95934ee09551764b045fdc02df754157473125edf60Kevin Tangvoid loc_ni_init(GpsNiCallbacks *callbacks) 96034ee09551764b045fdc02df754157473125edf60Kevin Tang{ 96134ee09551764b045fdc02df754157473125edf60Kevin Tang ENTRY_LOG(); 962e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo loc_eng_ni_init(loc_afw_data,(GpsNiExtCallbacks*) callbacks); 96334ee09551764b045fdc02df754157473125edf60Kevin Tang EXIT_LOG(%s, VOID_RET); 96434ee09551764b045fdc02df754157473125edf60Kevin Tang} 96534ee09551764b045fdc02df754157473125edf60Kevin Tang 96634ee09551764b045fdc02df754157473125edf60Kevin Tang/*=========================================================================== 96734ee09551764b045fdc02df754157473125edf60Kevin TangFUNCTION loc_ni_respond 96834ee09551764b045fdc02df754157473125edf60Kevin Tang 96934ee09551764b045fdc02df754157473125edf60Kevin TangDESCRIPTION 97034ee09551764b045fdc02df754157473125edf60Kevin Tang This function sends an NI respond to the modem processor 97134ee09551764b045fdc02df754157473125edf60Kevin Tang 97234ee09551764b045fdc02df754157473125edf60Kevin TangDEPENDENCIES 97334ee09551764b045fdc02df754157473125edf60Kevin Tang NONE 97434ee09551764b045fdc02df754157473125edf60Kevin Tang 97534ee09551764b045fdc02df754157473125edf60Kevin TangRETURN VALUE 97634ee09551764b045fdc02df754157473125edf60Kevin Tang None 97734ee09551764b045fdc02df754157473125edf60Kevin Tang 97834ee09551764b045fdc02df754157473125edf60Kevin TangSIDE EFFECTS 97934ee09551764b045fdc02df754157473125edf60Kevin Tang N/A 98034ee09551764b045fdc02df754157473125edf60Kevin Tang 98134ee09551764b045fdc02df754157473125edf60Kevin Tang===========================================================================*/ 98234ee09551764b045fdc02df754157473125edf60Kevin Tangvoid loc_ni_respond(int notif_id, GpsUserResponseType user_response) 98334ee09551764b045fdc02df754157473125edf60Kevin Tang{ 98434ee09551764b045fdc02df754157473125edf60Kevin Tang ENTRY_LOG(); 98534ee09551764b045fdc02df754157473125edf60Kevin Tang loc_eng_ni_respond(loc_afw_data, notif_id, user_response); 98634ee09551764b045fdc02df754157473125edf60Kevin Tang EXIT_LOG(%s, VOID_RET); 98734ee09551764b045fdc02df754157473125edf60Kevin Tang} 98834ee09551764b045fdc02df754157473125edf60Kevin Tang 98934ee09551764b045fdc02df754157473125edf60Kevin Tang// Below stub functions are members of sLocEngAGpsRilInterface 99034ee09551764b045fdc02df754157473125edf60Kevin Tangstatic void loc_agps_ril_init( AGpsRilCallbacks* callbacks ) {} 99134ee09551764b045fdc02df754157473125edf60Kevin Tangstatic void loc_agps_ril_set_ref_location(const AGpsRefLocation *agps_reflocation, size_t sz_struct) {} 99234ee09551764b045fdc02df754157473125edf60Kevin Tangstatic void loc_agps_ril_set_set_id(AGpsSetIDType type, const char* setid) {} 99334ee09551764b045fdc02df754157473125edf60Kevin Tangstatic void loc_agps_ril_ni_message(uint8_t *msg, size_t len) {} 99434ee09551764b045fdc02df754157473125edf60Kevin Tangstatic void loc_agps_ril_update_network_state(int connected, int type, int roaming, const char* extra_info) {} 99534ee09551764b045fdc02df754157473125edf60Kevin Tang 99634ee09551764b045fdc02df754157473125edf60Kevin Tang/*=========================================================================== 99734ee09551764b045fdc02df754157473125edf60Kevin TangFUNCTION loc_agps_ril_update_network_availability 99834ee09551764b045fdc02df754157473125edf60Kevin Tang 99934ee09551764b045fdc02df754157473125edf60Kevin TangDESCRIPTION 100034ee09551764b045fdc02df754157473125edf60Kevin Tang Sets data call allow vs disallow flag to modem 100134ee09551764b045fdc02df754157473125edf60Kevin Tang This is the only member of sLocEngAGpsRilInterface implemented. 100234ee09551764b045fdc02df754157473125edf60Kevin Tang 100334ee09551764b045fdc02df754157473125edf60Kevin TangDEPENDENCIES 100434ee09551764b045fdc02df754157473125edf60Kevin Tang None 100534ee09551764b045fdc02df754157473125edf60Kevin Tang 100634ee09551764b045fdc02df754157473125edf60Kevin TangRETURN VALUE 100734ee09551764b045fdc02df754157473125edf60Kevin Tang 0: success 100834ee09551764b045fdc02df754157473125edf60Kevin Tang 100934ee09551764b045fdc02df754157473125edf60Kevin TangSIDE EFFECTS 101034ee09551764b045fdc02df754157473125edf60Kevin Tang N/A 101134ee09551764b045fdc02df754157473125edf60Kevin Tang 101234ee09551764b045fdc02df754157473125edf60Kevin Tang===========================================================================*/ 101334ee09551764b045fdc02df754157473125edf60Kevin Tangstatic void loc_agps_ril_update_network_availability(int available, const char* apn) 101434ee09551764b045fdc02df754157473125edf60Kevin Tang{ 101534ee09551764b045fdc02df754157473125edf60Kevin Tang ENTRY_LOG(); 101634ee09551764b045fdc02df754157473125edf60Kevin Tang loc_eng_agps_ril_update_network_availability(loc_afw_data, available, apn); 101734ee09551764b045fdc02df754157473125edf60Kevin Tang EXIT_LOG(%s, VOID_RET); 101834ee09551764b045fdc02df754157473125edf60Kevin Tang} 101934ee09551764b045fdc02df754157473125edf60Kevin Tang 10201d4940024c54e7d1e63f73edd5054a18a7a01b63Dante Russostatic int loc_agps_install_certificates(const DerEncodedCertificate* certificates, 10211d4940024c54e7d1e63f73edd5054a18a7a01b63Dante Russo size_t length) 10221d4940024c54e7d1e63f73edd5054a18a7a01b63Dante Russo{ 10231d4940024c54e7d1e63f73edd5054a18a7a01b63Dante Russo ENTRY_LOG(); 10241d4940024c54e7d1e63f73edd5054a18a7a01b63Dante Russo int ret_val = loc_eng_agps_install_certificates(loc_afw_data, certificates, length); 10251d4940024c54e7d1e63f73edd5054a18a7a01b63Dante Russo EXIT_LOG(%d, ret_val); 10261d4940024c54e7d1e63f73edd5054a18a7a01b63Dante Russo return ret_val; 10271d4940024c54e7d1e63f73edd5054a18a7a01b63Dante Russo} 10281d4940024c54e7d1e63f73edd5054a18a7a01b63Dante Russostatic int loc_agps_revoke_certificates(const Sha1CertificateFingerprint* fingerprints, 10291d4940024c54e7d1e63f73edd5054a18a7a01b63Dante Russo size_t length) 10301d4940024c54e7d1e63f73edd5054a18a7a01b63Dante Russo{ 10311d4940024c54e7d1e63f73edd5054a18a7a01b63Dante Russo ENTRY_LOG(); 1032bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo LOC_LOGE("%s:%d]: agps_revoke_certificates not supported"); 10331d4940024c54e7d1e63f73edd5054a18a7a01b63Dante Russo int ret_val = AGPS_CERTIFICATE_ERROR_GENERIC; 10341d4940024c54e7d1e63f73edd5054a18a7a01b63Dante Russo EXIT_LOG(%d, ret_val); 10351d4940024c54e7d1e63f73edd5054a18a7a01b63Dante Russo return ret_val; 10361d4940024c54e7d1e63f73edd5054a18a7a01b63Dante Russo} 10371d4940024c54e7d1e63f73edd5054a18a7a01b63Dante Russo 1038fe660078f05f448ececb0b1170ecd79e600db440Kevin Tangstatic void loc_configuration_update(const char* config_data, int32_t length) 1039fe660078f05f448ececb0b1170ecd79e600db440Kevin Tang{ 1040fe660078f05f448ececb0b1170ecd79e600db440Kevin Tang ENTRY_LOG(); 1041fe660078f05f448ececb0b1170ecd79e600db440Kevin Tang loc_eng_configuration_update(loc_afw_data, config_data, length); 10420c7fdf015bfdb33b14a990b280c38386cb8e1f9cVineeta Srivastava switch (sGnssType) 10430c7fdf015bfdb33b14a990b280c38386cb8e1f9cVineeta Srivastava { 10440c7fdf015bfdb33b14a990b280c38386cb8e1f9cVineeta Srivastava case GNSS_GSS: 10450c7fdf015bfdb33b14a990b280c38386cb8e1f9cVineeta Srivastava case GNSS_AUTO: 10460c7fdf015bfdb33b14a990b280c38386cb8e1f9cVineeta Srivastava case GNSS_QCA1530: 10470c7fdf015bfdb33b14a990b280c38386cb8e1f9cVineeta Srivastava //APQ 10480c7fdf015bfdb33b14a990b280c38386cb8e1f9cVineeta Srivastava gps_conf.CAPABILITIES &= ~(GPS_CAPABILITY_MSA | GPS_CAPABILITY_MSB); 10490c7fdf015bfdb33b14a990b280c38386cb8e1f9cVineeta Srivastava break; 10500c7fdf015bfdb33b14a990b280c38386cb8e1f9cVineeta Srivastava } 1051fe660078f05f448ececb0b1170ecd79e600db440Kevin Tang EXIT_LOG(%s, VOID_RET); 1052fe660078f05f448ececb0b1170ecd79e600db440Kevin Tang} 1053fe660078f05f448ececb0b1170ecd79e600db440Kevin Tang 1054e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russostatic void local_loc_cb(UlpLocation* location, void* locExt) 105534ee09551764b045fdc02df754157473125edf60Kevin Tang{ 105634ee09551764b045fdc02df754157473125edf60Kevin Tang ENTRY_LOG(); 1057e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo if (NULL != location) { 105834ee09551764b045fdc02df754157473125edf60Kevin Tang CALLBACK_LOG_CALLFLOW("location_cb - from", %d, location->position_source); 1059e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo 1060e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo if (NULL != gps_loc_cb) { 1061e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo gps_loc_cb(&location->gpsLocation); 1062e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo } 106334ee09551764b045fdc02df754157473125edf60Kevin Tang } 106434ee09551764b045fdc02df754157473125edf60Kevin Tang EXIT_LOG(%s, VOID_RET); 106534ee09551764b045fdc02df754157473125edf60Kevin Tang} 106634ee09551764b045fdc02df754157473125edf60Kevin Tang 1067e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russostatic void local_sv_cb(GpsSvStatus* sv_status, void* svExt) 106834ee09551764b045fdc02df754157473125edf60Kevin Tang{ 106934ee09551764b045fdc02df754157473125edf60Kevin Tang ENTRY_LOG(); 107034ee09551764b045fdc02df754157473125edf60Kevin Tang if (NULL != gps_sv_cb) { 107134ee09551764b045fdc02df754157473125edf60Kevin Tang CALLBACK_LOG_CALLFLOW("sv_status_cb -", %d, sv_status->num_svs); 107234ee09551764b045fdc02df754157473125edf60Kevin Tang gps_sv_cb(sv_status); 107334ee09551764b045fdc02df754157473125edf60Kevin Tang } 107434ee09551764b045fdc02df754157473125edf60Kevin Tang EXIT_LOG(%s, VOID_RET); 107534ee09551764b045fdc02df754157473125edf60Kevin Tang} 10769aba726254999bab914b3eba81f65537c5bf5354Dante Russo 1077