summaryrefslogtreecommitdiff
path: root/frameworks/middleware/examples/dbus/ping-client.c
diff options
context:
space:
mode:
Diffstat (limited to 'frameworks/middleware/examples/dbus/ping-client.c')
-rw-r--r--frameworks/middleware/examples/dbus/ping-client.c64
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;
+}