C GPS代码未读取纬度数据

C GPS代码未读取纬度数据,c,gps,gpsd,C,Gps,Gpsd,我正试图写一段代码,返回带有GPS天线的盒子上的纬度,但是我似乎不知道如何取回这些数据。遥控箱正在运行gpsd,我可以看到正在使用gpspipe从GPS天线检索数据 以下是我为将GPS数据发送到本地机器所做的工作: ssh-l用户x.x.x.x-l 2948:127.0.0.1:2947 gpsd-N-N”gpsd://localhost:2948“ 接下来,为了验证我是否将NMEA数据取回,我运行了gpspipe,并且可以看到数据流 我编写了以下C代码: #include <unistd

我正试图写一段代码,返回带有GPS天线的盒子上的纬度,但是我似乎不知道如何取回这些数据。遥控箱正在运行gpsd,我可以看到正在使用gpspipe从GPS天线检索数据

以下是我为将GPS数据发送到本地机器所做的工作:

  • ssh-l用户x.x.x.x-l 2948:127.0.0.1:2947
  • gpsd-N-N”gpsd://localhost:2948“
  • 接下来,为了验证我是否将NMEA数据取回,我运行了gpspipe,并且可以看到数据流

    我编写了以下C代码:

    #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;
    }
    
    等等

    我的问题是:我的代码正确吗?为什么我不能检索任何修复数据?我的设置正确吗

    如果您需要更多信息,请随时询问。谢谢。

    我查看了第70ff行,发现模式0基本上告诉您还没有更新

    along告诉您状态0表示您没有修复程序

    我还没有仔细检查您的代码,但再等几分钟似乎是值得的。

    我看了一下,在第70ff行中发现,模式0基本上告诉您还没有更新

    along告诉您状态0表示您没有修复程序


    我还没有仔细检查您的代码,但再等几分钟似乎是值得的。

    将其中一个标志从
    WATCH_RAW
    更改为
    WATCH_JSON
    ,似乎没有任何其他更改。我不知道为什么尝试读取原始数据(或者我用
    WATCH\u NMEA
    尝试的NMEA)一开始就不起作用。。。如果您知道的话,请随时发表评论。

    将其中一个标志从
    WATCH\u RAW
    更改为
    WATCH\u JSON
    ,这样做似乎没有任何其他更改。我不知道为什么尝试读取原始数据(或者我用
    WATCH\u NMEA
    尝试的NMEA)一开始就不起作用。。。如果您知道的话,请随时发表评论。

    与问题无关,但不要调用您自己的类型
    something\u t
    ——后缀是为POSIX中的实现保留的。
    \u t
    后缀不会编译发布的代码!在许多其他事情中,它缺少以下语句:
    \include
    for
    printf()
    ,等等您可以发布
    gps.h
    的内容吗?当显示错误消息时,它应该输出到
    stderr
    ,而不是
    stdout
    ,因此这一行:
    printf(“错误:读取gps数据时发生。代码:%d,原因:%s\n”,呃,gps_errstr(err))应为:
    fprintf(标准错误,“错误:读取gps数据时发生。代码:%d,原因:%s\n”,错误,gps_errstr(错误));。类似的注意事项也适用于printf(“错误:无数据等待\n”)`与问题无关,但不要调用您自己的类型
    something\u t
    ——后缀是为POSIX中的实现保留的。发布的代码不会编译!在许多其他事情中,它缺少以下语句:
    \include
    for
    printf()
    ,等等您可以发布
    gps.h
    的内容吗?当显示错误消息时,它应该输出到
    stderr
    ,而不是
    stdout
    ,因此这一行:
    printf(“错误:读取gps数据时发生。代码:%d,原因:%s\n”,呃,gps_errstr(err))应为:
    fprintf(标准错误,“错误:读取gps数据时发生。代码:%d,原因:%s\n”,错误,gps_errstr(错误));。类似的注意事项也适用于printf(“错误:无数据等待\n”)`
    
    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