[PATCH v2] gatt: Add implementation for Gatt method, Confirm

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



---
 doc/gatt-api.txt    |  7 +++++++
 src/gatt-client.c   |  9 +++++++++
 src/gatt-database.c | 16 ++++++++++++----
 3 files changed, 28 insertions(+), 4 deletions(-)

diff --git a/doc/gatt-api.txt b/doc/gatt-api.txt
index c0ad1de25..42b1f55aa 100644
--- a/doc/gatt-api.txt
+++ b/doc/gatt-api.txt
@@ -162,6 +162,13 @@ Methods		array{byte} ReadValue(dict options)
 
 			Possible Errors: org.bluez.Error.Failed
 
+		void Confirm()
+
+			This method doesn't expect a reply so it is just a
+			confirmation that value was received.
+
+			Possible Errors: org.bluez.Error.Failed
+
 Properties	string UUID [read-only]
 
 			128-bit characteristic UUID.
diff --git a/src/gatt-client.c b/src/gatt-client.c
index 1cd7fbcf5..808d3da1d 100644
--- a/src/gatt-client.c
+++ b/src/gatt-client.c
@@ -1598,6 +1598,13 @@ static DBusMessage *characteristic_stop_notify(DBusConnection *conn,
 	return dbus_message_new_method_return(msg);
 }
 
+static DBusMessage *characteristic_indication_conf(DBusConnection *conn,
+					DBusMessage *msg, void *user_data)
+{
+	DBG("indication conf received");
+	return dbus_message_new_method_return(msg);
+}
+
 static const GDBusPropertyTable characteristic_properties[] = {
 	{ "UUID", "s", characteristic_get_uuid, NULL, NULL },
 	{ "Service", "o", characteristic_get_service, NULL, NULL },
@@ -1635,6 +1642,8 @@ static const GDBusMethodTable characteristic_methods[] = {
 					characteristic_start_notify) },
 	{ GDBUS_METHOD("StopNotify", NULL, NULL,
 					characteristic_stop_notify) },
+	{ GDBUS_METHOD("Confirm", NULL, NULL,
+				   characteristic_indication_conf) },
 	{ }
 };
 
diff --git a/src/gatt-database.c b/src/gatt-database.c
index 3b4bc7c8d..0969f8d1f 100644
--- a/src/gatt-database.c
+++ b/src/gatt-database.c
@@ -867,11 +867,18 @@ struct notify {
 	const uint8_t *value;
 	uint16_t len;
 	bool indicate;
+	GDBusProxy *proxy;
 };
 
 static void conf_cb(void *user_data)
 {
+	GDBusProxy *proxy = user_data;
 	DBG("GATT server received confirmation");
+
+	if (proxy != NULL)
+	{
+		g_dbus_proxy_method_call(proxy, "IndicationConf", NULL, NULL, NULL, NULL);
+	}
 }
 
 static void send_notification_to_device(void *data, void *user_data)
@@ -917,7 +924,7 @@ static void send_notification_to_device(void *data, void *user_data)
 	DBG("GATT server sending indication");
 	bt_gatt_server_send_indication(server, notify->handle, notify->value,
 							notify->len, conf_cb,
-							NULL, NULL);
+							notify->proxy, NULL);
 
 	return;
 
@@ -930,7 +937,7 @@ remove:
 static void send_notification_to_devices(struct btd_gatt_database *database,
 					uint16_t handle, const uint8_t *value,
 					uint16_t len, uint16_t ccc_handle,
-					bool indicate)
+					bool indicate, GDBusProxy *proxy)
 {
 	struct notify notify;
 
@@ -942,6 +949,7 @@ static void send_notification_to_devices(struct btd_gatt_database *database,
 	notify.value = value;
 	notify.len = len;
 	notify.indicate = indicate;
+	notify.proxy = proxy;
 
 	queue_foreach(database->device_states, send_notification_to_device,
 								&notify);
@@ -972,7 +980,7 @@ static void send_service_changed(struct btd_gatt_database *database,
 	put_le16(end, value + 2);
 
 	send_notification_to_devices(database, handle, value, sizeof(value),
-							ccc_handle, true);
+							ccc_handle, true, NULL);
 }
 
 static void gatt_db_service_added(struct gatt_db_attribute *attrib,
@@ -1861,7 +1869,7 @@ static void property_changed_cb(GDBusProxy *proxy, const char *name,
 				gatt_db_attribute_get_handle(chrc->attrib),
 				value, len,
 				gatt_db_attribute_get_handle(chrc->ccc),
-				chrc->props & BT_GATT_CHRC_PROP_INDICATE);
+				chrc->props & BT_GATT_CHRC_PROP_INDICATE, proxy);
 }
 
 static bool database_add_ccc(struct external_service *service,
-- 
2.14.1.480.gb18f417b89-goog

--
To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux