Skip to content

Changed behaviour (2.1.3 vs 2.2.0) when retrieving remote descriptors #867

@gkoh

Description

@gkoh

After updating to v2.2.0, retrieving descriptors has changed behaviour due to 74ac317 (found via bisect).

In v2.1.3, the debug output for one particular characteristic looks like:

D NimBLERemoteCharacteristic: >> setNotify()
D NimBLERemoteCharacteristic: >> getDescriptor: uuid: 0x2902
D NimBLERemoteCharacteristic: >> retrieveDescriptors() for characteristic: 049ec406-ef75-4205-a390-08fe209c51f0
I (27700) NimBLE: GATT procedure initiated: discover all descriptors; 
I (27707) NimBLE: chr_val_handle=20562 end_handle=20738

D NimBLERemoteCharacteristic: Descriptor Discovery >> status: 0 handle: 20563
D NimBLERemoteCharacteristic: << Descriptor Discovery
D NimBLERemoteCharacteristic: << retrieveDescriptors(): found 1 descriptors.
D NimBLERemoteCharacteristic: << getDescriptor: found
D NimBLERemoteCharacteristic: << setNotify()
D NimBLERemoteValueAttribute: >> writeValue()
I (27805) NimBLE: GATT procedure initiated: write; 
I (27810) NimBLE: att_handle=20563 len=2

I NimBLERemoteValueAttribute: Write complete; status=0
D NimBLERemoteValueAttribute: << writeValue

The same scenario for v2.2.0:

D NimBLERemoteCharacteristic: >> setNotify()
D NimBLERemoteCharacteristic: >> getDescriptor: uuid: 0x2902
D NimBLERemoteCharacteristic: >> retrieveDescriptors() for characteristic: 049ec406-ef75-4205-a390-08fe209c51f0
I (29345) NimBLE: GATT procedure initiated: discover all descriptors; 
I (29352) NimBLE: chr_val_handle=20562 end_handle=20738

D NimBLERemoteCharacteristic: Descriptor Discovery >> status: 0 handle: 20563
D NimBLERemoteCharacteristic: Descriptor Discovery >> status: 0 handle: 20577
D NimBLERemoteCharacteristic: Descriptor Discovery >> status: 0 handle: 20578
D NimBLERemoteCharacteristic: Descriptor Discovery >> status: 0 handle: 20579
D NimBLERemoteCharacteristic: Descriptor Discovery >> status: 0 handle: 20593
D NimBLERemoteCharacteristic: Descriptor Discovery >> status: 0 handle: 20594
D NimBLERemoteCharacteristic: Descriptor Discovery >> status: 0 handle: 20595
D NimBLERemoteCharacteristic: Descriptor Discovery >> status: 0 handle: 20609
D NimBLERemoteCharacteristic: Descriptor Discovery >> status: 0 handle: 20610
D NimBLERemoteCharacteristic: Descriptor Discovery >> status: 0 handle: 20611
D NimBLERemoteCharacteristic: Descriptor Discovery >> status: 0 handle: 20625
D NimBLERemoteCharacteristic: Descriptor Discovery >> status: 0 handle: 20626
D NimBLERemoteCharacteristic: Descriptor Discovery >> status: 0 handle: 20737
D NimBLERemoteCharacteristic: Descriptor Discovery >> status: 0 handle: 20738
D NimBLERemoteCharacteristic: Descriptor Discovery >> status: 14 handle: -1
D NimBLERemoteCharacteristic: << Descriptor Discovery
D NimBLERemoteCharacteristic: << retrieveDescriptors(): found 4 descriptors.
D NimBLERemoteCharacteristic: << getDescriptor: found
D NimBLERemoteCharacteristic: << setNotify()
D NimBLERemoteValueAttribute: >> writeValue()
I (30132) NimBLE: GATT procedure initiated: write; 
I (30137) NimBLE: att_handle=20611 len=2

I NimBLERemoteValueAttribute: Write complete; status=0
D NimBLERemoteValueAttribute: << writeValue

Note that more descriptors are discovered and the found descriptor has a different attribute handle.
I found that if I remove this line:


the previous behaviour is restored.

I'm not sure if this is my problem (ie bad assumptions) or not.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions