]>
Commit | Line | Data |
---|---|---|
dbb8bacc JB |
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 | |
3 | @@ -33,6 +33,7 @@ | |
4 | ||
5 | #include <math.h> | |
6 | #include <gps.h> | |
7 | +#include <stdlib.h> | |
8 | #include <string.h> | |
9 | ||
10 | #include <geoclue/geoclue-error.h> | |
11 | @@ -40,7 +41,6 @@ | |
12 | #include <geoclue/gc-iface-position.h> | |
13 | #include <geoclue/gc-iface-velocity.h> | |
14 | ||
15 | -typedef struct gps_data_t gps_data; | |
16 | typedef struct gps_fix_t gps_fix; | |
17 | ||
18 | /* only listing used tags */ | |
19 | @@ -59,7 +59,7 @@ | |
20 | char *host; | |
21 | char *port; | |
22 | ||
23 | - gps_data *gpsdata; | |
24 | + struct gps_data_t *gpsdata; | |
25 | ||
26 | gps_fix *last_fix; | |
27 | ||
28 | @@ -397,12 +397,13 @@ | |
29 | static gboolean | |
30 | geoclue_gpsd_start_gpsd (GeoclueGpsd *self) | |
31 | { | |
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)) { | |
38 | + self->gpsdata = gd; | |
39 | + gps_stream(self->gpsdata, WATCH_ENABLE | WATCH_NMEA | WATCH_RAW, NULL); | |
40 | return TRUE; | |
41 | } else { | |
42 | + free (gd); | |
43 | g_warning ("gps_open() failed, is gpsd running (host=%s,port=%s)?", self->host, self->port); | |
44 | return FALSE; | |
45 | } | |
46 | @@ -413,10 +414,13 @@ | |
47 | { | |
48 | GeoclueGpsd *self = (GeoclueGpsd*)data; | |
49 | if (self->gpsdata) { | |
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); | |
54 | return FALSE; | |
55 | + } else if(self->gpsdata->set) { | |
56 | + gpsd_raw_hook(self->gpsdata, NULL, 0); | |
57 | + self->gpsdata->set = 0; | |
58 | } | |
59 | } | |
60 | return TRUE; |