GPS代码不读取纬度数据

时间:2017-06-09 16:50:19

标签: c gps gpsd

我正在尝试使用GPS天线编写一个返回纬度的代码,但我似乎无法弄清楚如何获取这些数据。远程盒正在运行gpsd,我可以看到正在使用gpspipe从GPS天线检索数据。

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

  1. ssh -l user x.x.x.x -L 2948:127.0.0.1:2947
  2. gpsd -N -n "gpsd://localhost:2948"
  3. 接下来,为了验证我正在收回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;
    }
    

    当我运行代码时,我得到以下输出:

    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
    

    等等......

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

    如果您需要更多信息,请不要犹豫。感谢。

2 个答案:

答案 0 :(得分:0)

我查看了https://fossies.org/dox/gpsd-3.16/gps_8h_source.html并在第70ff行中发现模式0基本上告诉你那里没有更新。

沿着https://fossies.org/dox/gpsd-3.16/gps_8h_source.html#l01996告诉你,状态0表示你没有修复。

我还没有仔细审查你的代码,但是等待几分钟似乎是值得的。

答案 1 :(得分:0)

将其中一个标记从WATCH_RAW更改为WATCH_JSON似乎没有任何其他更改。我不知道为什么尝试阅读原始数据(或我尝试使用WATCH_NMEA的NMEA)首先不起作用...如果你知道,请随意发表评论。