Index: utils/serial/manager.c =================================================================== RCS file: /cvsroot/bluez/utils/serial/manager.c,v retrieving revision 1.99 diff -u -r1.99 manager.c --- utils/serial/manager.c 26 Nov 2007 13:43:57 -0000 1.99 +++ utils/serial/manager.c 11 Dec 2007 10:14:20 -0000 @@ -1917,26 +1917,43 @@ struct pending_connect *pending, *pc; DBusError derr; bdaddr_t src; - const char *bda, *pattern; + const char *adapter, *bda, *pattern; long val; int dev_id, err; char uuid[MAX_LEN_UUID_STR]; dbus_error_init(&derr); - if (!dbus_message_get_args(msg, &derr, - DBUS_TYPE_STRING, &bda, - DBUS_TYPE_STRING, &pattern, - DBUS_TYPE_INVALID)) { - error_invalid_arguments(conn, msg, derr.message); - dbus_error_free(&derr); - return DBUS_HANDLER_RESULT_HANDLED; + if(dbus_message_has_signature(msg, "sss")) { + if (!dbus_message_get_args(msg, &derr, + DBUS_TYPE_STRING, &adapter, + DBUS_TYPE_STRING, &bda, + DBUS_TYPE_STRING, &pattern, + DBUS_TYPE_INVALID)) { + error_invalid_arguments(conn, msg, derr.message); + dbus_error_free(&derr); + return DBUS_HANDLER_RESULT_HANDLED; + } + /* Handle empty adapter as the default */ + if(!adapter[0]) + adapter = NULL; + } else { + if (!dbus_message_get_args(msg, &derr, + DBUS_TYPE_STRING, &bda, + DBUS_TYPE_STRING, &pattern, + DBUS_TYPE_INVALID)) { + error_invalid_arguments(conn, msg, derr.message); + dbus_error_free(&derr); + return DBUS_HANDLER_RESULT_HANDLED; + } + /* Use the default adapter */ + adapter = NULL; } pending = find_pending_connect_by_pattern(bda, pattern); if (pending) return error_in_progress(conn, msg, "Connection in progress"); - dev_id = hci_get_route(NULL); + dev_id = adapter ? hci_devid(adapter) : hci_get_route(NULL); if ((dev_id < 0) || (hci_devba(dev_id, &src) < 0)) return error_failed(conn, msg, "Adapter not available"); @@ -2146,6 +2163,7 @@ { "ListProxies", list_proxies, "", "as" }, { "RemoveProxy", remove_proxy, "s", "" }, { "ConnectService", connect_service, "ss", "s" }, + { "ConnectServiceToAdapter", connect_service, "sss", "s" }, { "DisconnectService", disconnect_service, "s", "" }, { "CancelConnectService", cancel_connect_service, "ss", "" }, { NULL, NULL, NULL, NULL }, Index: utils/serial/serial-api.txt =================================================================== RCS file: /cvsroot/bluez/utils/serial/serial-api.txt,v retrieving revision 1.21 diff -u -r1.21 serial-api.txt --- utils/serial/serial-api.txt 26 Nov 2007 13:41:39 -0000 1.21 +++ utils/serial/serial-api.txt 11 Dec 2007 10:14:20 -0000 @@ -67,6 +67,21 @@ org.bluez.Error.ConnectionAttemptFailed org.bluez.Error.NotSupported org.bluez.Error.Failed + + string ConnectServiceToAdapter(string adapter, string address, + string pattern) + + Connects to a specific RFCOMM based service on a + remote device using the specified adapter and then + creates a RFCOMM TTY device for it. The RFCOMM TTY + device is returned. + + Possible errors:org.bluez.Error.InvalidArguments + org.bluez.Error.Canceled + org.bluez.Error.InProgress + org.bluez.Error.ConnectionAttemptFailed + org.bluez.Error.NotSupported + org.bluez.Error.Failed void CancelConnectService(string address, string pattern)