summaryrefslogtreecommitdiffstats
path: root/include/hardware/gps.h
diff options
context:
space:
mode:
authorThe Android Open Source Project <initial-contribution@android.com>2008-10-21 07:00:00 -0700
committerThe Android Open Source Project <initial-contribution@android.com>2008-10-21 07:00:00 -0700
commitd6054a36475b5ff502b4af78f7d272a713c1a8e7 (patch)
tree15482ee71b318f54f288240adce0b59febf76bc7 /include/hardware/gps.h
downloadhardware_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.h218
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