#ifndef _NMEA_H_
#define _NMEA_H_

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#define N_EMPTY 0x00
#define N_GPRMC 0x01
#define N_GPGGA 0x02
#define N_UNKNOWN 0x00
#define N_COMPLETE 0x03
#define N_CHECKSUM_ERR 0x80
#define N_MESSAGE_ERR 0xC0

#define N_GPRMC_STR "$GPRMC"
#define N_GPGGA_STR "$GPGGA"

/* Struktur fuer GPGGA-Record */
struct gpgga
  {
  double latitude;           /* Breitengrad */
  char lat;                  /* 'N' oder 'S' */
  double longitude;          /* Laengengrad */
  char lon;                  /* 'E' oder 'W' */
  unsigned char quality;     /* "Quality"-Feld */
  unsigned char satellites;  /* Anzahl Satelliten */
  double altitude;           /* Hoehe ueber dem Meeresspiegel */
  };

/* Struktur fuer GPRMC-Record */
struct gprmc
  {
  double latitude;           /* Breitengrad */
  char lat;                  /* 'N' oder 'S' */
  double longitude;          /* Laengengrad */
  char lon;                  /* 'E' oder 'W' */
  double speed;              /* Geschwindigkeit */ 
  double course;             /* Marschrichtung */
  double time;               /* Uhrzeit */
  long int date;             /* Datum */
  };

/* Messagetyp ermitteln (GPGGA, GPRMC, etc..) */
char nmea_get_message_type(char *);

/* Checksum eines Records pruefen */
char nmea_valid_checksum(char *);

/* GPGGA-Record untersuchen und auswerten */
void nmea_parse_gpgga(char *, struct gpgga *);

/* GPRMC-Record untersuchen und auswerten */
void nmea_parse_gprmc(char *, struct gprmc *);

/* Laengen- oder Breitenangabe von Grad in Dezimalnotation umrechnen */
double gps_deg_dec(double deg_point);

/* Laenge und Breite von Grad in Dezimalnotation umrechnen */
void gps_deg(double *latitude, char ns, double *longitude, char we);

#endif
