#include #include #include int main(int argc, char **argv) { DBusConnection *conn; DBusMessage *msg, *reply; DBusError err; DBusMessageIter args; const char *addr; const char *name; const char *manuf; void *sigvalue; char dispMsg[10]; char *names[5] = { "test1", "test2", "test3", "test4", "test5"}; int i=0; dbus_error_init(&err); printf("Connecting to the bus ...\n"); conn = dbus_bus_get(DBUS_BUS_SYSTEM, &err); if (dbus_error_is_set(&err)) { fprintf(stderr, "Connection Error (%s)\n", err.message); dbus_error_free(&err); } if (NULL == conn) { exit(1); } // add a rule for which messages we want to see dbus_bus_add_match(conn, "type='signal',interface='org.bluez.Adapter'", &err); // see signals from the given interface dbus_connection_flush(conn); if (dbus_error_is_set(&err)) { fprintf(stderr, "Match Error (%s)\n", err.message); exit(1); } i=0; while (1) { dbus_connection_read_write(conn, 0); msg = dbus_connection_pop_message(conn); if (NULL == msg) { printf("GetName():"); msg = dbus_message_new_method_call("org.bluez", "/org/bluez/hci0", "org.bluez.Adapter", "GetName"); reply = dbus_connection_send_with_reply_and_block(conn, msg, -1, NULL); dbus_message_get_args(reply, NULL, DBUS_TYPE_STRING, &name, DBUS_TYPE_INVALID); printf(" %s\n", name); dbus_message_unref(msg); dbus_message_unref(reply); if (i==4) i=0; printf("SetName(): %s\n", names[i++]); msg = dbus_message_new_method_call("org.bluez", "/org/bluez/hci0", "org.bluez.Adapter", "SetName"); if (!dbus_message_append_args(msg, DBUS_TYPE_STRING, &names[i], DBUS_TYPE_INVALID)) { fprintf(stderr, "Ran out of memory while constructing args\n"); exit(EXIT_FAILURE); } dbus_message_set_no_reply(msg, TRUE); if (!dbus_connection_send(conn, msg, NULL)) { fprintf(stderr, "Ran out of memory while queueing message\n"); exit(EXIT_FAILURE); } dbus_connection_flush(conn); dbus_message_unref(msg); sleep(1); continue; } printf("!!got a message!!\n"); // check if the message is a signal from the correct interface // and with the correct name // if (dbus_message_is_signal(msg, "org.bluez.Adapter", "NameChanged")) { // read the parameters if (!dbus_message_iter_init(msg, &args)) fprintf(stderr, "Message has no arguments!\n"); else if (DBUS_TYPE_STRING != dbus_message_iter_get_arg_type(&args)) fprintf(stderr, "Argument is not string!\n"); else { dbus_message_iter_get_basic(&args, &sigvalue); printf("Got Signal with value %s\n", (char*)sigvalue); } // } // free the message dbus_message_unref(msg); } return 0; /* printf("DiscoverDevices():\n"); msg = dbus_message_new_method_call("org.bluez", "/org/bluez/hci0", "org.bluez.Adapter", "DiscoverDevices"); if (!dbus_connection_send (conn, msg, NULL)) fprintf (stderr, "error sending message\n"); dbus_message_unref(msg); dbus_connection_flush(conn); */ /* printf("GetAddress():"); msg = dbus_message_new_method_call("org.bluez", "/org/bluez/hci0", "org.bluez.Adapter", "GetAddress"); reply = dbus_connection_send_with_reply_and_block(conn, msg, -1, NULL); dbus_message_get_args(reply, NULL, DBUS_TYPE_STRING, &addr, DBUS_TYPE_INVALID); printf(" %s\n", addr); dbus_message_unref(msg); dbus_message_unref(reply); printf("GetManufacturer():"); msg = dbus_message_new_method_call("org.bluez", "/org/bluez/hci0", "org.bluez.Adapter", "GetManufacturer"); reply = dbus_connection_send_with_reply_and_block(conn, msg, -1, NULL); dbus_message_get_args(reply, NULL, DBUS_TYPE_STRING, &manuf, DBUS_TYPE_INVALID); printf(" %s\n", manuf); dbus_message_unref(msg); dbus_message_unref(reply); printf("GetName():"); msg = dbus_message_new_method_call("org.bluez", "/org/bluez/hci0", "org.bluez.Adapter", "GetName"); reply = dbus_connection_send_with_reply_and_block(conn, msg, -1, NULL); dbus_message_get_args(reply, NULL, DBUS_TYPE_STRING, &name, DBUS_TYPE_INVALID); printf(" %s\n", name); dbus_message_unref(msg); dbus_message_unref(reply); dbus_connection_close(conn); return 0;*/ }