You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
spOSMroute/main/gps.h

161 lines
3.9 KiB

/***************************************************************************
* gps.h
*
* Copyright 2010 Steffen Pohle
* steffen@gulpe.de
****************************************************************************/
/*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
/*
* GPS Device Setup String:
* SAMPLE: "serial:com1,19200" serial, comport 1, 19200 baud (windows)
* SAMPLE: "serial:/dev/ttyS0,19200" serial, /dev/ttyS0, 19200 baud (linux)
* SAMPLE: "file:gpsdata.save" read gps data from file
* SAMPLE: "file:sim,gpsdata.save" read gps data from file, real time simulation
* (needed for testing routeing)
*/
#ifndef _GPS_H_
#define _GPS_H_
#include <time.h>
#define GPS_DEVICELEN 256
#define GPS_ROUTEPOILEN 128
#define GPS_INBUFSIZE 128
#define GPS_LINELEN 100
#define GPS_MAXSAT 32
#define GPS_KNOTEN2KMH 1.851984
#define GPS_LOOP_TIMEOUT 50
#define GPSF_LOG 0x0001
#define GPSF_ALL 0xFFFF
enum {
GPS_T_NONE,
GPS_T_SERIAL,
GPS_T_ANDROID,
GPS_T_FILE
};
struct gps_satelite {
char deg_elev;
int deg_north;
char quality;
};
struct gps_routepoidata {
float lon;
float lat;
char name[GPS_ROUTEPOILEN]; // name[0] == 0 means no valid data
};
struct gps_data {
time_t time;
float lon;
float lat;
float direction;
float speed;
char valid;
char quality;
char numofsatelites;
float height;
float hdop;
struct gps_satelite sat[32];
struct gps_routepoidata poi;
};
struct gps_routedata {
time_t time;
float lon;
float lat;
float speed;
};
struct gps_route {
struct gps_routedata *data;
struct gps_routepoidata *pdata;
int cnt;
int max;
int pcnt;
int pmax;
};
extern struct gps_route *gpsroute;
extern int gpsflags;
extern void gpsroute_exportgpx (struct gps_route *gr, char *filename);
extern void gpsroute_free (struct gps_route *gr);
extern struct gps_route *gpsroute_new ();
extern void gpsroute_addpos (struct gps_route *gr, float lon, float lat, float speed, time_t t);
extern void gpsroute_addpoi (struct gps_route *gr, float lon, float lat, char *text);
extern void gps_set_device (char *device);
extern char *gps_get_device ();
extern void gps_start ();
extern void gps_stop ();
extern struct gps_data *gps_loop ();
extern void gps_save_log (char *fname, char *text);
extern void gps_load_log (char *fn);
extern int gps_isrunning ();
extern struct gps_data *gps_getposition ();
/*
* implemention of each build, i.E. gtk_gps.c or wince_gps.c
* other stuff will be put into the gtk_port.h, wince_port.h files.
*/
extern void gps_serial_settings ();
extern int gps_serial_device_open ();
extern void gps_serial_device_close ();
extern int gps_serial_device_read (char *ptr, int ptrsize);
enum {
GPSF_NONE,
GPSF_PAUSE,
GPSF_INIT,
GPSF_RUN,
GPSF_END
};
extern int gps_file_device_open ();
extern void gps_file_device_close ();
extern int gps_file_device_read (char *ptr, int ptrsize);
extern int gps_file_get_state ();
extern void gps_file_set_state (int state);
extern void gps_file_set_pos (int newpos);
extern int gps_file_get_pos ();
extern int gps_file_get_size ();
#ifdef ANDROID
extern int gps_android_device_open ();
extern void gps_android_device_close ();
extern int gps_android_device_read (char *ptr, int ptrsize);
#endif
#endif