Re: [PATCH BlueZ] core: Prefer BR/EDR over LE if it set in advertisement flag

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

 



Hi Luiz,

I found that this patch stops me to test connect GDBus API, especially
connecting to BLE device.

After calling scan dbus api, bredr_last and le_last are updated at the
same time  when update_found_devices() got called.
Then connecting to ble device is failed because bredr_last and le_last
has no differences and this leads changing bdaddr type to bredr which
is wrong in this case.

Please consider my analysis.

Thanks in advance,
SLKI

On Fri, Aug 12, 2016 at 5:00 PM, Luiz Augusto von Dentz
<luiz.dentz@xxxxxxxxx> wrote:
> Hi,
>
> On Wed, Aug 10, 2016 at 4:25 PM, Luiz Augusto von Dentz
> <luiz.dentz@xxxxxxxxx> wrote:
>> From: Luiz Augusto von Dentz <luiz.von.dentz@xxxxxxxxx>
>>
>> This makes the code prefer BR/EDR if the last advertisement has it set
>> in the flags.
>> ---
>>  src/adapter.c | 5 ++++-
>>  src/device.c  | 6 +++++-
>>  2 files changed, 9 insertions(+), 2 deletions(-)
>>
>> diff --git a/src/adapter.c b/src/adapter.c
>> index 3742398..ddabf2d 100644
>> --- a/src/adapter.c
>> +++ b/src/adapter.c
>> @@ -5488,8 +5488,11 @@ static void update_found_devices(struct btd_adapter *adapter,
>>          * supports this we can make the non-zero check conditional.
>>          */
>>         if (bdaddr_type != BDADDR_BREDR && eir_data.flags &&
>> -                                       !(eir_data.flags & EIR_BREDR_UNSUP))
>> +                                       !(eir_data.flags & EIR_BREDR_UNSUP)) {
>>                 device_set_bredr_support(dev);
>> +               /* Update last seen for BR/EDR in case its flag is set */
>> +               device_update_last_seen(dev, BDADDR_BREDR);
>> +       }
>>
>>         if (eir_data.name != NULL && eir_data.name_complete)
>>                 device_store_cached_name(dev, eir_data.name);
>> diff --git a/src/device.c b/src/device.c
>> index 264d599..6c6be92 100644
>> --- a/src/device.c
>> +++ b/src/device.c
>> @@ -1763,7 +1763,11 @@ static uint8_t select_conn_bearer(struct btd_device *dev)
>>         if (dev->le && (!dev->bredr || bredr_last == NVAL_TIME))
>>                 return dev->bdaddr_type;
>>
>> -       if (bredr_last < le_last)
>> +       /*
>> +        * Prefer BR/EDR if time is the same since it might be from an
>> +        * advertisement with BR/EDR flag set.
>> +        */
>> +       if (bredr_last <= le_last)
>>                 return BDADDR_BREDR;
>>
>>         return dev->bdaddr_type;
>> --
>> 2.7.4
>
> Applied.
>
>
> --
> 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
--
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