2016-03-02 07:31:58

by François Beaufort

[permalink] [raw]
Subject: Write should return error if device is disconnected while expecting a response

When writing to a characteristic and that a disconnection happens
before getting a write (error) response, BlueZ should inform that
write operation failed.
See my real example logs below:

[DFU_Test:/service000c/char000d]# write 01 04
Attempting to write /org/bluez/hci0/dev_F1_6F_DE_EC_F1_D6/service000c/char000d



< ACL Data TX: Handle 32 flags 0x00 dlen 9
[hci0] 5.066808
ATT: Write Request (0x12) len 4
Handle: 0x000e
Data: 0104
> HCI Event: Number of Completed Packets (0x13) plen 5 [hci0] 5.106370
Num handles: 1
Handle: 32
Count: 1
> HCI Event: Vendor (0xff) plen 7 [hci0] 5.579396
82 12 95 40 10 36 59 [email protected]
> HCI Event: Disconnect Complete (0x05) plen 4 [hci0] 5.580376
Status: Success (0x00)
Handle: 32
Reason: Connection Timeout (0x08)
@ Device Disconnected: F1:6F:DE:EC:F1:D6 (2) reason 1


2016-03-10 09:27:04

by François Beaufort

[permalink] [raw]
Subject: Re: Write should return error if device is disconnected while expecting a response

And I've just tried with latest trunk and it works perfectly!
Thank you Luiz!


[DFU_Test:/service000c/char000d]# write 01 04
Attempting to write /org/bluez/hci0/dev_F1_6F_DE_EC_F1_D6/service000c/char000d
[CHG] Device F1:6F:DE:EC:F1:D6 Connected: no
Failed to write: org.bluez.Error.Failed

On Wed, Mar 9, 2016 at 1:17 PM, François Beaufort
<[email protected]> wrote:
> Thank you so much Luiz,
> I'm going to test this tomorrow.
>
> In the mean time, which patches should be applied now if we want to
> fix this in Chrome OS BlueZ?
>
> On Wed, Mar 9, 2016 at 11:53 AM, Luiz Augusto von Dentz
> <[email protected]> wrote:
>> Hi François,
>>
>> On Mon, Mar 7, 2016 at 5:54 PM, Luiz Augusto von Dentz
>> <[email protected]> wrote:
>>> Hi François,
>>>
>>> On Mon, Mar 7, 2016 at 5:36 PM, François Beaufort
>>> <[email protected]> wrote:
>>>> (gentle ping)
>>>>
>>>> On Thu, Mar 3, 2016 at 10:46 AM, François Beaufort
>>>> <[email protected]> wrote:
>>>>> Since I'm expecting a response and device gets disconnected, I should
>>>>> get a write error don't you think?
>>>
>>> Yes, it should probably return and error so the client is not left
>>> hanging. I will investigate how this can be fixed.
>>
>> This should be fixed upstream, it will be part of 5.38 which should be
>> coming out soon.
>>
>> --
>> Luiz Augusto von Dentz

2016-03-09 12:17:56

by François Beaufort

[permalink] [raw]
Subject: Re: Write should return error if device is disconnected while expecting a response

Thank you so much Luiz,
I'm going to test this tomorrow.

In the mean time, which patches should be applied now if we want to
fix this in Chrome OS BlueZ?

On Wed, Mar 9, 2016 at 11:53 AM, Luiz Augusto von Dentz
<[email protected]> wrote:
> Hi François,
>
> On Mon, Mar 7, 2016 at 5:54 PM, Luiz Augusto von Dentz
> <[email protected]> wrote:
>> Hi François,
>>
>> On Mon, Mar 7, 2016 at 5:36 PM, François Beaufort
>> <[email protected]> wrote:
>>> (gentle ping)
>>>
>>> On Thu, Mar 3, 2016 at 10:46 AM, François Beaufort
>>> <[email protected]> wrote:
>>>> Since I'm expecting a response and device gets disconnected, I should
>>>> get a write error don't you think?
>>
>> Yes, it should probably return and error so the client is not left
>> hanging. I will investigate how this can be fixed.
>
> This should be fixed upstream, it will be part of 5.38 which should be
> coming out soon.
>
> --
> Luiz Augusto von Dentz

2016-03-09 10:53:04

by Luiz Augusto von Dentz

[permalink] [raw]
Subject: Re: Write should return error if device is disconnected while expecting a response

Hi François,

On Mon, Mar 7, 2016 at 5:54 PM, Luiz Augusto von Dentz
<[email protected]> wrote:
> Hi François,
>
> On Mon, Mar 7, 2016 at 5:36 PM, François Beaufort
> <[email protected]> wrote:
>> (gentle ping)
>>
>> On Thu, Mar 3, 2016 at 10:46 AM, François Beaufort
>> <[email protected]> wrote:
>>> Since I'm expecting a response and device gets disconnected, I should
>>> get a write error don't you think?
>
> Yes, it should probably return and error so the client is not left
> hanging. I will investigate how this can be fixed.

This should be fixed upstream, it will be part of 5.38 which should be
coming out soon.

--
Luiz Augusto von Dentz

2016-03-07 15:54:49

by Luiz Augusto von Dentz

[permalink] [raw]
Subject: Re: Write should return error if device is disconnected while expecting a response

Hi François,

On Mon, Mar 7, 2016 at 5:36 PM, François Beaufort
<[email protected]> wrote:
> (gentle ping)
>
> On Thu, Mar 3, 2016 at 10:46 AM, François Beaufort
> <[email protected]> wrote:
>> Since I'm expecting a response and device gets disconnected, I should
>> get a write error don't you think?

Yes, it should probably return and error so the client is not left
hanging. I will investigate how this can be fixed.

--
Luiz Augusto von Dentz

2016-03-07 15:36:25

by François Beaufort

[permalink] [raw]
Subject: Re: Write should return error if device is disconnected while expecting a response

(gentle ping)

On Thu, Mar 3, 2016 at 10:46 AM, François Beaufort
<[email protected]> wrote:
> Since I'm expecting a response and device gets disconnected, I should
> get a write error don't you think?
>
> On Wed, Mar 2, 2016 at 4:19 PM, François Beaufort
> <[email protected]> wrote:
>> It does:
>>
>> [DFU_Test:/service000c/char000d]# write 01 04
>> Attempting to write /org/bluez/hci0/dev_F1_6F_DE_EC_F1_D6/service000c/char000d
>> [CHG] Device F1:6F:DE:EC:F1:D6 Connected: no
>> [CHG] Device F1:6F:DE:EC:F1:D6 Connected: yes
>> [CHG] Device F1:6F:DE:EC:F1:D6 Name: DfuTarg
>> [CHG] Device F1:6F:DE:EC:F1:D6 Alias: DfuTarg
>>
>> On Wed, Mar 2, 2016 at 2:31 PM, Luiz Augusto von Dentz
>> <[email protected]> wrote:
>>> Hi François,
>>>
>>> On Wed, Mar 2, 2016 at 9:31 AM, François Beaufort
>>> <[email protected]> wrote:
>>>> When writing to a characteristic and that a disconnection happens
>>>> before getting a write (error) response, BlueZ should inform that
>>>> write operation failed.
>>>> See my real example logs below:
>>>>
>>>> [DFU_Test:/service000c/char000d]# write 01 04
>>>> Attempting to write /org/bluez/hci0/dev_F1_6F_DE_EC_F1_D6/service000c/char000d
>>>>
>>>>
>>>>
>>>> < ACL Data TX: Handle 32 flags 0x00 dlen 9
>>>> [hci0] 5.066808
>>>> ATT: Write Request (0x12) len 4
>>>> Handle: 0x000e
>>>> Data: 0104
>>>>> HCI Event: Number of Completed Packets (0x13) plen 5 [hci0] 5.106370
>>>> Num handles: 1
>>>> Handle: 32
>>>> Count: 1
>>>>> HCI Event: Vendor (0xff) plen 7 [hci0] 5.579396
>>>> 82 12 95 40 10 36 59 [email protected]
>>>>> HCI Event: Disconnect Complete (0x05) plen 4 [hci0] 5.580376
>>>> Status: Success (0x00)
>>>> Handle: 32
>>>> Reason: Connection Timeout (0x08)
>>>> @ Device Disconnected: F1:6F:DE:EC:F1:D6 (2) reason 1
>>>
>>> Interesting, does bluetoothctl print anything after this?
>>>
>>> --
>>> Luiz Augusto von Dentz

2016-03-03 09:46:50

by François Beaufort

[permalink] [raw]
Subject: Re: Write should return error if device is disconnected while expecting a response

Since I'm expecting a response and device gets disconnected, I should
get a write error don't you think?

On Wed, Mar 2, 2016 at 4:19 PM, François Beaufort
<[email protected]> wrote:
> It does:
>
> [DFU_Test:/service000c/char000d]# write 01 04
> Attempting to write /org/bluez/hci0/dev_F1_6F_DE_EC_F1_D6/service000c/char000d
> [CHG] Device F1:6F:DE:EC:F1:D6 Connected: no
> [CHG] Device F1:6F:DE:EC:F1:D6 Connected: yes
> [CHG] Device F1:6F:DE:EC:F1:D6 Name: DfuTarg
> [CHG] Device F1:6F:DE:EC:F1:D6 Alias: DfuTarg
>
> On Wed, Mar 2, 2016 at 2:31 PM, Luiz Augusto von Dentz
> <[email protected]> wrote:
>> Hi François,
>>
>> On Wed, Mar 2, 2016 at 9:31 AM, François Beaufort
>> <[email protected]> wrote:
>>> When writing to a characteristic and that a disconnection happens
>>> before getting a write (error) response, BlueZ should inform that
>>> write operation failed.
>>> See my real example logs below:
>>>
>>> [DFU_Test:/service000c/char000d]# write 01 04
>>> Attempting to write /org/bluez/hci0/dev_F1_6F_DE_EC_F1_D6/service000c/char000d
>>>
>>>
>>>
>>> < ACL Data TX: Handle 32 flags 0x00 dlen 9
>>> [hci0] 5.066808
>>> ATT: Write Request (0x12) len 4
>>> Handle: 0x000e
>>> Data: 0104
>>>> HCI Event: Number of Completed Packets (0x13) plen 5 [hci0] 5.106370
>>> Num handles: 1
>>> Handle: 32
>>> Count: 1
>>>> HCI Event: Vendor (0xff) plen 7 [hci0] 5.579396
>>> 82 12 95 40 10 36 59 [email protected]
>>>> HCI Event: Disconnect Complete (0x05) plen 4 [hci0] 5.580376
>>> Status: Success (0x00)
>>> Handle: 32
>>> Reason: Connection Timeout (0x08)
>>> @ Device Disconnected: F1:6F:DE:EC:F1:D6 (2) reason 1
>>
>> Interesting, does bluetoothctl print anything after this?
>>
>> --
>> Luiz Augusto von Dentz

2016-03-02 15:19:45

by François Beaufort

[permalink] [raw]
Subject: Re: Write should return error if device is disconnected while expecting a response

It does:

[DFU_Test:/service000c/char000d]# write 01 04
Attempting to write /org/bluez/hci0/dev_F1_6F_DE_EC_F1_D6/service000c/char000d
[CHG] Device F1:6F:DE:EC:F1:D6 Connected: no
[CHG] Device F1:6F:DE:EC:F1:D6 Connected: yes
[CHG] Device F1:6F:DE:EC:F1:D6 Name: DfuTarg
[CHG] Device F1:6F:DE:EC:F1:D6 Alias: DfuTarg

On Wed, Mar 2, 2016 at 2:31 PM, Luiz Augusto von Dentz
<[email protected]> wrote:
> Hi François,
>
> On Wed, Mar 2, 2016 at 9:31 AM, François Beaufort
> <[email protected]> wrote:
>> When writing to a characteristic and that a disconnection happens
>> before getting a write (error) response, BlueZ should inform that
>> write operation failed.
>> See my real example logs below:
>>
>> [DFU_Test:/service000c/char000d]# write 01 04
>> Attempting to write /org/bluez/hci0/dev_F1_6F_DE_EC_F1_D6/service000c/char000d
>>
>>
>>
>> < ACL Data TX: Handle 32 flags 0x00 dlen 9
>> [hci0] 5.066808
>> ATT: Write Request (0x12) len 4
>> Handle: 0x000e
>> Data: 0104
>>> HCI Event: Number of Completed Packets (0x13) plen 5 [hci0] 5.106370
>> Num handles: 1
>> Handle: 32
>> Count: 1
>>> HCI Event: Vendor (0xff) plen 7 [hci0] 5.579396
>> 82 12 95 40 10 36 59 [email protected]
>>> HCI Event: Disconnect Complete (0x05) plen 4 [hci0] 5.580376
>> Status: Success (0x00)
>> Handle: 32
>> Reason: Connection Timeout (0x08)
>> @ Device Disconnected: F1:6F:DE:EC:F1:D6 (2) reason 1
>
> Interesting, does bluetoothctl print anything after this?
>
> --
> Luiz Augusto von Dentz

2016-03-02 13:31:04

by Luiz Augusto von Dentz

[permalink] [raw]
Subject: Re: Write should return error if device is disconnected while expecting a response

Hi François,

On Wed, Mar 2, 2016 at 9:31 AM, François Beaufort
<[email protected]> wrote:
> When writing to a characteristic and that a disconnection happens
> before getting a write (error) response, BlueZ should inform that
> write operation failed.
> See my real example logs below:
>
> [DFU_Test:/service000c/char000d]# write 01 04
> Attempting to write /org/bluez/hci0/dev_F1_6F_DE_EC_F1_D6/service000c/char000d
>
>
>
> < ACL Data TX: Handle 32 flags 0x00 dlen 9
> [hci0] 5.066808
> ATT: Write Request (0x12) len 4
> Handle: 0x000e
> Data: 0104
>> HCI Event: Number of Completed Packets (0x13) plen 5 [hci0] 5.106370
> Num handles: 1
> Handle: 32
> Count: 1
>> HCI Event: Vendor (0xff) plen 7 [hci0] 5.579396
> 82 12 95 40 10 36 59 [email protected]
>> HCI Event: Disconnect Complete (0x05) plen 4 [hci0] 5.580376
> Status: Success (0x00)
> Handle: 32
> Reason: Connection Timeout (0x08)
> @ Device Disconnected: F1:6F:DE:EC:F1:D6 (2) reason 1

Interesting, does bluetoothctl print anything after this?

--
Luiz Augusto von Dentz