summaryrefslogtreecommitdiff
path: root/gpsd.h
diff options
context:
space:
mode:
authorEric S. Raymond <esr@thyrsus.com>2007-03-26 15:30:48 +0000
committerEric S. Raymond <esr@thyrsus.com>2007-03-26 15:30:48 +0000
commitdb6f40ca741fe57013f44cf86a7b093f10617f8b (patch)
tree5fcf10fd699f9f63b9dc12d82fe7ff71789e94e1 /gpsd.h
parent94bf2cdf46543eec46c326dfa68a525c4f14a342 (diff)
downloadgpsd-db6f40ca741fe57013f44cf86a7b093f10617f8b.tar.gz
Generate gpsd.h so it will contain all relevant configure switches.
Diffstat (limited to 'gpsd.h')
-rw-r--r--gpsd.h458
1 files changed, 0 insertions, 458 deletions
diff --git a/gpsd.h b/gpsd.h
deleted file mode 100644
index 9d68b504..00000000
--- a/gpsd.h
+++ /dev/null
@@ -1,458 +0,0 @@
-/* $Id$ */
-#ifndef _gpsd_h_
-#define _gpsd_h_
-
-/* gpsd.h -- fundamental types and structures for the gpsd library */
-
-#include <stdbool.h>
-#include <stdio.h>
-#ifdef HAVE_TERMIOS_H
-#include <termios.h>
-#endif
-#ifdef HAVE_SYS_TERMIOS_H
-#include <sys/termios.h>
-#endif
-#include "gps.h"
-
-/* Some internal capabilities depend on which drivers we're compiling. */
-#ifdef EARTHMATE_ENABLE
-#define ZODIAC_ENABLE
-#endif
-#if defined(ZODIAC_ENABLE) || defined(SIRF_ENABLE) || defined(GARMIN_ENABLE) || defined(TSIP_ENABLE) || defined(EVERMORE_ENABLE) || defined(ITRAX_ENABLE) || defined(UBX_ENABLE)
-#define BINARY_ENABLE
-#endif
-#if defined(TRIPMATE_ENABLE) || defined(BINARY_ENABLE)
-#define NON_NMEA_ENABLE
-#endif
-
-/* First, declarations for the packet layer... */
-
-/* XXX Some receivers (TN-200, GSW 2.3.2) emit oversized sentences (>82) */
-#define NMEA_MAX 86 /* max length of NMEA sentence */
-#define NMEA_BIG_BUF (2*NMEA_MAX+1) /* longer than longest NMEA sentence */
-
-/* a few bits of ISGPS magic */
-enum isgpsstat_t {
- ISGPS_NO_SYNC, ISGPS_SYNC, ISGPS_SKIP, ISGPS_MESSAGE,
-};
-#define ISGPS_ERRLEVEL_BASE 5
-
-#define RTCM_MAX (RTCM_WORDS_MAX * sizeof(isgps30bits_t))
-
-/*
- * The packet buffers need to be as long than the longest packet we
- * expect to see in any protocol, because we have to be able to hold
- * an entire packet for checksumming...
- * First we thought it had to be big enough for a SiRF Measured Tracker
- * Data packet (188 bytes). Then it had to be big enough for a UBX SVINFO
- * packet (206 bytes). Now it turns out that a couple of ITALK messages are
- * over 512 bytes. I know we like verbose output, but this is ridiculous.
- */
-#define MAX_PACKET_LENGTH 516 /* 7 + 506 + 3 */
-
-/*
- * We used to define the input buffer length as MAX_PACKET_LENGTH*2+1.
- * However, as it turns out, this isn't enough. We've had a report
- * from one user with a GPS that reports at 20Hz that "sometimes a
- * long/slow context switch will cause the next read from the serial
- * device to be very big. I sometimes see a read of 250 characters or
- * more."
- */
-#define INPUT_BUFFER_LENGTH 1536
-
-struct gps_packet_t {
- /* packet-getter internals */
- int type;
-#define BAD_PACKET -1
-#define COMMENT_PACKET 0
-#define NMEA_PACKET 1
-#define SIRF_PACKET 2
-#define ZODIAC_PACKET 3
-#define TSIP_PACKET 4
-#define EVERMORE_PACKET 5
-#define ITALK_PACKET 6
-#define RTCM_PACKET 7
-#define GARMIN_PACKET 8
-#define NAVCOM_PACKET 9
-#define UBX_PACKET 10
- unsigned int state;
- size_t length;
- unsigned char inbuffer[MAX_PACKET_LENGTH*2+1];
- size_t inbuflen;
- unsigned /*@observer@*/char *inbufptr;
- /* outbuffer needs to be able to hold 4 GPGSV records at once */
- unsigned char outbuffer[MAX_PACKET_LENGTH*2+1];
- size_t outbuflen;
- unsigned long char_counter; /* count characters processed */
- unsigned long retry_counter; /* count sniff retries */
- unsigned counter; /* packets since last driver switch */
- /*
- * This is not conditionalized on RTCM104_ENABLE because we need to
- * be able to build rtcmdecode even when RTCM support is not
- * configured in the daemon.
- */
- struct {
- /* ISGPS200 decoding */
- bool locked;
- int curr_offset;
- isgps30bits_t curr_word;
- isgps30bits_t buf[RTCM_WORDS_MAX];
- unsigned int bufindex;
- } isgps;
-};
-
-extern void packet_reset(struct gps_packet_t *);
-extern void packet_pushback(struct gps_packet_t *);
-extern ssize_t packet_parse(struct gps_packet_t *, size_t);
-extern ssize_t packet_get(int, struct gps_packet_t *);
-extern int packet_sniff(struct gps_packet_t *);
-
-extern void isgps_init(/*@out@*/struct gps_packet_t *);
-enum isgpsstat_t isgps_decode(struct gps_packet_t *,
- bool (*preamble_match)(isgps30bits_t *),
- bool (*length_check)(struct gps_packet_t *),
- size_t,
- unsigned int);
-extern unsigned int isgps_parity(isgps30bits_t);
-extern void isgps_output_magnavox(isgps30bits_t *, unsigned int, FILE *);
-
-extern enum isgpsstat_t rtcm_decode(struct gps_packet_t *, unsigned int);
-extern void rtcm_dump(struct rtcm_t *, /*@out@*/char[], size_t);
-extern int rtcm_undump(/*@out@*/struct rtcm_t *, char *);
-extern void rtcm_unpack(/*@out@*/struct rtcm_t *, char *);
-extern bool rtcm_repack(struct rtcm_t *, isgps30bits_t *);
-extern void rtcm_output_magnavox(isgps30bits_t *, FILE *);
-
-/* Next, declarations for the core library... */
-
-/* factors for converting among confidence interval units */
-#define CEP50_SIGMA 1.18
-#define DRMS_SIGMA 1.414
-#define CEP95_SIGMA 2.45
-
-/* this is where we choose the confidence level to use in reports */
-#define GPSD_CONFIDENCE CEP95_SIGMA
-
-#define NTPSHMSEGS 4 /* number of NTP SHM segments */
-
-/* Some internal capabilities depend on which drivers we're compiling. */
-#ifdef EARTHMATE_ENABLE
-#define ZODIAC_ENABLE
-#endif
-#if defined(ZODIAC_ENABLE) || defined(SIRF_ENABLE) || defined(GARMIN_ENABLE) || defined(TSIP_ENABLE) || defined(EVERMORE_ENABLE) || defined(ITRAX_ENABLE)
-#define BINARY_ENABLE
-#endif
-#if defined(TRIPMATE_ENABLE) || defined(BINARY_ENABLE)
-#define NON_NMEA_ENABLE
-#endif
-
-struct gps_context_t {
- int valid; /* member validity flags */
-#define LEAP_SECOND_VALID 0x01 /* we have or don't need correction */
- /* DGPSIP status */
- bool sentdgps; /* have we sent a DGPS report? */
- enum { dgnss_none, dgnss_dgpsip, dgnss_ntrip } dgnss_service; /* type of DGNSS service */
- int fixcnt; /* count of good fixes seen */
- int dsock; /* socket to DGPSIP server/Ntrip caster */
- void *dgnss_privdata; /* DGNSS service specific data */
- ssize_t rtcmbytes; /* byte count of last RTCM104 report */
- char rtcmbuf[RTCM_MAX]; /* last RTCM104 report */
- double rtcmtime; /* timestamp of last RTCM104 report */
- /* timekeeping */
- int leap_seconds; /* Unix seconds to UTC */
- int century; /* for NMEA-only devices without ZDA */
-#ifdef NTPSHM_ENABLE
- bool enable_ntpshm;
- /*@reldef@*/struct shmTime *shmTime[NTPSHMSEGS];
- bool shmTimeInuse[NTPSHMSEGS];
-# ifdef PPS_ENABLE
- bool shmTimePPS;
-# endif /* PPS_ENABLE */
-#endif /* NTPSHM_ENABLE */
-};
-
-struct gps_device_t;
-
-#if defined (HAVE_SYS_TERMIOS_H)
-#include <sys/termios.h>
-#else
-#if defined (HAVE_TERMIOS_H)
-#include <termios.h>
-#endif
-#endif
-
-struct gps_type_t {
-/* GPS method table, describes how to talk to a particular GPS type */
- /*@observer@*/char *typename;
- /*@observer@*//*@null@*/char *trigger;
- int channels;
- /*@null@*/bool (*probe_detect)(struct gps_device_t *session);
- /*@null@*/void (*probe_wakeup)(struct gps_device_t *session);
- /*@null@*/void (*probe_subtype)(struct gps_device_t *session, unsigned int seq);
-#ifdef ALLOW_RECONFIGURE
- /*@null@*/void (*configurator)(struct gps_device_t *session, unsigned int seq);
-#endif /* ALLOW_RECONFIGURE */
- /*@null@*/ssize_t (*get_packet)(struct gps_device_t *session);
- /*@null@*/gps_mask_t (*parse_packet)(struct gps_device_t *session);
- /*@null@*/ssize_t (*rtcm_writer)(struct gps_device_t *session, char *rtcmbuf, size_t rtcmbytes);
- /*@null@*/bool (*speed_switcher)(struct gps_device_t *session, speed_t speed);
- /*@null@*/void (*mode_switcher)(struct gps_device_t *session, int mode);
- /*@null@*/bool (*rate_switcher)(struct gps_device_t *session, double rate);
- int cycle_chars;
-#ifdef ALLOW_RECONFIGURE
- /*@null@*/void (*revert)(struct gps_device_t *session);
-#endif /* ALLOW_RECONFIGURE */
- /*@null@*/void (*wrapup)(struct gps_device_t *session);
- double cycle;
-};
-
-struct gps_device_t {
-/* session object, encapsulates all global state */
- struct gps_data_t gpsdata;
- /*@relnull@*/struct gps_type_t *device_type;
- struct gps_context_t *context;
-#ifdef ALLOW_RECONFIGURE
- bool enable_reconfigure; /* OK to hack GPS settings? */
-#endif /* ALLOW_RECONFIGURE */
- double rtcmtime; /* timestamp of last RTCM104 correction to GPS */
- struct termios ttyset, ttyset_old;
- unsigned int baudindex;
- int saved_baud;
- struct gps_packet_t packet;
- char subtype[64]; /* firmware version or subtype ID */
- double poll_times[FD_SETSIZE]; /* last daemon poll time */
-#ifdef NTPSHM_ENABLE
- int shmindex;
- double last_fixtime; /* so updates happen once */
-# ifdef PPS_ENABLE
- int shmTimeP;
-# endif /* PPS_ENABLE */
-#endif /* NTPSHM_ENABLE */
- double mag_var; /* Magnetic variation in degrees */
- bool back_to_nmea; /* back to NMEA on revert? */
-#ifdef NMEADISC
- int ldisc; /* current line discipline */
-#endif
- /*
- * The rest of this structure is driver-specific private storage.
- * Because the Garmin driver uses a long buffer, you can have
- * up to 4096+12 bytes of private storage in your own union member
- * without making this structure larger or changing the API at all.
- */
- union {
-#ifdef NMEA_ENABLE
- struct {
- int part, await; /* for tracking GSV parts */
- struct tm date;
- double subseconds;
- } nmea;
-#endif /* NMEA_ENABLE */
-#ifdef BINARY_ENABLE
-#ifdef SIRF_ENABLE
- struct {
- unsigned int driverstate; /* for private use */
-#define SIRF_LT_231 0x01 /* SiRF at firmware rev < 231 */
-#define SIRF_EQ_231 0x02 /* SiRF at firmware rev == 231 */
-#define SIRF_GE_232 0x04 /* SiRF at firmware rev >= 232 */
-#define UBLOX 0x08 /* uBlox firmware with packet 0x62 */
- unsigned long satcounter;
- unsigned int time_seen;
-#define TIME_SEEN_GPS_1 0x01 /* Seen GPS time variant 1? */
-#define TIME_SEEN_GPS_2 0x02 /* Seen GPS time variant 2? */
-#define TIME_SEEN_UTC_1 0x04 /* Seen UTC time variant 1? */
-#define TIME_SEEN_UTC_2 0x08 /* Seen UTC time variant 2? */
-#ifdef ALLOW_RECONFIGURE
- /* fields from Navigation Parameters message */
- bool nav_parameters_seen; /* have we seen one? */
- unsigned char altitude_hold_mode;
- unsigned char altitude_hold_source;
- int16_t altitude_source_input;
- unsigned char degraded_mode;
- unsigned char degraded_timeout;
- unsigned char dr_timeout;
- unsigned char track_smooth_mode;
-#endif /* ALLOW_RECONFIGURE */
- } sirf;
-#endif /* SIRF_ENABLE */
-#ifdef TSIP_ENABLE
- struct {
- int16_t gps_week; /* Current GPS week number */
- bool superpkt; /* Super Packet mode requested */
- time_t last_41; /* Timestamps for packet requests */
- time_t last_5c;
- time_t last_6d;
- time_t last_46;
- unsigned int parity, stopbits; /* saved RS232 link parameters */
- } tsip;
-#endif /* TSIP_ENABLE */
-#ifdef GARMIN_ENABLE /* private housekeeping stuff for the Garmin driver */
- struct {
- unsigned char Buffer[4096+12]; /* Garmin packet buffer */
- size_t BufferLen; /* current GarminBuffer Length */
- } garmin;
-#endif /* GARMIN_ENABLE */
-#ifdef ZODIAC_ENABLE /* private housekeeping stuff for the Zodiac driver */
- struct {
- unsigned short sn; /* packet sequence number */
- /*
- * Zodiac chipset channel status from PRWIZCH. Keep it so
- * raw-mode translation of Zodiac binary protocol can send
- * it up to the client.
- */
-#define ZODIAC_CHANNELS 12
- unsigned int Zs[ZODIAC_CHANNELS]; /* satellite PRNs */
- unsigned int Zv[ZODIAC_CHANNELS]; /* signal values (0-7) */
- } zodiac;
-#endif /* ZODIAC_ENABLE */
-#ifdef UBX_ENABLE
-#if 0
- struct {
- /* XXX insert user fields here */
- } ubx;
-#endif
-#endif /* UBX_ENABLE */
- /*
- * This is not conditionalized on RTCM104_ENABLE because we need to
- * be able to build rtcmdecode even when RTCM support is not
- * configured in the daemon. It doesn't take up extra space.
- */
- struct {
- /* ISGPS200 decoding */
- bool locked;
- int curr_offset;
- isgps30bits_t curr_word;
- isgps30bits_t buf[RTCM_WORDS_MAX];
- unsigned int bufindex;
- } isgps;
-#endif /* BINARY_ENABLE */
- } driver;
-};
-
-/* logging levels */
-#define LOG_ERROR 0 /* errors, display always */
-#define LOG_SHOUT 0 /* not an error but we should always see it */
-#define LOG_WARN 1 /* not errors but may indicate a problem */
-#define LOG_INF 2 /* key informative messages */
-#define LOG_PROG 3 /* progress messages */
-#define LOG_IO 4 /* IO to and from devices */
-#define LOG_RAW 5 /* raw low-level I/O */
-
-#define IS_HIGHEST_BIT(v,m) (v & ~((m<<1)-1))==0
-
-/* here are the available GPS drivers */
-extern struct gps_type_t **gpsd_drivers;
-
-/* gpsd library internal prototypes */
-extern gps_mask_t nmea_parse_input(struct gps_device_t *);
-extern gps_mask_t nmea_parse(char *, struct gps_device_t *);
-extern int nmea_send(int, const char *, ... );
-extern void nmea_add_checksum(char *);
-
-ssize_t generic_get(struct gps_device_t *);
-ssize_t pass_rtcm(struct gps_device_t *, char *, size_t);
-
-extern gps_mask_t sirf_parse(struct gps_device_t *, unsigned char *, size_t);
-extern gps_mask_t evermore_parse(struct gps_device_t *, unsigned char *, size_t);
-extern gps_mask_t navcom_parse(struct gps_device_t *, unsigned char *, size_t);
-extern gps_mask_t garmin_ser_parse(struct gps_device_t *);
-
-extern bool dgnss_url(char *);
-extern int dgnss_open(struct gps_context_t *, char *);
-extern int dgnss_poll(struct gps_context_t *);
-extern void dgnss_report(struct gps_device_t *);
-extern void dgnss_autoconnect(struct gps_context_t *, double, double);
-
-extern void rtcm_relay(struct gps_device_t *);
-extern void rtcm_output_mag(isgps30bits_t *, FILE *);
-
-extern int dgpsip_open(struct gps_context_t *, const char *);
-extern void dgpsip_report(struct gps_device_t *);
-extern void dgpsip_autoconnect(struct gps_context_t *,
- double, double, const char *);
-extern int ntrip_open(struct gps_context_t *, char *);
-extern void ntrip_report(struct gps_device_t *);
-
-extern void gpsd_tty_init(struct gps_device_t *);
-extern int gpsd_open(struct gps_device_t *);
-extern bool gpsd_set_raw(struct gps_device_t *);
-extern bool gpsd_write(struct gps_device_t *, void const *, size_t);
-extern bool gpsd_next_hunt_setting(struct gps_device_t *);
-extern int gpsd_switch_driver(struct gps_device_t *, char *);
-extern void gpsd_set_speed(struct gps_device_t *, speed_t, unsigned char, unsigned int);
-extern speed_t gpsd_get_speed(struct termios *);
-extern void gpsd_assert_sync(struct gps_device_t *);
-extern void gpsd_close(struct gps_device_t *);
-
-extern void gpsd_zero_satellites(/*@out@*/struct gps_data_t *sp)/*@modifies sp@*/;
-extern void gpsd_interpret_subframe(struct gps_device_t *, unsigned int[]);
-extern /*@ observer @*/ char *gpsd_hexdump(const void *, size_t);
-extern int gpsd_hexpack(char *, char *, int);
-extern int hex2bin(char *);
-extern char /*@observer@*/ *gpsd_id(/*@in@*/struct gps_device_t *);
-extern void gpsd_position_fix_dump(struct gps_device_t *, /*@out@*/char[], size_t);
-extern void gpsd_error_model_fixup(struct gps_device_t *);
-extern void gpsd_clear_data(struct gps_device_t *);
-extern int netlib_connectsock(const char *, const char *, const char *);
-
-extern void ntpshm_init(struct gps_context_t *, bool);
-extern int ntpshm_alloc(struct gps_context_t *);
-extern bool ntpshm_free(struct gps_context_t *, int);
-extern int ntpshm_put(struct gps_device_t *, double);
-extern int ntpshm_pps(struct gps_device_t *,struct timeval *);
-
-extern void ecef_to_wgs84fix(struct gps_data_t *,
- double, double, double,
- double, double, double);
-extern gps_mask_t dop(struct gps_data_t *);
-
-/* srecord.c */
-extern void hexdump(size_t, unsigned char *, unsigned char *);
-extern unsigned char sr_sum(unsigned int, unsigned int, unsigned char *);
-extern int bin2srec(unsigned int, unsigned int, unsigned int, unsigned char *, unsigned char *);
-extern int srec_hdr(unsigned int, unsigned char *, unsigned char *);
-extern int srec_fin(unsigned int, unsigned char *);
-extern unsigned char hc(unsigned char);
-
-/* exported bits for the GPS flasher */
-bool sirf_write(int fd, unsigned char *msg);
-
-/* application interface */
-extern void gpsd_init(struct gps_device_t *, struct gps_context_t *, char *);
-extern int gpsd_activate(struct gps_device_t *, bool);
-extern void gpsd_deactivate(struct gps_device_t *);
-extern gps_mask_t gpsd_poll(struct gps_device_t *);
-extern void gpsd_wrap(struct gps_device_t *);
-
-/* caller should supply this */
-void gpsd_report(int, const char *, ...);
-
-#ifdef S_SPLINT_S
-extern bool finite(double);
-extern int cfmakeraw(struct termios *);
-extern struct protoent *getprotobyname(const char *);
-extern /*@observer@*/char *strptime(const char *,const char *tp,/*@out@*/struct tm *)/*@modifies tp@*/;
-extern struct tm *gmtime_r(const time_t *,/*@out@*/struct tm *tp)/*@modifies tp@*/;
-extern struct tm *localtime_r(const time_t *,/*@out@*/struct tm *tp)/*@modifies tp@*/;
-extern float roundf(float x);
-#endif /* S_SPLINT_S */
-
-/* some OSes don't have round(). fake it if need be */
-#ifndef HAVE_ROUND
-#define round(x) ((double)rint(x))
-#define roundf(x) ((float)rintf(x))
-#endif /* !HAVE_ROUND */
-
-/* OpenBSD and FreeBSD and Cygwin don't seem to have NAN, NetBSD does, others? */
-/* XXX test for this in configure? */
-#if defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__CYGWIN__)
-#ifndef NAN
-#define NAN (0.0/0.0)
-#endif /* !NAN */
-#endif /* list of Operating Systems */
-
-/* Cygwin, in addition to NAN, doesn't have cfmakeraw */
-#if defined(__CYGWIN__)
-void cfmakeraw(struct termios *);
-#endif /* defined(__CYGWIN__) */
-
-#endif /* _gpsd_h_ */