summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--SConstruct5
-rw-r--r--clockwatcher.c95
-rw-r--r--gps.h2
-rw-r--r--gpxlogger.c95
4 files changed, 7 insertions, 190 deletions
diff --git a/SConstruct b/SConstruct
index 9ef3a7de..f9b1c3ab 100644
--- a/SConstruct
+++ b/SConstruct
@@ -570,6 +570,7 @@ libgps_sources = [
"hex.c",
"json.c",
"libgps_core.c",
+ "libgps_dbus.c",
"libgps_json.c",
"libgps_shm.c",
"libgps_sock.c",
@@ -716,7 +717,7 @@ libversion = "%d.%d.%d" % (libgps_major, libgps_minor, libgps_age)
compiled_gpslib = Library(env=env,
target="gps",
sources=libgps_sources,
- version=libversion, parse_flags= ["-lm"])
+ version=libversion, parse_flags= ["-lm"] + dbus_recv_libs)
env.Clean(compiled_gpslib, "gps_maskdump.c")
compiled_gpsdlib = Library(env=env,
@@ -806,7 +807,7 @@ env.Depends(gpsmon, [compiled_gpsdlib, compiled_gpslib])
gpspipe = env.Program('gpspipe', ['gpspipe.c'], parse_flags=gpslibs)
env.Depends(gpspipe, compiled_gpslib)
-gpxlogger = env.Program('gpxlogger', ['gpxlogger.c'], parse_flags=gpslibs+dbus_recv_libs)
+gpxlogger = env.Program('gpxlogger', ['gpxlogger.c'], parse_flags=gpslibs)
env.Depends(gpxlogger, compiled_gpslib)
lcdgps = env.Program('lcdgps', ['lcdgps.c'], parse_flags=gpslibs)
diff --git a/clockwatcher.c b/clockwatcher.c
index 8f6e8885..6ba82a74 100644
--- a/clockwatcher.c
+++ b/clockwatcher.c
@@ -64,102 +64,9 @@ static void quit_handler(int signum)
*
**************************************************************************/
-#include <glib.h>
-#include <dbus/dbus.h>
-#include <dbus/dbus-glib-lowlevel.h>
-#include <dbus/dbus-glib.h>
-
-#include <glib/gprintf.h>
-
-DBusConnection *connection;
-
-static char gpsd_devname[BUFSIZ];
-
-static DBusHandlerResult handle_gps_fix(DBusMessage * message)
-{
- DBusError error;
- /* this packet format was designed before we split eph */
- double eph;
-
- dbus_error_init(&error);
-
- dbus_message_get_args(message,
- &error,
- DBUS_TYPE_DOUBLE, &gpsdata.fix.time,
- DBUS_TYPE_INT32, &gpsdata.fix.mode,
- DBUS_TYPE_DOUBLE, &gpsdata.fix.ept,
- DBUS_TYPE_DOUBLE, &gpsdata.fix.latitude,
- DBUS_TYPE_DOUBLE, &gpsdata.fix.longitude,
- DBUS_TYPE_DOUBLE, &eph,
- DBUS_TYPE_DOUBLE, &gpsdata.fix.altitude,
- DBUS_TYPE_DOUBLE, &gpsdata.fix.epv,
- DBUS_TYPE_DOUBLE, &gpsdata.fix.track,
- DBUS_TYPE_DOUBLE, &gpsdata.fix.epd,
- DBUS_TYPE_DOUBLE, &gpsdata.fix.speed,
- DBUS_TYPE_DOUBLE, &gpsdata.fix.eps,
- DBUS_TYPE_DOUBLE, &gpsdata.fix.climb,
- DBUS_TYPE_DOUBLE, &gpsdata.fix.epc,
- DBUS_TYPE_STRING, &gpsd_devname, DBUS_TYPE_INVALID);
-
- if (gpsdata.fix.mode > MODE_NO_FIX )
- gpsdata.status = STATUS_FIX;
- else
- gpsdata.status = STATUS_NO_FIX;
-
- conditionally_log_fix(&gpsdata);
- return DBUS_HANDLER_RESULT_HANDLED;
-}
-
-/*
- * Message dispatching function
- *
- */
-static DBusHandlerResult signal_handler(DBusConnection * connection,
- DBusMessage * message)
-{
- /* dummy, need to use the variable for some reason */
- connection = NULL;
-
- if (dbus_message_is_signal(message, "org.gpsd", "fix"))
- return handle_gps_fix(message);
- /*
- * ignore all other messages
- */
-
- return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-}
-
static int dbus_mainloop(void)
{
- GMainLoop *mainloop;
- DBusError error;
-
- mainloop = g_main_loop_new(NULL, FALSE);
-
- dbus_error_init(&error);
- connection = dbus_bus_get(DBUS_BUS_SYSTEM, &error);
- if (dbus_error_is_set(&error)) {
- syslog(LOG_CRIT, "%s: %s", error.name, error.message);
- return 3;
- }
-
- dbus_bus_add_match(connection, "type='signal'", &error);
- if (dbus_error_is_set(&error)) {
- syslog(LOG_CRIT, "unable to add match for signals %s: %s", error.name,
- error.message);
- return 4;
- }
-
- if (!dbus_connection_add_filter
- (connection, (DBusHandleMessageFunction) signal_handler, NULL,
- NULL)) {
- syslog(LOG_CRIT, "unable to register filter with the connection");
- return 5;
- }
-
- dbus_connection_setup_with_g_main(connection, NULL);
-
- g_main_loop_run(mainloop);
+ gps_dbus_open(conditionally_log_fix, &gpsdata);
return 0;
}
diff --git a/gps.h b/gps.h
index ebfe69e0..aa0aa28c 100644
--- a/gps.h
+++ b/gps.h
@@ -1754,6 +1754,8 @@ extern void gps_merge_fix(/*@ out @*/struct gps_fix_t *,
extern void gps_enable_debug(int, FILE *);
extern /*@observer@*/const char *gps_maskdump(gps_mask_t);
+extern int gps_dbus_open(void (*)(struct gps_data_t *), struct gps_data_t *);
+
extern double safe_atof(const char *);
extern time_t mkgmtime(register struct tm *);
extern timestamp_t timestamp(void);
diff --git a/gpxlogger.c b/gpxlogger.c
index 3ecb2f1c..79cae544 100644
--- a/gpxlogger.c
+++ b/gpxlogger.c
@@ -189,103 +189,10 @@ static void quit_handler(int signum)
*
**************************************************************************/
-#include <glib.h>
-#include <dbus/dbus.h>
-#include <dbus/dbus-glib-lowlevel.h>
-#include <dbus/dbus-glib.h>
-
-#include <glib/gprintf.h>
-
-DBusConnection *connection;
-
-static char gpsd_devname[BUFSIZ];
-
-static DBusHandlerResult handle_gps_fix(DBusMessage * message)
-{
- DBusError error;
- /* this packet format was designed before we split eph */
- double eph;
-
- dbus_error_init(&error);
-
- dbus_message_get_args(message,
- &error,
- DBUS_TYPE_DOUBLE, &gpsdata.fix.time,
- DBUS_TYPE_INT32, &gpsdata.fix.mode,
- DBUS_TYPE_DOUBLE, &gpsdata.fix.ept,
- DBUS_TYPE_DOUBLE, &gpsdata.fix.latitude,
- DBUS_TYPE_DOUBLE, &gpsdata.fix.longitude,
- DBUS_TYPE_DOUBLE, &eph,
- DBUS_TYPE_DOUBLE, &gpsdata.fix.altitude,
- DBUS_TYPE_DOUBLE, &gpsdata.fix.epv,
- DBUS_TYPE_DOUBLE, &gpsdata.fix.track,
- DBUS_TYPE_DOUBLE, &gpsdata.fix.epd,
- DBUS_TYPE_DOUBLE, &gpsdata.fix.speed,
- DBUS_TYPE_DOUBLE, &gpsdata.fix.eps,
- DBUS_TYPE_DOUBLE, &gpsdata.fix.climb,
- DBUS_TYPE_DOUBLE, &gpsdata.fix.epc,
- DBUS_TYPE_STRING, &gpsd_devname, DBUS_TYPE_INVALID);
-
- if (gpsdata.fix.mode > MODE_NO_FIX )
- gpsdata.status = STATUS_FIX;
- else
- gpsdata.status = STATUS_NO_FIX;
-
- conditionally_log_fix(&gpsdata);
- return DBUS_HANDLER_RESULT_HANDLED;
-}
-
-/*
- * Message dispatching function
- *
- */
-static DBusHandlerResult signal_handler(DBusConnection * connection,
- DBusMessage * message)
-{
- /* dummy, need to use the variable for some reason */
- connection = NULL;
-
- if (dbus_message_is_signal(message, "org.gpsd", "fix"))
- return handle_gps_fix(message);
- /*
- * ignore all other messages
- */
-
- return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-}
-
static int dbus_mainloop(void)
{
- GMainLoop *mainloop;
- DBusError error;
-
- mainloop = g_main_loop_new(NULL, FALSE);
-
- dbus_error_init(&error);
- connection = dbus_bus_get(DBUS_BUS_SYSTEM, &error);
- if (dbus_error_is_set(&error)) {
- syslog(LOG_CRIT, "%s: %s", error.name, error.message);
- return 3;
- }
-
- dbus_bus_add_match(connection, "type='signal'", &error);
- if (dbus_error_is_set(&error)) {
- syslog(LOG_CRIT, "unable to add match for signals %s: %s", error.name,
- error.message);
- return 4;
- }
-
- if (!dbus_connection_add_filter
- (connection, (DBusHandleMessageFunction) signal_handler, NULL,
- NULL)) {
- syslog(LOG_CRIT, "unable to register filter with the connection");
- return 5;
- }
-
- dbus_connection_setup_with_g_main(connection, NULL);
-
print_gpx_header();
- g_main_loop_run(mainloop);
+ gps_dbus_open(conditionally_log_fix, &gpsdata);
return 0;
}