Diff between 396b3b62c9c1d2c55a4d53714e82627d803d0a3d and b98bb6c1027b2a6af85465b418f0ee893946a0fd

Changed Files

File Additions Deletions Status
src/device.c +23 -0 modified
src/device.h +1 -0 modified

Full Patch

diff --git a/src/device.c b/src/device.c
index 289d522..41637b3 100644
--- a/src/device.c
+++ b/src/device.c
@@ -1331,6 +1331,29 @@ static GSList *create_pending_list(struct btd_device *dev, const char *uuid)
 	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
@@ -146,6 +146,7 @@ struct btd_service *btd_device_get_service(struct btd_device *dev,
 						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);