1/* Copyright (c) 2009-2013, The Linux Foundation. All rights reserved. 2 * 3 * Redistribution and use in source and binary forms, with or without 4 * modification, are permitted provided that the following conditions are 5 * met: 6 * * Redistributions of source code must retain the above copyright 7 * notice, this list of conditions and the following disclaimer. 8 * * Redistributions in binary form must reproduce the above 9 * copyright notice, this list of conditions and the following 10 * disclaimer in the documentation and/or other materials provided 11 * with the distribution. 12 * * Neither the name of The Linux Foundation, nor the names of its 13 * contributors may be used to endorse or promote products derived 14 * from this software without specific prior written permission. 15 * 16 * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 17 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 18 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 20 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 23 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 24 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 25 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 26 * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 * 28 */ 29 30#ifndef LOC_ENG_H 31#define LOC_ENG_H 32 33#ifdef __cplusplus 34extern "C" { 35#endif /* __cplusplus */ 36 37// Uncomment to keep all LOG messages (LOGD, LOGI, LOGV, etc.) 38#define MAX_NUM_ATL_CONNECTIONS 2 39 40// Define boolean type to be used by libgps on loc api module 41typedef unsigned char boolean; 42 43#ifndef TRUE 44#define TRUE 1 45#endif 46 47#ifndef FALSE 48#define FALSE 0 49#endif 50 51#include <loc.h> 52#include <loc_eng_xtra.h> 53#include <loc_eng_ni.h> 54#include <loc_eng_agps.h> 55#include <loc_cfg.h> 56#include <loc_log.h> 57#include <log_util.h> 58#include <loc_eng_agps.h> 59#include <LocEngAdapter.h> 60 61// The data connection minimal open time 62#define DATA_OPEN_MIN_TIME 1 /* sec */ 63 64// The system sees GPS engine turns off after inactive for this period of time 65#define GPS_AUTO_OFF_TIME 2 /* secs */ 66#define SUCCESS TRUE 67#define FAILURE FALSE 68#define INVALID_ATL_CONNECTION_HANDLE -1 69 70#define MAX_XTRA_SERVER_URL_LENGTH 256 71 72enum loc_nmea_provider_e_type { 73 NMEA_PROVIDER_AP = 0, // Application Processor Provider of NMEA 74 NMEA_PROVIDER_MP // Modem Processor Provider of NMEA 75}; 76 77enum loc_mute_session_e_type { 78 LOC_MUTE_SESS_NONE = 0, 79 LOC_MUTE_SESS_WAIT, 80 LOC_MUTE_SESS_IN_SESSION 81}; 82 83// Module data 84typedef struct loc_eng_data_s 85{ 86 LocEngAdapter *adapter; 87 loc_location_cb_ext location_cb; 88 gps_status_callback status_cb; 89 loc_sv_status_cb_ext sv_status_cb; 90 agps_status_extended agps_status_cb; 91 gps_nmea_callback nmea_cb; 92 gps_ni_notify_callback ni_notify_cb; 93 gps_acquire_wakelock acquire_wakelock_cb; 94 gps_release_wakelock release_wakelock_cb; 95 gps_request_utc_time request_utc_time_cb; 96 boolean intermediateFix; 97 AGpsStatusValue agps_status; 98 loc_eng_xtra_data_s_type xtra_module_data; 99 loc_eng_ni_data_s_type loc_eng_ni_data; 100 101 // AGPS state machines 102 AgpsStateMachine* agnss_nif; 103 AgpsStateMachine* internet_nif; 104 AgpsStateMachine* wifi_nif; 105 //State machine for Data Services 106 AgpsStateMachine* ds_nif; 107 108 // GPS engine status 109 GpsStatusValue engine_status; 110 GpsStatusValue fix_session_status; 111 112 // Aiding data information to be deleted, aiding data can only be deleted when GPS engine is off 113 GpsAidingData aiding_data_for_deletion; 114 115 // For muting session broadcast 116 loc_mute_session_e_type mute_session_state; 117 118 // For nmea generation 119 boolean generateNmea; 120 uint32_t sv_used_mask; 121 float hdop; 122 float pdop; 123 float vdop; 124 125 // Address buffers, for addressing setting before init 126 int supl_host_set; 127 char supl_host_buf[101]; 128 int supl_port_buf; 129 int c2k_host_set; 130 char c2k_host_buf[101]; 131 int c2k_port_buf; 132 int mpc_host_set; 133 char mpc_host_buf[101]; 134 int mpc_port_buf; 135 136 loc_ext_parser location_ext_parser; 137 loc_ext_parser sv_ext_parser; 138} loc_eng_data_s_type; 139 140/* GPS.conf support */ 141typedef struct loc_gps_cfg_s 142{ 143 unsigned long INTERMEDIATE_POS; 144 unsigned long ACCURACY_THRES; 145 unsigned long ENABLE_WIPER; 146 unsigned long SUPL_VER; 147 unsigned long CAPABILITIES; 148 unsigned long QUIPC_ENABLED; 149 unsigned long LPP_PROFILE; 150 uint8_t NMEA_PROVIDER; 151 unsigned long A_GLONASS_POS_PROTOCOL_SELECT; 152 char XTRA_SERVER_1[MAX_XTRA_SERVER_URL_LENGTH]; 153 char XTRA_SERVER_2[MAX_XTRA_SERVER_URL_LENGTH]; 154 char XTRA_SERVER_3[MAX_XTRA_SERVER_URL_LENGTH]; 155} loc_gps_cfg_s_type; 156 157typedef struct 158{ 159 uint8_t GYRO_BIAS_RANDOM_WALK_VALID; 160 double GYRO_BIAS_RANDOM_WALK; 161 unsigned long SENSOR_ACCEL_BATCHES_PER_SEC; 162 unsigned long SENSOR_ACCEL_SAMPLES_PER_BATCH; 163 unsigned long SENSOR_GYRO_BATCHES_PER_SEC; 164 unsigned long SENSOR_GYRO_SAMPLES_PER_BATCH; 165 unsigned long SENSOR_ACCEL_BATCHES_PER_SEC_HIGH; 166 unsigned long SENSOR_ACCEL_SAMPLES_PER_BATCH_HIGH; 167 unsigned long SENSOR_GYRO_BATCHES_PER_SEC_HIGH; 168 unsigned long SENSOR_GYRO_SAMPLES_PER_BATCH_HIGH; 169 unsigned long SENSOR_CONTROL_MODE; 170 unsigned long SENSOR_USAGE; 171 unsigned long SENSOR_ALGORITHM_CONFIG_MASK; 172 uint8_t ACCEL_RANDOM_WALK_SPECTRAL_DENSITY_VALID; 173 double ACCEL_RANDOM_WALK_SPECTRAL_DENSITY; 174 uint8_t ANGLE_RANDOM_WALK_SPECTRAL_DENSITY_VALID; 175 double ANGLE_RANDOM_WALK_SPECTRAL_DENSITY; 176 uint8_t RATE_RANDOM_WALK_SPECTRAL_DENSITY_VALID; 177 double RATE_RANDOM_WALK_SPECTRAL_DENSITY; 178 uint8_t VELOCITY_RANDOM_WALK_SPECTRAL_DENSITY_VALID; 179 double VELOCITY_RANDOM_WALK_SPECTRAL_DENSITY; 180} loc_sap_cfg_s_type; 181 182extern loc_gps_cfg_s_type gps_conf; 183extern loc_sap_cfg_s_type sap_conf; 184 185int loc_eng_init(loc_eng_data_s_type &loc_eng_data, 186 LocCallbacks* callbacks, 187 LOC_API_ADAPTER_EVENT_MASK_T event); 188int loc_eng_start(loc_eng_data_s_type &loc_eng_data); 189int loc_eng_stop(loc_eng_data_s_type &loc_eng_data); 190void loc_eng_cleanup(loc_eng_data_s_type &loc_eng_data); 191int loc_eng_inject_time(loc_eng_data_s_type &loc_eng_data, 192 GpsUtcTime time, int64_t timeReference, 193 int uncertainty); 194int loc_eng_inject_location(loc_eng_data_s_type &loc_eng_data, 195 double latitude, double longitude, 196 float accuracy); 197void loc_eng_delete_aiding_data(loc_eng_data_s_type &loc_eng_data, 198 GpsAidingData f); 199int loc_eng_set_position_mode(loc_eng_data_s_type &loc_eng_data, 200 LocPosMode ¶ms); 201const void* loc_eng_get_extension(loc_eng_data_s_type &loc_eng_data, 202 const char* name); 203void loc_eng_agps_init(loc_eng_data_s_type &loc_eng_data, 204 AGpsExtCallbacks* callbacks); 205int loc_eng_agps_open(loc_eng_data_s_type &loc_eng_data, AGpsExtType agpsType, 206 const char* apn, AGpsBearerType bearerType); 207int loc_eng_agps_closed(loc_eng_data_s_type &loc_eng_data, AGpsExtType agpsType); 208int loc_eng_agps_open_failed(loc_eng_data_s_type &loc_eng_data, AGpsExtType agpsType); 209 210int loc_eng_set_server_proxy(loc_eng_data_s_type &loc_eng_data, 211 LocServerType type, const char *hostname, int port); 212 213 214void loc_eng_agps_ril_update_network_availability(loc_eng_data_s_type &loc_eng_data, 215 int avaiable, const char* apn); 216 217 218bool loc_eng_inject_raw_command(loc_eng_data_s_type &loc_eng_data, 219 char* command, int length); 220 221 222void loc_eng_mute_one_session(loc_eng_data_s_type &loc_eng_data); 223 224int loc_eng_xtra_init (loc_eng_data_s_type &loc_eng_data, 225 GpsXtraExtCallbacks* callbacks); 226 227int loc_eng_xtra_inject_data(loc_eng_data_s_type &loc_eng_data, 228 char* data, int length); 229 230int loc_eng_xtra_request_server(loc_eng_data_s_type &loc_eng_data); 231 232extern void loc_eng_ni_init(loc_eng_data_s_type &loc_eng_data, 233 GpsNiExtCallbacks *callbacks); 234extern void loc_eng_ni_respond(loc_eng_data_s_type &loc_eng_data, 235 int notif_id, GpsUserResponseType user_response); 236extern void loc_eng_ni_request_handler(loc_eng_data_s_type &loc_eng_data, 237 const GpsNiNotification *notif, 238 const void* passThrough); 239extern void loc_eng_ni_reset_on_engine_restart(loc_eng_data_s_type &loc_eng_data); 240int loc_eng_read_config(void); 241 242#ifdef __cplusplus 243} 244#endif /* __cplusplus */ 245 246#endif // LOC_ENG_H 247