首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用gpsd/libgps C获取gps时间

使用gpsd/libgps C获取gps时间
EN

Stack Overflow用户
提问于 2016-11-02 12:13:15
回答 2查看 2.5K关注 0票数 2

我正在尝试用libgps从Adafruit的终极gps中读取数据。我找到了一个代码示例,它为我提供了除gps时间之外的所有信息。如何获取gps通过串口发送的gps时间,最好以小时/分钟/秒为单位?

我试过gps_data.fix.time,但我不确定这是系统时间还是gps时间。

代码语言:javascript
复制
#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) {
        /* time to wait to receive data */
        if (gps_waiting (&gps_data, 500000)) {
        /* 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);
                //*****************WOULD LIKE TO PRINT THE TIME HERE.*****************************
                    printf("height: %f, latitude: %f, longitude: %f, speed: %f, timestamp: %f\n", gps_data.fix.altitude, gps_data.fix.latitude, gps_data.fix.longitude, gps_data.fix.speed, gps_data.fix.time/*tv.tv_sec*/);
            } else {
                printf("no GPS data available\n");
            }
        }
    }

    //sleep(1);
}

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

return EXIT_SUCCESS;

}

EN

回答 2

Stack Overflow用户

发布于 2020-04-02 04:52:45

我在libgps中跟踪了一些代码,gps_data.fix.time似乎是一个结构类型的变量。它的定义如下:

代码语言:javascript
复制
struct timespec
    time_t  tv_sec;
    long    tv_nsec;    
};

您可能希望尝试打印gps_data.fix.time.tv_sec和/或gps_data.fix.time.tv_nsec

希望这能有所帮助。

票数 1
EN

Stack Overflow用户

发布于 2020-08-20 15:30:29

我读了我电脑的gps.h,发现timesec_t是双倍的。我尝试如下所示。

代码语言:javascript
复制
int my_gps_time; // for cast fix.time(double) to int
struct tm *ptm; // for date and time

...
my_gps_time = gps_data.fix.time;
ptm = localtime((time_t *)&my_gps_time);
printf("time: %04d/%02d/%02d,%02d:%02d:%02d\n",\
       ptm->tm_year + 1900, ptm->tm_mon + 1,\
       ptm->tm_mday,ptm->tm_hour, ptm->tm_min, ptm->tm_sec); 
...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40372370

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档