123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- #include "gpsd_config.h"
- #include "gpsd.h"
- #if defined(DBUS_EXPORT_ENABLE)
- #include <dbus/dbus.h>
- static DBusConnection *connection = NULL;
- int initialize_dbus_connection(void)
- {
- DBusError error;
- dbus_error_init(&error);
- connection = dbus_bus_get(DBUS_BUS_SYSTEM, &error);
- if (connection == NULL) {
- dbus_error_free(&error);
-
- return 1;
- }
- return 0;
- }
- void send_dbus_fix(struct gps_device_t *channel)
- {
- struct gps_data_t *gpsdata;
- struct gps_fix_t *gpsfix;
- DBusMessage *message;
-
- dbus_uint32_t serial;
- char *gpsd_devname;
-
- if (connection == NULL)
- return;
- gpsdata = &(channel->gpsdata);
- gpsfix = &(gpsdata->fix);
- gpsd_devname = gpsdata->dev.path;
-
-
- message = dbus_message_new_signal("/org/gpsd", "org.gpsd", "fix");
- dbus_message_append_args(message,
- DBUS_TYPE_DOUBLE, &(gpsfix->time),
- DBUS_TYPE_INT32, &(gpsfix->mode),
- DBUS_TYPE_DOUBLE, &(gpsfix->ept),
- DBUS_TYPE_DOUBLE, &(gpsfix->latitude),
- DBUS_TYPE_DOUBLE, &(gpsfix->longitude),
- DBUS_TYPE_DOUBLE, &(gpsfix->eph),
- DBUS_TYPE_DOUBLE, &(gpsfix->altMSL),
- DBUS_TYPE_DOUBLE, &(gpsfix->epv),
- DBUS_TYPE_DOUBLE, &(gpsfix->track),
- DBUS_TYPE_DOUBLE, &(gpsfix->epd),
- DBUS_TYPE_DOUBLE, &(gpsfix->speed),
- DBUS_TYPE_DOUBLE, &(gpsfix->eps),
- DBUS_TYPE_DOUBLE, &(gpsfix->climb),
- DBUS_TYPE_DOUBLE, &(gpsfix->epc),
- DBUS_TYPE_STRING, &gpsd_devname,
- DBUS_TYPE_INVALID);
- dbus_message_set_no_reply(message, TRUE);
- dbus_connection_send(connection, message, &serial);
- dbus_message_unref(message);
- }
- #endif
|