Home | History | Annotate | Download | only in libloc_api_50001
      1 /* Copyright (c) 2009-2014,2016, 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 #define gps_conf ContextBase::mGps_conf
     71 #define sap_conf ContextBase::mSap_conf
     72 
     73 enum loc_nmea_provider_e_type {
     74     NMEA_PROVIDER_AP = 0, // Application Processor Provider of NMEA
     75     NMEA_PROVIDER_MP // Modem Processor Provider of NMEA
     76 };
     77 
     78 enum loc_mute_session_e_type {
     79    LOC_MUTE_SESS_NONE = 0,
     80    LOC_MUTE_SESS_WAIT,
     81    LOC_MUTE_SESS_IN_SESSION
     82 };
     83 
     84 // Module data
     85 typedef struct loc_eng_data_s
     86 {
     87     LocEngAdapter                  *adapter;
     88     loc_location_cb_ext            location_cb;
     89     gps_status_callback            status_cb;
     90     loc_sv_status_cb_ext           sv_status_cb;
     91     agps_status_extended           agps_status_cb;
     92     gps_nmea_callback              nmea_cb;
     93     gps_ni_notify_callback         ni_notify_cb;
     94     gps_set_capabilities           set_capabilities_cb;
     95     gps_acquire_wakelock           acquire_wakelock_cb;
     96     gps_release_wakelock           release_wakelock_cb;
     97     gps_request_utc_time           request_utc_time_cb;
     98     gnss_set_system_info           set_system_info_cb;
     99     gnss_sv_status_callback        gnss_sv_status_cb;
    100     gnss_measurement_callback      gnss_measurement_cb;
    101     boolean                        intermediateFix;
    102     AGpsStatusValue                agps_status;
    103     loc_eng_xtra_data_s_type       xtra_module_data;
    104     loc_eng_ni_data_s_type         loc_eng_ni_data;
    105 
    106     // AGPS state machines
    107     AgpsStateMachine*              agnss_nif;
    108     AgpsStateMachine*              internet_nif;
    109     AgpsStateMachine*              wifi_nif;
    110     //State machine for Data Services
    111     AgpsStateMachine*              ds_nif;
    112 
    113     // GPS engine status
    114     GpsStatusValue                 engine_status;
    115     GpsStatusValue                 fix_session_status;
    116 
    117     // Aiding data information to be deleted, aiding data can only be deleted when GPS engine is off
    118     GpsAidingData                  aiding_data_for_deletion;
    119 
    120     // For muting session broadcast
    121     loc_mute_session_e_type        mute_session_state;
    122 
    123     // For nmea generation
    124     boolean generateNmea;
    125     uint32_t sv_used_mask;
    126     float hdop;
    127     float pdop;
    128     float vdop;
    129 
    130     // Address buffers, for addressing setting before init
    131     int    supl_host_set;
    132     char   supl_host_buf[101];
    133     int    supl_port_buf;
    134     int    c2k_host_set;
    135     char   c2k_host_buf[101];
    136     int    c2k_port_buf;
    137     int    mpc_host_set;
    138     char   mpc_host_buf[101];
    139     int    mpc_port_buf;
    140 
    141     loc_ext_parser location_ext_parser;
    142     loc_ext_parser sv_ext_parser;
    143 } loc_eng_data_s_type;
    144 
    145 //loc_eng functions
    146 int  loc_eng_init(loc_eng_data_s_type &loc_eng_data,
    147                   LocCallbacks* callbacks,
    148                   LOC_API_ADAPTER_EVENT_MASK_T event,
    149                   ContextBase* context);
    150 int  loc_eng_start(loc_eng_data_s_type &loc_eng_data);
    151 int  loc_eng_stop(loc_eng_data_s_type &loc_eng_data);
    152 void loc_eng_cleanup(loc_eng_data_s_type &loc_eng_data);
    153 int  loc_eng_inject_time(loc_eng_data_s_type &loc_eng_data,
    154                          GpsUtcTime time, int64_t timeReference,
    155                          int uncertainty);
    156 int  loc_eng_inject_location(loc_eng_data_s_type &loc_eng_data,
    157                              double latitude, double longitude,
    158                              float accuracy);
    159 void loc_eng_delete_aiding_data(loc_eng_data_s_type &loc_eng_data,
    160                                 GpsAidingData f);
    161 int  loc_eng_set_position_mode(loc_eng_data_s_type &loc_eng_data,
    162                                LocPosMode &params);
    163 const void* loc_eng_get_extension(loc_eng_data_s_type &loc_eng_data,
    164                                   const char* name);
    165 int  loc_eng_set_server_proxy(loc_eng_data_s_type &loc_eng_data,
    166                               LocServerType type, const char *hostname, int port);
    167 void loc_eng_mute_one_session(loc_eng_data_s_type &loc_eng_data);
    168 int loc_eng_read_config(void);
    169 
    170 //loc_eng_agps functions
    171 void loc_eng_agps_init(loc_eng_data_s_type &loc_eng_data,
    172                        AGpsExtCallbacks* callbacks);
    173 int  loc_eng_agps_open(loc_eng_data_s_type &loc_eng_data, AGpsExtType agpsType,
    174                       const char* apn, AGpsBearerType bearerType);
    175 int  loc_eng_agps_closed(loc_eng_data_s_type &loc_eng_data, AGpsExtType agpsType);
    176 int  loc_eng_agps_open_failed(loc_eng_data_s_type &loc_eng_data, AGpsExtType agpsType);
    177 void loc_eng_agps_ril_update_network_availability(loc_eng_data_s_type &loc_eng_data,
    178                                                   int avaiable, const char* apn);
    179 int loc_eng_agps_install_certificates(loc_eng_data_s_type &loc_eng_data,
    180                                       const DerEncodedCertificate* certificates,
    181                                       size_t length);
    182 
    183 //loc_eng_xtra functions
    184 int  loc_eng_xtra_init (loc_eng_data_s_type &loc_eng_data,
    185                        GpsXtraExtCallbacks* callbacks);
    186 int  loc_eng_xtra_inject_data(loc_eng_data_s_type &loc_eng_data,
    187                              char* data, int length);
    188 int  loc_eng_xtra_request_server(loc_eng_data_s_type &loc_eng_data);
    189 void loc_eng_xtra_version_check(loc_eng_data_s_type &loc_eng_data, int check);
    190 
    191 //loc_eng_ni functions
    192 extern void loc_eng_ni_init(loc_eng_data_s_type &loc_eng_data,
    193                             GpsNiExtCallbacks *callbacks);
    194 extern void loc_eng_ni_respond(loc_eng_data_s_type &loc_eng_data,
    195                                int notif_id, GpsUserResponseType user_response);
    196 extern void loc_eng_ni_request_handler(loc_eng_data_s_type &loc_eng_data,
    197                                    const GpsNiNotification *notif,
    198                                    const void* passThrough);
    199 extern void loc_eng_ni_reset_on_engine_restart(loc_eng_data_s_type &loc_eng_data);
    200 
    201 void loc_eng_configuration_update (loc_eng_data_s_type &loc_eng_data,
    202                                    const char* config_data, int32_t length);
    203 int loc_eng_gps_measurement_init(loc_eng_data_s_type &loc_eng_data,
    204                                  GpsMeasurementCallbacks* callbacks);
    205 void loc_eng_gps_measurement_close(loc_eng_data_s_type &loc_eng_data);
    206 
    207 #ifdef __cplusplus
    208 }
    209 #endif /* __cplusplus */
    210 
    211 #endif // LOC_ENG_H
    212