Demo module gps par interruption
Ce programme permet d'afficher les données GPS reçues par gpsd.
Le programme gère la réception par interruption, une fonction de gestion (callback) gère la réception de message de fix et une autre les erreurs.
Voilà ce que ça donne :
Press Ctrl+C to abort ...
Fix,Date/Time,Latitude,Longitude
ON,Sat Mar 11 16:29:44 2017,43.1615,5.93072
ON,Sat Mar 11 16:29:45 2017,43.1615,5.93071
ON,Sat Mar 11 16:29:46 2017,43.1616,5.9307
ON,Sat Mar 11 16:29:47 2017,43.1616,5.9307
ON,Sat Mar 11 16:29:48 2017,43.1616,5.9307
ON,Sat Mar 11 16:29:48 2017,43.1616,5.9307
ON,Sat Mar 11 16:29:49 2017,43.1616,5.93071
ON,Sat Mar 11 16:29:50 2017,43.1616,5.93072
ON,Sat Mar 11 16:29:51 2017,43.1616,5.93072
ON,Sat Mar 11 16:29:52 2017,43.1616,5.93071
ON,Sat Mar 11 16:29:53 2017,43.1616,5.9307
^C
Gps closed.
Have a nice day !
#include <stdlib.h>
#include <stdio.h>
#include <sysio/gps.h>
void vSigIntHandler (int sig);
void vFixCallback (
struct xGps * gps);
void vErrorCallback (int iError);
static struct xGps * gps;
int main (void) {
int ret;
gps =
xGpsNew (
"localhost", DEFAULT_GPSD_PORT);
signal (SIGINT, vSigIntHandler);
printf ("Press Ctrl+C to abort ...\n");
printf ("\nFix,Date/Time,Latitude,Longitude\n");
for (;;) {
}
vSigIntHandler (SIGQUIT);
return 0;
}
void
vFixCallback (
struct xGps * gps) {
timestamp_t t;
double latitude, longitude;
bool fix;
}
void
vErrorCallback (int iError) {
fprintf (stderr, "Gps Error: %d\n", iError);
vSigIntHandler (SIGQUIT);
}
void
vSigIntHandler (int sig) {
printf ("\nGps closed.\nHave a nice day !\n");
exit (EXIT_SUCCESS);
}