diff options
author | Eric S. Raymond <esr@thyrsus.com> | 2005-05-20 04:19:16 +0000 |
---|---|---|
committer | Eric S. Raymond <esr@thyrsus.com> | 2005-05-20 04:19:16 +0000 |
commit | f4be77b3efd837c86ef0d8ca909dfdfbea60e796 (patch) | |
tree | d8013ef2ff0c3056ad41a934fd6c953e537d7873 /gpsd_dbus.c | |
parent | 04d3f6ab6fa31bbe4de3eafb191df8d264c9ead9 (diff) | |
download | gpsd-f4be77b3efd837c86ef0d8ca909dfdfbea60e796.tar.gz |
DBUS broadcast support by Amaury Jaquot.
Diffstat (limited to 'gpsd_dbus.c')
-rw-r--r-- | gpsd_dbus.c | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/gpsd_dbus.c b/gpsd_dbus.c new file mode 100644 index 00000000..61fae00f --- /dev/null +++ b/gpsd_dbus.c @@ -0,0 +1,85 @@ +#include <config.h> +#if DBUS_ENABLE==1 + +#include <gpsd_dbus.h> +#include <stdio.h> + +static DBusConnection* connection = NULL; + +/* + * does what is required to initialize the dbus connection + * this is rather pretty basic at this point, as we don't + * receive commands via dbus + * + * returns 0 when everything is ok + */ +int initialize_dbus_conection (void) { + DBusError error; + + dbus_error_init (&error); + connection = dbus_bus_get (DBUS_BUS_SYSTEM, &error); + if (connection == NULL) { + /* report error */ + return 1; + } + return 0; +} + +/* + * this sends the current fix data for this channel via dbus + * + * + */ +void send_dbus_fix (struct gps_device_t* channel) { + struct gps_data_t* gpsdata; + struct gps_fix_t* gpsfix; + DBusMessage* message; + DBusMessageIter iter; + dbus_uint32_t serial; /* we don't care about it, + but we must collect it */ + + /* if the connection is non existent, return without doing + * anything + */ + if (connection == NULL) return; + + gpsdata = &(channel->gpsdata); + gpsfix = &(gpsdata->fix); + + message = dbus_message_new_signal ( + "/org/gpsd", + "org.gpsd", + "fix"); + dbus_message_iter_init (message, &iter); + + /* + * add the interesting information to the message + */ + + dbus_message_iter_append_double (&iter, gpsfix->time); + dbus_message_iter_append_int32 (&iter, gpsfix->mode); + dbus_message_iter_append_double (&iter, gpsfix->ept); + dbus_message_iter_append_double (&iter, gpsfix->latitude); + dbus_message_iter_append_double (&iter, gpsfix->longitude); + dbus_message_iter_append_double (&iter, gpsfix->eph); + dbus_message_iter_append_double (&iter, gpsfix->altitude); + dbus_message_iter_append_double (&iter, gpsfix->epv); + dbus_message_iter_append_double (&iter, gpsfix->track); + dbus_message_iter_append_double (&iter, gpsfix->epd); + dbus_message_iter_append_double (&iter, gpsfix->speed); + dbus_message_iter_append_double (&iter, gpsfix->eps); + dbus_message_iter_append_double (&iter, gpsfix->climb); + dbus_message_iter_append_double (&iter, gpsfix->epc); + dbus_message_iter_append_double (&iter, gpsfix->separation); + + dbus_message_set_no_reply (message, TRUE); + + /* the message is complete + * time to send it + */ + + dbus_connection_send (connection, message, &serial); + dbus_message_unref (message); +} + +#endif |