Home | History | Annotate | Download | only in libloc_api_50001
      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
     34 extern "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
     41 typedef 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 enum loc_nmea_provider_e_type {
     71     NMEA_PROVIDER_AP = 0, // Application Processor Provider of NMEA
     72     NMEA_PROVIDER_MP // Modem Processor Provider of NMEA
     73 };
     74 
     75 enum loc_mute_session_e_type {
     76    LOC_MUTE_SESS_NONE = 0,
     77    LOC_MUTE_SESS_WAIT,
     78    LOC_MUTE_SESS_IN_SESSION
     79 };
     80 
     81 // Module data
     82 typedef struct loc_eng_data_s
     83 {
     84     LocEngAdapter                  *adapter;
     85     loc_location_cb_ext            location_cb;
     86     gps_status_callback            status_cb;
     87     loc_sv_status_cb_ext           sv_status_cb;
     88     agps_status_extended           agps_status_cb;
     89     gps_nmea_callback              nmea_cb;
     90     gps_ni_notify_callback         ni_notify_cb;
     91     gps_acquire_wakelock           acquire_wakelock_cb;
     92     gps_release_wakelock           release_wakelock_cb;
     93     gps_request_utc_time           request_utc_time_cb;
     94     boolean                        intermediateFix;
     95     AGpsStatusValue                agps_status;
     96     loc_eng_xtra_data_s_type       xtra_module_data;
     97     loc_eng_ni_data_s_type         loc_eng_ni_data;
     98 
     99     // AGPS state machines
    100     AgpsStateMachine*              agnss_nif;
    101     AgpsStateMachine*              internet_nif;
    102     AgpsStateMachine*              wifi_nif;
    103     //State machine for Data Services
    104     AgpsStateMachine*              ds_nif;
    105 
    106     // GPS engine status
    107     GpsStatusValue                 engine_status;
    108     GpsStatusValue                 fix_session_status;
    109 
    110     // Aiding data information to be deleted, aiding data can only be deleted when GPS engine is off
    111     GpsAidingData                  aiding_data_for_deletion;
    112 
    113     // For muting session broadcast
    114     loc_mute_session_e_type        mute_session_state;
    115 
    116     // For nmea generation
    117     boolean generateNmea;
    118     uint32_t sv_used_mask;
    119     float hdop;
    120     float pdop;
    121     float vdop;
    122 
    123     // Address buffers, for addressing setting before init
    124     int    supl_host_set;
    125     char   supl_host_buf[101];
    126     int    supl_port_buf;
    127     int    c2k_host_set;
    128     char   c2k_host_buf[101];
    129     int    c2k_port_buf;
    130     int    mpc_host_set;
    131     char   mpc_host_buf[101];
    132     int    mpc_port_buf;
    133 
    134     loc_ext_parser location_ext_parser;
    135     loc_ext_parser sv_ext_parser;
    136 } loc_eng_data_s_type;
    137 
    138 /* GPS.conf support */
    139 typedef struct loc_gps_cfg_s
    140 {
    141     unsigned long  INTERMEDIATE_POS;
    142     unsigned long  ACCURACY_THRES;
    143     unsigned long  ENABLE_WIPER;
    144     unsigned long  SUPL_VER;
    145     unsigned long  CAPABILITIES;
    146     unsigned long  QUIPC_ENABLED;
    147     unsigned long  LPP_PROFILE;
    148     uint8_t        NMEA_PROVIDER;
    149     unsigned long  A_GLONASS_POS_PROTOCOL_SELECT;
    150 } loc_gps_cfg_s_type;
    151 
    152 typedef struct
    153 {
    154     uint8_t        GYRO_BIAS_RANDOM_WALK_VALID;
    155     double         GYRO_BIAS_RANDOM_WALK;
    156     unsigned long  SENSOR_ACCEL_BATCHES_PER_SEC;
    157     unsigned long  SENSOR_ACCEL_SAMPLES_PER_BATCH;
    158     unsigned long  SENSOR_GYRO_BATCHES_PER_SEC;
    159     unsigned long  SENSOR_GYRO_SAMPLES_PER_BATCH;
    160     unsigned long  SENSOR_ACCEL_BATCHES_PER_SEC_HIGH;
    161     unsigned long  SENSOR_ACCEL_SAMPLES_PER_BATCH_HIGH;
    162     unsigned long  SENSOR_GYRO_BATCHES_PER_SEC_HIGH;
    163     unsigned long  SENSOR_GYRO_SAMPLES_PER_BATCH_HIGH;
    164     unsigned long  SENSOR_CONTROL_MODE;
    165     unsigned long  SENSOR_USAGE;
    166     unsigned long  SENSOR_ALGORITHM_CONFIG_MASK;
    167     uint8_t        ACCEL_RANDOM_WALK_SPECTRAL_DENSITY_VALID;
    168     double         ACCEL_RANDOM_WALK_SPECTRAL_DENSITY;
    169     uint8_t        ANGLE_RANDOM_WALK_SPECTRAL_DENSITY_VALID;
    170     double         ANGLE_RANDOM_WALK_SPECTRAL_DENSITY;
    171     uint8_t        RATE_RANDOM_WALK_SPECTRAL_DENSITY_VALID;
    172     double         RATE_RANDOM_WALK_SPECTRAL_DENSITY;
    173     uint8_t        VELOCITY_RANDOM_WALK_SPECTRAL_DENSITY_VALID;
    174     double         VELOCITY_RANDOM_WALK_SPECTRAL_DENSITY;
    175 } loc_sap_cfg_s_type;
    176 
    177 extern loc_gps_cfg_s_type gps_conf;
    178 extern loc_sap_cfg_s_type sap_conf;
    179 
    180 int  loc_eng_init(loc_eng_data_s_type &loc_eng_data,
    181                   LocCallbacks* callbacks,
    182                   LOC_API_ADAPTER_EVENT_MASK_T event);
    183 int  loc_eng_start(loc_eng_data_s_type &loc_eng_data);
    184 int  loc_eng_stop(loc_eng_data_s_type &loc_eng_data);
    185 void loc_eng_cleanup(loc_eng_data_s_type &loc_eng_data);
    186 int  loc_eng_inject_time(loc_eng_data_s_type &loc_eng_data,
    187                          GpsUtcTime time, int64_t timeReference,
    188                          int uncertainty);
    189 int  loc_eng_inject_location(loc_eng_data_s_type &loc_eng_data,
    190                              double latitude, double longitude,
    191                              float accuracy);
    192 void loc_eng_delete_aiding_data(loc_eng_data_s_type &loc_eng_data,
    193                                 GpsAidingData f);
    194 int  loc_eng_set_position_mode(loc_eng_data_s_type &loc_eng_data,
    195                                LocPosMode &params);
    196 const void* loc_eng_get_extension(loc_eng_data_s_type &loc_eng_data,
    197                                   const char* name);
    198 void loc_eng_agps_init(loc_eng_data_s_type &loc_eng_data,
    199                        AGpsExtCallbacks* callbacks);
    200 int  loc_eng_agps_open(loc_eng_data_s_type &loc_eng_data, AGpsExtType agpsType,
    201                       const char* apn, AGpsBearerType bearerType);
    202 int  loc_eng_agps_closed(loc_eng_data_s_type &loc_eng_data, AGpsExtType agpsType);
    203 int  loc_eng_agps_open_failed(loc_eng_data_s_type &loc_eng_data, AGpsExtType agpsType);
    204 
    205 int  loc_eng_set_server_proxy(loc_eng_data_s_type &loc_eng_data,
    206                               LocServerType type, const char *hostname, int port);
    207 
    208 
    209 void loc_eng_agps_ril_update_network_availability(loc_eng_data_s_type &loc_eng_data,
    210                                                   int avaiable, const char* apn);
    211 
    212 
    213 bool loc_eng_inject_raw_command(loc_eng_data_s_type &loc_eng_data,
    214                                 char* command, int length);
    215 
    216 
    217 void loc_eng_mute_one_session(loc_eng_data_s_type &loc_eng_data);
    218 
    219 int loc_eng_xtra_init (loc_eng_data_s_type &loc_eng_data,
    220                        GpsXtraExtCallbacks* callbacks);
    221 
    222 int loc_eng_xtra_inject_data(loc_eng_data_s_type &loc_eng_data,
    223                              char* data, int length);
    224 
    225 int loc_eng_xtra_request_server(loc_eng_data_s_type &loc_eng_data);
    226 
    227 extern void loc_eng_ni_init(loc_eng_data_s_type &loc_eng_data,
    228                             GpsNiExtCallbacks *callbacks);
    229 extern void loc_eng_ni_respond(loc_eng_data_s_type &loc_eng_data,
    230                                int notif_id, GpsUserResponseType user_response);
    231 extern void loc_eng_ni_request_handler(loc_eng_data_s_type &loc_eng_data,
    232                                    const GpsNiNotification *notif,
    233                                    const void* passThrough);
    234 extern void loc_eng_ni_reset_on_engine_restart(loc_eng_data_s_type &loc_eng_data);
    235 int loc_eng_read_config(void);
    236 
    237 #ifdef __cplusplus
    238 }
    239 #endif /* __cplusplus */
    240 
    241 #endif // LOC_ENG_H
    242