]>
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; | |
f2294add JB |
61 | --- geoclue-0.12.99/providers/gpsd/geoclue-gpsd.c.orig 2019-10-04 21:09:50.492270776 +0200 |
62 | +++ geoclue-0.12.99/providers/gpsd/geoclue-gpsd.c 2019-10-05 15:21:29.244100259 +0200 | |
63 | @@ -43,15 +43,6 @@ | |
64 | ||
65 | typedef struct gps_fix_t gps_fix; | |
66 | ||
67 | -/* only listing used tags */ | |
68 | -typedef enum { | |
69 | - NMEA_NONE, | |
70 | - NMEA_GSA, | |
71 | - NMEA_GGA, | |
72 | - NMEA_GSV, | |
73 | - NMEA_RMC | |
74 | -} NmeaTag; | |
75 | - | |
76 | ||
77 | typedef struct { | |
78 | GcProvider parent; | |
79 | @@ -229,7 +220,7 @@ | |
80 | } | |
81 | ||
82 | static void | |
83 | -geoclue_gpsd_update_position (GeoclueGpsd *gpsd, NmeaTag nmea_tag) | |
84 | +geoclue_gpsd_update_position (GeoclueGpsd *gpsd) | |
85 | { | |
86 | gps_fix *fix = &gpsd->gpsdata->fix; | |
87 | gps_fix *last_fix = gpsd->last_fix; | |
88 | @@ -280,7 +271,7 @@ | |
89 | } | |
90 | ||
91 | static void | |
92 | -geoclue_gpsd_update_velocity (GeoclueGpsd *gpsd, NmeaTag nmea_tag) | |
93 | +geoclue_gpsd_update_velocity (GeoclueGpsd *gpsd) | |
94 | { | |
95 | gps_fix *fix = &gpsd->gpsdata->fix; | |
96 | gps_fix *last_fix = gpsd->last_fix; | |
97 | @@ -293,8 +284,7 @@ | |
98 | * couldn't think of an smart way to handle this, I don't think there is one | |
99 | */ | |
100 | ||
101 | - if (((gpsd->gpsdata->set & TRACK_SET) || (gpsd->gpsdata->set & SPEED_SET)) && | |
102 | - nmea_tag == NMEA_RMC) { | |
103 | + if (((gpsd->gpsdata->set & TRACK_SET) || (gpsd->gpsdata->set & SPEED_SET))) { | |
104 | ||
105 | gpsd->gpsdata->set &= ~(TRACK_SET | SPEED_SET); | |
106 | ||
107 | @@ -308,10 +298,7 @@ | |
108 | last_fix->track = fix->track; | |
109 | last_fix->speed = fix->speed; | |
110 | } | |
111 | - } else if ((gpsd->gpsdata->set & CLIMB_SET) && | |
112 | - (nmea_tag == NMEA_GGA || | |
113 | - nmea_tag == NMEA_GSA || | |
114 | - nmea_tag == NMEA_GSV)) { | |
115 | + } else if ((gpsd->gpsdata->set & CLIMB_SET)) { | |
116 | ||
117 | gpsd->gpsdata->set &= ~(CLIMB_SET); | |
118 | ||
119 | @@ -342,7 +329,7 @@ | |
120 | } | |
121 | ||
122 | static void | |
123 | -geoclue_gpsd_update_status (GeoclueGpsd *gpsd, NmeaTag nmea_tag) | |
124 | +geoclue_gpsd_update_status (GeoclueGpsd *gpsd) | |
125 | { | |
126 | GeoclueStatus status; | |
127 | ||
128 | @@ -367,22 +354,9 @@ | |
129 | static void | |
130 | gpsd_raw_hook (struct gps_data_t *gpsdata, char *message, size_t len) | |
131 | { | |
132 | - char *tag_str = gpsd->gpsdata->tag; | |
133 | - NmeaTag nmea_tag = NMEA_NONE; | |
134 | - | |
135 | - if (tag_str[0] == 'G' && tag_str[1] == 'S' && tag_str[2] == 'A') { | |
136 | - nmea_tag = NMEA_GSA; | |
137 | - } else if (tag_str[0] == 'G' && tag_str[1] == 'G' && tag_str[2] == 'A') { | |
138 | - nmea_tag = NMEA_GGA; | |
139 | - } else if (tag_str[0] == 'G' && tag_str[1] == 'S' && tag_str[2] == 'V') { | |
140 | - nmea_tag = NMEA_GSV; | |
141 | - } else if (tag_str[0] == 'R' && tag_str[1] == 'M' && tag_str[2] == 'C') { | |
142 | - nmea_tag = NMEA_RMC; | |
143 | - } | |
144 | - | |
145 | - geoclue_gpsd_update_status (gpsd, nmea_tag); | |
146 | - geoclue_gpsd_update_position (gpsd, nmea_tag); | |
147 | - geoclue_gpsd_update_velocity (gpsd, nmea_tag); | |
148 | + geoclue_gpsd_update_status (gpsd); | |
149 | + geoclue_gpsd_update_position (gpsd); | |
150 | + geoclue_gpsd_update_velocity (gpsd); | |
151 | } | |
152 | ||
153 | static void | |
154 | @@ -414,7 +388,7 @@ | |
155 | { | |
156 | GeoclueGpsd *self = (GeoclueGpsd*)data; | |
157 | if (self->gpsdata) { | |
158 | - if (gps_read(self->gpsdata) < 0) { | |
159 | + if (gps_read(self->gpsdata, NULL, 0) < 0) { | |
160 | geoclue_gpsd_set_status (self, GEOCLUE_STATUS_ERROR); | |
161 | geoclue_gpsd_stop_gpsd(self); | |
162 | return FALSE; |