diff options
-rw-r--r-- | input/manager.c | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/input/manager.c b/input/manager.c index 567ea6ee..11aa65a4 100644 --- a/input/manager.c +++ b/input/manager.c @@ -619,8 +619,9 @@ static DBusHandlerResult create_device(DBusConnection *conn, DBusError derr; const char *addr; GSList *l; - bdaddr_t dst; + bdaddr_t src, dst; uint32_t cls = 0; + int dev_id; dbus_error_init(&derr); if (!dbus_message_get_args(msg, &derr, @@ -631,6 +632,18 @@ static DBusHandlerResult create_device(DBusConnection *conn, return DBUS_HANDLER_RESULT_HANDLED; } + /* Get the default adapter */ + dev_id = hci_get_route(NULL); + if (dev_id < 0) { + error("Bluetooth adapter not available"); + return err_failed(conn, msg, "Adapter not available"); + } + + if (hci_devba(dev_id, &src) < 0) { + error("Can't get local adapter device info"); + return err_failed(conn, msg, "Adapter not available"); + } + str2ba(addr, &dst); l = g_slist_find_custom(mgr->paths, &dst, @@ -638,12 +651,12 @@ static DBusHandlerResult create_device(DBusConnection *conn, if (l) return err_already_exists(conn, msg, "Input Already exists"); - if (read_device_class(&mgr->src, &dst, &cls) < 0) { + if (read_device_class(&src, &dst, &cls) < 0) { error("Device class not available"); return err_not_supported(conn, msg); } - pr = pending_req_new(conn, msg, &mgr->src, &dst); + pr = pending_req_new(conn, msg, &src, &dst); if (!pr) return DBUS_HANDLER_RESULT_NEED_MEMORY; |