1 --- geoclue-0.12.99/providers/gpsd/geoclue-gpsd.c.orig 2012-07-31 18:47:05.000000000 +0200
2 +++ geoclue-0.12.99/providers/gpsd/geoclue-gpsd.c 2013-08-30 16:49:28.898513583 +0200
10 #include <geoclue/geoclue-error.h>
12 #include <geoclue/gc-iface-position.h>
13 #include <geoclue/gc-iface-velocity.h>
15 -typedef struct gps_data_t gps_data;
16 typedef struct gps_fix_t gps_fix;
18 /* only listing used tags */
24 + struct gps_data_t *gpsdata;
30 geoclue_gpsd_start_gpsd (GeoclueGpsd *self)
32 - self->gpsdata = gps_open (self->host, self->port);
33 - if (self->gpsdata) {
34 - gps_stream(self->gpsdata, WATCH_ENABLE | WATCH_NMEA | POLL_NONBLOCK, NULL);
35 - gps_set_raw_hook (self->gpsdata, gpsd_raw_hook);
36 + struct gps_data_t *gd = calloc (1, sizeof(struct gps_data_t));
37 + if (gd && (gps_open (self->host, self->port, gd) >= 0)) {
39 + gps_stream(self->gpsdata, WATCH_ENABLE | WATCH_NMEA | WATCH_RAW, NULL);
43 g_warning ("gps_open() failed, is gpsd running (host=%s,port=%s)?", self->host, self->port);
48 GeoclueGpsd *self = (GeoclueGpsd*)data;
50 - if (gps_poll(self->gpsdata) < 0) {
51 + if (gps_read(self->gpsdata) < 0) {
52 geoclue_gpsd_set_status (self, GEOCLUE_STATUS_ERROR);
53 geoclue_gpsd_stop_gpsd(self);
55 + } else if(self->gpsdata->set) {
56 + gpsd_raw_hook(self->gpsdata, NULL, 0);
57 + self->gpsdata->set = 0;