diff --git a/src/device.c b/src/device.c
index 289d522..41637b3 100644
--- a/src/device.c
+++ b/src/device.c
return dev->pending;
}
+int btd_device_connect_services(struct btd_device *dev, GSList *services)
+{
+ GSList *l;
+
+ if (dev->pending || dev->connect || dev->browse)
+ return -EBUSY;
+
+ if (!btd_adapter_get_powered(dev->adapter))
+ return -ENETDOWN;
+
+ if (!dev->bredr_state.svc_resolved)
+ return -ENOENT;
+
+ for (l = services; l; l = g_slist_next(l)) {
+ struct btd_service *service = l->data;
+
+ dev->pending = g_slist_append(dev->pending,
+ btd_service_ref(service));
+ }
+
+ return connect_next(dev);
+}
+
static DBusMessage *connect_profiles(struct btd_device *dev, uint8_t bdaddr_type,
DBusMessage *msg, const char *uuid)
{
diff --git a/src/device.h b/src/device.h
index 30e2d5d..8cb6980 100644
--- a/src/device.h
+++ b/src/device.h
const char *remote_uuid);
int device_discover_services(struct btd_device *device);
+int btd_device_connect_services(struct btd_device *dev, GSList *services);
void btd_device_init(void);
void btd_device_cleanup(void);