diff options
author | The Android Open Source Project <initial-contribution@android.com> | 2008-10-21 07:00:00 -0700 |
---|---|---|
committer | The Android Open Source Project <initial-contribution@android.com> | 2008-10-21 07:00:00 -0700 |
commit | d6054a36475b5ff502b4af78f7d272a713c1a8e7 (patch) | |
tree | 15482ee71b318f54f288240adce0b59febf76bc7 /include/hardware/gps.h | |
download | hardware_libhardware-d6054a36475b5ff502b4af78f7d272a713c1a8e7.zip hardware_libhardware-d6054a36475b5ff502b4af78f7d272a713c1a8e7.tar.gz hardware_libhardware-d6054a36475b5ff502b4af78f7d272a713c1a8e7.tar.bz2 |
Initial Contribution
Diffstat (limited to 'include/hardware/gps.h')
-rw-r--r-- | include/hardware/gps.h | 218 |
1 files changed, 218 insertions, 0 deletions
diff --git a/include/hardware/gps.h b/include/hardware/gps.h new file mode 100644 index 0000000..54b50a5 --- /dev/null +++ b/include/hardware/gps.h @@ -0,0 +1,218 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _HARDWARE_GPS_H +#define _HARDWARE_GPS_H + +#include <stdint.h> + +#if __cplusplus +extern "C" { +#endif + +/** milliseconds since January 1, 1970 */ +typedef int64_t GpsUtcTime; + +/** maximum number of Space Vehicles for gps_sv_status_callback */ +#define GPS_MAX_SVS 32 + + +typedef uint16_t GpsPositionMode; +#define GPS_POSITION_MODE_STANDALONE 0 +#define GPS_POSITION_MODE_MS_BASED 1 +#define GPS_POSITION_MODE_MS_ASSISTED 2 + +typedef uint16_t GpsStatusValue; +// IMPORTANT - these symbols here must match constants in GpsLocationProvider.java +#define GPS_STATUS_NONE 0 +#define GPS_STATUS_SESSION_BEGIN 1 +#define GPS_STATUS_SESSION_END 2 +#define GPS_STATUS_ENGINE_ON 3 +#define GPS_STATUS_ENGINE_OFF 4 + +typedef uint16_t GpsLocationFlags; +// IMPORTANT - these symbols here must match constants in GpsLocationProvider.java +#define GPS_LOCATION_HAS_LAT_LONG 0x0001 +#define GPS_LOCATION_HAS_ALTITUDE 0x0002 +#define GPS_LOCATION_HAS_SPEED 0x0004 +#define GPS_LOCATION_HAS_BEARING 0x0008 +#define GPS_LOCATION_HAS_ACCURACY 0x0010 + +typedef uint16_t GpsAidingData; +// IMPORTANT - these symbols here must match constants in GpsLocationProvider.java +#define GPS_DELETE_EPHEMERIS 0x0001 +#define GPS_DELETE_ALMANAC 0x0002 +#define GPS_DELETE_POSITION 0x0004 +#define GPS_DELETE_TIME 0x0008 +#define GPS_DELETE_IONO 0x0010 +#define GPS_DELETE_UTC 0x0020 +#define GPS_DELETE_HEALTH 0x0040 +#define GPS_DELETE_SVDIR 0x0080 +#define GPS_DELETE_SVSTEER 0x0100 +#define GPS_DELETE_SADATA 0x0200 +#define GPS_DELETE_RTI 0x0400 +#define GPS_DELETE_CELLDB_INFO 0x8000 +#define GPS_DELETE_ALL 0xFFFF + +/** + * names for GPS XTRA interface + */ +#define GPS_XTRA_INTERFACE "gps-xtra" + +/** + * names for GPS supplemental interface + * TODO: Remove not used. + */ +#define GPS_SUPL_INTERFACE "gps-supl" + +/** The location */ +typedef struct { + /** contains GpsLocationFlags bits */ + uint16_t flags; + double latitude; + double longitude; + double altitude; + float speed; + float bearing; + float accuracy; + GpsUtcTime timestamp; +} GpsLocation; + +/** The status */ +typedef struct { + GpsStatusValue status; +} GpsStatus; + +/** Space Vehicle info */ +typedef struct { + int prn; + float snr; + float elevation; + float azimuth; +} GpsSvInfo; + +/** Space Vehicle status */ +typedef struct { + /** number of SVs currently visible */ + int num_svs; + + /** Array of space vehicle info */ + GpsSvInfo sv_list[GPS_MAX_SVS]; + + /** bit mask indicating which SVs have ephemeris data */ + uint32_t ephemeris_mask; + + /** bit mask indicating which SVs have almanac data */ + uint32_t almanac_mask; + + /** + * bit mask indicating which SVs were used for + * computing the most recent position fix + */ + uint32_t used_in_fix_mask; +} GpsSvStatus; + +/** Callback with location information */ +typedef void (* gps_location_callback)(GpsLocation* location); + +/** Callback with the status information */ +typedef void (* gps_status_callback)(GpsStatus* status); + +/** Callback with the space vehicle status information */ +typedef void (* gps_sv_status_callback)(GpsSvStatus* sv_info); + +/** GPS call back structure */ +typedef struct { + gps_location_callback location_cb; + gps_status_callback status_cb; + gps_sv_status_callback sv_status_cb; +} GpsCallbacks; + + +/** Standard GPS interface */ +typedef struct { + /** + * Open the interface and provide the callback routines + * to the implemenation of this interface. + */ + int (*init)( GpsCallbacks* callbacks ); + + /** Start navigating */ + int (*start)( void ); + + /** Stop navigating */ + int (*stop)( void ); + + /** Set requested frequency of fixes in seconds */ + void (*set_fix_frequency)( int frequency ); + + /** Close the interface */ + void (*cleanup)( void ); + + /** Inject the current time */ + int (*inject_time)(GpsUtcTime time, int64_t timeReference, + int uncertainty); + + /** + * The next call to start will not use the information + * defined in the flags. GPS_DELETE_ALL is passed for + * a cold start. + */ + void (*delete_aiding_data)(GpsAidingData flags); + + /** + * fix_frequency is time between fixes in seconds. + * set fix_frequency to zero for a single shot fix. + */ + int (*set_position_mode)(GpsPositionMode mode, int fix_frequency); + + /** Get a pointer to extension information. */ + const void* (*get_extension)(const char* name); +} GpsInterface; + +/** The download request callback routine. */ +typedef void (* gps_xtra_download_request)(); + +/** The download request callback structure. */ +typedef struct { + gps_xtra_download_request download_request_cb; +} GpsXtraCallbacks; + +/** Extended interface for XTRA support. */ +typedef struct { + int (*init)( GpsXtraCallbacks* callbacks ); + int (*inject_xtra_data)( char* data, int length ); +} GpsXtraInterface; + +/** returns the hardware GPS interface. */ +const GpsInterface* gps_get_hardware_interface(); + +/** + * returns the qemu hardware interface GPS interface. + */ +const GpsInterface* gps_get_qemu_interface(); + +/** + * returns the default GPS interface, + * implemented in lib/hardware/gps.cpp. + */ +const GpsInterface* gps_get_interface(); + +#if __cplusplus +} // extern "C" +#endif + +#endif // _HARDWARE_GPS_H |