2020-05-27 22:44:31

by Luiz Augusto von Dentz

[permalink] [raw]
Subject: [PATCH BlueZ] avrcp: Fix always requesting player settings for category 1

From: Luiz Augusto von Dentz <[email protected]>

Player Application settings is not mandatory for category 1 so instead
of always listing the settings the code now checks if
AVRCP_FEATURE_PLAYER_SETTINGS is enabled.
---
profiles/audio/avrcp.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/profiles/audio/avrcp.c b/profiles/audio/avrcp.c
index 773ccdb60..75811bf98 100644
--- a/profiles/audio/avrcp.c
+++ b/profiles/audio/avrcp.c
@@ -3814,7 +3814,8 @@ static gboolean avrcp_get_capabilities_resp(struct avctp *conn, uint8_t code,
if (!session->controller || !session->controller->player)
return FALSE;

- if (!(events & (1 << AVRCP_EVENT_SETTINGS_CHANGED)))
+ if ((session->controller->features & AVRCP_FEATURE_PLAYER_SETTINGS) &&
+ !(events & (1 << AVRCP_EVENT_SETTINGS_CHANGED)))
avrcp_list_player_attributes(session);

if (!(events & (1 << AVRCP_EVENT_STATUS_CHANGED)))
--
2.25.3


2020-05-27 22:47:54

by Luiz Augusto von Dentz

[permalink] [raw]
Subject: Re: [PATCH BlueZ] avrcp: Fix always requesting player settings for category 1

On Wed, May 27, 2020 at 3:43 PM Luiz Augusto von Dentz
<[email protected]> wrote:
>
> From: Luiz Augusto von Dentz <[email protected]>
>
> Player Application settings is not mandatory for category 1 so instead
> of always listing the settings the code now checks if
> AVRCP_FEATURE_PLAYER_SETTINGS is enabled.
> ---
> profiles/audio/avrcp.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/profiles/audio/avrcp.c b/profiles/audio/avrcp.c
> index 773ccdb60..75811bf98 100644
> --- a/profiles/audio/avrcp.c
> +++ b/profiles/audio/avrcp.c
> @@ -3814,7 +3814,8 @@ static gboolean avrcp_get_capabilities_resp(struct avctp *conn, uint8_t code,
> if (!session->controller || !session->controller->player)
> return FALSE;
>
> - if (!(events & (1 << AVRCP_EVENT_SETTINGS_CHANGED)))
> + if ((session->controller->features & AVRCP_FEATURE_PLAYER_SETTINGS) &&
> + !(events & (1 << AVRCP_EVENT_SETTINGS_CHANGED)))
> avrcp_list_player_attributes(session);
>
> if (!(events & (1 << AVRCP_EVENT_STATUS_CHANGED)))
> --
> 2.25.3

Please let me know if you are able to test the above patch, it should
fix the problem with Senheisers headsets if the are not setting the
Player Settings bits this would prevent the command to be send so it
doesn't crash.

--
Luiz Augusto von Dentz

2020-05-28 00:24:20

by Andrey Semashev

[permalink] [raw]
Subject: Re: [PATCH BlueZ] avrcp: Fix always requesting player settings for category 1

On 2020-05-28 01:46, Luiz Augusto von Dentz wrote:
> On Wed, May 27, 2020 at 3:43 PM Luiz Augusto von Dentz
> <[email protected]> wrote:
>>
>> From: Luiz Augusto von Dentz <[email protected]>
>>
>> Player Application settings is not mandatory for category 1 so instead
>> of always listing the settings the code now checks if
>> AVRCP_FEATURE_PLAYER_SETTINGS is enabled.
>> ---
>> profiles/audio/avrcp.c | 3 ++-
>> 1 file changed, 2 insertions(+), 1 deletion(-)
>>
>> diff --git a/profiles/audio/avrcp.c b/profiles/audio/avrcp.c
>> index 773ccdb60..75811bf98 100644
>> --- a/profiles/audio/avrcp.c
>> +++ b/profiles/audio/avrcp.c
>> @@ -3814,7 +3814,8 @@ static gboolean avrcp_get_capabilities_resp(struct avctp *conn, uint8_t code,
>> if (!session->controller || !session->controller->player)
>> return FALSE;
>>
>> - if (!(events & (1 << AVRCP_EVENT_SETTINGS_CHANGED)))
>> + if ((session->controller->features & AVRCP_FEATURE_PLAYER_SETTINGS) &&
>> + !(events & (1 << AVRCP_EVENT_SETTINGS_CHANGED)))
>> avrcp_list_player_attributes(session);
>>
>> if (!(events & (1 << AVRCP_EVENT_STATUS_CHANGED)))
>> --
>> 2.25.3
>
> Please let me know if you are able to test the above patch, it should
> fix the problem with Senheisers headsets if the are not setting the
> Player Settings bits this would prevent the command to be send so it
> doesn't crash.
>

I'll try it with Momentum True Wireless 2 tomorrow.

2020-05-28 00:24:20

by Andrey Semashev

[permalink] [raw]
Subject: Re: [PATCH BlueZ] avrcp: Fix always requesting player settings for category 1

On 2020-05-28 01:46, Luiz Augusto von Dentz wrote:
> On Wed, May 27, 2020 at 3:43 PM Luiz Augusto von Dentz
> <[email protected]> wrote:
>>
>> From: Luiz Augusto von Dentz <[email protected]>
>>
>> Player Application settings is not mandatory for category 1 so instead
>> of always listing the settings the code now checks if
>> AVRCP_FEATURE_PLAYER_SETTINGS is enabled.
>> ---
>> profiles/audio/avrcp.c | 3 ++-
>> 1 file changed, 2 insertions(+), 1 deletion(-)
>>
>> diff --git a/profiles/audio/avrcp.c b/profiles/audio/avrcp.c
>> index 773ccdb60..75811bf98 100644
>> --- a/profiles/audio/avrcp.c
>> +++ b/profiles/audio/avrcp.c
>> @@ -3814,7 +3814,8 @@ static gboolean avrcp_get_capabilities_resp(struct avctp *conn, uint8_t code,
>> if (!session->controller || !session->controller->player)
>> return FALSE;
>>
>> - if (!(events & (1 << AVRCP_EVENT_SETTINGS_CHANGED)))
>> + if ((session->controller->features & AVRCP_FEATURE_PLAYER_SETTINGS) &&
>> + !(events & (1 << AVRCP_EVENT_SETTINGS_CHANGED)))
>> avrcp_list_player_attributes(session);
>>
>> if (!(events & (1 << AVRCP_EVENT_STATUS_CHANGED)))
>> --
>> 2.25.3
>
> Please let me know if you are able to test the above patch, it should
> fix the problem with Senheisers headsets if the are not setting the
> Player Settings bits this would prevent the command to be send so it
> doesn't crash.
>

I'll try it with Momentum True Wireless 2 tomorrow.

2020-05-28 14:32:06

by Andrey Semashev

[permalink] [raw]
Subject: Re: [PATCH BlueZ] avrcp: Fix always requesting player settings for category 1

On 2020-05-28 03:23, Andrey Semashev wrote:
> On 2020-05-28 01:46, Luiz Augusto von Dentz wrote:
>> On Wed, May 27, 2020 at 3:43 PM Luiz Augusto von Dentz
>> <[email protected]> wrote:
>>>
>>> From: Luiz Augusto von Dentz <[email protected]>
>>>
>>> Player Application settings is not mandatory for category 1 so instead
>>> of always listing the settings the code now checks if
>>> AVRCP_FEATURE_PLAYER_SETTINGS is enabled.
>>> ---
>>>   profiles/audio/avrcp.c | 3 ++-
>>>   1 file changed, 2 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/profiles/audio/avrcp.c b/profiles/audio/avrcp.c
>>> index 773ccdb60..75811bf98 100644
>>> --- a/profiles/audio/avrcp.c
>>> +++ b/profiles/audio/avrcp.c
>>> @@ -3814,7 +3814,8 @@ static gboolean
>>> avrcp_get_capabilities_resp(struct avctp *conn, uint8_t code,
>>>          if (!session->controller || !session->controller->player)
>>>                  return FALSE;
>>>
>>> -       if (!(events & (1 << AVRCP_EVENT_SETTINGS_CHANGED)))
>>> +       if ((session->controller->features &
>>> AVRCP_FEATURE_PLAYER_SETTINGS) &&
>>> +                       !(events & (1 << AVRCP_EVENT_SETTINGS_CHANGED)))
>>>                  avrcp_list_player_attributes(session);
>>>
>>>          if (!(events & (1 << AVRCP_EVENT_STATUS_CHANGED)))
>>> --
>>> 2.25.3
>>
>> Please let me know if you are able to test the above patch, it should
>> fix the problem with Senheisers headsets if the are not setting the
>> Player Settings bits this would prevent the command to be send so it
>> doesn't crash.
>>
>
> I'll try it with Momentum True Wireless 2 tomorrow.

The headset still reboots while trying to connect, although now it
reboots after receiving AVRCP GetPlayStatus.

I'm attaching packet dumps in btsnoop and pcap formats.


Attachments:
mtw2.btsnoop (11.66 kB)
mtw2.pcapng (15.04 kB)
Download all attachments