Re: [PATCH v2 2/2] core: Add implementation of AdvertisingFlags

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

 



Hi,

On Tue, Oct 18, 2016 at 10:11 PM,  <puthik@xxxxxxxxxxxx> wrote:
> From: Puthikorn Voravootivat <puthik@xxxxxxxxxxxx>
>
> This adds 'AdvertisingFlags' property to Device interface.
>
> Bluetooth Core Supplementary Spec v6 Chapter 1.3 defines Bluetooth
> Flags as one of the data in advertise data. BlueZ also correctly
> parses this data but never exposes it to upper layer.
>
> Signed-off-by: Puthikorn Voravootivat <puthik@xxxxxxxxxxxx>
> ---
>  src/adapter.c |  2 ++
>  src/device.c  | 36 ++++++++++++++++++++++++++++++++++++
>  src/device.h  |  1 +
>  3 files changed, 39 insertions(+)
>
> diff --git a/src/adapter.c b/src/adapter.c
> index b096d48..1abb5c0 100644
> --- a/src/adapter.c
> +++ b/src/adapter.c
> @@ -5552,6 +5552,8 @@ static void update_found_devices(struct btd_adapter *adapter,
>         if (eir_data.sd_list)
>                 device_set_service_data(dev, eir_data.sd_list);
>
> +       device_set_flags(dev, eir_data.flags);
> +
>         eir_data_free(&eir_data);
>
>         /*
> diff --git a/src/device.c b/src/device.c
> index fb6104f..993b8e7 100644
> --- a/src/device.c
> +++ b/src/device.c
> @@ -247,6 +247,8 @@ struct btd_device {
>
>         GIOChannel      *att_io;
>         guint           store_id;
> +
> +       uint8_t         flags;
>  };
>
>  static const uint16_t uuid_list[] = {
> @@ -939,6 +941,23 @@ dev_property_get_svc_resolved(const GDBusPropertyTable *property,
>         return TRUE;
>  }
>
> +static gboolean
> +dev_property_get_flags(const GDBusPropertyTable *property,
> +                                       DBusMessageIter *iter, void *data)
> +{
> +       struct btd_device *device = data;
> +       uint8_t flags[] = { device->flags };
> +       DBusMessageIter array;
> +
> +       dbus_message_iter_open_container(iter, DBUS_TYPE_ARRAY,
> +                                       DBUS_TYPE_BYTE_AS_STRING, &array);
> +       dbus_message_iter_append_fixed_array(&array, DBUS_TYPE_BYTE,
> +                                               &flags, sizeof(flags));
> +       dbus_message_iter_close_container(iter, &array);
> +
> +       return TRUE;
> +}
> +
>  static gboolean dev_property_get_trusted(const GDBusPropertyTable *property,
>                                         DBusMessageIter *iter, void *data)
>  {
> @@ -2534,6 +2553,7 @@ static const GDBusPropertyTable device_properties[] = {
>         { "TxPower", "n", dev_property_get_tx_power, NULL,
>                                         dev_property_exists_tx_power },
>         { "ServicesResolved", "b", dev_property_get_svc_resolved, NULL, NULL },
> +       { "AdvertisingFlags", "ay", dev_property_get_flags },

It shall have experimental flag set for now.

>
>         { }
>  };
> @@ -5221,6 +5241,22 @@ void device_set_tx_power(struct btd_device *device, int8_t tx_power)
>                                                 DEVICE_INTERFACE, "TxPower");
>  }
>
> +void device_set_flags(struct btd_device *device, uint8_t flags)
> +{
> +       if (!device)
> +               return;
> +
> +       DBG("flags %d", flags);
> +
> +       if (device->flags == flags)
> +               return;
> +
> +       device->flags = flags;
> +
> +       g_dbus_emit_property_changed(dbus_conn, device->path,
> +                                       DEVICE_INTERFACE, "AdvertisingFlags");
> +}
> +
>  static gboolean start_discovery(gpointer user_data)
>  {
>         struct btd_device *device = user_data;
> diff --git a/src/device.h b/src/device.h
> index 387f598..93a159a 100644
> --- a/src/device.h
> +++ b/src/device.h
> @@ -97,6 +97,7 @@ void device_set_rssi_with_delta(struct btd_device *device, int8_t rssi,
>                                                         int8_t delta_threshold);
>  void device_set_rssi(struct btd_device *device, int8_t rssi);
>  void device_set_tx_power(struct btd_device *device, int8_t tx_power);
> +void device_set_flags(struct btd_device *device, uint8_t flags);
>  bool btd_device_is_connected(struct btd_device *dev);
>  uint8_t btd_device_get_bdaddr_type(struct btd_device *dev);
>  bool device_is_retrying(struct btd_device *device);
> --
> 2.8.0.rc3.226.g39d4020
>
> --
> 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



-- 
Luiz Augusto von Dentz
--
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