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> 472863c4092108a764d8537b453e66357939e19062Kevin Tang#include <sys/socket.h> 482863c4092108a764d8537b453e66357939e19062Kevin Tang#include <sys/un.h> 492863c4092108a764d8537b453e66357939e19062Kevin Tang#include <sstream> 502863c4092108a764d8537b453e66357939e19062Kevin Tang#include <string> 5187543bf77178d77edc23ed0043b76c0eb6ec3eccDante Russo 52e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russousing namespace loc_core; 53e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo 54bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo#define LOC_PM_CLIENT_NAME "GPS" 55bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 56e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo//Globals defns 5734ee09551764b045fdc02df754157473125edf60Kevin Tangstatic gps_location_callback gps_loc_cb = NULL; 5834ee09551764b045fdc02df754157473125edf60Kevin Tangstatic gps_sv_status_callback gps_sv_cb = NULL; 5934ee09551764b045fdc02df754157473125edf60Kevin Tang 60e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russostatic void local_loc_cb(UlpLocation* location, void* locExt); 61e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russostatic void local_sv_cb(GpsSvStatus* sv_status, void* svExt); 6234ee09551764b045fdc02df754157473125edf60Kevin Tang 6323d1e163c382baf6f395af46b34d309db0cb5c29Dante Russostatic const GpsGeofencingInterface* get_geofence_interface(void); 6423d1e163c382baf6f395af46b34d309db0cb5c29Dante Russo 6534ee09551764b045fdc02df754157473125edf60Kevin Tang// Function declarations for sLocEngInterface 6634ee09551764b045fdc02df754157473125edf60Kevin Tangstatic int loc_init(GpsCallbacks* callbacks); 6734ee09551764b045fdc02df754157473125edf60Kevin Tangstatic int loc_start(); 6834ee09551764b045fdc02df754157473125edf60Kevin Tangstatic int loc_stop(); 6934ee09551764b045fdc02df754157473125edf60Kevin Tangstatic void loc_cleanup(); 7034ee09551764b045fdc02df754157473125edf60Kevin Tangstatic int loc_inject_time(GpsUtcTime time, int64_t timeReference, int uncertainty); 7134ee09551764b045fdc02df754157473125edf60Kevin Tangstatic int loc_inject_location(double latitude, double longitude, float accuracy); 7234ee09551764b045fdc02df754157473125edf60Kevin Tangstatic void loc_delete_aiding_data(GpsAidingData f); 7334ee09551764b045fdc02df754157473125edf60Kevin Tangstatic int loc_set_position_mode(GpsPositionMode mode, GpsPositionRecurrence recurrence, 7434ee09551764b045fdc02df754157473125edf60Kevin Tang uint32_t min_interval, uint32_t preferred_accuracy, 7534ee09551764b045fdc02df754157473125edf60Kevin Tang uint32_t preferred_time); 7634ee09551764b045fdc02df754157473125edf60Kevin Tangstatic const void* loc_get_extension(const char* name); 7734ee09551764b045fdc02df754157473125edf60Kevin Tang// Defines the GpsInterface in gps.h 7834ee09551764b045fdc02df754157473125edf60Kevin Tangstatic const GpsInterface sLocEngInterface = 7934ee09551764b045fdc02df754157473125edf60Kevin Tang{ 8034ee09551764b045fdc02df754157473125edf60Kevin Tang sizeof(GpsInterface), 8134ee09551764b045fdc02df754157473125edf60Kevin Tang loc_init, 8234ee09551764b045fdc02df754157473125edf60Kevin Tang loc_start, 8334ee09551764b045fdc02df754157473125edf60Kevin Tang loc_stop, 8434ee09551764b045fdc02df754157473125edf60Kevin Tang loc_cleanup, 8534ee09551764b045fdc02df754157473125edf60Kevin Tang loc_inject_time, 8634ee09551764b045fdc02df754157473125edf60Kevin Tang loc_inject_location, 8734ee09551764b045fdc02df754157473125edf60Kevin Tang loc_delete_aiding_data, 8834ee09551764b045fdc02df754157473125edf60Kevin Tang loc_set_position_mode, 8934ee09551764b045fdc02df754157473125edf60Kevin Tang loc_get_extension 9034ee09551764b045fdc02df754157473125edf60Kevin Tang}; 9134ee09551764b045fdc02df754157473125edf60Kevin Tang 9234ee09551764b045fdc02df754157473125edf60Kevin Tang// Function declarations for sLocEngAGpsInterface 9334ee09551764b045fdc02df754157473125edf60Kevin Tangstatic void loc_agps_init(AGpsCallbacks* callbacks); 9434ee09551764b045fdc02df754157473125edf60Kevin Tangstatic int loc_agps_open(const char* apn); 9534ee09551764b045fdc02df754157473125edf60Kevin Tangstatic int loc_agps_closed(); 9634ee09551764b045fdc02df754157473125edf60Kevin Tangstatic int loc_agps_open_failed(); 9734ee09551764b045fdc02df754157473125edf60Kevin Tangstatic int loc_agps_set_server(AGpsType type, const char *hostname, int port); 980d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russostatic int loc_agps_open_with_apniptype( const char* apn, ApnIpType apnIpType); 9934ee09551764b045fdc02df754157473125edf60Kevin Tang 1000d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russostatic const AGpsInterface sLocEngAGpsInterface = 10134ee09551764b045fdc02df754157473125edf60Kevin Tang{ 1020d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo sizeof(AGpsInterface), 10334ee09551764b045fdc02df754157473125edf60Kevin Tang loc_agps_init, 10434ee09551764b045fdc02df754157473125edf60Kevin Tang loc_agps_open, 10534ee09551764b045fdc02df754157473125edf60Kevin Tang loc_agps_closed, 10634ee09551764b045fdc02df754157473125edf60Kevin Tang loc_agps_open_failed, 1070d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo loc_agps_set_server, 1080d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo loc_agps_open_with_apniptype 10934ee09551764b045fdc02df754157473125edf60Kevin Tang}; 11034ee09551764b045fdc02df754157473125edf60Kevin Tang 11134ee09551764b045fdc02df754157473125edf60Kevin Tangstatic int loc_xtra_init(GpsXtraCallbacks* callbacks); 11234ee09551764b045fdc02df754157473125edf60Kevin Tangstatic int loc_xtra_inject_data(char* data, int length); 11334ee09551764b045fdc02df754157473125edf60Kevin Tang 11434ee09551764b045fdc02df754157473125edf60Kevin Tangstatic const GpsXtraInterface sLocEngXTRAInterface = 11534ee09551764b045fdc02df754157473125edf60Kevin Tang{ 11634ee09551764b045fdc02df754157473125edf60Kevin Tang sizeof(GpsXtraInterface), 11734ee09551764b045fdc02df754157473125edf60Kevin Tang loc_xtra_init, 11834ee09551764b045fdc02df754157473125edf60Kevin Tang loc_xtra_inject_data 11934ee09551764b045fdc02df754157473125edf60Kevin Tang}; 12034ee09551764b045fdc02df754157473125edf60Kevin Tang 12134ee09551764b045fdc02df754157473125edf60Kevin Tangstatic void loc_ni_init(GpsNiCallbacks *callbacks); 12234ee09551764b045fdc02df754157473125edf60Kevin Tangstatic void loc_ni_respond(int notif_id, GpsUserResponseType user_response); 12334ee09551764b045fdc02df754157473125edf60Kevin Tang 124fe660078f05f448ececb0b1170ecd79e600db440Kevin Tangstatic const GpsNiInterface sLocEngNiInterface = 12534ee09551764b045fdc02df754157473125edf60Kevin Tang{ 12634ee09551764b045fdc02df754157473125edf60Kevin Tang sizeof(GpsNiInterface), 12734ee09551764b045fdc02df754157473125edf60Kevin Tang loc_ni_init, 12834ee09551764b045fdc02df754157473125edf60Kevin Tang loc_ni_respond, 12934ee09551764b045fdc02df754157473125edf60Kevin Tang}; 13034ee09551764b045fdc02df754157473125edf60Kevin Tang 1318aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastavastatic int loc_gps_measurement_init(GpsMeasurementCallbacks* callbacks); 1328aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastavastatic void loc_gps_measurement_close(); 1338aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava 1348aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastavastatic const GpsMeasurementInterface sLocEngGpsMeasurementInterface = 1358aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava{ 1368aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava sizeof(GpsMeasurementInterface), 1378aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava loc_gps_measurement_init, 1388aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava loc_gps_measurement_close 1398aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava}; 14047ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo 14134ee09551764b045fdc02df754157473125edf60Kevin Tangstatic void loc_agps_ril_init( AGpsRilCallbacks* callbacks ); 14234ee09551764b045fdc02df754157473125edf60Kevin Tangstatic void loc_agps_ril_set_ref_location(const AGpsRefLocation *agps_reflocation, size_t sz_struct); 14334ee09551764b045fdc02df754157473125edf60Kevin Tangstatic void loc_agps_ril_set_set_id(AGpsSetIDType type, const char* setid); 14434ee09551764b045fdc02df754157473125edf60Kevin Tangstatic void loc_agps_ril_ni_message(uint8_t *msg, size_t len); 14534ee09551764b045fdc02df754157473125edf60Kevin Tangstatic void loc_agps_ril_update_network_state(int connected, int type, int roaming, const char* extra_info); 14634ee09551764b045fdc02df754157473125edf60Kevin Tangstatic void loc_agps_ril_update_network_availability(int avaiable, const char* apn); 14734ee09551764b045fdc02df754157473125edf60Kevin Tang 14834ee09551764b045fdc02df754157473125edf60Kevin Tangstatic const AGpsRilInterface sLocEngAGpsRilInterface = 14934ee09551764b045fdc02df754157473125edf60Kevin Tang{ 15034ee09551764b045fdc02df754157473125edf60Kevin Tang sizeof(AGpsRilInterface), 15134ee09551764b045fdc02df754157473125edf60Kevin Tang loc_agps_ril_init, 15234ee09551764b045fdc02df754157473125edf60Kevin Tang loc_agps_ril_set_ref_location, 15334ee09551764b045fdc02df754157473125edf60Kevin Tang loc_agps_ril_set_set_id, 15434ee09551764b045fdc02df754157473125edf60Kevin Tang loc_agps_ril_ni_message, 15534ee09551764b045fdc02df754157473125edf60Kevin Tang loc_agps_ril_update_network_state, 15634ee09551764b045fdc02df754157473125edf60Kevin Tang loc_agps_ril_update_network_availability 15734ee09551764b045fdc02df754157473125edf60Kevin Tang}; 15834ee09551764b045fdc02df754157473125edf60Kevin Tang 1591d4940024c54e7d1e63f73edd5054a18a7a01b63Dante Russostatic int loc_agps_install_certificates(const DerEncodedCertificate* certificates, 1601d4940024c54e7d1e63f73edd5054a18a7a01b63Dante Russo size_t length); 1611d4940024c54e7d1e63f73edd5054a18a7a01b63Dante Russostatic int loc_agps_revoke_certificates(const Sha1CertificateFingerprint* fingerprints, 1621d4940024c54e7d1e63f73edd5054a18a7a01b63Dante Russo size_t length); 1631d4940024c54e7d1e63f73edd5054a18a7a01b63Dante Russo 1641d4940024c54e7d1e63f73edd5054a18a7a01b63Dante Russostatic const SuplCertificateInterface sLocEngAGpsCertInterface = 1651d4940024c54e7d1e63f73edd5054a18a7a01b63Dante Russo{ 1661d4940024c54e7d1e63f73edd5054a18a7a01b63Dante Russo sizeof(SuplCertificateInterface), 1671d4940024c54e7d1e63f73edd5054a18a7a01b63Dante Russo loc_agps_install_certificates, 1681d4940024c54e7d1e63f73edd5054a18a7a01b63Dante Russo loc_agps_revoke_certificates 1691d4940024c54e7d1e63f73edd5054a18a7a01b63Dante Russo}; 1701d4940024c54e7d1e63f73edd5054a18a7a01b63Dante Russo 171fe660078f05f448ececb0b1170ecd79e600db440Kevin Tangstatic void loc_configuration_update(const char* config_data, int32_t length); 172fe660078f05f448ececb0b1170ecd79e600db440Kevin Tang 173fe660078f05f448ececb0b1170ecd79e600db440Kevin Tangstatic const GnssConfigurationInterface sLocEngConfigInterface = 174fe660078f05f448ececb0b1170ecd79e600db440Kevin Tang{ 175fe660078f05f448ececb0b1170ecd79e600db440Kevin Tang sizeof(GnssConfigurationInterface), 176fe660078f05f448ececb0b1170ecd79e600db440Kevin Tang loc_configuration_update 177fe660078f05f448ececb0b1170ecd79e600db440Kevin Tang}; 178fe660078f05f448ececb0b1170ecd79e600db440Kevin Tang 17934ee09551764b045fdc02df754157473125edf60Kevin Tangstatic loc_eng_data_s_type loc_afw_data; 18047ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russostatic int gss_fd = -1; 1810c7fdf015bfdb33b14a990b280c38386cb8e1f9cVineeta Srivastavastatic int sGnssType = GNSS_UNKNOWN; 18234ee09551764b045fdc02df754157473125edf60Kevin Tang/*=========================================================================== 18334ee09551764b045fdc02df754157473125edf60Kevin TangFUNCTION gps_get_hardware_interface 18434ee09551764b045fdc02df754157473125edf60Kevin Tang 18534ee09551764b045fdc02df754157473125edf60Kevin TangDESCRIPTION 18634ee09551764b045fdc02df754157473125edf60Kevin Tang Returns the GPS hardware interaface based on LOC API 18734ee09551764b045fdc02df754157473125edf60Kevin Tang if GPS is enabled. 18834ee09551764b045fdc02df754157473125edf60Kevin Tang 18934ee09551764b045fdc02df754157473125edf60Kevin TangDEPENDENCIES 19034ee09551764b045fdc02df754157473125edf60Kevin Tang None 19134ee09551764b045fdc02df754157473125edf60Kevin Tang 19234ee09551764b045fdc02df754157473125edf60Kevin TangRETURN VALUE 19334ee09551764b045fdc02df754157473125edf60Kevin Tang 0: success 19434ee09551764b045fdc02df754157473125edf60Kevin Tang 19534ee09551764b045fdc02df754157473125edf60Kevin TangSIDE EFFECTS 19634ee09551764b045fdc02df754157473125edf60Kevin Tang N/A 19734ee09551764b045fdc02df754157473125edf60Kevin Tang 19834ee09551764b045fdc02df754157473125edf60Kevin Tang===========================================================================*/ 19934ee09551764b045fdc02df754157473125edf60Kevin Tangconst GpsInterface* gps_get_hardware_interface () 20034ee09551764b045fdc02df754157473125edf60Kevin Tang{ 20134ee09551764b045fdc02df754157473125edf60Kevin Tang ENTRY_LOG_CALLFLOW(); 20234ee09551764b045fdc02df754157473125edf60Kevin Tang const GpsInterface* ret_val; 20334ee09551764b045fdc02df754157473125edf60Kevin Tang 20434ee09551764b045fdc02df754157473125edf60Kevin Tang char propBuf[PROPERTY_VALUE_MAX]; 20534ee09551764b045fdc02df754157473125edf60Kevin Tang 206e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo loc_eng_read_config(); 207e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo 20834ee09551764b045fdc02df754157473125edf60Kevin Tang // check to see if GPS should be disabled 20934ee09551764b045fdc02df754157473125edf60Kevin Tang property_get("gps.disable", propBuf, ""); 21034ee09551764b045fdc02df754157473125edf60Kevin Tang if (propBuf[0] == '1') 21134ee09551764b045fdc02df754157473125edf60Kevin Tang { 21234ee09551764b045fdc02df754157473125edf60Kevin Tang LOC_LOGD("gps_get_interface returning NULL because gps.disable=1\n"); 21334ee09551764b045fdc02df754157473125edf60Kevin Tang ret_val = NULL; 21434ee09551764b045fdc02df754157473125edf60Kevin Tang } else { 21534ee09551764b045fdc02df754157473125edf60Kevin Tang ret_val = &sLocEngInterface; 21634ee09551764b045fdc02df754157473125edf60Kevin Tang } 21734ee09551764b045fdc02df754157473125edf60Kevin Tang 218e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo loc_eng_read_config(); 219e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo 22034ee09551764b045fdc02df754157473125edf60Kevin Tang EXIT_LOG(%p, ret_val); 22134ee09551764b045fdc02df754157473125edf60Kevin Tang return ret_val; 22234ee09551764b045fdc02df754157473125edf60Kevin Tang} 22334ee09551764b045fdc02df754157473125edf60Kevin Tang 22434ee09551764b045fdc02df754157473125edf60Kevin Tang// for gps.c 22534ee09551764b045fdc02df754157473125edf60Kevin Tangextern "C" const GpsInterface* get_gps_interface() 22634ee09551764b045fdc02df754157473125edf60Kevin Tang{ 227e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo unsigned int target = TARGET_DEFAULT; 228e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo loc_eng_read_config(); 229e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo 23047ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo target = loc_get_target(); 231e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo LOC_LOGD("Target name check returned %s", loc_get_target_name(target)); 23247ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo 2330c7fdf015bfdb33b14a990b280c38386cb8e1f9cVineeta Srivastava sGnssType = getTargetGnssType(target); 2340c7fdf015bfdb33b14a990b280c38386cb8e1f9cVineeta Srivastava switch (sGnssType) 23547ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo { 23647ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo case GNSS_GSS: 237bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo case GNSS_AUTO: 238e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo //APQ8064 239c65fed03538cb5e4a5b62d3ca114ff3cc5e87e60Mekala Natarajan gps_conf.CAPABILITIES &= ~(GPS_CAPABILITY_MSA | GPS_CAPABILITY_MSB); 240c65fed03538cb5e4a5b62d3ca114ff3cc5e87e60Mekala Natarajan gss_fd = open("/dev/gss", O_RDONLY); 241c65fed03538cb5e4a5b62d3ca114ff3cc5e87e60Mekala Natarajan if (gss_fd < 0) { 242c65fed03538cb5e4a5b62d3ca114ff3cc5e87e60Mekala Natarajan LOC_LOGE("GSS open failed: %s\n", strerror(errno)); 243c65fed03538cb5e4a5b62d3ca114ff3cc5e87e60Mekala Natarajan } 244e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo else { 245e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo LOC_LOGD("GSS open success! CAPABILITIES %0lx\n", 246e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo gps_conf.CAPABILITIES); 247e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo } 24847ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo break; 24947ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo case GNSS_NONE: 25047ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo //MPQ8064 25147ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo LOC_LOGE("No GPS HW on this target. Not returning interface."); 252e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo return NULL; 25347ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo case GNSS_QCA1530: 25447ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo // qca1530 chip is present 25547ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo gps_conf.CAPABILITIES &= ~(GPS_CAPABILITY_MSA | GPS_CAPABILITY_MSB); 25647ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo LOC_LOGD("qca1530 present: CAPABILITIES %0lx\n", gps_conf.CAPABILITIES); 25747ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo break; 258c65fed03538cb5e4a5b62d3ca114ff3cc5e87e60Mekala Natarajan } 25934ee09551764b045fdc02df754157473125edf60Kevin Tang return &sLocEngInterface; 26034ee09551764b045fdc02df754157473125edf60Kevin Tang} 261e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo 26234ee09551764b045fdc02df754157473125edf60Kevin Tang/*=========================================================================== 26334ee09551764b045fdc02df754157473125edf60Kevin TangFUNCTION loc_init 26434ee09551764b045fdc02df754157473125edf60Kevin Tang 26534ee09551764b045fdc02df754157473125edf60Kevin TangDESCRIPTION 26634ee09551764b045fdc02df754157473125edf60Kevin Tang Initialize the location engine, this include setting up global datas 26734ee09551764b045fdc02df754157473125edf60Kevin Tang and registers location engien with loc api service. 26834ee09551764b045fdc02df754157473125edf60Kevin Tang 26934ee09551764b045fdc02df754157473125edf60Kevin TangDEPENDENCIES 27034ee09551764b045fdc02df754157473125edf60Kevin Tang None 27134ee09551764b045fdc02df754157473125edf60Kevin Tang 27234ee09551764b045fdc02df754157473125edf60Kevin TangRETURN VALUE 27334ee09551764b045fdc02df754157473125edf60Kevin Tang 0: success 27434ee09551764b045fdc02df754157473125edf60Kevin Tang 27534ee09551764b045fdc02df754157473125edf60Kevin TangSIDE EFFECTS 27634ee09551764b045fdc02df754157473125edf60Kevin Tang N/Ax 27734ee09551764b045fdc02df754157473125edf60Kevin Tang 27834ee09551764b045fdc02df754157473125edf60Kevin Tang===========================================================================*/ 27934ee09551764b045fdc02df754157473125edf60Kevin Tangstatic int loc_init(GpsCallbacks* callbacks) 28034ee09551764b045fdc02df754157473125edf60Kevin Tang{ 281e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo int retVal = -1; 28234ee09551764b045fdc02df754157473125edf60Kevin Tang ENTRY_LOG(); 283e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo LOC_API_ADAPTER_EVENT_MASK_T event; 284e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo 285e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo if (NULL == callbacks) { 286e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo LOC_LOGE("loc_init failed. cb = NULL\n"); 287e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo EXIT_LOG(%d, retVal); 288e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo return retVal; 289e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo } 290e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo 291e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo event = LOC_API_ADAPTER_BIT_PARSED_POSITION_REPORT | 292e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo LOC_API_ADAPTER_BIT_SATELLITE_REPORT | 293e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo LOC_API_ADAPTER_BIT_LOCATION_SERVER_REQUEST | 294e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo LOC_API_ADAPTER_BIT_ASSISTANCE_DATA_REQUEST | 295e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo LOC_API_ADAPTER_BIT_IOCTL_REPORT | 296e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo LOC_API_ADAPTER_BIT_STATUS_REPORT | 297e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo LOC_API_ADAPTER_BIT_NMEA_1HZ_REPORT | 298e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo LOC_API_ADAPTER_BIT_NI_NOTIFY_VERIFY_REQUEST; 299e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo 300e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo LocCallbacks clientCallbacks = {local_loc_cb, /* location_cb */ 30134ee09551764b045fdc02df754157473125edf60Kevin Tang callbacks->status_cb, /* status_cb */ 302e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo local_sv_cb, /* sv_status_cb */ 30334ee09551764b045fdc02df754157473125edf60Kevin Tang callbacks->nmea_cb, /* nmea_cb */ 30434ee09551764b045fdc02df754157473125edf60Kevin Tang callbacks->set_capabilities_cb, /* set_capabilities_cb */ 30534ee09551764b045fdc02df754157473125edf60Kevin Tang callbacks->acquire_wakelock_cb, /* acquire_wakelock_cb */ 30634ee09551764b045fdc02df754157473125edf60Kevin Tang callbacks->release_wakelock_cb, /* release_wakelock_cb */ 30734ee09551764b045fdc02df754157473125edf60Kevin Tang callbacks->create_thread_cb, /* create_thread_cb */ 30834ee09551764b045fdc02df754157473125edf60Kevin Tang NULL, /* location_ext_parser */ 309e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo NULL, /* sv_ext_parser */ 31047ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo callbacks->request_utc_time_cb, /* request_utc_time_cb */ 3110c7fdf015bfdb33b14a990b280c38386cb8e1f9cVineeta Srivastava }; 312e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo 31334ee09551764b045fdc02df754157473125edf60Kevin Tang gps_loc_cb = callbacks->location_cb; 31434ee09551764b045fdc02df754157473125edf60Kevin Tang gps_sv_cb = callbacks->sv_status_cb; 31534ee09551764b045fdc02df754157473125edf60Kevin Tang 31647ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo retVal = loc_eng_init(loc_afw_data, &clientCallbacks, event, NULL); 31747ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo loc_afw_data.adapter->mSupportsAgpsRequests = !loc_afw_data.adapter->hasAgpsExtendedCapabilities(); 31847ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo loc_afw_data.adapter->mSupportsPositionInjection = !loc_afw_data.adapter->hasCPIExtendedCapabilities(); 319bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo loc_afw_data.adapter->mSupportsTimeInjection = !loc_afw_data.adapter->hasCPIExtendedCapabilities(); 320b2c66a082ebe2a2f887783810d4fb3a31fd547cdKevin Tang loc_afw_data.adapter->setGpsLockMsg(0); 321bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo loc_afw_data.adapter->requestUlp(getCarrierCapabilities()); 32247ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo 32347ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo if(retVal) { 32447ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo LOC_LOGE("loc_eng_init() fail!"); 32547ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo goto err; 32647ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo } 32734ee09551764b045fdc02df754157473125edf60Kevin Tang 32847ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo loc_afw_data.adapter->setPowerVoteRight(loc_get_target() == TARGET_QCA1530); 32947ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo loc_afw_data.adapter->setPowerVote(true); 33047ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo 33147ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo LOC_LOGD("loc_eng_init() success!"); 33287543bf77178d77edc23ed0043b76c0eb6ec3eccDante Russo 33347ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russoerr: 334e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo EXIT_LOG(%d, retVal); 335e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo return retVal; 33634ee09551764b045fdc02df754157473125edf60Kevin Tang} 33734ee09551764b045fdc02df754157473125edf60Kevin Tang 33834ee09551764b045fdc02df754157473125edf60Kevin Tang/*=========================================================================== 33934ee09551764b045fdc02df754157473125edf60Kevin TangFUNCTION loc_cleanup 34034ee09551764b045fdc02df754157473125edf60Kevin Tang 34134ee09551764b045fdc02df754157473125edf60Kevin TangDESCRIPTION 34234ee09551764b045fdc02df754157473125edf60Kevin Tang Cleans location engine. The location client handle will be released. 34334ee09551764b045fdc02df754157473125edf60Kevin Tang 34434ee09551764b045fdc02df754157473125edf60Kevin TangDEPENDENCIES 34534ee09551764b045fdc02df754157473125edf60Kevin Tang None 34634ee09551764b045fdc02df754157473125edf60Kevin Tang 34734ee09551764b045fdc02df754157473125edf60Kevin TangRETURN VALUE 34834ee09551764b045fdc02df754157473125edf60Kevin Tang None 34934ee09551764b045fdc02df754157473125edf60Kevin Tang 35034ee09551764b045fdc02df754157473125edf60Kevin TangSIDE EFFECTS 35134ee09551764b045fdc02df754157473125edf60Kevin Tang N/A 35234ee09551764b045fdc02df754157473125edf60Kevin Tang 35334ee09551764b045fdc02df754157473125edf60Kevin Tang===========================================================================*/ 35434ee09551764b045fdc02df754157473125edf60Kevin Tangstatic void loc_cleanup() 35534ee09551764b045fdc02df754157473125edf60Kevin Tang{ 35634ee09551764b045fdc02df754157473125edf60Kevin Tang ENTRY_LOG(); 35747ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo 35847ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo loc_afw_data.adapter->setPowerVote(false); 359b2c66a082ebe2a2f887783810d4fb3a31fd547cdKevin Tang loc_afw_data.adapter->setGpsLockMsg(gps_conf.GPS_LOCK); 36047ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo 36134ee09551764b045fdc02df754157473125edf60Kevin Tang loc_eng_cleanup(loc_afw_data); 36234ee09551764b045fdc02df754157473125edf60Kevin Tang gps_loc_cb = NULL; 36334ee09551764b045fdc02df754157473125edf60Kevin Tang gps_sv_cb = NULL; 364e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo 36534ee09551764b045fdc02df754157473125edf60Kevin Tang EXIT_LOG(%s, VOID_RET); 36634ee09551764b045fdc02df754157473125edf60Kevin Tang} 36734ee09551764b045fdc02df754157473125edf60Kevin Tang 36834ee09551764b045fdc02df754157473125edf60Kevin Tang/*=========================================================================== 36934ee09551764b045fdc02df754157473125edf60Kevin TangFUNCTION loc_start 37034ee09551764b045fdc02df754157473125edf60Kevin Tang 37134ee09551764b045fdc02df754157473125edf60Kevin TangDESCRIPTION 37234ee09551764b045fdc02df754157473125edf60Kevin Tang Starts the tracking session 37334ee09551764b045fdc02df754157473125edf60Kevin Tang 37434ee09551764b045fdc02df754157473125edf60Kevin TangDEPENDENCIES 37534ee09551764b045fdc02df754157473125edf60Kevin Tang None 37634ee09551764b045fdc02df754157473125edf60Kevin Tang 37734ee09551764b045fdc02df754157473125edf60Kevin TangRETURN VALUE 37834ee09551764b045fdc02df754157473125edf60Kevin Tang 0: success 37934ee09551764b045fdc02df754157473125edf60Kevin Tang 38034ee09551764b045fdc02df754157473125edf60Kevin TangSIDE EFFECTS 38134ee09551764b045fdc02df754157473125edf60Kevin Tang N/A 38234ee09551764b045fdc02df754157473125edf60Kevin Tang 38334ee09551764b045fdc02df754157473125edf60Kevin Tang===========================================================================*/ 38434ee09551764b045fdc02df754157473125edf60Kevin Tangstatic int loc_start() 38534ee09551764b045fdc02df754157473125edf60Kevin Tang{ 38634ee09551764b045fdc02df754157473125edf60Kevin Tang ENTRY_LOG(); 38734ee09551764b045fdc02df754157473125edf60Kevin Tang int ret_val = loc_eng_start(loc_afw_data); 38834ee09551764b045fdc02df754157473125edf60Kevin Tang 38934ee09551764b045fdc02df754157473125edf60Kevin Tang EXIT_LOG(%d, ret_val); 39034ee09551764b045fdc02df754157473125edf60Kevin Tang return ret_val; 39134ee09551764b045fdc02df754157473125edf60Kevin Tang} 39234ee09551764b045fdc02df754157473125edf60Kevin Tang 39334ee09551764b045fdc02df754157473125edf60Kevin Tang/*=========================================================================== 39434ee09551764b045fdc02df754157473125edf60Kevin TangFUNCTION loc_stop 39534ee09551764b045fdc02df754157473125edf60Kevin Tang 39634ee09551764b045fdc02df754157473125edf60Kevin TangDESCRIPTION 39734ee09551764b045fdc02df754157473125edf60Kevin Tang Stops the tracking session 39834ee09551764b045fdc02df754157473125edf60Kevin Tang 39934ee09551764b045fdc02df754157473125edf60Kevin TangDEPENDENCIES 40034ee09551764b045fdc02df754157473125edf60Kevin Tang None 40134ee09551764b045fdc02df754157473125edf60Kevin Tang 40234ee09551764b045fdc02df754157473125edf60Kevin TangRETURN VALUE 40334ee09551764b045fdc02df754157473125edf60Kevin Tang 0: success 40434ee09551764b045fdc02df754157473125edf60Kevin Tang 40534ee09551764b045fdc02df754157473125edf60Kevin TangSIDE EFFECTS 40634ee09551764b045fdc02df754157473125edf60Kevin Tang N/A 40734ee09551764b045fdc02df754157473125edf60Kevin Tang 40834ee09551764b045fdc02df754157473125edf60Kevin Tang===========================================================================*/ 40934ee09551764b045fdc02df754157473125edf60Kevin Tangstatic int loc_stop() 41034ee09551764b045fdc02df754157473125edf60Kevin Tang{ 41134ee09551764b045fdc02df754157473125edf60Kevin Tang ENTRY_LOG(); 412e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo int ret_val = -1; 413e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo ret_val = loc_eng_stop(loc_afw_data); 41434ee09551764b045fdc02df754157473125edf60Kevin Tang 41534ee09551764b045fdc02df754157473125edf60Kevin Tang EXIT_LOG(%d, ret_val); 41634ee09551764b045fdc02df754157473125edf60Kevin Tang return ret_val; 41734ee09551764b045fdc02df754157473125edf60Kevin Tang} 41834ee09551764b045fdc02df754157473125edf60Kevin Tang 41934ee09551764b045fdc02df754157473125edf60Kevin Tang/*=========================================================================== 42034ee09551764b045fdc02df754157473125edf60Kevin TangFUNCTION loc_set_position_mode 42134ee09551764b045fdc02df754157473125edf60Kevin Tang 42234ee09551764b045fdc02df754157473125edf60Kevin TangDESCRIPTION 42334ee09551764b045fdc02df754157473125edf60Kevin Tang Sets the mode and fix frequency for the tracking session. 42434ee09551764b045fdc02df754157473125edf60Kevin Tang 42534ee09551764b045fdc02df754157473125edf60Kevin TangDEPENDENCIES 42634ee09551764b045fdc02df754157473125edf60Kevin Tang None 42734ee09551764b045fdc02df754157473125edf60Kevin Tang 42834ee09551764b045fdc02df754157473125edf60Kevin TangRETURN VALUE 42934ee09551764b045fdc02df754157473125edf60Kevin Tang 0: success 43034ee09551764b045fdc02df754157473125edf60Kevin Tang 43134ee09551764b045fdc02df754157473125edf60Kevin TangSIDE EFFECTS 43234ee09551764b045fdc02df754157473125edf60Kevin Tang N/A 43334ee09551764b045fdc02df754157473125edf60Kevin Tang 43434ee09551764b045fdc02df754157473125edf60Kevin Tang===========================================================================*/ 43534ee09551764b045fdc02df754157473125edf60Kevin Tangstatic int loc_set_position_mode(GpsPositionMode mode, 43634ee09551764b045fdc02df754157473125edf60Kevin Tang GpsPositionRecurrence recurrence, 43734ee09551764b045fdc02df754157473125edf60Kevin Tang uint32_t min_interval, 43834ee09551764b045fdc02df754157473125edf60Kevin Tang uint32_t preferred_accuracy, 43934ee09551764b045fdc02df754157473125edf60Kevin Tang uint32_t preferred_time) 44034ee09551764b045fdc02df754157473125edf60Kevin Tang{ 44134ee09551764b045fdc02df754157473125edf60Kevin Tang ENTRY_LOG(); 442e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo int ret_val = -1; 44334ee09551764b045fdc02df754157473125edf60Kevin Tang LocPositionMode locMode; 44434ee09551764b045fdc02df754157473125edf60Kevin Tang switch (mode) { 44534ee09551764b045fdc02df754157473125edf60Kevin Tang case GPS_POSITION_MODE_MS_BASED: 44634ee09551764b045fdc02df754157473125edf60Kevin Tang locMode = LOC_POSITION_MODE_MS_BASED; 44734ee09551764b045fdc02df754157473125edf60Kevin Tang break; 44834ee09551764b045fdc02df754157473125edf60Kevin Tang case GPS_POSITION_MODE_MS_ASSISTED: 44934ee09551764b045fdc02df754157473125edf60Kevin Tang locMode = LOC_POSITION_MODE_MS_ASSISTED; 45034ee09551764b045fdc02df754157473125edf60Kevin Tang break; 45134ee09551764b045fdc02df754157473125edf60Kevin Tang default: 45234ee09551764b045fdc02df754157473125edf60Kevin Tang locMode = LOC_POSITION_MODE_STANDALONE; 45334ee09551764b045fdc02df754157473125edf60Kevin Tang break; 45434ee09551764b045fdc02df754157473125edf60Kevin Tang } 455e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo 456e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo LocPosMode params(locMode, recurrence, min_interval, 457e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo preferred_accuracy, preferred_time, NULL, NULL); 458e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo ret_val = loc_eng_set_position_mode(loc_afw_data, params); 45934ee09551764b045fdc02df754157473125edf60Kevin Tang 46034ee09551764b045fdc02df754157473125edf60Kevin Tang EXIT_LOG(%d, ret_val); 46134ee09551764b045fdc02df754157473125edf60Kevin Tang return ret_val; 46234ee09551764b045fdc02df754157473125edf60Kevin Tang} 46334ee09551764b045fdc02df754157473125edf60Kevin Tang 46434ee09551764b045fdc02df754157473125edf60Kevin Tang/*=========================================================================== 46534ee09551764b045fdc02df754157473125edf60Kevin TangFUNCTION loc_inject_time 46634ee09551764b045fdc02df754157473125edf60Kevin Tang 46734ee09551764b045fdc02df754157473125edf60Kevin TangDESCRIPTION 46834ee09551764b045fdc02df754157473125edf60Kevin Tang This is used by Java native function to do time injection. 46934ee09551764b045fdc02df754157473125edf60Kevin Tang 47034ee09551764b045fdc02df754157473125edf60Kevin TangDEPENDENCIES 47134ee09551764b045fdc02df754157473125edf60Kevin Tang None 47234ee09551764b045fdc02df754157473125edf60Kevin Tang 47334ee09551764b045fdc02df754157473125edf60Kevin TangRETURN VALUE 47434ee09551764b045fdc02df754157473125edf60Kevin Tang 0 47534ee09551764b045fdc02df754157473125edf60Kevin Tang 47634ee09551764b045fdc02df754157473125edf60Kevin TangSIDE EFFECTS 47734ee09551764b045fdc02df754157473125edf60Kevin Tang N/A 47834ee09551764b045fdc02df754157473125edf60Kevin Tang 47934ee09551764b045fdc02df754157473125edf60Kevin Tang===========================================================================*/ 48034ee09551764b045fdc02df754157473125edf60Kevin Tangstatic int loc_inject_time(GpsUtcTime time, int64_t timeReference, int uncertainty) 48134ee09551764b045fdc02df754157473125edf60Kevin Tang{ 48234ee09551764b045fdc02df754157473125edf60Kevin Tang ENTRY_LOG(); 483e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo int ret_val = 0; 484e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo 485e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo ret_val = loc_eng_inject_time(loc_afw_data, time, 486e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo timeReference, uncertainty); 48734ee09551764b045fdc02df754157473125edf60Kevin Tang 48834ee09551764b045fdc02df754157473125edf60Kevin Tang EXIT_LOG(%d, ret_val); 48934ee09551764b045fdc02df754157473125edf60Kevin Tang return ret_val; 49034ee09551764b045fdc02df754157473125edf60Kevin Tang} 49134ee09551764b045fdc02df754157473125edf60Kevin Tang 49234ee09551764b045fdc02df754157473125edf60Kevin Tang 49334ee09551764b045fdc02df754157473125edf60Kevin Tang/*=========================================================================== 49434ee09551764b045fdc02df754157473125edf60Kevin TangFUNCTION loc_inject_location 49534ee09551764b045fdc02df754157473125edf60Kevin Tang 49634ee09551764b045fdc02df754157473125edf60Kevin TangDESCRIPTION 49734ee09551764b045fdc02df754157473125edf60Kevin Tang This is used by Java native function to do location injection. 49834ee09551764b045fdc02df754157473125edf60Kevin Tang 49934ee09551764b045fdc02df754157473125edf60Kevin TangDEPENDENCIES 50034ee09551764b045fdc02df754157473125edf60Kevin Tang None 50134ee09551764b045fdc02df754157473125edf60Kevin Tang 50234ee09551764b045fdc02df754157473125edf60Kevin TangRETURN VALUE 50334ee09551764b045fdc02df754157473125edf60Kevin Tang 0 : Successful 50434ee09551764b045fdc02df754157473125edf60Kevin Tang error code : Failure 50534ee09551764b045fdc02df754157473125edf60Kevin Tang 50634ee09551764b045fdc02df754157473125edf60Kevin TangSIDE EFFECTS 50734ee09551764b045fdc02df754157473125edf60Kevin Tang N/A 50834ee09551764b045fdc02df754157473125edf60Kevin Tang===========================================================================*/ 50934ee09551764b045fdc02df754157473125edf60Kevin Tangstatic int loc_inject_location(double latitude, double longitude, float accuracy) 51034ee09551764b045fdc02df754157473125edf60Kevin Tang{ 51134ee09551764b045fdc02df754157473125edf60Kevin Tang ENTRY_LOG(); 51234ee09551764b045fdc02df754157473125edf60Kevin Tang 51347ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo int ret_val = 0; 51447ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo ret_val = loc_eng_inject_location(loc_afw_data, latitude, longitude, accuracy); 51547ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo 51634ee09551764b045fdc02df754157473125edf60Kevin Tang EXIT_LOG(%d, ret_val); 51734ee09551764b045fdc02df754157473125edf60Kevin Tang return ret_val; 51834ee09551764b045fdc02df754157473125edf60Kevin Tang} 51934ee09551764b045fdc02df754157473125edf60Kevin Tang 52034ee09551764b045fdc02df754157473125edf60Kevin Tang 52134ee09551764b045fdc02df754157473125edf60Kevin Tang/*=========================================================================== 52234ee09551764b045fdc02df754157473125edf60Kevin TangFUNCTION loc_delete_aiding_data 52334ee09551764b045fdc02df754157473125edf60Kevin Tang 52434ee09551764b045fdc02df754157473125edf60Kevin TangDESCRIPTION 52534ee09551764b045fdc02df754157473125edf60Kevin Tang This is used by Java native function to delete the aiding data. The function 52634ee09551764b045fdc02df754157473125edf60Kevin Tang updates the global variable for the aiding data to be deleted. If the GPS 52734ee09551764b045fdc02df754157473125edf60Kevin Tang engine is off, the aiding data will be deleted. Otherwise, the actual action 52834ee09551764b045fdc02df754157473125edf60Kevin Tang will happen when gps engine is turned off. 52934ee09551764b045fdc02df754157473125edf60Kevin Tang 53034ee09551764b045fdc02df754157473125edf60Kevin TangDEPENDENCIES 53134ee09551764b045fdc02df754157473125edf60Kevin Tang Assumes the aiding data type specified in GpsAidingData matches with 53234ee09551764b045fdc02df754157473125edf60Kevin Tang LOC API specification. 53334ee09551764b045fdc02df754157473125edf60Kevin Tang 53434ee09551764b045fdc02df754157473125edf60Kevin TangRETURN VALUE 53534ee09551764b045fdc02df754157473125edf60Kevin Tang None 53634ee09551764b045fdc02df754157473125edf60Kevin Tang 53734ee09551764b045fdc02df754157473125edf60Kevin TangSIDE EFFECTS 53834ee09551764b045fdc02df754157473125edf60Kevin Tang N/A 53934ee09551764b045fdc02df754157473125edf60Kevin Tang 54034ee09551764b045fdc02df754157473125edf60Kevin Tang===========================================================================*/ 54134ee09551764b045fdc02df754157473125edf60Kevin Tangstatic void loc_delete_aiding_data(GpsAidingData f) 54234ee09551764b045fdc02df754157473125edf60Kevin Tang{ 54334ee09551764b045fdc02df754157473125edf60Kevin Tang ENTRY_LOG(); 54434ee09551764b045fdc02df754157473125edf60Kevin Tang loc_eng_delete_aiding_data(loc_afw_data, f); 54534ee09551764b045fdc02df754157473125edf60Kevin Tang 54634ee09551764b045fdc02df754157473125edf60Kevin Tang EXIT_LOG(%s, VOID_RET); 54734ee09551764b045fdc02df754157473125edf60Kevin Tang} 54834ee09551764b045fdc02df754157473125edf60Kevin Tang 54923d1e163c382baf6f395af46b34d309db0cb5c29Dante Russoconst GpsGeofencingInterface* get_geofence_interface(void) 55023d1e163c382baf6f395af46b34d309db0cb5c29Dante Russo{ 55123d1e163c382baf6f395af46b34d309db0cb5c29Dante Russo ENTRY_LOG(); 55223d1e163c382baf6f395af46b34d309db0cb5c29Dante Russo void *handle; 55323d1e163c382baf6f395af46b34d309db0cb5c29Dante Russo const char *error; 55423d1e163c382baf6f395af46b34d309db0cb5c29Dante Russo typedef const GpsGeofencingInterface* (*get_gps_geofence_interface_function) (void); 55523d1e163c382baf6f395af46b34d309db0cb5c29Dante Russo get_gps_geofence_interface_function get_gps_geofence_interface; 55623d1e163c382baf6f395af46b34d309db0cb5c29Dante Russo static const GpsGeofencingInterface* geofence_interface = NULL; 55723d1e163c382baf6f395af46b34d309db0cb5c29Dante Russo 55823d1e163c382baf6f395af46b34d309db0cb5c29Dante Russo dlerror(); /* Clear any existing error */ 55923d1e163c382baf6f395af46b34d309db0cb5c29Dante Russo 56023d1e163c382baf6f395af46b34d309db0cb5c29Dante Russo handle = dlopen ("libgeofence.so", RTLD_NOW); 56123d1e163c382baf6f395af46b34d309db0cb5c29Dante Russo 56223d1e163c382baf6f395af46b34d309db0cb5c29Dante Russo if (!handle) 56323d1e163c382baf6f395af46b34d309db0cb5c29Dante Russo { 56423d1e163c382baf6f395af46b34d309db0cb5c29Dante Russo if ((error = dlerror()) != NULL) { 56523d1e163c382baf6f395af46b34d309db0cb5c29Dante Russo LOC_LOGE ("%s, dlopen for libgeofence.so failed, error = %s\n", __func__, error); 56623d1e163c382baf6f395af46b34d309db0cb5c29Dante Russo } 56723d1e163c382baf6f395af46b34d309db0cb5c29Dante Russo goto exit; 56823d1e163c382baf6f395af46b34d309db0cb5c29Dante Russo } 56923d1e163c382baf6f395af46b34d309db0cb5c29Dante Russo dlerror(); /* Clear any existing error */ 57023d1e163c382baf6f395af46b34d309db0cb5c29Dante Russo get_gps_geofence_interface = (get_gps_geofence_interface_function)dlsym(handle, "gps_geofence_get_interface"); 571bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo if ((error = dlerror()) != NULL && NULL != get_gps_geofence_interface) { 572e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo LOC_LOGE ("%s, dlsym for get_gps_geofence_interface failed, error = %s\n", __func__, error); 57323d1e163c382baf6f395af46b34d309db0cb5c29Dante Russo goto exit; 57423d1e163c382baf6f395af46b34d309db0cb5c29Dante Russo } 57523d1e163c382baf6f395af46b34d309db0cb5c29Dante Russo 57623d1e163c382baf6f395af46b34d309db0cb5c29Dante Russo geofence_interface = get_gps_geofence_interface(); 57723d1e163c382baf6f395af46b34d309db0cb5c29Dante Russo 57823d1e163c382baf6f395af46b34d309db0cb5c29Dante Russoexit: 57923d1e163c382baf6f395af46b34d309db0cb5c29Dante Russo EXIT_LOG(%d, geofence_interface == NULL); 58023d1e163c382baf6f395af46b34d309db0cb5c29Dante Russo return geofence_interface; 58123d1e163c382baf6f395af46b34d309db0cb5c29Dante Russo} 58234ee09551764b045fdc02df754157473125edf60Kevin Tang/*=========================================================================== 58334ee09551764b045fdc02df754157473125edf60Kevin TangFUNCTION loc_get_extension 58434ee09551764b045fdc02df754157473125edf60Kevin Tang 58534ee09551764b045fdc02df754157473125edf60Kevin TangDESCRIPTION 58634ee09551764b045fdc02df754157473125edf60Kevin Tang Get the gps extension to support XTRA. 58734ee09551764b045fdc02df754157473125edf60Kevin Tang 58834ee09551764b045fdc02df754157473125edf60Kevin TangDEPENDENCIES 58934ee09551764b045fdc02df754157473125edf60Kevin Tang N/A 59034ee09551764b045fdc02df754157473125edf60Kevin Tang 59134ee09551764b045fdc02df754157473125edf60Kevin TangRETURN VALUE 59234ee09551764b045fdc02df754157473125edf60Kevin Tang The GPS extension interface. 59334ee09551764b045fdc02df754157473125edf60Kevin Tang 59434ee09551764b045fdc02df754157473125edf60Kevin TangSIDE EFFECTS 59534ee09551764b045fdc02df754157473125edf60Kevin Tang N/A 59634ee09551764b045fdc02df754157473125edf60Kevin Tang 59734ee09551764b045fdc02df754157473125edf60Kevin Tang===========================================================================*/ 598e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russoconst void* loc_get_extension(const char* name) 59934ee09551764b045fdc02df754157473125edf60Kevin Tang{ 60034ee09551764b045fdc02df754157473125edf60Kevin Tang ENTRY_LOG(); 60134ee09551764b045fdc02df754157473125edf60Kevin Tang const void* ret_val = NULL; 60234ee09551764b045fdc02df754157473125edf60Kevin Tang 603e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo LOC_LOGD("%s:%d] For Interface = %s\n",__func__, __LINE__, name); 60434ee09551764b045fdc02df754157473125edf60Kevin Tang if (strcmp(name, GPS_XTRA_INTERFACE) == 0) 60534ee09551764b045fdc02df754157473125edf60Kevin Tang { 606e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo ret_val = &sLocEngXTRAInterface; 60734ee09551764b045fdc02df754157473125edf60Kevin Tang } 60834ee09551764b045fdc02df754157473125edf60Kevin Tang else if (strcmp(name, AGPS_INTERFACE) == 0) 60934ee09551764b045fdc02df754157473125edf60Kevin Tang { 61047ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo ret_val = &sLocEngAGpsInterface; 61134ee09551764b045fdc02df754157473125edf60Kevin Tang } 61234ee09551764b045fdc02df754157473125edf60Kevin Tang else if (strcmp(name, GPS_NI_INTERFACE) == 0) 61334ee09551764b045fdc02df754157473125edf60Kevin Tang { 614e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo ret_val = &sLocEngNiInterface; 61534ee09551764b045fdc02df754157473125edf60Kevin Tang } 61634ee09551764b045fdc02df754157473125edf60Kevin Tang else if (strcmp(name, AGPS_RIL_INTERFACE) == 0) 61734ee09551764b045fdc02df754157473125edf60Kevin Tang { 6182863c4092108a764d8537b453e66357939e19062Kevin Tang ret_val = &sLocEngAGpsRilInterface; 61934ee09551764b045fdc02df754157473125edf60Kevin Tang } 62023d1e163c382baf6f395af46b34d309db0cb5c29Dante Russo else if (strcmp(name, GPS_GEOFENCING_INTERFACE) == 0) 62123d1e163c382baf6f395af46b34d309db0cb5c29Dante Russo { 622e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo if ((gps_conf.CAPABILITIES | GPS_CAPABILITY_GEOFENCING) == gps_conf.CAPABILITIES ){ 623e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo ret_val = get_geofence_interface(); 624e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo } 62534ee09551764b045fdc02df754157473125edf60Kevin Tang } 6261d4940024c54e7d1e63f73edd5054a18a7a01b63Dante Russo else if (strcmp(name, SUPL_CERTIFICATE_INTERFACE) == 0) 6271d4940024c54e7d1e63f73edd5054a18a7a01b63Dante Russo { 6281d4940024c54e7d1e63f73edd5054a18a7a01b63Dante Russo ret_val = &sLocEngAGpsCertInterface; 6291d4940024c54e7d1e63f73edd5054a18a7a01b63Dante Russo } 630fe660078f05f448ececb0b1170ecd79e600db440Kevin Tang else if (strcmp(name, GNSS_CONFIGURATION_INTERFACE) == 0) 631fe660078f05f448ececb0b1170ecd79e600db440Kevin Tang { 632fe660078f05f448ececb0b1170ecd79e600db440Kevin Tang ret_val = &sLocEngConfigInterface; 633fe660078f05f448ececb0b1170ecd79e600db440Kevin Tang } 6348aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava else if (strcmp(name, GPS_MEASUREMENT_INTERFACE) == 0) 6358aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava { 6368aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava ret_val = &sLocEngGpsMeasurementInterface; 6378aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava } 63834ee09551764b045fdc02df754157473125edf60Kevin Tang else 63934ee09551764b045fdc02df754157473125edf60Kevin Tang { 64034ee09551764b045fdc02df754157473125edf60Kevin Tang LOC_LOGE ("get_extension: Invalid interface passed in\n"); 64134ee09551764b045fdc02df754157473125edf60Kevin Tang } 64234ee09551764b045fdc02df754157473125edf60Kevin Tang EXIT_LOG(%p, ret_val); 64334ee09551764b045fdc02df754157473125edf60Kevin Tang return ret_val; 64434ee09551764b045fdc02df754157473125edf60Kevin Tang} 64534ee09551764b045fdc02df754157473125edf60Kevin Tang 64634ee09551764b045fdc02df754157473125edf60Kevin Tang/*=========================================================================== 64734ee09551764b045fdc02df754157473125edf60Kevin TangFUNCTION loc_agps_init 64834ee09551764b045fdc02df754157473125edf60Kevin Tang 64934ee09551764b045fdc02df754157473125edf60Kevin TangDESCRIPTION 65034ee09551764b045fdc02df754157473125edf60Kevin Tang Initialize the AGps interface. 65134ee09551764b045fdc02df754157473125edf60Kevin Tang 65234ee09551764b045fdc02df754157473125edf60Kevin TangDEPENDENCIES 65334ee09551764b045fdc02df754157473125edf60Kevin Tang NONE 65434ee09551764b045fdc02df754157473125edf60Kevin Tang 65534ee09551764b045fdc02df754157473125edf60Kevin TangRETURN VALUE 65634ee09551764b045fdc02df754157473125edf60Kevin Tang 0 65734ee09551764b045fdc02df754157473125edf60Kevin Tang 65834ee09551764b045fdc02df754157473125edf60Kevin TangSIDE EFFECTS 65934ee09551764b045fdc02df754157473125edf60Kevin Tang N/A 66034ee09551764b045fdc02df754157473125edf60Kevin Tang 66134ee09551764b045fdc02df754157473125edf60Kevin Tang===========================================================================*/ 66234ee09551764b045fdc02df754157473125edf60Kevin Tangstatic void loc_agps_init(AGpsCallbacks* callbacks) 66334ee09551764b045fdc02df754157473125edf60Kevin Tang{ 66434ee09551764b045fdc02df754157473125edf60Kevin Tang ENTRY_LOG(); 665e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo loc_eng_agps_init(loc_afw_data, (AGpsExtCallbacks*)callbacks); 66634ee09551764b045fdc02df754157473125edf60Kevin Tang EXIT_LOG(%s, VOID_RET); 66734ee09551764b045fdc02df754157473125edf60Kevin Tang} 66834ee09551764b045fdc02df754157473125edf60Kevin Tang 66934ee09551764b045fdc02df754157473125edf60Kevin Tang/*=========================================================================== 67034ee09551764b045fdc02df754157473125edf60Kevin TangFUNCTION loc_agps_open 67134ee09551764b045fdc02df754157473125edf60Kevin Tang 67234ee09551764b045fdc02df754157473125edf60Kevin TangDESCRIPTION 67334ee09551764b045fdc02df754157473125edf60Kevin Tang This function is called when on-demand data connection opening is successful. 67434ee09551764b045fdc02df754157473125edf60Kevin TangIt should inform ARM 9 about the data open result. 67534ee09551764b045fdc02df754157473125edf60Kevin Tang 67634ee09551764b045fdc02df754157473125edf60Kevin TangDEPENDENCIES 67734ee09551764b045fdc02df754157473125edf60Kevin Tang NONE 67834ee09551764b045fdc02df754157473125edf60Kevin Tang 67934ee09551764b045fdc02df754157473125edf60Kevin TangRETURN VALUE 68034ee09551764b045fdc02df754157473125edf60Kevin Tang 0 68134ee09551764b045fdc02df754157473125edf60Kevin Tang 68234ee09551764b045fdc02df754157473125edf60Kevin TangSIDE EFFECTS 68334ee09551764b045fdc02df754157473125edf60Kevin Tang N/A 68434ee09551764b045fdc02df754157473125edf60Kevin Tang 68534ee09551764b045fdc02df754157473125edf60Kevin Tang===========================================================================*/ 68634ee09551764b045fdc02df754157473125edf60Kevin Tangstatic int loc_agps_open(const char* apn) 68734ee09551764b045fdc02df754157473125edf60Kevin Tang{ 68834ee09551764b045fdc02df754157473125edf60Kevin Tang ENTRY_LOG(); 689e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo AGpsType agpsType = AGPS_TYPE_SUPL; 690e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo AGpsBearerType bearerType = AGPS_APN_BEARER_IPV4; 691e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo int ret_val = loc_eng_agps_open(loc_afw_data, agpsType, apn, bearerType); 69234ee09551764b045fdc02df754157473125edf60Kevin Tang 69334ee09551764b045fdc02df754157473125edf60Kevin Tang EXIT_LOG(%d, ret_val); 69434ee09551764b045fdc02df754157473125edf60Kevin Tang return ret_val; 69534ee09551764b045fdc02df754157473125edf60Kevin Tang} 69634ee09551764b045fdc02df754157473125edf60Kevin Tang 69734ee09551764b045fdc02df754157473125edf60Kevin Tang/*=========================================================================== 6980d00b9e0690547ad06eef43a5f1c77a31e8885dcDante RussoFUNCTION loc_agps_open_with_apniptype 6990d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo 7000d00b9e0690547ad06eef43a5f1c77a31e8885dcDante RussoDESCRIPTION 7010d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo This function is called when on-demand data connection opening is successful. 7020d00b9e0690547ad06eef43a5f1c77a31e8885dcDante RussoIt should inform ARM 9 about the data open result. 7030d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo 7040d00b9e0690547ad06eef43a5f1c77a31e8885dcDante RussoDEPENDENCIES 7050d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo NONE 7060d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo 7070d00b9e0690547ad06eef43a5f1c77a31e8885dcDante RussoRETURN VALUE 7080d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo 0 7090d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo 7100d00b9e0690547ad06eef43a5f1c77a31e8885dcDante RussoSIDE EFFECTS 7110d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo N/A 7120d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo 7130d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo===========================================================================*/ 7140d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russostatic int loc_agps_open_with_apniptype(const char* apn, ApnIpType apnIpType) 7150d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo{ 7160d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo ENTRY_LOG(); 7170d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo AGpsType agpsType = AGPS_TYPE_SUPL; 7180d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo AGpsBearerType bearerType; 7190d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo 7200d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo switch (apnIpType) { 7210d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo case APN_IP_IPV4: 7220d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo bearerType = AGPS_APN_BEARER_IPV4; 7230d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo break; 7240d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo case APN_IP_IPV6: 7250d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo bearerType = AGPS_APN_BEARER_IPV6; 7260d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo break; 7270d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo case APN_IP_IPV4V6: 7280d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo bearerType = AGPS_APN_BEARER_IPV4V6; 7290d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo break; 7300d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo default: 731d7b1204cc565f482a6067953cebe25b16cc2a148Dante Russo bearerType = AGPS_APN_BEARER_IPV4; 7320d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo break; 7330d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo } 7340d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo 7350d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo int ret_val = loc_eng_agps_open(loc_afw_data, agpsType, apn, bearerType); 7360d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo 7370d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo EXIT_LOG(%d, ret_val); 7380d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo return ret_val; 7390d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo} 7400d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo 7410d00b9e0690547ad06eef43a5f1c77a31e8885dcDante Russo/*=========================================================================== 74234ee09551764b045fdc02df754157473125edf60Kevin TangFUNCTION loc_agps_closed 74334ee09551764b045fdc02df754157473125edf60Kevin Tang 74434ee09551764b045fdc02df754157473125edf60Kevin TangDESCRIPTION 74534ee09551764b045fdc02df754157473125edf60Kevin Tang This function is called when on-demand data connection closing is done. 74634ee09551764b045fdc02df754157473125edf60Kevin TangIt should inform ARM 9 about the data close result. 74734ee09551764b045fdc02df754157473125edf60Kevin Tang 74834ee09551764b045fdc02df754157473125edf60Kevin TangDEPENDENCIES 74934ee09551764b045fdc02df754157473125edf60Kevin Tang NONE 75034ee09551764b045fdc02df754157473125edf60Kevin Tang 75134ee09551764b045fdc02df754157473125edf60Kevin TangRETURN VALUE 75234ee09551764b045fdc02df754157473125edf60Kevin Tang 0 75334ee09551764b045fdc02df754157473125edf60Kevin Tang 75434ee09551764b045fdc02df754157473125edf60Kevin TangSIDE EFFECTS 75534ee09551764b045fdc02df754157473125edf60Kevin Tang N/A 75634ee09551764b045fdc02df754157473125edf60Kevin Tang 75734ee09551764b045fdc02df754157473125edf60Kevin Tang===========================================================================*/ 75834ee09551764b045fdc02df754157473125edf60Kevin Tangstatic int loc_agps_closed() 75934ee09551764b045fdc02df754157473125edf60Kevin Tang{ 76034ee09551764b045fdc02df754157473125edf60Kevin Tang ENTRY_LOG(); 761e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo AGpsType agpsType = AGPS_TYPE_SUPL; 762e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo int ret_val = loc_eng_agps_closed(loc_afw_data, agpsType); 76334ee09551764b045fdc02df754157473125edf60Kevin Tang 76434ee09551764b045fdc02df754157473125edf60Kevin Tang EXIT_LOG(%d, ret_val); 76534ee09551764b045fdc02df754157473125edf60Kevin Tang return ret_val; 76634ee09551764b045fdc02df754157473125edf60Kevin Tang} 76734ee09551764b045fdc02df754157473125edf60Kevin Tang 76834ee09551764b045fdc02df754157473125edf60Kevin Tang/*=========================================================================== 76934ee09551764b045fdc02df754157473125edf60Kevin TangFUNCTION loc_agps_open_failed 77034ee09551764b045fdc02df754157473125edf60Kevin Tang 77134ee09551764b045fdc02df754157473125edf60Kevin TangDESCRIPTION 77234ee09551764b045fdc02df754157473125edf60Kevin Tang This function is called when on-demand data connection opening has failed. 77334ee09551764b045fdc02df754157473125edf60Kevin TangIt should inform ARM 9 about the data open result. 77434ee09551764b045fdc02df754157473125edf60Kevin Tang 77534ee09551764b045fdc02df754157473125edf60Kevin TangDEPENDENCIES 77634ee09551764b045fdc02df754157473125edf60Kevin Tang NONE 77734ee09551764b045fdc02df754157473125edf60Kevin Tang 77834ee09551764b045fdc02df754157473125edf60Kevin TangRETURN VALUE 77934ee09551764b045fdc02df754157473125edf60Kevin Tang 0 78034ee09551764b045fdc02df754157473125edf60Kevin Tang 78134ee09551764b045fdc02df754157473125edf60Kevin TangSIDE EFFECTS 78234ee09551764b045fdc02df754157473125edf60Kevin Tang N/A 78334ee09551764b045fdc02df754157473125edf60Kevin Tang 78434ee09551764b045fdc02df754157473125edf60Kevin Tang===========================================================================*/ 78534ee09551764b045fdc02df754157473125edf60Kevin Tangint loc_agps_open_failed() 78634ee09551764b045fdc02df754157473125edf60Kevin Tang{ 78734ee09551764b045fdc02df754157473125edf60Kevin Tang ENTRY_LOG(); 788e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo AGpsType agpsType = AGPS_TYPE_SUPL; 789e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo int ret_val = loc_eng_agps_open_failed(loc_afw_data, agpsType); 79034ee09551764b045fdc02df754157473125edf60Kevin Tang 79134ee09551764b045fdc02df754157473125edf60Kevin Tang EXIT_LOG(%d, ret_val); 79234ee09551764b045fdc02df754157473125edf60Kevin Tang return ret_val; 79334ee09551764b045fdc02df754157473125edf60Kevin Tang} 79434ee09551764b045fdc02df754157473125edf60Kevin Tang 79534ee09551764b045fdc02df754157473125edf60Kevin Tang/*=========================================================================== 79634ee09551764b045fdc02df754157473125edf60Kevin TangFUNCTION loc_agps_set_server 79734ee09551764b045fdc02df754157473125edf60Kevin Tang 79834ee09551764b045fdc02df754157473125edf60Kevin TangDESCRIPTION 79934ee09551764b045fdc02df754157473125edf60Kevin Tang If loc_eng_set_server is called before loc_eng_init, it doesn't work. This 80034ee09551764b045fdc02df754157473125edf60Kevin Tang proxy buffers server settings and calls loc_eng_set_server when the client is 80134ee09551764b045fdc02df754157473125edf60Kevin Tang open. 80234ee09551764b045fdc02df754157473125edf60Kevin Tang 80334ee09551764b045fdc02df754157473125edf60Kevin TangDEPENDENCIES 80434ee09551764b045fdc02df754157473125edf60Kevin Tang NONE 80534ee09551764b045fdc02df754157473125edf60Kevin Tang 80634ee09551764b045fdc02df754157473125edf60Kevin TangRETURN VALUE 80734ee09551764b045fdc02df754157473125edf60Kevin Tang 0 80834ee09551764b045fdc02df754157473125edf60Kevin Tang 80934ee09551764b045fdc02df754157473125edf60Kevin TangSIDE EFFECTS 81034ee09551764b045fdc02df754157473125edf60Kevin Tang N/A 81134ee09551764b045fdc02df754157473125edf60Kevin Tang 81234ee09551764b045fdc02df754157473125edf60Kevin Tang===========================================================================*/ 81334ee09551764b045fdc02df754157473125edf60Kevin Tangstatic int loc_agps_set_server(AGpsType type, const char* hostname, int port) 81434ee09551764b045fdc02df754157473125edf60Kevin Tang{ 81534ee09551764b045fdc02df754157473125edf60Kevin Tang ENTRY_LOG(); 81634ee09551764b045fdc02df754157473125edf60Kevin Tang LocServerType serverType; 81734ee09551764b045fdc02df754157473125edf60Kevin Tang switch (type) { 81834ee09551764b045fdc02df754157473125edf60Kevin Tang case AGPS_TYPE_SUPL: 81934ee09551764b045fdc02df754157473125edf60Kevin Tang serverType = LOC_AGPS_SUPL_SERVER; 82034ee09551764b045fdc02df754157473125edf60Kevin Tang break; 82134ee09551764b045fdc02df754157473125edf60Kevin Tang case AGPS_TYPE_C2K: 82234ee09551764b045fdc02df754157473125edf60Kevin Tang serverType = LOC_AGPS_CDMA_PDE_SERVER; 82334ee09551764b045fdc02df754157473125edf60Kevin Tang break; 824e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo default: 825e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo serverType = LOC_AGPS_SUPL_SERVER; 82634ee09551764b045fdc02df754157473125edf60Kevin Tang } 82734ee09551764b045fdc02df754157473125edf60Kevin Tang int ret_val = loc_eng_set_server_proxy(loc_afw_data, serverType, hostname, port); 82834ee09551764b045fdc02df754157473125edf60Kevin Tang 82934ee09551764b045fdc02df754157473125edf60Kevin Tang EXIT_LOG(%d, ret_val); 83034ee09551764b045fdc02df754157473125edf60Kevin Tang return ret_val; 83134ee09551764b045fdc02df754157473125edf60Kevin Tang} 83234ee09551764b045fdc02df754157473125edf60Kevin Tang 83334ee09551764b045fdc02df754157473125edf60Kevin Tang/*=========================================================================== 834e14a6c846df2ce4bb1847e4250991f7c52fd793dDante RussoFUNCTIONf571 835e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo loc_xtra_init 83634ee09551764b045fdc02df754157473125edf60Kevin Tang 83734ee09551764b045fdc02df754157473125edf60Kevin TangDESCRIPTION 83834ee09551764b045fdc02df754157473125edf60Kevin Tang Initialize XTRA module. 83934ee09551764b045fdc02df754157473125edf60Kevin Tang 84034ee09551764b045fdc02df754157473125edf60Kevin TangDEPENDENCIES 84134ee09551764b045fdc02df754157473125edf60Kevin Tang None 84234ee09551764b045fdc02df754157473125edf60Kevin Tang 84334ee09551764b045fdc02df754157473125edf60Kevin TangRETURN VALUE 84434ee09551764b045fdc02df754157473125edf60Kevin Tang 0: success 84534ee09551764b045fdc02df754157473125edf60Kevin Tang 84634ee09551764b045fdc02df754157473125edf60Kevin TangSIDE EFFECTS 84734ee09551764b045fdc02df754157473125edf60Kevin Tang N/A 84834ee09551764b045fdc02df754157473125edf60Kevin Tang 84934ee09551764b045fdc02df754157473125edf60Kevin Tang===========================================================================*/ 85034ee09551764b045fdc02df754157473125edf60Kevin Tangstatic int loc_xtra_init(GpsXtraCallbacks* callbacks) 85134ee09551764b045fdc02df754157473125edf60Kevin Tang{ 85234ee09551764b045fdc02df754157473125edf60Kevin Tang ENTRY_LOG(); 8530c7fdf015bfdb33b14a990b280c38386cb8e1f9cVineeta Srivastava GpsXtraExtCallbacks extCallbacks; 8540c7fdf015bfdb33b14a990b280c38386cb8e1f9cVineeta Srivastava memset(&extCallbacks, 0, sizeof(extCallbacks)); 8550c7fdf015bfdb33b14a990b280c38386cb8e1f9cVineeta Srivastava extCallbacks.download_request_cb = callbacks->download_request_cb; 8560c7fdf015bfdb33b14a990b280c38386cb8e1f9cVineeta Srivastava int ret_val = loc_eng_xtra_init(loc_afw_data, &extCallbacks); 85734ee09551764b045fdc02df754157473125edf60Kevin Tang 85834ee09551764b045fdc02df754157473125edf60Kevin Tang EXIT_LOG(%d, ret_val); 85934ee09551764b045fdc02df754157473125edf60Kevin Tang return ret_val; 86034ee09551764b045fdc02df754157473125edf60Kevin Tang} 86134ee09551764b045fdc02df754157473125edf60Kevin Tang 86234ee09551764b045fdc02df754157473125edf60Kevin Tang 86334ee09551764b045fdc02df754157473125edf60Kevin Tang/*=========================================================================== 86434ee09551764b045fdc02df754157473125edf60Kevin TangFUNCTION loc_xtra_inject_data 86534ee09551764b045fdc02df754157473125edf60Kevin Tang 86634ee09551764b045fdc02df754157473125edf60Kevin TangDESCRIPTION 86734ee09551764b045fdc02df754157473125edf60Kevin Tang Initialize XTRA module. 86834ee09551764b045fdc02df754157473125edf60Kevin Tang 86934ee09551764b045fdc02df754157473125edf60Kevin TangDEPENDENCIES 87034ee09551764b045fdc02df754157473125edf60Kevin Tang None 87134ee09551764b045fdc02df754157473125edf60Kevin Tang 87234ee09551764b045fdc02df754157473125edf60Kevin TangRETURN VALUE 87334ee09551764b045fdc02df754157473125edf60Kevin Tang 0: success 87434ee09551764b045fdc02df754157473125edf60Kevin Tang 87534ee09551764b045fdc02df754157473125edf60Kevin TangSIDE EFFECTS 87634ee09551764b045fdc02df754157473125edf60Kevin Tang N/A 87734ee09551764b045fdc02df754157473125edf60Kevin Tang 87834ee09551764b045fdc02df754157473125edf60Kevin Tang===========================================================================*/ 87934ee09551764b045fdc02df754157473125edf60Kevin Tangstatic int loc_xtra_inject_data(char* data, int length) 88034ee09551764b045fdc02df754157473125edf60Kevin Tang{ 88134ee09551764b045fdc02df754157473125edf60Kevin Tang ENTRY_LOG(); 882bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo int ret_val = -1; 883bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo if( (data != NULL) && ((unsigned int)length <= XTRA_DATA_MAX_SIZE)) 884bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo ret_val = loc_eng_xtra_inject_data(loc_afw_data, data, length); 885bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo else 886bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo LOC_LOGE("%s, Could not inject XTRA data. Buffer address: %p, length: %d", 887bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo __func__, data, length); 88834ee09551764b045fdc02df754157473125edf60Kevin Tang EXIT_LOG(%d, ret_val); 88934ee09551764b045fdc02df754157473125edf60Kevin Tang return ret_val; 89034ee09551764b045fdc02df754157473125edf60Kevin Tang} 89134ee09551764b045fdc02df754157473125edf60Kevin Tang 89234ee09551764b045fdc02df754157473125edf60Kevin Tang/*=========================================================================== 8938aac9d301fc5aa83071492803f4335b73f2604e3Vineeta SrivastavaFUNCTION loc_gps_measurement_init 8948aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava 8958aac9d301fc5aa83071492803f4335b73f2604e3Vineeta SrivastavaDESCRIPTION 8968aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava This function initializes the gps measurement interface 8978aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava 8988aac9d301fc5aa83071492803f4335b73f2604e3Vineeta SrivastavaDEPENDENCIES 8998aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava NONE 9008aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava 9018aac9d301fc5aa83071492803f4335b73f2604e3Vineeta SrivastavaRETURN VALUE 9028aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava None 9038aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava 9048aac9d301fc5aa83071492803f4335b73f2604e3Vineeta SrivastavaSIDE EFFECTS 9058aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava N/A 9068aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava 9078aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava===========================================================================*/ 9088aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastavastatic int loc_gps_measurement_init(GpsMeasurementCallbacks* callbacks) 9098aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava{ 9108aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava ENTRY_LOG(); 9118aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava int ret_val = loc_eng_gps_measurement_init(loc_afw_data, 9128aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava callbacks); 9138aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava 9148aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava EXIT_LOG(%d, ret_val); 9158aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava return ret_val; 9168aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava} 9178aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava 9188aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava/*=========================================================================== 9198aac9d301fc5aa83071492803f4335b73f2604e3Vineeta SrivastavaFUNCTION loc_gps_measurement_close 9208aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava 9218aac9d301fc5aa83071492803f4335b73f2604e3Vineeta SrivastavaDESCRIPTION 9228aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava This function closes the gps measurement interface 9238aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava 9248aac9d301fc5aa83071492803f4335b73f2604e3Vineeta SrivastavaDEPENDENCIES 9258aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava NONE 9268aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava 9278aac9d301fc5aa83071492803f4335b73f2604e3Vineeta SrivastavaRETURN VALUE 9288aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava None 9298aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava 9308aac9d301fc5aa83071492803f4335b73f2604e3Vineeta SrivastavaSIDE EFFECTS 9318aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava N/A 9328aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava 9338aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava===========================================================================*/ 9348aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastavastatic void loc_gps_measurement_close() 9358aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava{ 9368aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava ENTRY_LOG(); 9378aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava loc_eng_gps_measurement_close(loc_afw_data); 9388aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava 9398aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava EXIT_LOG(%s, VOID_RET); 9408aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava} 9418aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava 9428aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava/*=========================================================================== 94334ee09551764b045fdc02df754157473125edf60Kevin TangFUNCTION loc_ni_init 94434ee09551764b045fdc02df754157473125edf60Kevin Tang 94534ee09551764b045fdc02df754157473125edf60Kevin TangDESCRIPTION 94634ee09551764b045fdc02df754157473125edf60Kevin Tang This function initializes the NI interface 94734ee09551764b045fdc02df754157473125edf60Kevin Tang 94834ee09551764b045fdc02df754157473125edf60Kevin TangDEPENDENCIES 94934ee09551764b045fdc02df754157473125edf60Kevin Tang NONE 95034ee09551764b045fdc02df754157473125edf60Kevin Tang 95134ee09551764b045fdc02df754157473125edf60Kevin TangRETURN VALUE 95234ee09551764b045fdc02df754157473125edf60Kevin Tang None 95334ee09551764b045fdc02df754157473125edf60Kevin Tang 95434ee09551764b045fdc02df754157473125edf60Kevin TangSIDE EFFECTS 95534ee09551764b045fdc02df754157473125edf60Kevin Tang N/A 95634ee09551764b045fdc02df754157473125edf60Kevin Tang 95734ee09551764b045fdc02df754157473125edf60Kevin Tang===========================================================================*/ 95834ee09551764b045fdc02df754157473125edf60Kevin Tangvoid loc_ni_init(GpsNiCallbacks *callbacks) 95934ee09551764b045fdc02df754157473125edf60Kevin Tang{ 96034ee09551764b045fdc02df754157473125edf60Kevin Tang ENTRY_LOG(); 961e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo loc_eng_ni_init(loc_afw_data,(GpsNiExtCallbacks*) callbacks); 96234ee09551764b045fdc02df754157473125edf60Kevin Tang EXIT_LOG(%s, VOID_RET); 96334ee09551764b045fdc02df754157473125edf60Kevin Tang} 96434ee09551764b045fdc02df754157473125edf60Kevin Tang 96534ee09551764b045fdc02df754157473125edf60Kevin Tang/*=========================================================================== 96634ee09551764b045fdc02df754157473125edf60Kevin TangFUNCTION loc_ni_respond 96734ee09551764b045fdc02df754157473125edf60Kevin Tang 96834ee09551764b045fdc02df754157473125edf60Kevin TangDESCRIPTION 96934ee09551764b045fdc02df754157473125edf60Kevin Tang This function sends an NI respond to the modem processor 97034ee09551764b045fdc02df754157473125edf60Kevin Tang 97134ee09551764b045fdc02df754157473125edf60Kevin TangDEPENDENCIES 97234ee09551764b045fdc02df754157473125edf60Kevin Tang NONE 97334ee09551764b045fdc02df754157473125edf60Kevin Tang 97434ee09551764b045fdc02df754157473125edf60Kevin TangRETURN VALUE 97534ee09551764b045fdc02df754157473125edf60Kevin Tang None 97634ee09551764b045fdc02df754157473125edf60Kevin Tang 97734ee09551764b045fdc02df754157473125edf60Kevin TangSIDE EFFECTS 97834ee09551764b045fdc02df754157473125edf60Kevin Tang N/A 97934ee09551764b045fdc02df754157473125edf60Kevin Tang 98034ee09551764b045fdc02df754157473125edf60Kevin Tang===========================================================================*/ 98134ee09551764b045fdc02df754157473125edf60Kevin Tangvoid loc_ni_respond(int notif_id, GpsUserResponseType user_response) 98234ee09551764b045fdc02df754157473125edf60Kevin Tang{ 98334ee09551764b045fdc02df754157473125edf60Kevin Tang ENTRY_LOG(); 98434ee09551764b045fdc02df754157473125edf60Kevin Tang loc_eng_ni_respond(loc_afw_data, notif_id, user_response); 98534ee09551764b045fdc02df754157473125edf60Kevin Tang EXIT_LOG(%s, VOID_RET); 98634ee09551764b045fdc02df754157473125edf60Kevin Tang} 98734ee09551764b045fdc02df754157473125edf60Kevin Tang 9882863c4092108a764d8537b453e66357939e19062Kevin Tang// for XTRA 9892863c4092108a764d8537b453e66357939e19062Kevin Tangstatic inline int createSocket() { 9902863c4092108a764d8537b453e66357939e19062Kevin Tang int socketFd = -1; 9912863c4092108a764d8537b453e66357939e19062Kevin Tang 9922863c4092108a764d8537b453e66357939e19062Kevin Tang if ((socketFd = socket(AF_UNIX, SOCK_STREAM, 0)) < 0) { 9932863c4092108a764d8537b453e66357939e19062Kevin Tang LOC_LOGe("create socket error. reason:%s", strerror(errno)); 9942863c4092108a764d8537b453e66357939e19062Kevin Tang 9952863c4092108a764d8537b453e66357939e19062Kevin Tang } else { 9962863c4092108a764d8537b453e66357939e19062Kevin Tang const char* socketPath = "/data/misc/location/xtra/socket_hal_xtra"; 9972863c4092108a764d8537b453e66357939e19062Kevin Tang struct sockaddr_un addr = { .sun_family = AF_UNIX }; 9982863c4092108a764d8537b453e66357939e19062Kevin Tang snprintf(addr.sun_path, sizeof(addr.sun_path), "%s", socketPath); 9992863c4092108a764d8537b453e66357939e19062Kevin Tang 10002863c4092108a764d8537b453e66357939e19062Kevin Tang if (::connect(socketFd, (struct sockaddr*)&addr, sizeof(addr)) < 0) { 10012863c4092108a764d8537b453e66357939e19062Kevin Tang LOC_LOGe("cannot connect to XTRA. reason:%s", strerror(errno)); 10022863c4092108a764d8537b453e66357939e19062Kevin Tang if (::close(socketFd)) { 10032863c4092108a764d8537b453e66357939e19062Kevin Tang LOC_LOGe("close socket error. reason:%s", strerror(errno)); 10042863c4092108a764d8537b453e66357939e19062Kevin Tang } 10052863c4092108a764d8537b453e66357939e19062Kevin Tang socketFd = -1; 10062863c4092108a764d8537b453e66357939e19062Kevin Tang } 10072863c4092108a764d8537b453e66357939e19062Kevin Tang } 10082863c4092108a764d8537b453e66357939e19062Kevin Tang 10092863c4092108a764d8537b453e66357939e19062Kevin Tang return socketFd; 10102863c4092108a764d8537b453e66357939e19062Kevin Tang} 10112863c4092108a764d8537b453e66357939e19062Kevin Tang 10122863c4092108a764d8537b453e66357939e19062Kevin Tangstatic inline void closeSocket(const int socketFd) { 10132863c4092108a764d8537b453e66357939e19062Kevin Tang if (socketFd >= 0) { 10142863c4092108a764d8537b453e66357939e19062Kevin Tang if(::close(socketFd)) { 10152863c4092108a764d8537b453e66357939e19062Kevin Tang LOC_LOGe("close socket error. reason:%s", strerror(errno)); 10162863c4092108a764d8537b453e66357939e19062Kevin Tang } 10172863c4092108a764d8537b453e66357939e19062Kevin Tang } 10182863c4092108a764d8537b453e66357939e19062Kevin Tang} 10192863c4092108a764d8537b453e66357939e19062Kevin Tang 10202863c4092108a764d8537b453e66357939e19062Kevin Tangstatic inline bool sendConnectionEvent(const bool connected, const uint8_t type) { 10212863c4092108a764d8537b453e66357939e19062Kevin Tang int socketFd = createSocket(); 10222863c4092108a764d8537b453e66357939e19062Kevin Tang if (socketFd < 0) { 10232863c4092108a764d8537b453e66357939e19062Kevin Tang LOC_LOGe("XTRA unreachable. sending failed."); 10242863c4092108a764d8537b453e66357939e19062Kevin Tang return false; 10252863c4092108a764d8537b453e66357939e19062Kevin Tang } 10262863c4092108a764d8537b453e66357939e19062Kevin Tang 10272863c4092108a764d8537b453e66357939e19062Kevin Tang std::stringstream ss; 10282863c4092108a764d8537b453e66357939e19062Kevin Tang ss << "connection"; 10292863c4092108a764d8537b453e66357939e19062Kevin Tang ss << " " << (connected ? "1" : "0"); 10302863c4092108a764d8537b453e66357939e19062Kevin Tang ss << " " << type; 10312863c4092108a764d8537b453e66357939e19062Kevin Tang ss << "\n"; // append seperator 10322863c4092108a764d8537b453e66357939e19062Kevin Tang 10332863c4092108a764d8537b453e66357939e19062Kevin Tang const std::string& data = ss.str(); 10342863c4092108a764d8537b453e66357939e19062Kevin Tang int remain = data.length(); 10352863c4092108a764d8537b453e66357939e19062Kevin Tang ssize_t sent = 0; 10362863c4092108a764d8537b453e66357939e19062Kevin Tang 10372863c4092108a764d8537b453e66357939e19062Kevin Tang while (remain > 0 && 10382863c4092108a764d8537b453e66357939e19062Kevin Tang (sent = ::send(socketFd, data.c_str() + (data.length() - remain), 10392863c4092108a764d8537b453e66357939e19062Kevin Tang remain, MSG_NOSIGNAL)) > 0) { 10402863c4092108a764d8537b453e66357939e19062Kevin Tang remain -= sent; 10412863c4092108a764d8537b453e66357939e19062Kevin Tang } 10422863c4092108a764d8537b453e66357939e19062Kevin Tang 10432863c4092108a764d8537b453e66357939e19062Kevin Tang if (sent < 0) { 10442863c4092108a764d8537b453e66357939e19062Kevin Tang LOC_LOGe("sending error. reason:%s", strerror(errno)); 10452863c4092108a764d8537b453e66357939e19062Kevin Tang } 10462863c4092108a764d8537b453e66357939e19062Kevin Tang 10472863c4092108a764d8537b453e66357939e19062Kevin Tang closeSocket(socketFd); 10482863c4092108a764d8537b453e66357939e19062Kevin Tang 10492863c4092108a764d8537b453e66357939e19062Kevin Tang return (remain == 0); 10502863c4092108a764d8537b453e66357939e19062Kevin Tang} 10512863c4092108a764d8537b453e66357939e19062Kevin Tang 105234ee09551764b045fdc02df754157473125edf60Kevin Tang// Below stub functions are members of sLocEngAGpsRilInterface 105334ee09551764b045fdc02df754157473125edf60Kevin Tangstatic void loc_agps_ril_init( AGpsRilCallbacks* callbacks ) {} 105434ee09551764b045fdc02df754157473125edf60Kevin Tangstatic void loc_agps_ril_set_ref_location(const AGpsRefLocation *agps_reflocation, size_t sz_struct) {} 105534ee09551764b045fdc02df754157473125edf60Kevin Tangstatic void loc_agps_ril_set_set_id(AGpsSetIDType type, const char* setid) {} 105634ee09551764b045fdc02df754157473125edf60Kevin Tangstatic void loc_agps_ril_ni_message(uint8_t *msg, size_t len) {} 10572863c4092108a764d8537b453e66357939e19062Kevin Tangstatic void loc_agps_ril_update_network_state(int connected, int type, int roaming, const char* extra_info) { 10582863c4092108a764d8537b453e66357939e19062Kevin Tang // for XTRA 10592863c4092108a764d8537b453e66357939e19062Kevin Tang sendConnectionEvent((connected != 0) ? true : false, 10602863c4092108a764d8537b453e66357939e19062Kevin Tang (uint8_t)type); 10612863c4092108a764d8537b453e66357939e19062Kevin Tang} 106234ee09551764b045fdc02df754157473125edf60Kevin Tang 106334ee09551764b045fdc02df754157473125edf60Kevin Tang/*=========================================================================== 106434ee09551764b045fdc02df754157473125edf60Kevin TangFUNCTION loc_agps_ril_update_network_availability 106534ee09551764b045fdc02df754157473125edf60Kevin Tang 106634ee09551764b045fdc02df754157473125edf60Kevin TangDESCRIPTION 106734ee09551764b045fdc02df754157473125edf60Kevin Tang Sets data call allow vs disallow flag to modem 106834ee09551764b045fdc02df754157473125edf60Kevin Tang This is the only member of sLocEngAGpsRilInterface implemented. 106934ee09551764b045fdc02df754157473125edf60Kevin Tang 107034ee09551764b045fdc02df754157473125edf60Kevin TangDEPENDENCIES 107134ee09551764b045fdc02df754157473125edf60Kevin Tang None 107234ee09551764b045fdc02df754157473125edf60Kevin Tang 107334ee09551764b045fdc02df754157473125edf60Kevin TangRETURN VALUE 107434ee09551764b045fdc02df754157473125edf60Kevin Tang 0: success 107534ee09551764b045fdc02df754157473125edf60Kevin Tang 107634ee09551764b045fdc02df754157473125edf60Kevin TangSIDE EFFECTS 107734ee09551764b045fdc02df754157473125edf60Kevin Tang N/A 107834ee09551764b045fdc02df754157473125edf60Kevin Tang 107934ee09551764b045fdc02df754157473125edf60Kevin Tang===========================================================================*/ 108034ee09551764b045fdc02df754157473125edf60Kevin Tangstatic void loc_agps_ril_update_network_availability(int available, const char* apn) 108134ee09551764b045fdc02df754157473125edf60Kevin Tang{ 108234ee09551764b045fdc02df754157473125edf60Kevin Tang ENTRY_LOG(); 108334ee09551764b045fdc02df754157473125edf60Kevin Tang loc_eng_agps_ril_update_network_availability(loc_afw_data, available, apn); 108434ee09551764b045fdc02df754157473125edf60Kevin Tang EXIT_LOG(%s, VOID_RET); 108534ee09551764b045fdc02df754157473125edf60Kevin Tang} 108634ee09551764b045fdc02df754157473125edf60Kevin Tang 10871d4940024c54e7d1e63f73edd5054a18a7a01b63Dante Russostatic int loc_agps_install_certificates(const DerEncodedCertificate* certificates, 10881d4940024c54e7d1e63f73edd5054a18a7a01b63Dante Russo size_t length) 10891d4940024c54e7d1e63f73edd5054a18a7a01b63Dante Russo{ 10901d4940024c54e7d1e63f73edd5054a18a7a01b63Dante Russo ENTRY_LOG(); 10911d4940024c54e7d1e63f73edd5054a18a7a01b63Dante Russo int ret_val = loc_eng_agps_install_certificates(loc_afw_data, certificates, length); 10921d4940024c54e7d1e63f73edd5054a18a7a01b63Dante Russo EXIT_LOG(%d, ret_val); 10931d4940024c54e7d1e63f73edd5054a18a7a01b63Dante Russo return ret_val; 10941d4940024c54e7d1e63f73edd5054a18a7a01b63Dante Russo} 10951d4940024c54e7d1e63f73edd5054a18a7a01b63Dante Russostatic int loc_agps_revoke_certificates(const Sha1CertificateFingerprint* fingerprints, 10961d4940024c54e7d1e63f73edd5054a18a7a01b63Dante Russo size_t length) 10971d4940024c54e7d1e63f73edd5054a18a7a01b63Dante Russo{ 10981d4940024c54e7d1e63f73edd5054a18a7a01b63Dante Russo ENTRY_LOG(); 1099bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo LOC_LOGE("%s:%d]: agps_revoke_certificates not supported"); 11001d4940024c54e7d1e63f73edd5054a18a7a01b63Dante Russo int ret_val = AGPS_CERTIFICATE_ERROR_GENERIC; 11011d4940024c54e7d1e63f73edd5054a18a7a01b63Dante Russo EXIT_LOG(%d, ret_val); 11021d4940024c54e7d1e63f73edd5054a18a7a01b63Dante Russo return ret_val; 11031d4940024c54e7d1e63f73edd5054a18a7a01b63Dante Russo} 11041d4940024c54e7d1e63f73edd5054a18a7a01b63Dante Russo 1105fe660078f05f448ececb0b1170ecd79e600db440Kevin Tangstatic void loc_configuration_update(const char* config_data, int32_t length) 1106fe660078f05f448ececb0b1170ecd79e600db440Kevin Tang{ 1107fe660078f05f448ececb0b1170ecd79e600db440Kevin Tang ENTRY_LOG(); 1108fe660078f05f448ececb0b1170ecd79e600db440Kevin Tang loc_eng_configuration_update(loc_afw_data, config_data, length); 11090c7fdf015bfdb33b14a990b280c38386cb8e1f9cVineeta Srivastava switch (sGnssType) 11100c7fdf015bfdb33b14a990b280c38386cb8e1f9cVineeta Srivastava { 11110c7fdf015bfdb33b14a990b280c38386cb8e1f9cVineeta Srivastava case GNSS_GSS: 11120c7fdf015bfdb33b14a990b280c38386cb8e1f9cVineeta Srivastava case GNSS_AUTO: 11130c7fdf015bfdb33b14a990b280c38386cb8e1f9cVineeta Srivastava case GNSS_QCA1530: 11140c7fdf015bfdb33b14a990b280c38386cb8e1f9cVineeta Srivastava //APQ 11150c7fdf015bfdb33b14a990b280c38386cb8e1f9cVineeta Srivastava gps_conf.CAPABILITIES &= ~(GPS_CAPABILITY_MSA | GPS_CAPABILITY_MSB); 11160c7fdf015bfdb33b14a990b280c38386cb8e1f9cVineeta Srivastava break; 11170c7fdf015bfdb33b14a990b280c38386cb8e1f9cVineeta Srivastava } 1118fe660078f05f448ececb0b1170ecd79e600db440Kevin Tang EXIT_LOG(%s, VOID_RET); 1119fe660078f05f448ececb0b1170ecd79e600db440Kevin Tang} 1120fe660078f05f448ececb0b1170ecd79e600db440Kevin Tang 1121e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russostatic void local_loc_cb(UlpLocation* location, void* locExt) 112234ee09551764b045fdc02df754157473125edf60Kevin Tang{ 112334ee09551764b045fdc02df754157473125edf60Kevin Tang ENTRY_LOG(); 1124e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo if (NULL != location) { 112534ee09551764b045fdc02df754157473125edf60Kevin Tang CALLBACK_LOG_CALLFLOW("location_cb - from", %d, location->position_source); 1126e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo 1127e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo if (NULL != gps_loc_cb) { 1128e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo gps_loc_cb(&location->gpsLocation); 1129e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo } 113034ee09551764b045fdc02df754157473125edf60Kevin Tang } 113134ee09551764b045fdc02df754157473125edf60Kevin Tang EXIT_LOG(%s, VOID_RET); 113234ee09551764b045fdc02df754157473125edf60Kevin Tang} 113334ee09551764b045fdc02df754157473125edf60Kevin Tang 1134e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russostatic void local_sv_cb(GpsSvStatus* sv_status, void* svExt) 113534ee09551764b045fdc02df754157473125edf60Kevin Tang{ 113634ee09551764b045fdc02df754157473125edf60Kevin Tang ENTRY_LOG(); 113734ee09551764b045fdc02df754157473125edf60Kevin Tang if (NULL != gps_sv_cb) { 113834ee09551764b045fdc02df754157473125edf60Kevin Tang CALLBACK_LOG_CALLFLOW("sv_status_cb -", %d, sv_status->num_svs); 113934ee09551764b045fdc02df754157473125edf60Kevin Tang gps_sv_cb(sv_status); 114034ee09551764b045fdc02df754157473125edf60Kevin Tang } 114134ee09551764b045fdc02df754157473125edf60Kevin Tang EXIT_LOG(%s, VOID_RET); 114234ee09551764b045fdc02df754157473125edf60Kevin Tang} 11439aba726254999bab914b3eba81f65537c5bf5354Dante Russo 1144