blob: 5f8740fffc81a9b766584f337d832dce5d886768 [file] [log] [blame]
The Android Open Source Projectd6054a32008-10-21 07:00:00 -07001/*
2 * Copyright (C) 2008 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 _HARDWARE_GPS_H
18#define _HARDWARE_GPS_H
19
20#include <stdint.h>
21
22#if __cplusplus
23extern "C" {
24#endif
25
The Android Open Source Project51704be2008-12-17 18:05:50 -080026/** Milliseconds since January 1, 1970 */
The Android Open Source Projectd6054a32008-10-21 07:00:00 -070027typedef int64_t GpsUtcTime;
28
The Android Open Source Project51704be2008-12-17 18:05:50 -080029/** Maximum number of SVs for gps_sv_status_callback(). */
The Android Open Source Projectd6054a32008-10-21 07:00:00 -070030#define GPS_MAX_SVS 32
31
The Android Open Source Project51704be2008-12-17 18:05:50 -080032/** Requested mode for GPS operation. */
The Android Open Source Projectd6054a32008-10-21 07:00:00 -070033typedef uint16_t GpsPositionMode;
The Android Open Source Project51704be2008-12-17 18:05:50 -080034// IMPORTANT: Note that the following values must match
35// constants in GpsLocationProvider.java.
36/** Mode for running GPS standalone (no assistance). */
The Android Open Source Projectd6054a32008-10-21 07:00:00 -070037#define GPS_POSITION_MODE_STANDALONE 0
The Android Open Source Project51704be2008-12-17 18:05:50 -080038/** SUPL MS-Based mode. */
The Android Open Source Projectd6054a32008-10-21 07:00:00 -070039#define GPS_POSITION_MODE_MS_BASED 1
The Android Open Source Project51704be2008-12-17 18:05:50 -080040/** SUPL MS-Assisted mode. */
The Android Open Source Projectd6054a32008-10-21 07:00:00 -070041#define GPS_POSITION_MODE_MS_ASSISTED 2
42
The Android Open Source Project51704be2008-12-17 18:05:50 -080043/** GPS status event values. */
The Android Open Source Projectd6054a32008-10-21 07:00:00 -070044typedef uint16_t GpsStatusValue;
The Android Open Source Project51704be2008-12-17 18:05:50 -080045// IMPORTANT: Note that the following values must match
46// constants in GpsLocationProvider.java.
47/** GPS status unknown. */
The Android Open Source Projectd6054a32008-10-21 07:00:00 -070048#define GPS_STATUS_NONE 0
The Android Open Source Project51704be2008-12-17 18:05:50 -080049/** GPS has begun navigating. */
The Android Open Source Projectd6054a32008-10-21 07:00:00 -070050#define GPS_STATUS_SESSION_BEGIN 1
The Android Open Source Project51704be2008-12-17 18:05:50 -080051/** GPS has stopped navigating. */
The Android Open Source Projectd6054a32008-10-21 07:00:00 -070052#define GPS_STATUS_SESSION_END 2
The Android Open Source Project51704be2008-12-17 18:05:50 -080053/** GPS has powered on but is not navigating. */
The Android Open Source Projectd6054a32008-10-21 07:00:00 -070054#define GPS_STATUS_ENGINE_ON 3
The Android Open Source Project51704be2008-12-17 18:05:50 -080055/** GPS is powered off. */
The Android Open Source Projectd6054a32008-10-21 07:00:00 -070056#define GPS_STATUS_ENGINE_OFF 4
57
The Android Open Source Project51704be2008-12-17 18:05:50 -080058/** Flags to indicate which values are valid in a GpsLocation. */
The Android Open Source Projectd6054a32008-10-21 07:00:00 -070059typedef uint16_t GpsLocationFlags;
The Android Open Source Project51704be2008-12-17 18:05:50 -080060// IMPORTANT: Note that the following values must match
61// constants in GpsLocationProvider.java.
62/** GpsLocation has valid latitude and longitude. */
The Android Open Source Projectd6054a32008-10-21 07:00:00 -070063#define GPS_LOCATION_HAS_LAT_LONG 0x0001
The Android Open Source Project51704be2008-12-17 18:05:50 -080064/** GpsLocation has valid altitude. */
The Android Open Source Projectd6054a32008-10-21 07:00:00 -070065#define GPS_LOCATION_HAS_ALTITUDE 0x0002
The Android Open Source Project51704be2008-12-17 18:05:50 -080066/** GpsLocation has valid speed. */
The Android Open Source Projectd6054a32008-10-21 07:00:00 -070067#define GPS_LOCATION_HAS_SPEED 0x0004
The Android Open Source Project51704be2008-12-17 18:05:50 -080068/** GpsLocation has valid bearing. */
The Android Open Source Projectd6054a32008-10-21 07:00:00 -070069#define GPS_LOCATION_HAS_BEARING 0x0008
The Android Open Source Project51704be2008-12-17 18:05:50 -080070/** GpsLocation has valid accuracy. */
The Android Open Source Projectd6054a32008-10-21 07:00:00 -070071#define GPS_LOCATION_HAS_ACCURACY 0x0010
72
The Android Open Source Project51704be2008-12-17 18:05:50 -080073/** Flags used to specify which aiding data to delete
74 when calling delete_aiding_data(). */
The Android Open Source Projectd6054a32008-10-21 07:00:00 -070075typedef uint16_t GpsAidingData;
The Android Open Source Project51704be2008-12-17 18:05:50 -080076// IMPORTANT: Note that the following values must match
77// constants in GpsLocationProvider.java.
The Android Open Source Projectd6054a32008-10-21 07:00:00 -070078#define GPS_DELETE_EPHEMERIS 0x0001
79#define GPS_DELETE_ALMANAC 0x0002
80#define GPS_DELETE_POSITION 0x0004
81#define GPS_DELETE_TIME 0x0008
82#define GPS_DELETE_IONO 0x0010
83#define GPS_DELETE_UTC 0x0020
84#define GPS_DELETE_HEALTH 0x0040
85#define GPS_DELETE_SVDIR 0x0080
86#define GPS_DELETE_SVSTEER 0x0100
87#define GPS_DELETE_SADATA 0x0200
88#define GPS_DELETE_RTI 0x0400
89#define GPS_DELETE_CELLDB_INFO 0x8000
90#define GPS_DELETE_ALL 0xFFFF
91
92/**
The Android Open Source Project51704be2008-12-17 18:05:50 -080093 * Name for the GPS XTRA interface.
The Android Open Source Projectd6054a32008-10-21 07:00:00 -070094 */
95#define GPS_XTRA_INTERFACE "gps-xtra"
96
97/**
The Android Open Source Project51704be2008-12-17 18:05:50 -080098 * Name for the GPS SUPL interface.
The Android Open Source Projectd6054a32008-10-21 07:00:00 -070099 */
100#define GPS_SUPL_INTERFACE "gps-supl"
101
The Android Open Source Project51704be2008-12-17 18:05:50 -0800102/** Represents a location. */
The Android Open Source Projectd6054a32008-10-21 07:00:00 -0700103typedef struct {
The Android Open Source Project51704be2008-12-17 18:05:50 -0800104 /** Contains GpsLocationFlags bits. */
The Android Open Source Projectd6054a32008-10-21 07:00:00 -0700105 uint16_t flags;
The Android Open Source Project51704be2008-12-17 18:05:50 -0800106 /** Represents latitude in degrees. */
The Android Open Source Projectd6054a32008-10-21 07:00:00 -0700107 double latitude;
The Android Open Source Project51704be2008-12-17 18:05:50 -0800108 /** Represents longitude in degrees. */
The Android Open Source Projectd6054a32008-10-21 07:00:00 -0700109 double longitude;
The Android Open Source Project51704be2008-12-17 18:05:50 -0800110 /** Represents altitude in meters above the WGS 84 reference
111 * ellipsoid. */
The Android Open Source Projectd6054a32008-10-21 07:00:00 -0700112 double altitude;
The Android Open Source Project51704be2008-12-17 18:05:50 -0800113 /** Represents speed in meters per second. */
The Android Open Source Projectd6054a32008-10-21 07:00:00 -0700114 float speed;
The Android Open Source Project51704be2008-12-17 18:05:50 -0800115 /** Represents heading in degrees. */
The Android Open Source Projectd6054a32008-10-21 07:00:00 -0700116 float bearing;
The Android Open Source Project51704be2008-12-17 18:05:50 -0800117 /** Represents expected accuracy in meters. */
The Android Open Source Projectd6054a32008-10-21 07:00:00 -0700118 float accuracy;
The Android Open Source Project51704be2008-12-17 18:05:50 -0800119 /** Timestamp for the location fix. */
The Android Open Source Projectd6054a32008-10-21 07:00:00 -0700120 GpsUtcTime timestamp;
121} GpsLocation;
122
The Android Open Source Project51704be2008-12-17 18:05:50 -0800123/** Represents the status. */
The Android Open Source Projectd6054a32008-10-21 07:00:00 -0700124typedef struct {
125 GpsStatusValue status;
126} GpsStatus;
127
The Android Open Source Project51704be2008-12-17 18:05:50 -0800128/** Represents SV information. */
The Android Open Source Projectd6054a32008-10-21 07:00:00 -0700129typedef struct {
The Android Open Source Project51704be2008-12-17 18:05:50 -0800130 /** Pseudo-random number for the SV. */
The Android Open Source Projectd6054a32008-10-21 07:00:00 -0700131 int prn;
The Android Open Source Project51704be2008-12-17 18:05:50 -0800132 /** Signal to noise ratio. */
The Android Open Source Projectd6054a32008-10-21 07:00:00 -0700133 float snr;
The Android Open Source Project51704be2008-12-17 18:05:50 -0800134 /** Elevation of SV in degrees. */
The Android Open Source Projectd6054a32008-10-21 07:00:00 -0700135 float elevation;
The Android Open Source Project51704be2008-12-17 18:05:50 -0800136 /** Azimuth of SV in degrees. */
The Android Open Source Projectd6054a32008-10-21 07:00:00 -0700137 float azimuth;
138} GpsSvInfo;
139
The Android Open Source Project51704be2008-12-17 18:05:50 -0800140/** Represents SV status. */
The Android Open Source Projectd6054a32008-10-21 07:00:00 -0700141typedef struct {
The Android Open Source Project51704be2008-12-17 18:05:50 -0800142 /** Number of SVs currently visible. */
The Android Open Source Projectd6054a32008-10-21 07:00:00 -0700143 int num_svs;
144
The Android Open Source Project51704be2008-12-17 18:05:50 -0800145 /** Contains an array of SV information. */
The Android Open Source Projectd6054a32008-10-21 07:00:00 -0700146 GpsSvInfo sv_list[GPS_MAX_SVS];
147
The Android Open Source Project51704be2008-12-17 18:05:50 -0800148 /** Represents a bit mask indicating which SVs
149 * have ephemeris data.
150 */
The Android Open Source Projectd6054a32008-10-21 07:00:00 -0700151 uint32_t ephemeris_mask;
152
The Android Open Source Project51704be2008-12-17 18:05:50 -0800153 /** Represents a bit mask indicating which SVs
154 * have almanac data.
155 */
The Android Open Source Projectd6054a32008-10-21 07:00:00 -0700156 uint32_t almanac_mask;
157
158 /**
The Android Open Source Project51704be2008-12-17 18:05:50 -0800159 * Represents a bit mask indicating which SVs
160 * were used for computing the most recent position fix.
The Android Open Source Projectd6054a32008-10-21 07:00:00 -0700161 */
162 uint32_t used_in_fix_mask;
163} GpsSvStatus;
164
The Android Open Source Project51704be2008-12-17 18:05:50 -0800165/** Callback with location information. */
The Android Open Source Projectd6054a32008-10-21 07:00:00 -0700166typedef void (* gps_location_callback)(GpsLocation* location);
167
The Android Open Source Project51704be2008-12-17 18:05:50 -0800168/** Callback with status information. */
The Android Open Source Projectd6054a32008-10-21 07:00:00 -0700169typedef void (* gps_status_callback)(GpsStatus* status);
170
The Android Open Source Project51704be2008-12-17 18:05:50 -0800171/** Callback with SV status information. */
The Android Open Source Projectd6054a32008-10-21 07:00:00 -0700172typedef void (* gps_sv_status_callback)(GpsSvStatus* sv_info);
173
The Android Open Source Project51704be2008-12-17 18:05:50 -0800174/** GPS callback structure. */
The Android Open Source Projectd6054a32008-10-21 07:00:00 -0700175typedef struct {
176 gps_location_callback location_cb;
177 gps_status_callback status_cb;
178 gps_sv_status_callback sv_status_cb;
179} GpsCallbacks;
180
181
The Android Open Source Project51704be2008-12-17 18:05:50 -0800182/** Represents the standard GPS interface. */
The Android Open Source Projectd6054a32008-10-21 07:00:00 -0700183typedef struct {
184 /**
The Android Open Source Project51704be2008-12-17 18:05:50 -0800185 * Opens the interface and provides the callback routines
The Android Open Source Projectd6054a32008-10-21 07:00:00 -0700186 * to the implemenation of this interface.
187 */
188 int (*init)( GpsCallbacks* callbacks );
189
The Android Open Source Project51704be2008-12-17 18:05:50 -0800190 /** Starts navigating. */
The Android Open Source Projectd6054a32008-10-21 07:00:00 -0700191 int (*start)( void );
192
The Android Open Source Project51704be2008-12-17 18:05:50 -0800193 /** Stops navigating. */
The Android Open Source Projectd6054a32008-10-21 07:00:00 -0700194 int (*stop)( void );
195
The Android Open Source Project51704be2008-12-17 18:05:50 -0800196 /** Sets requested frequency of fixes in seconds. */
The Android Open Source Projectd6054a32008-10-21 07:00:00 -0700197 void (*set_fix_frequency)( int frequency );
198
The Android Open Source Project51704be2008-12-17 18:05:50 -0800199 /** Closes the interface. */
The Android Open Source Projectd6054a32008-10-21 07:00:00 -0700200 void (*cleanup)( void );
201
The Android Open Source Project51704be2008-12-17 18:05:50 -0800202 /** Injects the current time. */
The Android Open Source Projectd6054a32008-10-21 07:00:00 -0700203 int (*inject_time)(GpsUtcTime time, int64_t timeReference,
204 int uncertainty);
205
206 /**
The Android Open Source Project51704be2008-12-17 18:05:50 -0800207 * Specifies that the next call to start will not use the
208 * information defined in the flags. GPS_DELETE_ALL is passed for
The Android Open Source Projectd6054a32008-10-21 07:00:00 -0700209 * a cold start.
210 */
211 void (*delete_aiding_data)(GpsAidingData flags);
212
213 /**
The Android Open Source Project51704be2008-12-17 18:05:50 -0800214 * fix_frequency represents the time between fixes in seconds.
215 * Set fix_frequency to zero for a single-shot fix.
The Android Open Source Projectd6054a32008-10-21 07:00:00 -0700216 */
217 int (*set_position_mode)(GpsPositionMode mode, int fix_frequency);
218
219 /** Get a pointer to extension information. */
220 const void* (*get_extension)(const char* name);
221} GpsInterface;
222
The Android Open Source Project51704be2008-12-17 18:05:50 -0800223/** Callback to request the client to download XTRA data.
224 The client should download XTRA data and inject it by calling
225 inject_xtra_data(). */
The Android Open Source Projectd6054a32008-10-21 07:00:00 -0700226typedef void (* gps_xtra_download_request)();
227
The Android Open Source Project51704be2008-12-17 18:05:50 -0800228/** Callback structure for the XTRA interface. */
The Android Open Source Projectd6054a32008-10-21 07:00:00 -0700229typedef struct {
230 gps_xtra_download_request download_request_cb;
231} GpsXtraCallbacks;
232
233/** Extended interface for XTRA support. */
234typedef struct {
The Android Open Source Project51704be2008-12-17 18:05:50 -0800235 /**
236 * Opens the XTRA interface and provides the callback routines
237 * to the implemenation of this interface.
238 */
The Android Open Source Projectd6054a32008-10-21 07:00:00 -0700239 int (*init)( GpsXtraCallbacks* callbacks );
The Android Open Source Project51704be2008-12-17 18:05:50 -0800240 /** Injects XTRA data into the GPS. */
The Android Open Source Projectd6054a32008-10-21 07:00:00 -0700241 int (*inject_xtra_data)( char* data, int length );
242} GpsXtraInterface;
243
The Android Open Source Project51704be2008-12-17 18:05:50 -0800244/** Returns the hardware GPS interface. */
The Android Open Source Projectd6054a32008-10-21 07:00:00 -0700245const GpsInterface* gps_get_hardware_interface();
246
247/**
The Android Open Source Project51704be2008-12-17 18:05:50 -0800248 * Returns the qemu emulated GPS interface.
The Android Open Source Projectd6054a32008-10-21 07:00:00 -0700249 */
250const GpsInterface* gps_get_qemu_interface();
251
252/**
The Android Open Source Project51704be2008-12-17 18:05:50 -0800253 * Returns the default GPS interface.
The Android Open Source Projectd6054a32008-10-21 07:00:00 -0700254 */
255const GpsInterface* gps_get_interface();
256
257#if __cplusplus
258} // extern "C"
259#endif
260
261#endif // _HARDWARE_GPS_H