Re: [PATCH BlueZ] a2dp: Use streaming mode when MPS is enabled

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

 



Hi,

On Mon, Jun 8, 2020 at 1:26 PM Luiz Augusto von Dentz
<luiz.dentz@xxxxxxxxx> wrote:
>
> From: Luiz Augusto von Dentz <luiz.von.dentz@xxxxxxxxx>
>
> If MPS is enabled use L2CAP streaming mode for AVDTP channels.
> ---
>  profiles/audio/a2dp.c  |  8 ++++++++
>  profiles/audio/avdtp.c |  9 +++++++++
>  src/hcid.h             |  7 +++++++
>  src/main.c             | 16 ++++++----------
>  4 files changed, 30 insertions(+), 10 deletions(-)
>
> diff --git a/profiles/audio/a2dp.c b/profiles/audio/a2dp.c
> index 0a66589b0..f00e5c923 100644
> --- a/profiles/audio/a2dp.c
> +++ b/profiles/audio/a2dp.c
> @@ -43,6 +43,7 @@
>
>  #include "gdbus/gdbus.h"
>
> +#include "src/hcid.h"
>  #include "src/plugin.h"
>  #include "src/adapter.h"
>  #include "src/device.h"
> @@ -2331,14 +2332,21 @@ drop:
>  static bool a2dp_server_listen(struct a2dp_server *server)
>  {
>         GError *err = NULL;
> +       BtIOMode mode;
>
>         if (server->io)
>                 return true;
>
> +       if (main_opts.mps == MPS_OFF)
> +               mode = BT_IO_MODE_BASIC;
> +       else
> +               mode = BT_IO_MODE_STREAMING;
> +
>         server->io = bt_io_listen(NULL, confirm_cb, server, NULL, &err,
>                                 BT_IO_OPT_SOURCE_BDADDR,
>                                 btd_adapter_get_address(server->adapter),
>                                 BT_IO_OPT_PSM, AVDTP_PSM,
> +                               BT_IO_OPT_MODE, mode,
>                                 BT_IO_OPT_SEC_LEVEL, BT_IO_SEC_MEDIUM,
>                                 BT_IO_OPT_MASTER, true,
>                                 BT_IO_OPT_INVALID);
> diff --git a/profiles/audio/avdtp.c b/profiles/audio/avdtp.c
> index 45727f01e..e5193f79b 100644
> --- a/profiles/audio/avdtp.c
> +++ b/profiles/audio/avdtp.c
> @@ -42,6 +42,7 @@
>  #include "lib/uuid.h"
>
>  #include "btio/btio.h"
> +#include "src/hcid.h"
>  #include "src/log.h"
>  #include "src/shared/util.h"
>  #include "src/shared/queue.h"
> @@ -2406,9 +2407,15 @@ static GIOChannel *l2cap_connect(struct avdtp *session)
>         GError *err = NULL;
>         GIOChannel *io;
>         const bdaddr_t *src;
> +       BtIOMode mode;
>
>         src = btd_adapter_get_address(device_get_adapter(session->device));
>
> +       if (main_opts.mps == MPS_OFF)
> +               mode = BT_IO_MODE_BASIC;
> +       else
> +               mode = BT_IO_MODE_STREAMING;
> +
>         if (session->phy)
>                 io = bt_io_connect(avdtp_connect_cb, session,
>                                         NULL, &err,
> @@ -2416,6 +2423,7 @@ static GIOChannel *l2cap_connect(struct avdtp *session)
>                                         BT_IO_OPT_DEST_BDADDR,
>                                         device_get_address(session->device),
>                                         BT_IO_OPT_PSM, AVDTP_PSM,
> +                                       BT_IO_OPT_MODE, mode,
>                                         BT_IO_OPT_SEC_LEVEL, BT_IO_SEC_MEDIUM,
>                                         /* Set Input MTU to 0 to auto-tune */
>                                         BT_IO_OPT_IMTU, 0,
> @@ -2427,6 +2435,7 @@ static GIOChannel *l2cap_connect(struct avdtp *session)
>                                         BT_IO_OPT_DEST_BDADDR,
>                                         device_get_address(session->device),
>                                         BT_IO_OPT_PSM, AVDTP_PSM,
> +                                       BT_IO_OPT_MODE, mode,
>                                         BT_IO_OPT_SEC_LEVEL, BT_IO_SEC_MEDIUM,
>                                         BT_IO_OPT_INVALID);
>         if (!io) {
> diff --git a/src/hcid.h b/src/hcid.h
> index 56e2b4f31..1b2714b1d 100644
> --- a/src/hcid.h
> +++ b/src/hcid.h
> @@ -41,6 +41,12 @@ enum jw_repairing_t {
>         JW_REPAIRING_ALWAYS,
>  };
>
> +enum mps_mode_t {
> +       MPS_OFF,
> +       MPS_SINGLE,
> +       MPS_MULTIPLE,
> +};
> +
>  struct main_opts {
>         char            *name;
>         uint32_t        class;
> @@ -102,6 +108,7 @@ struct main_opts {
>         bt_gatt_cache_t gatt_cache;
>         uint16_t        gatt_mtu;
>         uint8_t         gatt_channels;
> +       enum mps_mode_t mps;
>
>         uint8_t         key_size;
>
> diff --git a/src/main.c b/src/main.c
> index 50e37e57a..e51f614b3 100644
> --- a/src/main.c
> +++ b/src/main.c
> @@ -74,12 +74,6 @@ struct main_opts main_opts;
>  static GKeyFile *main_conf;
>  static char *main_conf_file_path;
>
> -static enum {
> -       MPS_OFF,
> -       MPS_SINGLE,
> -       MPS_MULTIPLE,
> -} mps = MPS_OFF;
> -
>  static const char *supported_options[] = {
>         "Name",
>         "Class",
> @@ -583,9 +577,11 @@ static void parse_config(GKeyFile *config)
>                 DBG("MultiProfile=%s", str);
>
>                 if (!strcmp(str, "single"))
> -                       mps = MPS_SINGLE;
> +                       main_opts.mps = MPS_SINGLE;
>                 else if (!strcmp(str, "multiple"))
> -                       mps = MPS_MULTIPLE;
> +                       main_opts.mps = MPS_MULTIPLE;
> +               else
> +                       main_opts.mps = MPS_OFF;
>
>                 g_free(str);
>         }
> @@ -910,8 +906,8 @@ int main(int argc, char *argv[])
>                                                 main_opts.did_version);
>         }
>
> -       if (mps != MPS_OFF)
> -               register_mps(mps == MPS_MULTIPLE);
> +       if (main_opts.mps != MPS_OFF)
> +               register_mps(main_opts.mps == MPS_MULTIPLE);
>
>         /* Loading plugins has to be done after D-Bus has been setup since
>          * the plugins might wanna expose some paths on the bus. However the
> --
> 2.25.3
>

Pushed.

-- 
Luiz Augusto von Dentz



[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