---
src/gatt-client.c | 9 +++++++++
src/gatt-database.c | 15 +++++++++++----
2 files changed, 20 insertions(+), 4 deletions(-)
diff --git a/src/gatt-client.c b/src/gatt-client.c
index 1cd7fbcf5..120fffb5b 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("IndicationConf", NULL, NULL,
+ characteristic_indication_conf) },
{ }
};
diff --git a/src/gatt-database.c b/src/gatt-database.c
index 3b4bc7c8d..e28ccd3b0 100644
--- a/src/gatt-database.c
+++ b/src/gatt-database.c
@@ -867,11 +867,17 @@ struct notify {
const uint8_t *value;
uint16_t len;
bool indicate;
+ GDBusProxy *proxy;
};
static void conf_cb(void *user_data)
{
DBG("GATT server received confirmation");
+ GDBusProxy *proxy = user_data;
+ 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 +923,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 +936,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 +948,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,
¬ify);
@@ -972,7 +979,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 +1868,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
Hi, Luiz
On Wed, Aug 23, 2017 at 1:12 AM, Luiz Augusto von Dentz
<[email protected]> wrote:
> Hi Yunhan,
>
> On Tue, Aug 22, 2017 at 1:04 AM, Yunhan Wang <[email protected]> wrote:
>> Hi, Luiz
>>
>> This is the patch to add a method, IndicationConf, to
>> GattCharacteristic1. Now i am able to handle indication confirmation.
>>
>> Thanks
>> Best wishes
>> Yunhan
>>
>> On Mon, Aug 21, 2017 at 2:59 PM, Yunhan Wang <[email protected]> wrote:
>>> ---
>>> src/gatt-client.c | 9 +++++++++
>>> src/gatt-database.c | 15 +++++++++++----
>>> 2 files changed, 20 insertions(+), 4 deletions(-)
>>>
>>> diff --git a/src/gatt-client.c b/src/gatt-client.c
>>> index 1cd7fbcf5..120fffb5b 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);
>
> This doesn't seems to be doing anything with the confirmation, but
> perhaps for the client is fine since there could be many application
> listing for indication.
Yes, it can be used to listen for this indication confirmation in
client application.
>
>>> +}
>>> +
>>> 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("IndicationConf", NULL, NULL,
>>> + characteristic_indication_conf) },
>>> { }
>>> };
>>>
>>> diff --git a/src/gatt-database.c b/src/gatt-database.c
>>> index 3b4bc7c8d..e28ccd3b0 100644
>>> --- a/src/gatt-database.c
>>> +++ b/src/gatt-database.c
>>> @@ -867,11 +867,17 @@ struct notify {
>>> const uint8_t *value;
>>> uint16_t len;
>>> bool indicate;
>>> + GDBusProxy *proxy;
>>> };
>>>
>>> static void conf_cb(void *user_data)
>>> {
>>> DBG("GATT server received confirmation");
>>> + GDBusProxy *proxy = user_data;
>
> Declaration should be at the beginning of the function.
Yes, thank you.
>
>>> + if (proxy != NULL)
>>> + {
>>> + g_dbus_proxy_method_call(proxy, "IndicationConf", NULL, NULL, NULL, NULL);
>>> + }
>
> Are there any case where the notify->proxy would be NULL? I would name
> it Confirm like I suggested initially and we need to document that it
> doesn't expect a reply so it is just a confirmation that value was
> received.
When send_service_changed happens, it is adding/removing gatt service,
which may not need any confirmation, and proxy would be NULL.
Yes, I will send another patch to rename it as Confirm and document it. thanks
>
>>> }
>>>
>>> static void send_notification_to_device(void *data, void *user_data)
>>> @@ -917,7 +923,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 +936,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 +948,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,
>>> ¬ify);
>>> @@ -972,7 +979,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 +1868,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
>>>
>
>
>
> --
> Luiz Augusto von Dentz
thanks
best wishes
yunhan
Hi Yunhan,
On Tue, Aug 22, 2017 at 1:04 AM, Yunhan Wang <[email protected]> wrote:
> Hi, Luiz
>
> This is the patch to add a method, IndicationConf, to
> GattCharacteristic1. Now i am able to handle indication confirmation.
>
> Thanks
> Best wishes
> Yunhan
>
> On Mon, Aug 21, 2017 at 2:59 PM, Yunhan Wang <[email protected]> wrote:
>> ---
>> src/gatt-client.c | 9 +++++++++
>> src/gatt-database.c | 15 +++++++++++----
>> 2 files changed, 20 insertions(+), 4 deletions(-)
>>
>> diff --git a/src/gatt-client.c b/src/gatt-client.c
>> index 1cd7fbcf5..120fffb5b 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);
This doesn't seems to be doing anything with the confirmation, but
perhaps for the client is fine since there could be many application
listing for indication.
>> +}
>> +
>> 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("IndicationConf", NULL, NULL,
>> + characteristic_indication_conf) },
>> { }
>> };
>>
>> diff --git a/src/gatt-database.c b/src/gatt-database.c
>> index 3b4bc7c8d..e28ccd3b0 100644
>> --- a/src/gatt-database.c
>> +++ b/src/gatt-database.c
>> @@ -867,11 +867,17 @@ struct notify {
>> const uint8_t *value;
>> uint16_t len;
>> bool indicate;
>> + GDBusProxy *proxy;
>> };
>>
>> static void conf_cb(void *user_data)
>> {
>> DBG("GATT server received confirmation");
>> + GDBusProxy *proxy = user_data;
Declaration should be at the beginning of the function.
>> + if (proxy != NULL)
>> + {
>> + g_dbus_proxy_method_call(proxy, "IndicationConf", NULL, NULL, NULL, NULL);
>> + }
Are there any case where the notify->proxy would be NULL? I would name
it Confirm like I suggested initially and we need to document that it
doesn't expect a reply so it is just a confirmation that value was
received.
>> }
>>
>> static void send_notification_to_device(void *data, void *user_data)
>> @@ -917,7 +923,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 +936,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 +948,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,
>> ¬ify);
>> @@ -972,7 +979,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 +1868,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
>>
--
Luiz Augusto von Dentz
Hi Yunhan,
> ---
> src/gatt-client.c | 9 +++++++++
> src/gatt-database.c | 15 +++++++++++----
> 2 files changed, 20 insertions(+), 4 deletions(-)
what is this doing and where is the patch to document it?
Regards
Marcel
Hi, Luiz
Any comments for this one? Can we merge it?
Thanks
Best wishes
Yunhan
On Mon, Aug 21, 2017 at 3:04 PM, Yunhan Wang <[email protected]> wrote:
> Hi, Luiz
>
> This is the patch to add a method, IndicationConf, to
> GattCharacteristic1. Now i am able to handle indication confirmation.
>
> Thanks
> Best wishes
> Yunhan
>
> On Mon, Aug 21, 2017 at 2:59 PM, Yunhan Wang <[email protected]> wrote:
>> ---
>> src/gatt-client.c | 9 +++++++++
>> src/gatt-database.c | 15 +++++++++++----
>> 2 files changed, 20 insertions(+), 4 deletions(-)
>>
>> diff --git a/src/gatt-client.c b/src/gatt-client.c
>> index 1cd7fbcf5..120fffb5b 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("IndicationConf", NULL, NULL,
>> + characteristic_indication_conf) },
>> { }
>> };
>>
>> diff --git a/src/gatt-database.c b/src/gatt-database.c
>> index 3b4bc7c8d..e28ccd3b0 100644
>> --- a/src/gatt-database.c
>> +++ b/src/gatt-database.c
>> @@ -867,11 +867,17 @@ struct notify {
>> const uint8_t *value;
>> uint16_t len;
>> bool indicate;
>> + GDBusProxy *proxy;
>> };
>>
>> static void conf_cb(void *user_data)
>> {
>> DBG("GATT server received confirmation");
>> + GDBusProxy *proxy = user_data;
>> + 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 +923,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 +936,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 +948,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,
>> ¬ify);
>> @@ -972,7 +979,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 +1868,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
>>
Hi, Luiz
This is the patch to add a method, IndicationConf, to
GattCharacteristic1. Now i am able to handle indication confirmation.
Thanks
Best wishes
Yunhan
On Mon, Aug 21, 2017 at 2:59 PM, Yunhan Wang <[email protected]> wrote:
> ---
> src/gatt-client.c | 9 +++++++++
> src/gatt-database.c | 15 +++++++++++----
> 2 files changed, 20 insertions(+), 4 deletions(-)
>
> diff --git a/src/gatt-client.c b/src/gatt-client.c
> index 1cd7fbcf5..120fffb5b 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("IndicationConf", NULL, NULL,
> + characteristic_indication_conf) },
> { }
> };
>
> diff --git a/src/gatt-database.c b/src/gatt-database.c
> index 3b4bc7c8d..e28ccd3b0 100644
> --- a/src/gatt-database.c
> +++ b/src/gatt-database.c
> @@ -867,11 +867,17 @@ struct notify {
> const uint8_t *value;
> uint16_t len;
> bool indicate;
> + GDBusProxy *proxy;
> };
>
> static void conf_cb(void *user_data)
> {
> DBG("GATT server received confirmation");
> + GDBusProxy *proxy = user_data;
> + 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 +923,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 +936,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 +948,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,
> ¬ify);
> @@ -972,7 +979,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 +1868,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
>