diff options
-rw-r--r-- | SConstruct | 5 | ||||
-rw-r--r-- | clockwatcher.c | 95 | ||||
-rw-r--r-- | gps.h | 2 | ||||
-rw-r--r-- | gpxlogger.c | 95 |
4 files changed, 7 insertions, 190 deletions
@@ -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; } @@ -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; } |