пример кода libgps C

Я пишу номер-хруст регистрации данных c программы для моего GPS включен Raspberry Pi. Я схватил gpsd, и его образец приложения cgps отображает информацию gps правильно. Я хотел использовать libgps для взаимодействия с демоном, чтобы я мог иметь всю эту полезную информацию в своем приложении, но я был быстро перегружен сложностью его API.

документация по its HOWTO страница указывает мне смотреть на cgps и gpxlogger например, код, но есть так много сцепления, что я не могу пробраться через все это. На противоположном конце спектра пример кода C на libgps страница настолько разделена, что она непригодна для использования.

может кто-нибудь указать мне на один образец класса, который может прояснить это? Возможно, что-то, содержащее ?

1 ответов


я заговорил слишком рано. После просмотра других вопросов SO я столкнулся с этой совершенно не связанный с этим вопрос. Вот моя очень слегка измененная версия:

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

int main() {
int rc;
struct timeval tv;

struct gps_data_t gps_data;
if ((rc = gps_open("localhost", "2947", &gps_data)) == -1) {
    printf("code: %d, reason: %s\n", rc, gps_errstr(rc));
    return EXIT_FAILURE;
}
gps_stream(&gps_data, WATCH_ENABLE | WATCH_JSON, NULL);

while (1) {
    /* wait for 2 seconds to receive data */
    if (gps_waiting (&gps_data, 2000000)) {
        /* read data */
        if ((rc = gps_read(&gps_data)) == -1) {
            printf("error occured reading gps data. code: %d, reason: %s\n", rc, gps_errstr(rc));
        } else {
            /* Display data from the GPS receiver. */
            if ((gps_data.status == STATUS_FIX) && 
                (gps_data.fix.mode == MODE_2D || gps_data.fix.mode == MODE_3D) &&
                !isnan(gps_data.fix.latitude) && 
                !isnan(gps_data.fix.longitude)) {
                    //gettimeofday(&tv, NULL); EDIT: tv.tv_sec isn't actually the timestamp!
                    printf("latitude: %f, longitude: %f, speed: %f, timestamp: %lf\n", gps_data.fix.latitude, gps_data.fix.longitude, gps_data.fix.speed, gps_data.fix.time); //EDIT: Replaced tv.tv_sec with gps_data.fix.time
            } else {
                printf("no GPS data available\n");
            }
        }
    }

    sleep(3);
}

/* When you are done... */
gps_stream(&gps_data, WATCH_DISABLE, NULL);
gps_close (&gps_data);

return EXIT_SUCCESS;
}

Я скомпилировать его с помощью gcc -o gps filename.c -lm -lgps