Re: [PATCH BlueZ] gatt: Add implementation of IndicationConf

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

 



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 <yunhanw@xxxxxxxxxx> 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,
>                                                                 &notify);
> @@ -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
>
--
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