Home | History | Annotate | Download | only in hardware
      1 /*
      2  * Copyright (C) 2010 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 #ifndef ANDROID_INCLUDE_HARDWARE_GPS_H
     18 #define ANDROID_INCLUDE_HARDWARE_GPS_H
     19 
     20 #include <stdint.h>
     21 #include <sys/cdefs.h>
     22 #include <sys/types.h>
     23 #include <pthread.h>
     24 
     25 #include <hardware/hardware.h>
     26 
     27 __BEGIN_DECLS
     28 
     29 /**
     30  * The id of this module
     31  */
     32 #define GPS_HARDWARE_MODULE_ID "gps"
     33 
     34 
     35 /** Milliseconds since January 1, 1970 */
     36 typedef int64_t GpsUtcTime;
     37 
     38 /** Maximum number of SVs for gps_sv_status_callback(). */
     39 #define GPS_MAX_SVS 32
     40 
     41 /** Requested operational mode for GPS operation. */
     42 typedef uint32_t GpsPositionMode;
     43 // IMPORTANT: Note that the following values must match
     44 // constants in GpsLocationProvider.java.
     45 /** Mode for running GPS standalone (no assistance). */
     46 #define GPS_POSITION_MODE_STANDALONE    0
     47 /** AGPS MS-Based mode. */
     48 #define GPS_POSITION_MODE_MS_BASED      1
     49 /** AGPS MS-Assisted mode. */
     50 #define GPS_POSITION_MODE_MS_ASSISTED   2
     51 
     52 /** Requested recurrence mode for GPS operation. */
     53 typedef uint32_t GpsPositionRecurrence;
     54 // IMPORTANT: Note that the following values must match
     55 // constants in GpsLocationProvider.java.
     56 /** Receive GPS fixes on a recurring basis at a specified period. */
     57 #define GPS_POSITION_RECURRENCE_PERIODIC    0
     58 /** Request a single shot GPS fix. */
     59 #define GPS_POSITION_RECURRENCE_SINGLE      1
     60 
     61 /** GPS status event values. */
     62 typedef uint16_t GpsStatusValue;
     63 // IMPORTANT: Note that the following values must match
     64 // constants in GpsLocationProvider.java.
     65 /** GPS status unknown. */
     66 #define GPS_STATUS_NONE             0
     67 /** GPS has begun navigating. */
     68 #define GPS_STATUS_SESSION_BEGIN    1
     69 /** GPS has stopped navigating. */
     70 #define GPS_STATUS_SESSION_END      2
     71 /** GPS has powered on but is not navigating. */
     72 #define GPS_STATUS_ENGINE_ON        3
     73 /** GPS is powered off. */
     74 #define GPS_STATUS_ENGINE_OFF       4
     75 
     76 /** Flags to indicate which values are valid in a GpsLocation. */
     77 typedef uint16_t GpsLocationFlags;
     78 // IMPORTANT: Note that the following values must match
     79 // constants in GpsLocationProvider.java.
     80 /** GpsLocation has valid latitude and longitude. */
     81 #define GPS_LOCATION_HAS_LAT_LONG   0x0001
     82 /** GpsLocation has valid altitude. */
     83 #define GPS_LOCATION_HAS_ALTITUDE   0x0002
     84 /** GpsLocation has valid speed. */
     85 #define GPS_LOCATION_HAS_SPEED      0x0004
     86 /** GpsLocation has valid bearing. */
     87 #define GPS_LOCATION_HAS_BEARING    0x0008
     88 /** GpsLocation has valid accuracy. */
     89 #define GPS_LOCATION_HAS_ACCURACY   0x0010
     90 
     91 /** Flags for the gps_set_capabilities callback. */
     92 
     93 /** GPS HAL schedules fixes for GPS_POSITION_RECURRENCE_PERIODIC mode.
     94     If this is not set, then the framework will use 1000ms for min_interval
     95     and will start and call start() and stop() to schedule the GPS.
     96  */
     97 #define GPS_CAPABILITY_SCHEDULING       0x0000001
     98 /** GPS supports MS-Based AGPS mode */
     99 #define GPS_CAPABILITY_MSB              0x0000002
    100 /** GPS supports MS-Assisted AGPS mode */
    101 #define GPS_CAPABILITY_MSA              0x0000004
    102 /** GPS supports single-shot fixes */
    103 #define GPS_CAPABILITY_SINGLE_SHOT      0x0000008
    104 /** GPS supports on demand time injection */
    105 #define GPS_CAPABILITY_ON_DEMAND_TIME   0x0000010
    106 
    107 /** Flags used to specify which aiding data to delete
    108     when calling delete_aiding_data(). */
    109 typedef uint16_t GpsAidingData;
    110 // IMPORTANT: Note that the following values must match
    111 // constants in GpsLocationProvider.java.
    112 #define GPS_DELETE_EPHEMERIS        0x0001
    113 #define GPS_DELETE_ALMANAC          0x0002
    114 #define GPS_DELETE_POSITION         0x0004
    115 #define GPS_DELETE_TIME             0x0008
    116 #define GPS_DELETE_IONO             0x0010
    117 #define GPS_DELETE_UTC              0x0020
    118 #define GPS_DELETE_HEALTH           0x0040
    119 #define GPS_DELETE_SVDIR            0x0080
    120 #define GPS_DELETE_SVSTEER          0x0100
    121 #define GPS_DELETE_SADATA           0x0200
    122 #define GPS_DELETE_RTI              0x0400
    123 #define GPS_DELETE_CELLDB_INFO      0x8000
    124 #define GPS_DELETE_ALL              0xFFFF
    125 
    126 /** AGPS type */
    127 typedef uint16_t AGpsType;
    128 #define AGPS_TYPE_SUPL          1
    129 #define AGPS_TYPE_C2K           2
    130 
    131 typedef uint16_t AGpsSetIDType;
    132 #define AGPS_SETID_TYPE_NONE    0
    133 #define AGPS_SETID_TYPE_IMSI    1
    134 #define AGPS_SETID_TYPE_MSISDN  2
    135 
    136 /**
    137  * String length constants
    138  */
    139 #define GPS_NI_SHORT_STRING_MAXLEN      256
    140 #define GPS_NI_LONG_STRING_MAXLEN       2048
    141 
    142 /**
    143  * GpsNiType constants
    144  */
    145 typedef uint32_t GpsNiType;
    146 #define GPS_NI_TYPE_VOICE              1
    147 #define GPS_NI_TYPE_UMTS_SUPL          2
    148 #define GPS_NI_TYPE_UMTS_CTRL_PLANE    3
    149 
    150 /**
    151  * GpsNiNotifyFlags constants
    152  */
    153 typedef uint32_t GpsNiNotifyFlags;
    154 /** NI requires notification */
    155 #define GPS_NI_NEED_NOTIFY          0x0001
    156 /** NI requires verification */
    157 #define GPS_NI_NEED_VERIFY          0x0002
    158 /** NI requires privacy override, no notification/minimal trace */
    159 #define GPS_NI_PRIVACY_OVERRIDE     0x0004
    160 
    161 /**
    162  * GPS NI responses, used to define the response in
    163  * NI structures
    164  */
    165 typedef int GpsUserResponseType;
    166 #define GPS_NI_RESPONSE_ACCEPT         1
    167 #define GPS_NI_RESPONSE_DENY           2
    168 #define GPS_NI_RESPONSE_NORESP         3
    169 
    170 /**
    171  * NI data encoding scheme
    172  */
    173 typedef int GpsNiEncodingType;
    174 #define GPS_ENC_NONE                   0
    175 #define GPS_ENC_SUPL_GSM_DEFAULT       1
    176 #define GPS_ENC_SUPL_UTF8              2
    177 #define GPS_ENC_SUPL_UCS2              3
    178 #define GPS_ENC_UNKNOWN                -1
    179 
    180 /** AGPS status event values. */
    181 typedef uint16_t AGpsStatusValue;
    182 /** GPS requests data connection for AGPS. */
    183 #define GPS_REQUEST_AGPS_DATA_CONN  1
    184 /** GPS releases the AGPS data connection. */
    185 #define GPS_RELEASE_AGPS_DATA_CONN  2
    186 /** AGPS data connection initiated */
    187 #define GPS_AGPS_DATA_CONNECTED     3
    188 /** AGPS data connection completed */
    189 #define GPS_AGPS_DATA_CONN_DONE     4
    190 /** AGPS data connection failed */
    191 #define GPS_AGPS_DATA_CONN_FAILED   5
    192 
    193 #define AGPS_REF_LOCATION_TYPE_GSM_CELLID   1
    194 #define AGPS_REF_LOCATION_TYPE_UMTS_CELLID  2
    195 #define AGPS_REG_LOCATION_TYPE_MAC          3
    196 
    197 /** Network types for update_network_state "type" parameter */
    198 #define AGPS_RIL_NETWORK_TYPE_MOBILE        0
    199 #define AGPS_RIL_NETWORK_TYPE_WIFI          1
    200 #define AGPS_RIL_NETWORK_TYPE_MOBILE_MMS    2
    201 #define AGPS_RIL_NETWORK_TYPE_MOBILE_SUPL   3
    202 #define AGPS_RIL_NETWORK_TTYPE_MOBILE_DUN   4
    203 #define AGPS_RIL_NETWORK_TTYPE_MOBILE_HIPRI 5
    204 #define AGPS_RIL_NETWORK_TTYPE_WIMAX        6
    205 
    206 /**
    207  * Name for the GPS XTRA interface.
    208  */
    209 #define GPS_XTRA_INTERFACE      "gps-xtra"
    210 
    211 /**
    212  * Name for the GPS DEBUG interface.
    213  */
    214 #define GPS_DEBUG_INTERFACE      "gps-debug"
    215 
    216 /**
    217  * Name for the AGPS interface.
    218  */
    219 #define AGPS_INTERFACE      "agps"
    220 
    221 /**
    222  * Name for NI interface
    223  */
    224 #define GPS_NI_INTERFACE "gps-ni"
    225 
    226 /**
    227  * Name for the AGPS-RIL interface.
    228  */
    229 #define AGPS_RIL_INTERFACE      "agps_ril"
    230 
    231 /** Represents a location. */
    232 typedef struct {
    233     /** set to sizeof(GpsLocation) */
    234     size_t          size;
    235     /** Contains GpsLocationFlags bits. */
    236     uint16_t        flags;
    237     /** Represents latitude in degrees. */
    238     double          latitude;
    239     /** Represents longitude in degrees. */
    240     double          longitude;
    241     /** Represents altitude in meters above the WGS 84 reference
    242      * ellipsoid. */
    243     double          altitude;
    244     /** Represents speed in meters per second. */
    245     float           speed;
    246     /** Represents heading in degrees. */
    247     float           bearing;
    248     /** Represents expected accuracy in meters. */
    249     float           accuracy;
    250     /** Timestamp for the location fix. */
    251     GpsUtcTime      timestamp;
    252 } GpsLocation;
    253 
    254 /** Represents the status. */
    255 typedef struct {
    256     /** set to sizeof(GpsStatus) */
    257     size_t          size;
    258     GpsStatusValue status;
    259 } GpsStatus;
    260 
    261 /** Represents SV information. */
    262 typedef struct {
    263     /** set to sizeof(GpsSvInfo) */
    264     size_t          size;
    265     /** Pseudo-random number for the SV. */
    266     int     prn;
    267     /** Signal to noise ratio. */
    268     float   snr;
    269     /** Elevation of SV in degrees. */
    270     float   elevation;
    271     /** Azimuth of SV in degrees. */
    272     float   azimuth;
    273 } GpsSvInfo;
    274 
    275 /** Represents SV status. */
    276 typedef struct {
    277     /** set to sizeof(GpsSvStatus) */
    278     size_t          size;
    279 
    280     /** Number of SVs currently visible. */
    281     int         num_svs;
    282 
    283     /** Contains an array of SV information. */
    284     GpsSvInfo   sv_list[GPS_MAX_SVS];
    285 
    286     /** Represents a bit mask indicating which SVs
    287      * have ephemeris data.
    288      */
    289     uint32_t    ephemeris_mask;
    290 
    291     /** Represents a bit mask indicating which SVs
    292      * have almanac data.
    293      */
    294     uint32_t    almanac_mask;
    295 
    296     /**
    297      * Represents a bit mask indicating which SVs
    298      * were used for computing the most recent position fix.
    299      */
    300     uint32_t    used_in_fix_mask;
    301 } GpsSvStatus;
    302 
    303 /* 2G and 3G */
    304 /* In 3G lac is discarded */
    305 typedef struct {
    306     uint16_t type;
    307     uint16_t mcc;
    308     uint16_t mnc;
    309     uint16_t lac;
    310     uint32_t cid;
    311 } AGpsRefLocationCellID;
    312 
    313 typedef struct {
    314     uint8_t mac[6];
    315 } AGpsRefLocationMac;
    316 
    317 /** Represents ref locations */
    318 typedef struct {
    319     uint16_t type;
    320     union {
    321         AGpsRefLocationCellID   cellID;
    322         AGpsRefLocationMac      mac;
    323     } u;
    324 } AGpsRefLocation;
    325 
    326 /** Callback with location information.
    327  *  Can only be called from a thread created by create_thread_cb.
    328  */
    329 typedef void (* gps_location_callback)(GpsLocation* location);
    330 
    331 /** Callback with status information.
    332  *  Can only be called from a thread created by create_thread_cb.
    333  */
    334 typedef void (* gps_status_callback)(GpsStatus* status);
    335 
    336 /** Callback with SV status information.
    337  *  Can only be called from a thread created by create_thread_cb.
    338  */
    339 typedef void (* gps_sv_status_callback)(GpsSvStatus* sv_info);
    340 
    341 /** Callback for reporting NMEA sentences.
    342  *  Can only be called from a thread created by create_thread_cb.
    343  */
    344 typedef void (* gps_nmea_callback)(GpsUtcTime timestamp, const char* nmea, int length);
    345 
    346 /** Callback to inform framework of the GPS engine's capabilities.
    347  *  Capability parameter is a bit field of GPS_CAPABILITY_* flags.
    348  */
    349 typedef void (* gps_set_capabilities)(uint32_t capabilities);
    350 
    351 /** Callback utility for acquiring the GPS wakelock.
    352  *  This can be used to prevent the CPU from suspending while handling GPS events.
    353  */
    354 typedef void (* gps_acquire_wakelock)();
    355 
    356 /** Callback utility for releasing the GPS wakelock. */
    357 typedef void (* gps_release_wakelock)();
    358 
    359 /** Callback for requesting NTP time */
    360 typedef void (* gps_request_utc_time)();
    361 
    362 /** Callback for creating a thread that can call into the Java framework code.
    363  *  This must be used to create any threads that report events up to the framework.
    364  */
    365 typedef pthread_t (* gps_create_thread)(const char* name, void (*start)(void *), void* arg);
    366 
    367 /** GPS callback structure. */
    368 typedef struct {
    369     /** set to sizeof(GpsCallbacks) */
    370     size_t      size;
    371     gps_location_callback location_cb;
    372     gps_status_callback status_cb;
    373     gps_sv_status_callback sv_status_cb;
    374     gps_nmea_callback nmea_cb;
    375     gps_set_capabilities set_capabilities_cb;
    376     gps_acquire_wakelock acquire_wakelock_cb;
    377     gps_release_wakelock release_wakelock_cb;
    378     gps_create_thread create_thread_cb;
    379     gps_request_utc_time request_utc_time_cb;
    380 } GpsCallbacks;
    381 
    382 
    383 /** Represents the standard GPS interface. */
    384 typedef struct {
    385     /** set to sizeof(GpsInterface) */
    386     size_t          size;
    387     /**
    388      * Opens the interface and provides the callback routines
    389      * to the implemenation of this interface.
    390      */
    391     int   (*init)( GpsCallbacks* callbacks );
    392 
    393     /** Starts navigating. */
    394     int   (*start)( void );
    395 
    396     /** Stops navigating. */
    397     int   (*stop)( void );
    398 
    399     /** Closes the interface. */
    400     void  (*cleanup)( void );
    401 
    402     /** Injects the current time. */
    403     int   (*inject_time)(GpsUtcTime time, int64_t timeReference,
    404                          int uncertainty);
    405 
    406     /** Injects current location from another location provider
    407      *  (typically cell ID).
    408      *  latitude and longitude are measured in degrees
    409      *  expected accuracy is measured in meters
    410      */
    411     int  (*inject_location)(double latitude, double longitude, float accuracy);
    412 
    413     /**
    414      * Specifies that the next call to start will not use the
    415      * information defined in the flags. GPS_DELETE_ALL is passed for
    416      * a cold start.
    417      */
    418     void  (*delete_aiding_data)(GpsAidingData flags);
    419 
    420     /**
    421      * min_interval represents the time between fixes in milliseconds.
    422      * preferred_accuracy represents the requested fix accuracy in meters.
    423      * preferred_time represents the requested time to first fix in milliseconds.
    424      */
    425     int   (*set_position_mode)(GpsPositionMode mode, GpsPositionRecurrence recurrence,
    426             uint32_t min_interval, uint32_t preferred_accuracy, uint32_t preferred_time);
    427 
    428     /** Get a pointer to extension information. */
    429     const void* (*get_extension)(const char* name);
    430 } GpsInterface;
    431 
    432 /** Callback to request the client to download XTRA data.
    433  *  The client should download XTRA data and inject it by calling inject_xtra_data().
    434  *  Can only be called from a thread created by create_thread_cb.
    435  */
    436 typedef void (* gps_xtra_download_request)();
    437 
    438 /** Callback structure for the XTRA interface. */
    439 typedef struct {
    440     gps_xtra_download_request download_request_cb;
    441     gps_create_thread create_thread_cb;
    442 } GpsXtraCallbacks;
    443 
    444 /** Extended interface for XTRA support. */
    445 typedef struct {
    446     /** set to sizeof(GpsXtraInterface) */
    447     size_t          size;
    448     /**
    449      * Opens the XTRA interface and provides the callback routines
    450      * to the implemenation of this interface.
    451      */
    452     int  (*init)( GpsXtraCallbacks* callbacks );
    453     /** Injects XTRA data into the GPS. */
    454     int  (*inject_xtra_data)( char* data, int length );
    455 } GpsXtraInterface;
    456 
    457 /** Extended interface for DEBUG support. */
    458 typedef struct {
    459     /** set to sizeof(GpsDebugInterface) */
    460     size_t          size;
    461 
    462     /**
    463      * This function should return any information that the native
    464      * implementation wishes to include in a bugreport.
    465      */
    466     size_t (*get_internal_state)(char* buffer, size_t bufferSize);
    467 } GpsDebugInterface;
    468 
    469 /** Represents the status of AGPS. */
    470 typedef struct {
    471     /** set to sizeof(AGpsStatus) */
    472     size_t          size;
    473 
    474     AGpsType        type;
    475     AGpsStatusValue status;
    476     uint32_t        ipaddr;
    477 } AGpsStatus;
    478 
    479 /** Callback with AGPS status information.
    480  *  Can only be called from a thread created by create_thread_cb.
    481  */
    482 typedef void (* agps_status_callback)(AGpsStatus* status);
    483 
    484 /** Callback structure for the AGPS interface. */
    485 typedef struct {
    486     agps_status_callback status_cb;
    487     gps_create_thread create_thread_cb;
    488 } AGpsCallbacks;
    489 
    490 
    491 /** Extended interface for AGPS support. */
    492 typedef struct {
    493     /** set to sizeof(AGpsInterface) */
    494     size_t          size;
    495 
    496     /**
    497      * Opens the AGPS interface and provides the callback routines
    498      * to the implemenation of this interface.
    499      */
    500     void  (*init)( AGpsCallbacks* callbacks );
    501     /**
    502      * Notifies that a data connection is available and sets
    503      * the name of the APN to be used for SUPL.
    504      */
    505     int  (*data_conn_open)( const char* apn );
    506     /**
    507      * Notifies that the AGPS data connection has been closed.
    508      */
    509     int  (*data_conn_closed)();
    510     /**
    511      * Notifies that a data connection is not available for AGPS.
    512      */
    513     int  (*data_conn_failed)();
    514     /**
    515      * Sets the hostname and port for the AGPS server.
    516      */
    517     int  (*set_server)( AGpsType type, const char* hostname, int port );
    518 } AGpsInterface;
    519 
    520 
    521 /** Represents an NI request */
    522 typedef struct {
    523     /** set to sizeof(GpsNiNotification) */
    524     size_t          size;
    525 
    526     /**
    527      * An ID generated by HAL to associate NI notifications and UI
    528      * responses
    529      */
    530     int             notification_id;
    531 
    532     /**
    533      * An NI type used to distinguish different categories of NI
    534      * events, such as GPS_NI_TYPE_VOICE, GPS_NI_TYPE_UMTS_SUPL, ...
    535      */
    536     GpsNiType       ni_type;
    537 
    538     /**
    539      * Notification/verification options, combinations of GpsNiNotifyFlags constants
    540      */
    541     GpsNiNotifyFlags notify_flags;
    542 
    543     /**
    544      * Timeout period to wait for user response.
    545      * Set to 0 for no time out limit.
    546      */
    547     int             timeout;
    548 
    549     /**
    550      * Default response when time out.
    551      */
    552     GpsUserResponseType default_response;
    553 
    554     /**
    555      * Requestor ID
    556      */
    557     char            requestor_id[GPS_NI_SHORT_STRING_MAXLEN];
    558 
    559     /**
    560      * Notification message. It can also be used to store client_id in some cases
    561      */
    562     char            text[GPS_NI_LONG_STRING_MAXLEN];
    563 
    564     /**
    565      * Client name decoding scheme
    566      */
    567     GpsNiEncodingType requestor_id_encoding;
    568 
    569     /**
    570      * Client name decoding scheme
    571      */
    572     GpsNiEncodingType text_encoding;
    573 
    574     /**
    575      * A pointer to extra data. Format:
    576      * key_1 = value_1
    577      * key_2 = value_2
    578      */
    579     char           extras[GPS_NI_LONG_STRING_MAXLEN];
    580 
    581 } GpsNiNotification;
    582 
    583 /** Callback with NI notification.
    584  *  Can only be called from a thread created by create_thread_cb.
    585  */
    586 typedef void (*gps_ni_notify_callback)(GpsNiNotification *notification);
    587 
    588 /** GPS NI callback structure. */
    589 typedef struct
    590 {
    591     /**
    592      * Sends the notification request from HAL to GPSLocationProvider.
    593      */
    594     gps_ni_notify_callback notify_cb;
    595     gps_create_thread create_thread_cb;
    596 } GpsNiCallbacks;
    597 
    598 /**
    599  * Extended interface for Network-initiated (NI) support.
    600  */
    601 typedef struct
    602 {
    603     /** set to sizeof(GpsNiInterface) */
    604     size_t          size;
    605 
    606    /** Registers the callbacks for HAL to use. */
    607    void (*init) (GpsNiCallbacks *callbacks);
    608 
    609    /** Sends a response to HAL. */
    610    void (*respond) (int notif_id, GpsUserResponseType user_response);
    611 } GpsNiInterface;
    612 
    613 struct gps_device_t {
    614     struct hw_device_t common;
    615 
    616     /**
    617      * Set the provided lights to the provided values.
    618      *
    619      * Returns: 0 on succes, error code on failure.
    620      */
    621     const GpsInterface* (*get_gps_interface)(struct gps_device_t* dev);
    622 };
    623 
    624 #define AGPS_RIL_REQUEST_SETID_IMSI     (1<<0L)
    625 #define AGPS_RIL_REQUEST_SETID_MSISDN   (1<<1L)
    626 
    627 #define AGPS_RIL_REQUEST_REFLOC_CELLID  (1<<0L)
    628 #define AGPS_RIL_REQUEST_REFLOC_MAC     (1<<1L)
    629 
    630 typedef void (*agps_ril_request_set_id)(uint32_t flags);
    631 typedef void (*agps_ril_request_ref_loc)(uint32_t flags);
    632 
    633 typedef struct {
    634     agps_ril_request_set_id request_setid;
    635     agps_ril_request_ref_loc request_refloc;
    636     gps_create_thread create_thread_cb;
    637 } AGpsRilCallbacks;
    638 
    639 /** Extended interface for AGPS_RIL support. */
    640 typedef struct {
    641     /** set to sizeof(AGpsRilInterface) */
    642     size_t          size;
    643     /**
    644      * Opens the AGPS interface and provides the callback routines
    645      * to the implemenation of this interface.
    646      */
    647     void  (*init)( AGpsRilCallbacks* callbacks );
    648 
    649     /**
    650      * Sets the reference location.
    651      */
    652     void (*set_ref_location) (const AGpsRefLocation *agps_reflocation, size_t sz_struct);
    653     /**
    654      * Sets the set ID.
    655      */
    656     void (*set_set_id) (AGpsSetIDType type, const char* setid);
    657 
    658     /**
    659      * Send network initiated message.
    660      */
    661     void (*ni_message) (uint8_t *msg, size_t len);
    662 
    663     /**
    664      * Notify GPS of network status changes.
    665      * These parameters match values in the android.net.NetworkInfo class.
    666      */
    667     void (*update_network_state) (int connected, int type, int roaming, const char* extra_info);
    668 
    669     /**
    670      * Notify GPS of network status changes.
    671      * These parameters match values in the android.net.NetworkInfo class.
    672      */
    673     void (*update_network_availability) (int avaiable, const char* apn);
    674 } AGpsRilInterface;
    675 
    676 __END_DECLS
    677 
    678 #endif /* ANDROID_INCLUDE_HARDWARE_GPS_H */
    679 
    680