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