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:
ssh -l user x.x.x.x -L 2948:127.0.0.1:2947
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.
Kein Problem, aber rufen Sie nicht Ihre eigenen Typen 'something_t' auf - das Suffix' _t ist für die Implementierung in POSIX reserviert. –
der gepostete Code kompiliert nicht! unter vielen anderen Dingen fehlt die Aussage: '#include' für 'printf()', etc –
user3629249
könnten Sie den Inhalt von 'gps.h' posten? – user3629249