2017-06-09 7 views
0

Ich versuche Code zu schreiben, der die Breite einer Box mit einer GPS-Antenne zurückgibt, aber ich kann nicht herausfinden, wie man diese Daten zurückbekommt. Die Remote-Box läuft mit gpsd und ich kann sehen, dass Daten von der GPS-Antenne mit GPS-Pipe abgerufen werden.GPS-Code liest keine Breitenangaben

Hier ist, was ich getan habe GPS-Daten gesendet meinen lokalen Rechner zu erhalten:

  1. ssh -l user x.x.x.x -L 2948:127.0.0.1:2947
  2. gpsd -N -n "gpsd://localhost:2948"

nächsten zu überprüfen ich NMEA Daten zurück bin immer, ich Ich habe gpspipe und ich kann Daten fließen sehen.

ich die folgende C-Code geschrieben haben:

#include <unistd.h> 
#include <math.h> 
#include <gps.h> 

#define DEFAULT_HOST "localhost" 
#define DEFAULT_PORT "2947" 
typedef int GpsErrorCode_t; 

static struct gps_data_t gpsdata; 

static void process(struct gps_data_t *gps_data) { 
    printf("%d %d %f %f\n", gps_data->status, gps_data->fix.mode, gps_data->fix.latitude, gps_data->fix.longitude); 
} 

GpsErrorCode_t getLatitude(double* lat) { 
    GpsErrorCode_t err = gps_open(DEFAULT_HOST, DEFAULT_PORT, &gpsdata); 
    if (err != 0) { 
     return err; 
    } 

    gps_stream(&gpsdata, WATCH_ENABLE | WATCH_RAW, NULL); 

    //gps_mainloop(&gpsdata, 5000000, process); 

    int retries = 10; 
    int rc; 
    while (1) { 
     //retries--; 
     usleep(50000); 
     if (gps_waiting(&gpsdata, 500)) { 
      if ((err = gps_read(&gpsdata)) == -1) { 
       printf("ERROR: occured reading gps data. code: %d, reason: %s\n", err, gps_errstr(err)); 
       break; 
      } else { 
       if (gpsdata.set & PACKET_SET) { 
        printf("gps_read return code: %d\n", err); 
        printf("%d %d %f %f\n", gpsdata.status, gpsdata.fix.mode, gpsdata.fix.latitude, gpsdata.fix.longitude); 
       } 
      } 
     } else { 
      printf("ERROR: no data waiting\n"); 
      break; 
     } 
    } 

    gps_stream(&gpsdata, WATCH_DISABLE, NULL); 
    gps_close(&gpsdata); 
    return err; 
} 

int main() { 
    double lat = 0; 
    int err = 0; 
    err = getLatitude(&lat); 

    printf("Error code: %d\n", err); 
    return 0; 
} 

Wenn ich führen Sie den Code ich folgende Ausgabe:

gps_read return code: 92 
0 0 nan nan 
gps_read return code: 152 
0 0 nan nan 
gps_read return code: 125 
0 0 nan nan 
gps_read return code: 67 
0 0 nan nan 
gps_read return code: 34 
0 0 nan nan 
gps_read return code: 79 
0 0 nan nan 
gps_read return code: 65 
0 0 nan nan 
gps_read return code: 55 
0 0 nan nan 
gps_read return code: 51 
0 0 nan nan 
gps_read return code: 41 
0 0 nan nan 
gps_read return code: 37 
0 0 nan nan 
gps_read return code: 67 
0 0 nan nan 
gps_read return code: 34 
0 0 nan nan 
gps_read return code: 79 
0 0 nan nan 
gps_read return code: 65 
0 0 nan nan 

Und so weiter ...

Meine Fragen sind: Ist mein Code korrekt? Warum kann ich keine Fixdaten abrufen? Ist meine Konfiguration korrekt?

Wenn Sie weitere Informationen benötigen, zögern Sie bitte nicht zu fragen. Vielen Dank.

+0

Kein Problem, aber rufen Sie nicht Ihre eigenen Typen 'something_t' auf - das Suffix' _t ist für die Implementierung in POSIX reserviert. –

+0

der gepostete Code kompiliert nicht! unter vielen anderen Dingen fehlt die Aussage: '#include ' für 'printf()', etc – user3629249

+0

könnten Sie den Inhalt von 'gps.h' posten? – user3629249

Antwort

0

Ändern eines der Flags von WATCH_RAW zu WATCH_JSON schien den Trick ohne weitere Änderungen zu tun. Ich weiß nicht, warum der Versuch, Rohdaten einzulesen (oder NMEA, die ich mit WATCH_NMEA ausprobiert habe), überhaupt nicht funktionierte ... Fühlen Sie sich frei, einen Kommentar zu hinterlassen, wenn Sie es wissen.

Verwandte Themen