Re: [PATCH BlueZ v2 3/3] client: Add support get/set PreferredBearer

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

 



Hi,

to, 2025-03-06 kello 11:41 -0500, Luiz Augusto von Dentz kirjoitti:
> On Sat, Mar 1, 2025 at 11:17 AM Pauli Virtanen <pav@xxxxxx> wrote:
> > 
> > ti, 2025-02-25 kello 17:12 -0500, Luiz Augusto von Dentz kirjoitti:
> > > Hi Pauli,
> > > 
> > > On Tue, Feb 25, 2025 at 5:10 PM Luiz Augusto von Dentz
> > > <luiz.dentz@xxxxxxxxx> wrote:
> > > > 
> > > > Hi Pauli, Bastien,
> > > > 
> > > > On Tue, Feb 25, 2025 at 5:01 PM Luiz Augusto von Dentz
> > > > <luiz.dentz@xxxxxxxxx> wrote:
> > > > > 
> > > > > From: Luiz Augusto von Dentz <luiz.von.dentz@xxxxxxxxx>
> > > > > 
> > > > > This adds support for PreferredBearer which is printed with the likes of
> > > > > info command:
> > > > > 
> > > > > bluetoothctl> info <addr>
> > > > > ...
> > > > >         PreferredBearer: last-seen
> > > > > 
> > > > > It also introduces a new command to get/set the PreferredBearer:
> > > > > 
> > > > > [bluetoothctl]> bearer --help
> > > > > Get/Set preferred bearer
> > > > > Usage:
> > > > >          bearer <dev> [last-seen/bredr/le]
> > > > > 
> > > > > [bluetoothctl]> bearer <addr>
> > > > >         PreferredBearer: last-seen
> > > > > [bluetoothctl]> bearer <addr> le
> > > > > bluetoothd: @ MGMT Command: Add Device (0x0033) plen 8
> > > > >         LE Address: <addr>
> > > > >         Action: Auto-connect remote device (0x02)
> > > > > [CHG] Device <addr> PreferredBearer: le
> > > > > Changing le succeeded
> > > > > [bluetoothctl]> bearer <addr>
> > > > >         PreferredBearer: le
> > > > > [bluetoothctl]> bearer <addr> bredr
> > > > > bluetoothd: @ MGMT Command: Remove Device (0x0034) plen 7
> > > > >         LE Address: <addr>
> > > > > [CHG] Device <addr> PreferredBearer: bredr
> > > > > Changing bredr succeeded
> > > > > ---
> > > > >  client/main.c | 27 +++++++++++++++++++++++++++
> > > > >  1 file changed, 27 insertions(+)
> > > > > 
> > > > > diff --git a/client/main.c b/client/main.c
> > > > > index feb21a1163d2..76c9bc329c96 100644
> > > > > --- a/client/main.c
> > > > > +++ b/client/main.c
> > > > > @@ -1714,6 +1714,7 @@ static void cmd_info(int argc, char *argv[])
> > > > >         print_property(proxy, "AdvertisingFlags");
> > > > >         print_property(proxy, "AdvertisingData");
> > > > >         print_property(proxy, "Sets");
> > > > > +       print_property(proxy, "PreferredBearer");
> > > > > 
> > > > >         battery_proxy = find_proxies_by_path(battery_proxies,
> > > > >                                         g_dbus_proxy_get_path(proxy));
> > > > > @@ -2086,6 +2087,30 @@ static void cmd_wake(int argc, char *argv[])
> > > > >         return bt_shell_noninteractive_quit(EXIT_FAILURE);
> > > > >  }
> > > > > 
> > > > > +static void cmd_bearer(int argc, char *argv[])
> > > > > +{
> > > > > +       GDBusProxy *proxy;
> > > > > +       char *str;
> > > > > +
> > > > > +       proxy = find_device(argc, argv);
> > > > > +       if (!proxy)
> > > > > +               return bt_shell_noninteractive_quit(EXIT_FAILURE);
> > > > > +
> > > > > +       if (argc <= 2) {
> > > > > +               print_property(proxy, "PreferredBearer");
> > > > > +               return;
> > > > > +       }
> > > > > +
> > > > > +       str = strdup(argv[2]);
> > > > > +
> > > > > +       if (g_dbus_proxy_set_property_basic(proxy, "PreferredBearer",
> > > > > +                                       DBUS_TYPE_STRING, &str,
> > > > > +                                       generic_callback, str, free))
> > > > > +               return;
> > > > > +
> > > > > +       return bt_shell_noninteractive_quit(EXIT_FAILURE);
> > > > > +}
> > > > > +
> > > > >  static void cmd_list_attributes(int argc, char *argv[])
> > > > >  {
> > > > >         GDBusProxy *proxy;
> > > > > @@ -3247,6 +3272,8 @@ static const struct bt_shell_menu main_menu = {
> > > > >                                                         dev_generator },
> > > > >         { "wake",         "[dev] [on/off]",    cmd_wake, "Get/Set wake support",
> > > > >                                                         dev_generator },
> > > > > +       { "bearer",       "<dev> [last-seen/bredr/le]", cmd_bearer,
> > > > > +                               "Get/Set preferred bearer", dev_generator },
> > > > >         { } },
> > > > >  };
> > > > > 
> > > > > --
> > > > > 2.48.1
> > > > 
> > > > So I went ahead and implemented the idea of having PreferredBearer,
> > > > this works great when setting bredr it really stops from connecting to
> > > > LE, the said the other way around when setting to le seems to confuse
> > > > some headsets like EarFun and it ends up connecting both bearers:
> > > > 
> > > > [EarFun Air Pro 3]> transport.show
> > > > Transport /org/bluez/hci0/dev_70_5A_6F_63_B6_41/pac_source0/fd1
> > > >     UUID: Sink PAC                  (00002bc9-0000-1000-8000-00805f9b34fb)
> > > >     Codec: 0x06 (6)
> > > >     Configuration.#0: len 0x02 type 0x01
> > > >     Configuration.Sampling Frequency: 16 Khz (0x03)
> > > >     Configuration.#1: len 0x02 type 0x02
> > > >     Configuration.Frame Duration: 7.5 ms (0x00)
> > > >     Configuration.#2: len 0x05 type 0x03
> > > >     Configuration.Location: 0x00000001
> > > >     Configuration.Location: Front Left (0x00000001)
> > > >     Configuration.#3: len 0x03 type 0x04
> > > >     Configuration.Frame Length: 30 (0x001e)
> > > >     Configuration.#4: len 0x02 type 0x05
> > > >     Configuration.Frame Blocks per SDU: 1 (0x01)
> > > >     Device: /org/bluez/hci0/dev_70_5A_6F_63_B6_41
> > > >     State: idle
> > > >     Volume: 0x00c8 (200)
> > > >     Endpoint: /org/bluez/hci0/dev_70_5A_6F_63_B6_41/pac_source0
> > > >     QoS.CIG: 0x00 (0)
> > > >     QoS.CIS: 0x00 (0)
> > > >     QoS.Framing: 0x00 (0)
> > > >     QoS.PresentationDelay: 0x00009c40 (40000)
> > > >     QoS.Interval: 0x00001d4c (7500)
> > > >     QoS.Latency: 0x0008 (8)
> > > >     QoS.SDU: 0x001e (30)
> > > >     QoS.PHY: 0x02 (2)
> > > >     QoS.Retransmissions: 0x02 (2)
> > > >     Location: 0x00000003 (3)
> > > >     Links: /org/bluez/hci0/dev_70_5A_6F_63_B6_41/pac_sink0/fd3
> > > > Transport /org/bluez/hci0/dev_70_5A_6F_63_B6_41/pac_source0/fd2
> > > >     UUID: Sink PAC                  (00002bc9-0000-1000-8000-00805f9b34fb)
> > > >     Codec: 0x06 (6)
> > > >     Configuration.#0: len 0x02 type 0x01
> > > >     Configuration.Sampling Frequency: 16 Khz (0x03)
> > > >     Configuration.#1: len 0x02 type 0x02
> > > >     Configuration.Frame Duration: 7.5 ms (0x00)
> > > >     Configuration.#2: len 0x05 type 0x03
> > > >     Configuration.Location: 0x00000002
> > > >     Configuration.Location: Front Right (0x00000002)
> > > >     Configuration.#3: len 0x03 type 0x04
> > > >     Configuration.Frame Length: 30 (0x001e)
> > > >     Configuration.#4: len 0x02 type 0x05
> > > >     Configuration.Frame Blocks per SDU: 1 (0x01)
> > > >     Device: /org/bluez/hci0/dev_70_5A_6F_63_B6_41
> > > >     State: idle
> > > >     Volume: 0x00c8 (200)
> > > >     Endpoint: /org/bluez/hci0/dev_70_5A_6F_63_B6_41/pac_source0
> > > >     QoS.CIG: 0x00 (0)
> > > >     QoS.CIS: 0x01 (1)
> > > >     QoS.Framing: 0x00 (0)
> > > >     QoS.PresentationDelay: 0x00009c40 (40000)
> > > >     QoS.Interval: 0x00001d4c (7500)
> > > >     QoS.Latency: 0x0008 (8)
> > > >     QoS.SDU: 0x001e (30)
> > > >     QoS.PHY: 0x02 (2)
> > > >     QoS.Retransmissions: 0x02 (2)
> > > >     Location: 0x00000003 (3)
> > > >     Links: /org/bluez/hci0/dev_70_5A_6F_63_B6_41/pac_sink0/fd4
> > > > Transport /org/bluez/hci0/dev_70_5A_6F_63_B6_41/pac_sink0/fd3
> > > >     UUID: Source PAC                (00002bcb-0000-1000-8000-00805f9b34fb)
> > > >     Codec: 0x06 (6)
> > > >     Configuration.#0: len 0x02 type 0x01
> > > >     Configuration.Sampling Frequency: 48 Khz (0x08)
> > > >     Configuration.#1: len 0x02 type 0x02
> > > >     Configuration.Frame Duration: 7.5 ms (0x00)
> > > >     Configuration.#2: len 0x05 type 0x03
> > > >     Configuration.Location: 0x00000001
> > > >     Configuration.Location: Front Left (0x00000001)
> > > >     Configuration.#3: len 0x03 type 0x04
> > > >     Configuration.Frame Length: 90 (0x005a)
> > > >     Configuration.#4: len 0x02 type 0x05
> > > >     Configuration.Frame Blocks per SDU: 1 (0x01)
> > > >     Device: /org/bluez/hci0/dev_70_5A_6F_63_B6_41
> > > >     State: idle
> > > >     Volume: 0x00c8 (200)
> > > >     Endpoint: /org/bluez/hci0/dev_70_5A_6F_63_B6_41/pac_sink0
> > > >     QoS.CIG: 0x00 (0)
> > > >     QoS.CIS: 0x00 (0)
> > > >     QoS.Framing: 0x00 (0)
> > > >     QoS.PresentationDelay: 0x00009c40 (40000)
> > > >     QoS.Interval: 0x00001d4c (7500)
> > > >     QoS.Latency: 0x000f (15)
> > > >     QoS.SDU: 0x005a (90)
> > > >     QoS.PHY: 0x02 (2)
> > > >     QoS.Retransmissions: 0x05 (5)
> > > >     Location: 0x00000003 (3)
> > > >     Links: /org/bluez/hci0/dev_70_5A_6F_63_B6_41/pac_source0/fd1
> > > > Transport /org/bluez/hci0/dev_70_5A_6F_63_B6_41/pac_sink0/fd4
> > > >     UUID: Source PAC                (00002bcb-0000-1000-8000-00805f9b34fb)
> > > >     Codec: 0x06 (6)
> > > >     Configuration.#0: len 0x02 type 0x01
> > > >     Configuration.Sampling Frequency: 48 Khz (0x08)
> > > >     Configuration.#1: len 0x02 type 0x02
> > > >     Configuration.Frame Duration: 7.5 ms (0x00)
> > > >     Configuration.#2: len 0x05 type 0x03
> > > >     Configuration.Location: 0x00000002
> > > >     Configuration.Location: Front Right (0x00000002)
> > > >     Configuration.#3: len 0x03 type 0x04
> > > >     Configuration.Frame Length: 90 (0x005a)
> > > >     Configuration.#4: len 0x02 type 0x05
> > > >     Configuration.Frame Blocks per SDU: 1 (0x01)
> > > >     Device: /org/bluez/hci0/dev_70_5A_6F_63_B6_41
> > > >     State: idle
> > > >     Volume: 0x00c8 (200)
> > > >     Endpoint: /org/bluez/hci0/dev_70_5A_6F_63_B6_41/pac_sink0
> > > >     QoS.CIG: 0x00 (0)
> > > >     QoS.CIS: 0x01 (1)
> > > >     QoS.Framing: 0x00 (0)
> > > >     QoS.PresentationDelay: 0x00009c40 (40000)
> > > >     QoS.Interval: 0x00001d4c (7500)
> > > >     QoS.Latency: 0x000f (15)
> > > >     QoS.SDU: 0x005a (90)
> > > >     QoS.PHY: 0x02 (2)
> > > >     QoS.Retransmissions: 0x05 (5)
> > > >     Location: 0x00000003 (3)
> > > >     Links: /org/bluez/hci0/dev_70_5A_6F_63_B6_41/pac_source0/fd2
> > > > Transport /org/bluez/hci0/dev_70_5A_6F_63_B6_41/fd5
> > > >     UUID: Audio Source              (0000110a-0000-1000-8000-00805f9b34fb)
> > > >     Codec: 0x02 (2)
> > > >     Media Codec: MPEG24
> > > >     Object Types: MPEG-4 AAC LC
> > > >     Frequencies: 48kHz
> > > >     Channels: 2
> > > >     Bitrate: 320000
> > > >     VBR: Yes
> > > >     Device: /org/bluez/hci0/dev_70_5A_6F_63_B6_41
> > > >     State: idle
> > > >     Delay: 0x0960 (2400)
> > > >     Volume: 0x0064 (100)
> > > 
> > > Forgot to mention, but with the above transports it seems to confuse
> > > the gnome audio output selection, it doesn't seem to be able to mix
> > > A2DP and BAP transports for some reason, so when I select the device
> > > it enables BAP but A2DP is not shown as an option.
> > 
> > I'll have to see if I can reproduce that on current PW master branch.
> > 
> > The visibility of profiles in theory should only cares about whether
> > the UUIDs appear in both device properties and transport.
> 
> I think I will merge these changes since the property is marked as
> experimental; we can always change it or revert later.

Since the default value retains previous behavior, I think that's a
good idea as it makes it easier to iterate on this.

-- 
Pauli Virtanen





[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