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