diff options
Diffstat (limited to 'frameworks/middleware/examples/dbus/ping-client.c')
| -rw-r--r-- | frameworks/middleware/examples/dbus/ping-client.c | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/frameworks/middleware/examples/dbus/ping-client.c b/frameworks/middleware/examples/dbus/ping-client.c new file mode 100644 index 0000000..e3035e4 --- /dev/null +++ b/frameworks/middleware/examples/dbus/ping-client.c @@ -0,0 +1,64 @@ +#include <glib.h> +#include <dbus/dbus.h> +#include <dbus/dbus-glib.h> +#include <time.h> + +static gboolean send_ping (DBusConnection *bus); +static const char *v_STRING; + +int main (int argc, char **argv) +{ + GMainLoop *loop; + DBusConnection *bus; + DBusError error; + + if (argc > 1) + v_STRING = argv[1]; + else + v_STRING = "no arg given"; + + /* Create a new event loop to run in */ + loop = g_main_loop_new (NULL, FALSE); + + /* Get a connection to the session bus */ + dbus_error_init (&error); + bus = dbus_bus_get (DBUS_BUS_SESSION, &error); + if (!bus) { + g_warning ("Failed to connect to the D-BUS daemon: %s", error.message); + dbus_error_free (&error); + return 1; + } + + /* Set up this connection to work in a GLib event loop */ + dbus_connection_setup_with_g_main (bus, NULL); + /* Every second call send_ping() with the bus as an argument*/ + g_timeout_add (1000, (GSourceFunc)send_ping, bus); + + /* Start the event loop */ + g_main_loop_run (loop); + return 0; +} + +static gboolean send_ping (DBusConnection *bus) +{ + DBusMessage *message; + struct timespec tx_time; + struct timespec done_time; + + message = dbus_message_new_signal ("/de/linutronix/Ping", + "de.linutronix.Ping", "Ping"); + /* Append the string to the signal */ + dbus_message_append_args (message, + DBUS_TYPE_STRING, &v_STRING, + DBUS_TYPE_INVALID); + clock_gettime(CLOCK_MONOTONIC, &tx_time); + /* Send the signal */ + dbus_connection_send (bus, message, NULL); + clock_gettime(CLOCK_MONOTONIC, &done_time); + g_print("%d:%d\n%d:%d\n\n", tx_time.tv_sec, tx_time.tv_nsec/1000, + done_time.tv_sec, done_time.tv_nsec/1000); + /* Free the signal now we have finished with it */ + dbus_message_unref (message); + /* Return TRUE to tell the event loop we want to be called again */ + return TRUE; +} |
