linux-bluetooth.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH BlueZ 1/4] shared/gatt-db: Introduce gatt_db_service_add_ccc
@ 2022-01-21 20:54 Luiz Augusto von Dentz
  2022-01-21 20:54 ` [PATCH BlueZ 2/4] gatt: Make use of gatt_db_service_add_ccc Luiz Augusto von Dentz
                   ` (3 more replies)
  0 siblings, 4 replies; 6+ messages in thread
From: Luiz Augusto von Dentz @ 2022-01-21 20:54 UTC (permalink / raw)
  To: linux-bluetooth

From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>

This adds gatt_db_service_add_ccc so the likes of plugins can use it
with the defaults callbacks which is useful for tracking their states.
---
 src/shared/gatt-db.c | 53 ++++++++++++++++++++++++++++++++++++++++++++
 src/shared/gatt-db.h |  7 ++++++
 2 files changed, 60 insertions(+)

diff --git a/src/shared/gatt-db.c b/src/shared/gatt-db.c
index 3a02289ce..12ff5badb 100644
--- a/src/shared/gatt-db.c
+++ b/src/shared/gatt-db.c
@@ -44,6 +44,12 @@ static const bt_uuid_t included_service_uuid = { .type = BT_UUID16,
 static const bt_uuid_t ext_desc_uuid = { .type = BT_UUID16,
 				.value.u16 = GATT_CHARAC_EXT_PROPER_UUID };
 
+struct gatt_db_ccc {
+	gatt_db_read_t read_func;
+	gatt_db_write_t write_func;
+	void *user_data;
+};
+
 struct gatt_db {
 	int ref_count;
 	struct bt_crypto *crypto;
@@ -57,6 +63,8 @@ struct gatt_db {
 
 	gatt_db_authorize_cb_t authorize;
 	void *authorize_data;
+
+	struct gatt_db_ccc *ccc;
 };
 
 struct notify {
@@ -444,6 +452,7 @@ static void gatt_db_destroy(struct gatt_db *db)
 		timeout_remove(db->hash_id);
 
 	queue_destroy(db->services, gatt_db_service_destroy);
+	free(db->ccc);
 	free(db);
 }
 
@@ -1038,6 +1047,50 @@ gatt_db_service_add_descriptor(struct gatt_db_attribute *attrib,
 					user_data);
 }
 
+struct gatt_db_attribute *
+gatt_db_service_add_ccc(struct gatt_db_attribute *attrib, uint32_t permissions)
+{
+	struct gatt_db *db;
+	struct gatt_db_attribute *ccc;
+	bt_uuid_t uuid;
+
+	if (!attrib)
+		return NULL;
+
+	db = attrib->service->db;
+
+	if (!db->ccc)
+		return NULL;
+
+	bt_uuid16_create(&uuid, GATT_CLIENT_CHARAC_CFG_UUID);
+
+	ccc = service_insert_descriptor(attrib->service, 0, &uuid,
+					permissions,
+					db->ccc->read_func,
+					db->ccc->write_func,
+					db->ccc->user_data);
+	if (!ccc)
+		return ccc;
+
+	gatt_db_attribute_set_fixed_length(ccc, 2);
+
+	return ccc;
+}
+
+void gatt_db_ccc_register(struct gatt_db *db, gatt_db_read_t read_func,
+				gatt_db_write_t write_func, void *user_data)
+{
+	if (!db)
+		return;
+
+	if (!db->ccc)
+		db->ccc = new0(struct gatt_db_ccc, 1);
+
+	db->ccc->read_func = read_func;
+	db->ccc->write_func = write_func;
+	db->ccc->user_data = user_data;
+}
+
 static struct gatt_db_attribute *
 service_insert_included(struct gatt_db_service *service, uint16_t handle,
 					struct gatt_db_attribute *include)
diff --git a/src/shared/gatt-db.h b/src/shared/gatt-db.h
index 321a2aba6..3de22403c 100644
--- a/src/shared/gatt-db.h
+++ b/src/shared/gatt-db.h
@@ -92,6 +92,7 @@ gatt_db_service_add_descriptor(struct gatt_db_attribute *attrib,
 					gatt_db_read_t read_func,
 					gatt_db_write_t write_func,
 					void *user_data);
+
 struct gatt_db_attribute *
 gatt_db_service_insert_descriptor(struct gatt_db_attribute *attrib,
 					uint16_t handle,
@@ -101,6 +102,9 @@ gatt_db_service_insert_descriptor(struct gatt_db_attribute *attrib,
 					gatt_db_write_t write_func,
 					void *user_data);
 
+struct gatt_db_attribute *
+gatt_db_service_add_ccc(struct gatt_db_attribute *attrib, uint32_t permissions);
+
 struct gatt_db_attribute *
 gatt_db_insert_included(struct gatt_db *db, uint16_t handle,
 			struct gatt_db_attribute *include);
@@ -192,6 +196,9 @@ unsigned int gatt_db_register(struct gatt_db *db,
 					gatt_db_destroy_func_t destroy);
 bool gatt_db_unregister(struct gatt_db *db, unsigned int id);
 
+void gatt_db_ccc_register(struct gatt_db *db, gatt_db_read_t read_func,
+				gatt_db_write_t write_func, void *user_data);
+
 typedef uint8_t (*gatt_db_authorize_cb_t)(struct gatt_db_attribute *attrib,
 					uint8_t opcode, struct bt_att *att,
 					void *user_data);
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH BlueZ 2/4] gatt: Make use of gatt_db_service_add_ccc
  2022-01-21 20:54 [PATCH BlueZ 1/4] shared/gatt-db: Introduce gatt_db_service_add_ccc Luiz Augusto von Dentz
@ 2022-01-21 20:54 ` Luiz Augusto von Dentz
  2022-01-21 20:54 ` [PATCH BlueZ 3/4] shared/gatt-db: Introduce gatt_db_attribute_notify Luiz Augusto von Dentz
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 6+ messages in thread
From: Luiz Augusto von Dentz @ 2022-01-21 20:54 UTC (permalink / raw)
  To: linux-bluetooth

From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>

This uses gatt_db_service_add_ccc and gatt_db_ccc_register so any ccc
registered with the use of the former gets proper state tracking.
---
 src/gatt-database.c | 62 ++++++++++++++++++++-------------------------
 1 file changed, 28 insertions(+), 34 deletions(-)

diff --git a/src/gatt-database.c b/src/gatt-database.c
index dbe9415a3..25641da8a 100644
--- a/src/gatt-database.c
+++ b/src/gatt-database.c
@@ -1018,13 +1018,6 @@ static void gatt_ccc_write_cb(struct gatt_db_attribute *attrib,
 		goto done;
 	}
 
-	ccc_cb = queue_find(database->ccc_callbacks, ccc_cb_match_handle,
-			UINT_TO_PTR(gatt_db_attribute_get_handle(attrib)));
-	if (!ccc_cb) {
-		ecode = BT_ATT_ERROR_UNLIKELY;
-		goto done;
-	}
-
 	if (len == 1)
 		val = *value;
 	else
@@ -1034,7 +1027,9 @@ static void gatt_ccc_write_cb(struct gatt_db_attribute *attrib,
 	if (val == ccc->value)
 		goto done;
 
-	if (ccc_cb->callback) {
+	ccc_cb = queue_find(database->ccc_callbacks, ccc_cb_match_handle,
+			UINT_TO_PTR(gatt_db_attribute_get_handle(attrib)));
+	if (ccc_cb) {
 		struct pending_op *op;
 
 		op = pending_ccc_new(att, attrib, val,
@@ -1056,6 +1051,22 @@ done:
 	gatt_db_attribute_write_result(attrib, id, ecode);
 }
 
+static void ccc_add_cb(struct btd_gatt_database *database,
+			struct gatt_db_attribute *ccc,
+			btd_gatt_database_ccc_write_t callback,
+			void *user_data, btd_gatt_database_destroy_t destroy)
+{
+	struct ccc_cb_data *ccc_cb;
+
+	ccc_cb = new0(struct ccc_cb_data, 1);
+	ccc_cb->handle = gatt_db_attribute_get_handle(ccc);
+	ccc_cb->callback = callback;
+	ccc_cb->destroy = destroy;
+	ccc_cb->user_data = user_data;
+
+	queue_push_tail(database->ccc_callbacks, ccc_cb);
+}
+
 static struct gatt_db_attribute *
 service_add_ccc(struct gatt_db_attribute *service,
 				struct btd_gatt_database *database,
@@ -1064,34 +1075,14 @@ service_add_ccc(struct gatt_db_attribute *service,
 				btd_gatt_database_destroy_t destroy)
 {
 	struct gatt_db_attribute *ccc;
-	struct ccc_cb_data *ccc_cb;
-	bt_uuid_t uuid;
-
-	ccc_cb = new0(struct ccc_cb_data, 1);
-
-	/*
-	 * Provide a way for the permissions on a characteristic to dictate
-	 * the permissions on the CCC
-	 */
-	perm |= BT_ATT_PERM_READ | BT_ATT_PERM_WRITE;
-
-	bt_uuid16_create(&uuid, GATT_CLIENT_CHARAC_CFG_UUID);
-	ccc = gatt_db_service_add_descriptor(service, &uuid, perm,
-				gatt_ccc_read_cb, gatt_ccc_write_cb, database);
-	if (!ccc) {
-		error("Failed to create CCC entry in database");
-		free(ccc_cb);
-		return NULL;
-	}
-
-	gatt_db_attribute_set_fixed_length(ccc, 2);
 
-	ccc_cb->handle = gatt_db_attribute_get_handle(ccc);
-	ccc_cb->callback = write_callback;
-	ccc_cb->destroy = destroy;
-	ccc_cb->user_data = user_data;
+	ccc = gatt_db_service_add_ccc(service, perm);
+	if (!ccc)
+		return ccc;
 
-	queue_push_tail(database->ccc_callbacks, ccc_cb);
+	/* Only add ccc_cb if callback is set */
+	if (write_callback)
+		ccc_add_cb(database, ccc, write_callback, user_data, destroy);
 
 	return ccc;
 }
@@ -1310,6 +1301,9 @@ static void populate_devinfo_service(struct btd_gatt_database *database)
 
 static void register_core_services(struct btd_gatt_database *database)
 {
+	gatt_db_ccc_register(database->db, gatt_ccc_read_cb, gatt_ccc_write_cb,
+								database);
+
 	populate_gap_service(database);
 	populate_gatt_service(database);
 	populate_devinfo_service(database);
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH BlueZ 3/4] shared/gatt-db: Introduce gatt_db_attribute_notify
  2022-01-21 20:54 [PATCH BlueZ 1/4] shared/gatt-db: Introduce gatt_db_service_add_ccc Luiz Augusto von Dentz
  2022-01-21 20:54 ` [PATCH BlueZ 2/4] gatt: Make use of gatt_db_service_add_ccc Luiz Augusto von Dentz
@ 2022-01-21 20:54 ` Luiz Augusto von Dentz
  2022-01-21 20:54 ` [PATCH BlueZ 4/4] gatt: Make use of gatt_db_attribute_notify Luiz Augusto von Dentz
  2022-01-21 23:40 ` [BlueZ,1/4] shared/gatt-db: Introduce gatt_db_service_add_ccc bluez.test.bot
  3 siblings, 0 replies; 6+ messages in thread
From: Luiz Augusto von Dentz @ 2022-01-21 20:54 UTC (permalink / raw)
  To: linux-bluetooth

From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>

This introduces gatt_db_attribute_notify which can be used to trigger a
notification using the callback set by gatt_db_ccc_register.
---
 src/gatt-database.c  |  2 +-
 src/shared/gatt-db.c | 46 ++++++++++++++++++++++++++++++++++++++++----
 src/shared/gatt-db.h | 13 ++++++++++++-
 3 files changed, 55 insertions(+), 6 deletions(-)

diff --git a/src/gatt-database.c b/src/gatt-database.c
index 25641da8a..dc75762f3 100644
--- a/src/gatt-database.c
+++ b/src/gatt-database.c
@@ -1302,7 +1302,7 @@ static void populate_devinfo_service(struct btd_gatt_database *database)
 static void register_core_services(struct btd_gatt_database *database)
 {
 	gatt_db_ccc_register(database->db, gatt_ccc_read_cb, gatt_ccc_write_cb,
-								database);
+							NULL, database);
 
 	populate_gap_service(database);
 	populate_gatt_service(database);
diff --git a/src/shared/gatt-db.c b/src/shared/gatt-db.c
index 12ff5badb..59d19eea3 100644
--- a/src/shared/gatt-db.c
+++ b/src/shared/gatt-db.c
@@ -43,10 +43,13 @@ static const bt_uuid_t included_service_uuid = { .type = BT_UUID16,
 					.value.u16 = GATT_INCLUDE_UUID };
 static const bt_uuid_t ext_desc_uuid = { .type = BT_UUID16,
 				.value.u16 = GATT_CHARAC_EXT_PROPER_UUID };
+static const bt_uuid_t ccc_uuid = { .type = BT_UUID16,
+				.value.u16 = GATT_CLIENT_CHARAC_CFG_UUID };
 
 struct gatt_db_ccc {
 	gatt_db_read_t read_func;
 	gatt_db_write_t write_func;
+	gatt_db_notify_t notify_func;
 	void *user_data;
 };
 
@@ -109,6 +112,7 @@ struct gatt_db_attribute {
 
 	gatt_db_read_t read_func;
 	gatt_db_write_t write_func;
+	gatt_db_notify_t notify_func;
 	void *user_data;
 
 	unsigned int read_id;
@@ -1047,12 +1051,20 @@ gatt_db_service_add_descriptor(struct gatt_db_attribute *attrib,
 					user_data);
 }
 
+static void find_ccc_value(struct gatt_db_attribute *attrib, void *user_data)
+{
+	uint16_t *handle = user_data;
+
+	gatt_db_attribute_get_char_data(attrib, NULL, handle, NULL, NULL, NULL);
+}
+
 struct gatt_db_attribute *
 gatt_db_service_add_ccc(struct gatt_db_attribute *attrib, uint32_t permissions)
 {
 	struct gatt_db *db;
 	struct gatt_db_attribute *ccc;
-	bt_uuid_t uuid;
+	struct gatt_db_attribute *value;
+	uint16_t handle = 0;
 
 	if (!attrib)
 		return NULL;
@@ -1062,9 +1074,17 @@ gatt_db_service_add_ccc(struct gatt_db_attribute *attrib, uint32_t permissions)
 	if (!db->ccc)
 		return NULL;
 
-	bt_uuid16_create(&uuid, GATT_CLIENT_CHARAC_CFG_UUID);
+	/* Locate value handle */
+	gatt_db_service_foreach_char(attrib, find_ccc_value, &handle);
+
+	if (!handle)
+		return NULL;
+
+	value = gatt_db_get_attribute(db, handle);
+	if (!value || value->notify_func)
+		return NULL;
 
-	ccc = service_insert_descriptor(attrib->service, 0, &uuid,
+	ccc = service_insert_descriptor(attrib->service, 0, &ccc_uuid,
 					permissions,
 					db->ccc->read_func,
 					db->ccc->write_func,
@@ -1073,12 +1093,16 @@ gatt_db_service_add_ccc(struct gatt_db_attribute *attrib, uint32_t permissions)
 		return ccc;
 
 	gatt_db_attribute_set_fixed_length(ccc, 2);
+	ccc->notify_func = db->ccc->notify_func;
+	value->notify_func = db->ccc->notify_func;
 
 	return ccc;
 }
 
 void gatt_db_ccc_register(struct gatt_db *db, gatt_db_read_t read_func,
-				gatt_db_write_t write_func, void *user_data)
+				gatt_db_write_t write_func,
+				gatt_db_notify_t notify_func,
+				void *user_data)
 {
 	if (!db)
 		return;
@@ -1088,6 +1112,7 @@ void gatt_db_ccc_register(struct gatt_db *db, gatt_db_read_t read_func,
 
 	db->ccc->read_func = read_func;
 	db->ccc->write_func = write_func;
+	db->ccc->notify_func = notify_func;
 	db->ccc->user_data = user_data;
 }
 
@@ -2103,6 +2128,19 @@ bool gatt_db_attribute_write_result(struct gatt_db_attribute *attrib,
 	return true;
 }
 
+bool gatt_db_attribute_notify(struct gatt_db_attribute *attrib,
+					struct gatt_db_attribute *ccc,
+					const uint8_t *value, size_t len,
+					struct bt_att *att)
+{
+	if (!attrib || !ccc || !attrib->notify_func)
+		return false;
+
+	attrib->notify_func(attrib, ccc, value, len, att, ccc->user_data);
+
+	return true;
+}
+
 bool gatt_db_attribute_reset(struct gatt_db_attribute *attrib)
 {
 	if (!attrib)
diff --git a/src/shared/gatt-db.h b/src/shared/gatt-db.h
index 3de22403c..acd8f6a81 100644
--- a/src/shared/gatt-db.h
+++ b/src/shared/gatt-db.h
@@ -47,6 +47,10 @@ typedef void (*gatt_db_write_t) (struct gatt_db_attribute *attrib,
 					const uint8_t *value, size_t len,
 					uint8_t opcode, struct bt_att *att,
 					void *user_data);
+typedef void (*gatt_db_notify_t) (struct gatt_db_attribute *attrib,
+					struct gatt_db_attribute *ccc,
+					const uint8_t *value, size_t len,
+					struct bt_att *att, void *user_data);
 
 struct gatt_db_attribute *
 gatt_db_service_add_characteristic(struct gatt_db_attribute *attrib,
@@ -197,7 +201,9 @@ unsigned int gatt_db_register(struct gatt_db *db,
 bool gatt_db_unregister(struct gatt_db *db, unsigned int id);
 
 void gatt_db_ccc_register(struct gatt_db *db, gatt_db_read_t read_func,
-				gatt_db_write_t write_func, void *user_data);
+					gatt_db_write_t write_func,
+					gatt_db_notify_t notify_func,
+					void *user_data);
 
 typedef uint8_t (*gatt_db_authorize_cb_t)(struct gatt_db_attribute *attrib,
 					uint8_t opcode, struct bt_att *att,
@@ -275,6 +281,11 @@ bool gatt_db_attribute_write(struct gatt_db_attribute *attrib, uint16_t offset,
 bool gatt_db_attribute_write_result(struct gatt_db_attribute *attrib,
 						unsigned int id, int err);
 
+bool gatt_db_attribute_notify(struct gatt_db_attribute *attrib,
+					struct gatt_db_attribute *ccc,
+					const uint8_t *value, size_t len,
+					struct bt_att *att);
+
 bool gatt_db_attribute_reset(struct gatt_db_attribute *attrib);
 
 void *gatt_db_attribute_get_user_data(struct gatt_db_attribute *attrib);
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH BlueZ 4/4] gatt: Make use of gatt_db_attribute_notify
  2022-01-21 20:54 [PATCH BlueZ 1/4] shared/gatt-db: Introduce gatt_db_service_add_ccc Luiz Augusto von Dentz
  2022-01-21 20:54 ` [PATCH BlueZ 2/4] gatt: Make use of gatt_db_service_add_ccc Luiz Augusto von Dentz
  2022-01-21 20:54 ` [PATCH BlueZ 3/4] shared/gatt-db: Introduce gatt_db_attribute_notify Luiz Augusto von Dentz
@ 2022-01-21 20:54 ` Luiz Augusto von Dentz
  2022-01-21 23:40 ` [BlueZ,1/4] shared/gatt-db: Introduce gatt_db_service_add_ccc bluez.test.bot
  3 siblings, 0 replies; 6+ messages in thread
From: Luiz Augusto von Dentz @ 2022-01-21 20:54 UTC (permalink / raw)
  To: linux-bluetooth

From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>

This makes use of gatt_db_attribute_notify to send indications of
Service Changed.
---
 src/gatt-database.c | 73 ++++++++++++++++++++++++++++++++++++---------
 1 file changed, 59 insertions(+), 14 deletions(-)

diff --git a/src/gatt-database.c b/src/gatt-database.c
index dc75762f3..d3518ebfc 100644
--- a/src/gatt-database.c
+++ b/src/gatt-database.c
@@ -378,6 +378,18 @@ static bool get_dst_info(struct bt_att *att, bdaddr_t *dst, uint8_t *dst_type)
 	return true;
 }
 
+static struct device_state *
+find_device_state_by_att(struct btd_gatt_database *database, struct bt_att *att)
+{
+	bdaddr_t bdaddr;
+	uint8_t bdaddr_type;
+
+	if (!get_dst_info(att, &bdaddr, &bdaddr_type))
+		return NULL;
+
+	return find_device_state(database, &bdaddr, bdaddr_type);
+}
+
 static struct device_state *get_device_state(struct btd_gatt_database *database,
 						struct bt_att *att)
 {
@@ -1299,16 +1311,6 @@ static void populate_devinfo_service(struct btd_gatt_database *database)
 	database_add_record(database, service);
 }
 
-static void register_core_services(struct btd_gatt_database *database)
-{
-	gatt_db_ccc_register(database->db, gatt_ccc_read_cb, gatt_ccc_write_cb,
-							NULL, database);
-
-	populate_gap_service(database);
-	populate_gatt_service(database);
-	populate_devinfo_service(database);
-}
-
 static void conf_cb(void *user_data)
 {
 	GDBusProxy *proxy = user_data;
@@ -1432,6 +1434,49 @@ remove:
 	}
 }
 
+static void gatt_notify_cb(struct gatt_db_attribute *attrib,
+					struct gatt_db_attribute *ccc,
+					const uint8_t *value, size_t len,
+					struct bt_att *att, void *user_data)
+{
+	struct btd_gatt_database *database = user_data;
+	struct notify notify;
+
+	memset(&notify, 0, sizeof(notify));
+
+	notify.database = database;
+	notify.handle = gatt_db_attribute_get_handle(attrib);
+	notify.ccc_handle = gatt_db_attribute_get_handle(ccc);
+	notify.value = (void *) value;
+	notify.len = len;
+
+	if (attrib == database->svc_chngd)
+		notify.conf = service_changed_conf;
+
+	/* If a specific att is provided notify only to that device */
+	if (att) {
+		struct device_state *state;
+
+		state = find_device_state_by_att(database, att);
+		if (!state)
+			return;
+
+		send_notification_to_device(state, &notify);
+	} else
+		queue_foreach(database->device_states,
+				send_notification_to_device, &notify);
+}
+
+static void register_core_services(struct btd_gatt_database *database)
+{
+	gatt_db_ccc_register(database->db, gatt_ccc_read_cb, gatt_ccc_write_cb,
+						gatt_notify_cb, database);
+
+	populate_gap_service(database);
+	populate_gatt_service(database);
+	populate_devinfo_service(database);
+}
+
 static void send_notification_to_devices(struct btd_gatt_database *database,
 					uint16_t handle, uint8_t *value,
 					uint16_t len, uint16_t ccc_handle,
@@ -1478,8 +1523,8 @@ static void send_service_changed(struct btd_gatt_database *database,
 	put_le16(start, value);
 	put_le16(end, value + 2);
 
-	send_notification_to_devices(database, handle, value, sizeof(value),
-					ccc_handle, service_changed_conf, NULL);
+	gatt_db_attribute_notify(database->svc_chngd, database->svc_chngd_ccc,
+				 value, sizeof(value), NULL);
 }
 
 static void gatt_db_service_added(struct gatt_db_attribute *attrib,
@@ -3917,6 +3962,6 @@ void btd_gatt_database_restore_svc_chng_ccc(struct btd_gatt_database *database)
 	put_le16(0x0001, value);
 	put_le16(0xffff, value + 2);
 
-	send_notification_to_devices(database, handle, value, sizeof(value),
-					ccc_handle, service_changed_conf, NULL);
+	gatt_db_attribute_notify(database->svc_chngd, database->svc_chngd_ccc,
+				 value, sizeof(value), NULL);
 }
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* RE: [BlueZ,1/4] shared/gatt-db: Introduce gatt_db_service_add_ccc
  2022-01-21 20:54 [PATCH BlueZ 1/4] shared/gatt-db: Introduce gatt_db_service_add_ccc Luiz Augusto von Dentz
                   ` (2 preceding siblings ...)
  2022-01-21 20:54 ` [PATCH BlueZ 4/4] gatt: Make use of gatt_db_attribute_notify Luiz Augusto von Dentz
@ 2022-01-21 23:40 ` bluez.test.bot
  2022-01-28  2:02   ` Luiz Augusto von Dentz
  3 siblings, 1 reply; 6+ messages in thread
From: bluez.test.bot @ 2022-01-21 23:40 UTC (permalink / raw)
  To: linux-bluetooth, luiz.dentz

[-- Attachment #1: Type: text/plain, Size: 998 bytes --]

This is automated email and please do not reply to this email!

Dear submitter,

Thank you for submitting the patches to the linux bluetooth mailing list.
This is a CI test results with your patch series:
PW Link:https://patchwork.kernel.org/project/bluetooth/list/?series=607383

---Test result---

Test Summary:
CheckPatch                    PASS      2.01 seconds
GitLint                       PASS      1.36 seconds
Prep - Setup ELL              PASS      38.22 seconds
Build - Prep                  PASS      0.41 seconds
Build - Configure             PASS      7.70 seconds
Build - Make                  PASS      1301.25 seconds
Make Check                    PASS      11.02 seconds
Make Check w/Valgrind         PASS      399.26 seconds
Make Distcheck                PASS      212.75 seconds
Build w/ext ELL - Configure   PASS      7.61 seconds
Build w/ext ELL - Make        PASS      1290.35 seconds
Incremental Build with patchesPASS      5245.61 seconds



---
Regards,
Linux Bluetooth


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [BlueZ,1/4] shared/gatt-db: Introduce gatt_db_service_add_ccc
  2022-01-21 23:40 ` [BlueZ,1/4] shared/gatt-db: Introduce gatt_db_service_add_ccc bluez.test.bot
@ 2022-01-28  2:02   ` Luiz Augusto von Dentz
  0 siblings, 0 replies; 6+ messages in thread
From: Luiz Augusto von Dentz @ 2022-01-28  2:02 UTC (permalink / raw)
  To: linux-bluetooth

Hi,

On Fri, Jan 21, 2022 at 3:40 PM <bluez.test.bot@gmail.com> wrote:
>
> This is automated email and please do not reply to this email!
>
> Dear submitter,
>
> Thank you for submitting the patches to the linux bluetooth mailing list.
> This is a CI test results with your patch series:
> PW Link:https://patchwork.kernel.org/project/bluetooth/list/?series=607383
>
> ---Test result---
>
> Test Summary:
> CheckPatch                    PASS      2.01 seconds
> GitLint                       PASS      1.36 seconds
> Prep - Setup ELL              PASS      38.22 seconds
> Build - Prep                  PASS      0.41 seconds
> Build - Configure             PASS      7.70 seconds
> Build - Make                  PASS      1301.25 seconds
> Make Check                    PASS      11.02 seconds
> Make Check w/Valgrind         PASS      399.26 seconds
> Make Distcheck                PASS      212.75 seconds
> Build w/ext ELL - Configure   PASS      7.61 seconds
> Build w/ext ELL - Make        PASS      1290.35 seconds
> Incremental Build with patchesPASS      5245.61 seconds
>
>
>
> ---
> Regards,
> Linux Bluetooth

Pushed.

-- 
Luiz Augusto von Dentz

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2022-01-28  2:02 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-01-21 20:54 [PATCH BlueZ 1/4] shared/gatt-db: Introduce gatt_db_service_add_ccc Luiz Augusto von Dentz
2022-01-21 20:54 ` [PATCH BlueZ 2/4] gatt: Make use of gatt_db_service_add_ccc Luiz Augusto von Dentz
2022-01-21 20:54 ` [PATCH BlueZ 3/4] shared/gatt-db: Introduce gatt_db_attribute_notify Luiz Augusto von Dentz
2022-01-21 20:54 ` [PATCH BlueZ 4/4] gatt: Make use of gatt_db_attribute_notify Luiz Augusto von Dentz
2022-01-21 23:40 ` [BlueZ,1/4] shared/gatt-db: Introduce gatt_db_service_add_ccc bluez.test.bot
2022-01-28  2:02   ` Luiz Augusto von Dentz

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).