#include #include #include #include #include #include #include #include #include void dbus_send_signal( const char *sender_object_path, const char *iface, const char *signal_name, int first_arg_type, ...) { DBusMessage *message_ptr; va_list ap; DBusConnection* conn; DBusError err; // initialise the error value dbus_error_init(&err); // connect to the DBUS system bus, and check for errors conn = dbus_bus_get(DBUS_BUS_SESSION, &err); if (dbus_error_is_set(&err)) { fprintf(stderr, "Connection Error (%s)\n", err.message); dbus_error_free(&err); } if (NULL == conn) { exit(1); } // register our name on the bus, and check for errors ret = dbus_bus_request_name(conn, "test.signal.source", DBUS_NAME_FLAG_REPLACE_EXISTING , &err); if (dbus_error_is_set(&err)) { fprintf(stderr, "Name Error (%s)\n", err.message); dbus_error_free(&err); } if (DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER != ret) { exit(1); } va_start(ap, first_arg_type); message_ptr = dbus_message_new_signal(sender_object_path, iface, signal_name); if (message_ptr == NULL) { printf("dbus_message_new_signal() failed."); goto exit; } if (!dbus_message_append_args_valist(message_ptr, first_arg_type, ap)) { printf("dbus_message_append_args_valist() failed."); goto unref; } /* Add message to outgoing message queue */ if (!dbus_connection_send(conn, message_ptr, NULL)) { printf("dbus_connection_send() failed."); goto unref; } unref: dbus_message_unref(message_ptr); exit: va_end(ap); } int main(int argc, char** argv) { dbus_send_signal("/IO/Processor","Recorder.Set", "dviRecordingPolicy", DBUS_TYPE_UINT32, 32, DBUS_TYPE_UINT32 42); return 0; }