1
#! /bin/sh /usr/share/dpatch/dpatch-run
2
## 80-dbus.dpatch by Andreas Putzo <andreas@putzo.net>
4
## DP: Fix DBUS support
7
diff -urNad gpsdrive-2.10~pre4~/src/gps_handler.c gpsdrive-2.10~pre4/src/gps_handler.c
8
--- gpsdrive-2.10~pre4~/src/gps_handler.c 2007-09-14 21:47:13.000000000 +0000
9
+++ gpsdrive-2.10~pre4/src/gps_handler.c 2007-12-17 22:38:52.000000000 +0000
16
if (!early && (dbus_current_fix.mode==-1)) {
17
/* We have handled this one, so clean the mode and bail out */
19
coords.current_lon = dbus_current_fix.longitude;
21
if (__finite(dbus_current_fix.speed))
22
- groundspeed = dbus_current_fix.speed * 3.6; // Convert m/s to km/h
23
+ current.groundspeed = dbus_current_fix.speed * 3.6; // Convert m/s to km/h
24
else if (dbus_old_fix.mode>1) {
25
gdouble timediff = dbus_current_fix.time-dbus_old_fix.time;
26
- groundspeed = (timediff>0)?(calcdist2(dbus_old_fix.longitude, dbus_old_fix.latitude) * 3600 / timediff) : 0.0;
27
+ current.groundspeed = (timediff>0)?(calcdist2(dbus_old_fix.longitude, dbus_old_fix.latitude) * 3600 / timediff) : 0.0;
30
if (__finite(dbus_current_fix.track))
33
if ( mydebug + gps_handler_debug > 80 )
34
g_print("gps_handler: DBUS fix: %6.0f %10.6f/%10.6f sp:%5.2f(%5.2f) crs:%5.1f(%5.2f)\n", dbus_current_fix.time,
35
- dbus_current_fix.latitude, dbus_current_fix.longitude, dbus_current_fix.speed, groundspeed,
36
+ dbus_current_fix.latitude, dbus_current_fix.longitude, dbus_current_fix.speed, current.groundspeed,
37
dbus_current_fix.track, direction * 180 / M_PI);
39
if (dbus_current_fix.mode>2) {
43
static DBusHandlerResult dbus_handle_gps_fix (DBusMessage* message) {
44
- DBusMessageIter iter;
50
struct dbus_gps_fix fix;
54
- if (!dbus_message_iter_init (message, &iter)) {
55
- /* we have a problem */
56
- return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
59
- /* Fill the fix struct */
60
- fix.time = floor(dbus_message_iter_get_double (&iter));
61
- dbus_message_iter_next (&iter);
62
- fix.mode = dbus_message_iter_get_int32 (&iter);
63
- dbus_message_iter_next (&iter);
64
- fix.ept = dbus_message_iter_get_double (&iter);
65
- dbus_message_iter_next (&iter);
66
- fix.latitude = dbus_message_iter_get_double (&iter);
67
- dbus_message_iter_next (&iter);
68
- fix.longitude = dbus_message_iter_get_double (&iter);
69
- dbus_message_iter_next (&iter);
70
- fix.eph = dbus_message_iter_get_double (&iter);
71
- dbus_message_iter_next (&iter);
72
- fix.altitude = dbus_message_iter_get_double (&iter);
73
- dbus_message_iter_next (&iter);
74
- fix.epv = dbus_message_iter_get_double (&iter);
75
- dbus_message_iter_next (&iter);
76
- fix.track = dbus_message_iter_get_double (&iter);
77
- dbus_message_iter_next (&iter);
78
- fix.epd = dbus_message_iter_get_double (&iter);
79
- dbus_message_iter_next (&iter);
80
- fix.speed = dbus_message_iter_get_double (&iter);
81
- dbus_message_iter_next (&iter);
82
- fix.eps = dbus_message_iter_get_double (&iter);
83
- dbus_message_iter_next (&iter);
84
- fix.climb = dbus_message_iter_get_double (&iter);
85
- dbus_message_iter_next (&iter);
86
- fix.epc = dbus_message_iter_get_double (&iter);
87
+ dbus_error_init(&error);
89
+ dbus_message_get_args(message,
91
+ DBUS_TYPE_DOUBLE, &temp_time,
92
+ DBUS_TYPE_INT32, &fix.mode,
93
+ DBUS_TYPE_DOUBLE, &fix.ept,
94
+ DBUS_TYPE_DOUBLE, &fix.latitude,
95
+ DBUS_TYPE_DOUBLE, &fix.longitude,
96
+ DBUS_TYPE_DOUBLE, &fix.eph,
97
+ DBUS_TYPE_DOUBLE, &fix.altitude,
98
+ DBUS_TYPE_DOUBLE, &fix.epv,
99
+ DBUS_TYPE_DOUBLE, &fix.track,
100
+ DBUS_TYPE_DOUBLE, &fix.epd,
101
+ DBUS_TYPE_DOUBLE, &fix.speed,
102
+ DBUS_TYPE_DOUBLE, &fix.eps,
103
+ DBUS_TYPE_DOUBLE, &fix.climb,
104
+ DBUS_TYPE_DOUBLE, &fix.epc,
105
+ DBUS_TYPE_INVALID);
106
+ fix.time = floor(temp_time);
108
if ( mydebug + gps_handler_debug > 80 ) {
109
g_print("gps_handler: DBUS raw: ti:%6.0f mode:%d ept:%f %10.6f/%10.6f eph:%f\n", fix.time, fix.mode, fix.ept, fix.latitude, fix.longitude, fix.eph);