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