1bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo/* Copyright (c) 2009-2014, The Linux Foundation. All rights reserved.
234ee09551764b045fdc02df754157473125edf60Kevin Tang *
334ee09551764b045fdc02df754157473125edf60Kevin Tang * Redistribution and use in source and binary forms, with or without
434ee09551764b045fdc02df754157473125edf60Kevin Tang * modification, are permitted provided that the following conditions are
534ee09551764b045fdc02df754157473125edf60Kevin Tang * met:
634ee09551764b045fdc02df754157473125edf60Kevin Tang *     * Redistributions of source code must retain the above copyright
734ee09551764b045fdc02df754157473125edf60Kevin Tang *       notice, this list of conditions and the following disclaimer.
834ee09551764b045fdc02df754157473125edf60Kevin Tang *     * Redistributions in binary form must reproduce the above
934ee09551764b045fdc02df754157473125edf60Kevin Tang *       copyright notice, this list of conditions and the following
1034ee09551764b045fdc02df754157473125edf60Kevin Tang *       disclaimer in the documentation and/or other materials provided
1134ee09551764b045fdc02df754157473125edf60Kevin Tang *       with the distribution.
12e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo *     * Neither the name of The Linux Foundation, nor the names of its
1334ee09551764b045fdc02df754157473125edf60Kevin Tang *       contributors may be used to endorse or promote products derived
1434ee09551764b045fdc02df754157473125edf60Kevin Tang *       from this software without specific prior written permission.
1534ee09551764b045fdc02df754157473125edf60Kevin Tang *
1634ee09551764b045fdc02df754157473125edf60Kevin Tang * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
1734ee09551764b045fdc02df754157473125edf60Kevin Tang * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
1834ee09551764b045fdc02df754157473125edf60Kevin Tang * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
1934ee09551764b045fdc02df754157473125edf60Kevin Tang * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
2034ee09551764b045fdc02df754157473125edf60Kevin Tang * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
2134ee09551764b045fdc02df754157473125edf60Kevin Tang * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
2234ee09551764b045fdc02df754157473125edf60Kevin Tang * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
2334ee09551764b045fdc02df754157473125edf60Kevin Tang * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
2434ee09551764b045fdc02df754157473125edf60Kevin Tang * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
2534ee09551764b045fdc02df754157473125edf60Kevin Tang * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
2634ee09551764b045fdc02df754157473125edf60Kevin Tang * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2734ee09551764b045fdc02df754157473125edf60Kevin Tang *
2834ee09551764b045fdc02df754157473125edf60Kevin Tang */
2934ee09551764b045fdc02df754157473125edf60Kevin Tang
3034ee09551764b045fdc02df754157473125edf60Kevin Tang#ifndef LOC_ENG_H
3134ee09551764b045fdc02df754157473125edf60Kevin Tang#define LOC_ENG_H
3234ee09551764b045fdc02df754157473125edf60Kevin Tang
3334ee09551764b045fdc02df754157473125edf60Kevin Tang#ifdef __cplusplus
3434ee09551764b045fdc02df754157473125edf60Kevin Tangextern "C" {
3534ee09551764b045fdc02df754157473125edf60Kevin Tang#endif /* __cplusplus */
3634ee09551764b045fdc02df754157473125edf60Kevin Tang
3734ee09551764b045fdc02df754157473125edf60Kevin Tang// Uncomment to keep all LOG messages (LOGD, LOGI, LOGV, etc.)
3834ee09551764b045fdc02df754157473125edf60Kevin Tang#define MAX_NUM_ATL_CONNECTIONS  2
39e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo
4034ee09551764b045fdc02df754157473125edf60Kevin Tang// Define boolean type to be used by libgps on loc api module
4134ee09551764b045fdc02df754157473125edf60Kevin Tangtypedef unsigned char boolean;
4234ee09551764b045fdc02df754157473125edf60Kevin Tang
4334ee09551764b045fdc02df754157473125edf60Kevin Tang#ifndef TRUE
4434ee09551764b045fdc02df754157473125edf60Kevin Tang#define TRUE 1
4534ee09551764b045fdc02df754157473125edf60Kevin Tang#endif
4634ee09551764b045fdc02df754157473125edf60Kevin Tang
4734ee09551764b045fdc02df754157473125edf60Kevin Tang#ifndef FALSE
4834ee09551764b045fdc02df754157473125edf60Kevin Tang#define FALSE 0
4934ee09551764b045fdc02df754157473125edf60Kevin Tang#endif
5034ee09551764b045fdc02df754157473125edf60Kevin Tang
5134ee09551764b045fdc02df754157473125edf60Kevin Tang#include <loc.h>
5234ee09551764b045fdc02df754157473125edf60Kevin Tang#include <loc_eng_xtra.h>
5334ee09551764b045fdc02df754157473125edf60Kevin Tang#include <loc_eng_ni.h>
5434ee09551764b045fdc02df754157473125edf60Kevin Tang#include <loc_eng_agps.h>
5534ee09551764b045fdc02df754157473125edf60Kevin Tang#include <loc_cfg.h>
5634ee09551764b045fdc02df754157473125edf60Kevin Tang#include <loc_log.h>
5734ee09551764b045fdc02df754157473125edf60Kevin Tang#include <log_util.h>
5834ee09551764b045fdc02df754157473125edf60Kevin Tang#include <loc_eng_agps.h>
59e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo#include <LocEngAdapter.h>
6034ee09551764b045fdc02df754157473125edf60Kevin Tang
6134ee09551764b045fdc02df754157473125edf60Kevin Tang// The data connection minimal open time
6234ee09551764b045fdc02df754157473125edf60Kevin Tang#define DATA_OPEN_MIN_TIME        1  /* sec */
6334ee09551764b045fdc02df754157473125edf60Kevin Tang
6434ee09551764b045fdc02df754157473125edf60Kevin Tang// The system sees GPS engine turns off after inactive for this period of time
6534ee09551764b045fdc02df754157473125edf60Kevin Tang#define GPS_AUTO_OFF_TIME         2  /* secs */
6634ee09551764b045fdc02df754157473125edf60Kevin Tang#define SUCCESS              TRUE
6734ee09551764b045fdc02df754157473125edf60Kevin Tang#define FAILURE                 FALSE
6834ee09551764b045fdc02df754157473125edf60Kevin Tang#define INVALID_ATL_CONNECTION_HANDLE -1
6934ee09551764b045fdc02df754157473125edf60Kevin Tang
70bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo#define MAX_XTRA_SERVER_URL_LENGTH 256
71bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo
72e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russoenum loc_nmea_provider_e_type {
73e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo    NMEA_PROVIDER_AP = 0, // Application Processor Provider of NMEA
74e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo    NMEA_PROVIDER_MP // Modem Processor Provider of NMEA
75e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo};
7634ee09551764b045fdc02df754157473125edf60Kevin Tang
7734ee09551764b045fdc02df754157473125edf60Kevin Tangenum loc_mute_session_e_type {
7834ee09551764b045fdc02df754157473125edf60Kevin Tang   LOC_MUTE_SESS_NONE = 0,
7934ee09551764b045fdc02df754157473125edf60Kevin Tang   LOC_MUTE_SESS_WAIT,
8034ee09551764b045fdc02df754157473125edf60Kevin Tang   LOC_MUTE_SESS_IN_SESSION
8134ee09551764b045fdc02df754157473125edf60Kevin Tang};
8234ee09551764b045fdc02df754157473125edf60Kevin Tang
8334ee09551764b045fdc02df754157473125edf60Kevin Tang// Module data
84e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russotypedef struct loc_eng_data_s
8534ee09551764b045fdc02df754157473125edf60Kevin Tang{
86e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo    LocEngAdapter                  *adapter;
8734ee09551764b045fdc02df754157473125edf60Kevin Tang    loc_location_cb_ext            location_cb;
8834ee09551764b045fdc02df754157473125edf60Kevin Tang    gps_status_callback            status_cb;
8934ee09551764b045fdc02df754157473125edf60Kevin Tang    loc_sv_status_cb_ext           sv_status_cb;
90e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo    agps_status_extended           agps_status_cb;
9134ee09551764b045fdc02df754157473125edf60Kevin Tang    gps_nmea_callback              nmea_cb;
9234ee09551764b045fdc02df754157473125edf60Kevin Tang    gps_ni_notify_callback         ni_notify_cb;
938aa503a872e8c8cf241061f6ffed4e9fba125ffeKevin Tang    gps_set_capabilities           set_capabilities_cb;
9434ee09551764b045fdc02df754157473125edf60Kevin Tang    gps_acquire_wakelock           acquire_wakelock_cb;
9534ee09551764b045fdc02df754157473125edf60Kevin Tang    gps_release_wakelock           release_wakelock_cb;
96e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo    gps_request_utc_time           request_utc_time_cb;
978aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava    gps_measurement_callback       gps_measurement_cb;
9834ee09551764b045fdc02df754157473125edf60Kevin Tang    boolean                        intermediateFix;
9934ee09551764b045fdc02df754157473125edf60Kevin Tang    AGpsStatusValue                agps_status;
10034ee09551764b045fdc02df754157473125edf60Kevin Tang    loc_eng_xtra_data_s_type       xtra_module_data;
10134ee09551764b045fdc02df754157473125edf60Kevin Tang    loc_eng_ni_data_s_type         loc_eng_ni_data;
10234ee09551764b045fdc02df754157473125edf60Kevin Tang
10334ee09551764b045fdc02df754157473125edf60Kevin Tang    // AGPS state machines
10434ee09551764b045fdc02df754157473125edf60Kevin Tang    AgpsStateMachine*              agnss_nif;
10534ee09551764b045fdc02df754157473125edf60Kevin Tang    AgpsStateMachine*              internet_nif;
106e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo    AgpsStateMachine*              wifi_nif;
107e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo    //State machine for Data Services
108e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo    AgpsStateMachine*              ds_nif;
10934ee09551764b045fdc02df754157473125edf60Kevin Tang
11034ee09551764b045fdc02df754157473125edf60Kevin Tang    // GPS engine status
11134ee09551764b045fdc02df754157473125edf60Kevin Tang    GpsStatusValue                 engine_status;
11234ee09551764b045fdc02df754157473125edf60Kevin Tang    GpsStatusValue                 fix_session_status;
11334ee09551764b045fdc02df754157473125edf60Kevin Tang
11434ee09551764b045fdc02df754157473125edf60Kevin Tang    // Aiding data information to be deleted, aiding data can only be deleted when GPS engine is off
11534ee09551764b045fdc02df754157473125edf60Kevin Tang    GpsAidingData                  aiding_data_for_deletion;
11634ee09551764b045fdc02df754157473125edf60Kevin Tang
11734ee09551764b045fdc02df754157473125edf60Kevin Tang    // For muting session broadcast
11834ee09551764b045fdc02df754157473125edf60Kevin Tang    loc_mute_session_e_type        mute_session_state;
11934ee09551764b045fdc02df754157473125edf60Kevin Tang
120e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo    // For nmea generation
121e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo    boolean generateNmea;
122e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo    uint32_t sv_used_mask;
123e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo    float hdop;
124e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo    float pdop;
125e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo    float vdop;
126e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo
12734ee09551764b045fdc02df754157473125edf60Kevin Tang    // Address buffers, for addressing setting before init
12834ee09551764b045fdc02df754157473125edf60Kevin Tang    int    supl_host_set;
12934ee09551764b045fdc02df754157473125edf60Kevin Tang    char   supl_host_buf[101];
13034ee09551764b045fdc02df754157473125edf60Kevin Tang    int    supl_port_buf;
13134ee09551764b045fdc02df754157473125edf60Kevin Tang    int    c2k_host_set;
13234ee09551764b045fdc02df754157473125edf60Kevin Tang    char   c2k_host_buf[101];
13334ee09551764b045fdc02df754157473125edf60Kevin Tang    int    c2k_port_buf;
13434ee09551764b045fdc02df754157473125edf60Kevin Tang    int    mpc_host_set;
13534ee09551764b045fdc02df754157473125edf60Kevin Tang    char   mpc_host_buf[101];
13634ee09551764b045fdc02df754157473125edf60Kevin Tang    int    mpc_port_buf;
137e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo
138e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo    loc_ext_parser location_ext_parser;
139e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo    loc_ext_parser sv_ext_parser;
14034ee09551764b045fdc02df754157473125edf60Kevin Tang} loc_eng_data_s_type;
14134ee09551764b045fdc02df754157473125edf60Kevin Tang
142e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo/* GPS.conf support */
1431300ae618a0e750e41a5ee22bc242a8e0a7951b5Kevin Tang/* NOTE: the implementaiton of the parser casts number
1441300ae618a0e750e41a5ee22bc242a8e0a7951b5Kevin Tang   fields to 32 bit. To ensure all 'n' fields working,
1451300ae618a0e750e41a5ee22bc242a8e0a7951b5Kevin Tang   they must all be 32 bit fields. */
146e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russotypedef struct loc_gps_cfg_s
147e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo{
148fe660078f05f448ececb0b1170ecd79e600db440Kevin Tang    uint32_t       INTERMEDIATE_POS;
149fe660078f05f448ececb0b1170ecd79e600db440Kevin Tang    uint32_t       ACCURACY_THRES;
150fe660078f05f448ececb0b1170ecd79e600db440Kevin Tang    uint32_t       SUPL_VER;
151bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo    uint32_t       SUPL_MODE;
152fe660078f05f448ececb0b1170ecd79e600db440Kevin Tang    uint32_t       CAPABILITIES;
153fe660078f05f448ececb0b1170ecd79e600db440Kevin Tang    uint32_t       LPP_PROFILE;
154bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo    uint32_t       XTRA_VERSION_CHECK;
155bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo    char        XTRA_SERVER_1[MAX_XTRA_SERVER_URL_LENGTH];
156bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo    char        XTRA_SERVER_2[MAX_XTRA_SERVER_URL_LENGTH];
157bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo    char        XTRA_SERVER_3[MAX_XTRA_SERVER_URL_LENGTH];
158bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo    uint32_t       USE_EMERGENCY_PDN_FOR_EMERGENCY_SUPL;
1591300ae618a0e750e41a5ee22bc242a8e0a7951b5Kevin Tang    uint32_t       NMEA_PROVIDER;
1601300ae618a0e750e41a5ee22bc242a8e0a7951b5Kevin Tang    uint32_t       GPS_LOCK;
161fe660078f05f448ececb0b1170ecd79e600db440Kevin Tang    uint32_t       A_GLONASS_POS_PROTOCOL_SELECT;
162fe660078f05f448ececb0b1170ecd79e600db440Kevin Tang    uint32_t       AGPS_CERT_WRITABLE_MASK;
163e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo} loc_gps_cfg_s_type;
164e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo
1651300ae618a0e750e41a5ee22bc242a8e0a7951b5Kevin Tang/* NOTE: the implementaiton of the parser casts number
1661300ae618a0e750e41a5ee22bc242a8e0a7951b5Kevin Tang   fields to 32 bit. To ensure all 'n' fields working,
1671300ae618a0e750e41a5ee22bc242a8e0a7951b5Kevin Tang   they must all be 32 bit fields. */
1681300ae618a0e750e41a5ee22bc242a8e0a7951b5Kevin Tang/* Meanwhile, *_valid fields are 8 bit fields, and 'f'
1691300ae618a0e750e41a5ee22bc242a8e0a7951b5Kevin Tang   fields are double. Rigid as they are, it is the
1701300ae618a0e750e41a5ee22bc242a8e0a7951b5Kevin Tang   the status quo, until the parsing mechanism is
1711300ae618a0e750e41a5ee22bc242a8e0a7951b5Kevin Tang   change, that is. */
172e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russotypedef struct
173e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo{
174e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo    uint8_t        GYRO_BIAS_RANDOM_WALK_VALID;
175e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo    double         GYRO_BIAS_RANDOM_WALK;
176fe660078f05f448ececb0b1170ecd79e600db440Kevin Tang    uint32_t       SENSOR_ACCEL_BATCHES_PER_SEC;
177fe660078f05f448ececb0b1170ecd79e600db440Kevin Tang    uint32_t       SENSOR_ACCEL_SAMPLES_PER_BATCH;
178fe660078f05f448ececb0b1170ecd79e600db440Kevin Tang    uint32_t       SENSOR_GYRO_BATCHES_PER_SEC;
179fe660078f05f448ececb0b1170ecd79e600db440Kevin Tang    uint32_t       SENSOR_GYRO_SAMPLES_PER_BATCH;
180fe660078f05f448ececb0b1170ecd79e600db440Kevin Tang    uint32_t       SENSOR_ACCEL_BATCHES_PER_SEC_HIGH;
181fe660078f05f448ececb0b1170ecd79e600db440Kevin Tang    uint32_t       SENSOR_ACCEL_SAMPLES_PER_BATCH_HIGH;
182fe660078f05f448ececb0b1170ecd79e600db440Kevin Tang    uint32_t       SENSOR_GYRO_BATCHES_PER_SEC_HIGH;
183fe660078f05f448ececb0b1170ecd79e600db440Kevin Tang    uint32_t       SENSOR_GYRO_SAMPLES_PER_BATCH_HIGH;
184fe660078f05f448ececb0b1170ecd79e600db440Kevin Tang    uint32_t       SENSOR_CONTROL_MODE;
185fe660078f05f448ececb0b1170ecd79e600db440Kevin Tang    uint32_t       SENSOR_USAGE;
186fe660078f05f448ececb0b1170ecd79e600db440Kevin Tang    uint32_t       SENSOR_ALGORITHM_CONFIG_MASK;
187e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo    uint8_t        ACCEL_RANDOM_WALK_SPECTRAL_DENSITY_VALID;
188e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo    double         ACCEL_RANDOM_WALK_SPECTRAL_DENSITY;
189e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo    uint8_t        ANGLE_RANDOM_WALK_SPECTRAL_DENSITY_VALID;
190e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo    double         ANGLE_RANDOM_WALK_SPECTRAL_DENSITY;
191e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo    uint8_t        RATE_RANDOM_WALK_SPECTRAL_DENSITY_VALID;
192e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo    double         RATE_RANDOM_WALK_SPECTRAL_DENSITY;
193e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo    uint8_t        VELOCITY_RANDOM_WALK_SPECTRAL_DENSITY_VALID;
194e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo    double         VELOCITY_RANDOM_WALK_SPECTRAL_DENSITY;
195fe660078f05f448ececb0b1170ecd79e600db440Kevin Tang    uint32_t       SENSOR_PROVIDER;
196e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo} loc_sap_cfg_s_type;
197e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo
198e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russoextern loc_gps_cfg_s_type gps_conf;
199e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russoextern loc_sap_cfg_s_type sap_conf;
20034ee09551764b045fdc02df754157473125edf60Kevin Tang
201bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo
202bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russouint32_t getCarrierCapabilities();
203bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo
204bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo//loc_eng functions
20534ee09551764b045fdc02df754157473125edf60Kevin Tangint  loc_eng_init(loc_eng_data_s_type &loc_eng_data,
20634ee09551764b045fdc02df754157473125edf60Kevin Tang                  LocCallbacks* callbacks,
20747ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo                  LOC_API_ADAPTER_EVENT_MASK_T event,
20847ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo                  ContextBase* context);
20934ee09551764b045fdc02df754157473125edf60Kevin Tangint  loc_eng_start(loc_eng_data_s_type &loc_eng_data);
21034ee09551764b045fdc02df754157473125edf60Kevin Tangint  loc_eng_stop(loc_eng_data_s_type &loc_eng_data);
21134ee09551764b045fdc02df754157473125edf60Kevin Tangvoid loc_eng_cleanup(loc_eng_data_s_type &loc_eng_data);
21234ee09551764b045fdc02df754157473125edf60Kevin Tangint  loc_eng_inject_time(loc_eng_data_s_type &loc_eng_data,
21334ee09551764b045fdc02df754157473125edf60Kevin Tang                         GpsUtcTime time, int64_t timeReference,
21434ee09551764b045fdc02df754157473125edf60Kevin Tang                         int uncertainty);
21534ee09551764b045fdc02df754157473125edf60Kevin Tangint  loc_eng_inject_location(loc_eng_data_s_type &loc_eng_data,
21634ee09551764b045fdc02df754157473125edf60Kevin Tang                             double latitude, double longitude,
21734ee09551764b045fdc02df754157473125edf60Kevin Tang                             float accuracy);
21834ee09551764b045fdc02df754157473125edf60Kevin Tangvoid loc_eng_delete_aiding_data(loc_eng_data_s_type &loc_eng_data,
21934ee09551764b045fdc02df754157473125edf60Kevin Tang                                GpsAidingData f);
22034ee09551764b045fdc02df754157473125edf60Kevin Tangint  loc_eng_set_position_mode(loc_eng_data_s_type &loc_eng_data,
221e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo                               LocPosMode &params);
22234ee09551764b045fdc02df754157473125edf60Kevin Tangconst void* loc_eng_get_extension(loc_eng_data_s_type &loc_eng_data,
22334ee09551764b045fdc02df754157473125edf60Kevin Tang                                  const char* name);
224bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russoint  loc_eng_set_server_proxy(loc_eng_data_s_type &loc_eng_data,
225bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo                              LocServerType type, const char *hostname, int port);
226bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russovoid loc_eng_mute_one_session(loc_eng_data_s_type &loc_eng_data);
227bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russoint loc_eng_read_config(void);
228bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo
229bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo//loc_eng_agps functions
23034ee09551764b045fdc02df754157473125edf60Kevin Tangvoid loc_eng_agps_init(loc_eng_data_s_type &loc_eng_data,
231e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo                       AGpsExtCallbacks* callbacks);
232e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russoint  loc_eng_agps_open(loc_eng_data_s_type &loc_eng_data, AGpsExtType agpsType,
23334ee09551764b045fdc02df754157473125edf60Kevin Tang                      const char* apn, AGpsBearerType bearerType);
234e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russoint  loc_eng_agps_closed(loc_eng_data_s_type &loc_eng_data, AGpsExtType agpsType);
235e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russoint  loc_eng_agps_open_failed(loc_eng_data_s_type &loc_eng_data, AGpsExtType agpsType);
23634ee09551764b045fdc02df754157473125edf60Kevin Tangvoid loc_eng_agps_ril_update_network_availability(loc_eng_data_s_type &loc_eng_data,
23734ee09551764b045fdc02df754157473125edf60Kevin Tang                                                  int avaiable, const char* apn);
238bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russoint loc_eng_agps_install_certificates(loc_eng_data_s_type &loc_eng_data,
239bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo                                      const DerEncodedCertificate* certificates,
240bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo                                      size_t length);
24134ee09551764b045fdc02df754157473125edf60Kevin Tang
242bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo//loc_eng_xtra functions
243bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russoint  loc_eng_xtra_init (loc_eng_data_s_type &loc_eng_data,
244e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo                       GpsXtraExtCallbacks* callbacks);
245bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russoint  loc_eng_xtra_inject_data(loc_eng_data_s_type &loc_eng_data,
24634ee09551764b045fdc02df754157473125edf60Kevin Tang                             char* data, int length);
247bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russoint  loc_eng_xtra_request_server(loc_eng_data_s_type &loc_eng_data);
248bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russovoid loc_eng_xtra_version_check(loc_eng_data_s_type &loc_eng_data, int check);
24934ee09551764b045fdc02df754157473125edf60Kevin Tang
250bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo//loc_eng_ni functions
25134ee09551764b045fdc02df754157473125edf60Kevin Tangextern void loc_eng_ni_init(loc_eng_data_s_type &loc_eng_data,
252e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo                            GpsNiExtCallbacks *callbacks);
25334ee09551764b045fdc02df754157473125edf60Kevin Tangextern void loc_eng_ni_respond(loc_eng_data_s_type &loc_eng_data,
25434ee09551764b045fdc02df754157473125edf60Kevin Tang                               int notif_id, GpsUserResponseType user_response);
25534ee09551764b045fdc02df754157473125edf60Kevin Tangextern void loc_eng_ni_request_handler(loc_eng_data_s_type &loc_eng_data,
25634ee09551764b045fdc02df754157473125edf60Kevin Tang                                   const GpsNiNotification *notif,
25734ee09551764b045fdc02df754157473125edf60Kevin Tang                                   const void* passThrough);
25834ee09551764b045fdc02df754157473125edf60Kevin Tangextern void loc_eng_ni_reset_on_engine_restart(loc_eng_data_s_type &loc_eng_data);
2598aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava
260fe660078f05f448ececb0b1170ecd79e600db440Kevin Tangvoid loc_eng_configuration_update (loc_eng_data_s_type &loc_eng_data,
261fe660078f05f448ececb0b1170ecd79e600db440Kevin Tang                                   const char* config_data, int32_t length);
2628aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastavaint loc_eng_gps_measurement_init(loc_eng_data_s_type &loc_eng_data,
2638aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastava                                 GpsMeasurementCallbacks* callbacks);
2648aac9d301fc5aa83071492803f4335b73f2604e3Vineeta Srivastavavoid loc_eng_gps_measurement_close(loc_eng_data_s_type &loc_eng_data);
265fe660078f05f448ececb0b1170ecd79e600db440Kevin Tang
26634ee09551764b045fdc02df754157473125edf60Kevin Tang#ifdef __cplusplus
26734ee09551764b045fdc02df754157473125edf60Kevin Tang}
26834ee09551764b045fdc02df754157473125edf60Kevin Tang#endif /* __cplusplus */
26934ee09551764b045fdc02df754157473125edf60Kevin Tang
27034ee09551764b045fdc02df754157473125edf60Kevin Tang#endif // LOC_ENG_H
271