Missing Notification Callbacks


#1

I have several characteristics with the NOTIFY property. When setting this to “GATT_CLIENT_CHARACTERISTICS_CONFIGURATION_NOTIFICATION” using
writeClientCharsConfigDescriptor() there is no callback onGattWriteClientCharacteristicConfigCallback(). And of coarse no actual notifications either.

However if I set it to “GATT_CLIENT_CHARACTERISTICS_CONFIGURATION_NONE” I get a call back with a status of 4 - “BLE_STATUS_OTHER_ERROR”.

I can read / write to these characteristics successfully, I am only having issues with notifications. The characteristic definitely has a functioning notification property because I can subscribe to it with other BLE devices (SiLabs BGAPI as well as different BLE apps for Android for example) so there must be something I am doing wrong here. I am following the “SimpleBLECentral” example as a guide. How can I track down what the stack is doing (or not doing)? If I enable debug output it is not clear how to decode that information.

The call is:
ble.writeClientCharsConfigDescriptor(con_handle, &c, GATT_CLIENT_CHARACTERISTICS_CONFIGURATION_NOTIFICATION);

-AP


#2

Hi @panda,

Could you post the debug log, so that @mringwal may have some comments on it.

Besides, make sure that the characteristics is with NOTIFY property, instead of the INDICATE property.

Best regards,
Guohui


#3

There is actually NO debug output when I call writeClientCharsConfigDescriptor() with GATT_CLIENT_CHARACTERISTICS_CONFIGURATION_NOTIFICATION. Perhaps that alone suggest something. And yes it is definitely a NOTIFY characteristic and not an INDICATE.

When calling with GATT_CLIENT_CHARACTERISTICS_CONFIGURATION_NONE I get:

ACL => 40 00 0B 00 07 00 04 00 08 02 20 11 3C 02 29
EVT <= 6E 00
ACL <= 40 20 09 00 05 00 04 00 01 08 02 20 0A
EVT <= 13 05 01 40 00 01 00


#4

Hi @panda,

Perhaps you can utilize another Duo as the BLE Peripheral, which implements a characteristic with NOTIFY property, and then the Duo acting as the Central reproduces the same procedure to the peer Duo. Maybe there is something related to the GATT server side causing this issue. I’m not complaining about the Peripheral devices you are using, just try to target the issue.

Best regards,
Guohui


#5

I am pretty sure there is an error in that debug output I gave you for setting GATT_CLIENT_CHARACTERISTICS_CONFIGURATION_NONE. Can you decode that? The error that comes into the callback status is “0x04” or “BLE_STATUS_OTHER_ERROR”. Is there perhaps more info in the debug?

Might give me a clue as to the issue.

-AP


#6

Hi @panda, Is there log when writing the CCCD with GATT_CLIENT_CHARACTERISTICS_CONFIGURATION_NOTIFICATION?

@mringwal, Any idea?


#7

Sorry for the long pause on this. I was able to get this to work, but the solution is as troubling as the problem.

If I simply change the timing of when I call ble.init() in my startup then it will affect if setting notifications works or not. Just as I had issues with setting the scan window after init (see my earlier posts on this topic) there appears to be a timing issue that affects the BLE stack. Without understanding the debug output of the stack its hard fro me to say whats going on.

To answer your question…No, when the issue is happening I get no log output from the stack when setting the CCCD to anything other than 0. Setting to 0 I get log output as documented in the earlier post and the callback indicated error 4.


#8

Hi @panda,

So it seams to be the problem about the initialization sequence.


#9

Yes, the sequence and timing of the initialization. I wish I could define exactly what that is, but I don’t know that yet.


#10

What is your initialization sequence then? I’ll find out if I should document this key note in the programming reference manual or adjust the HAL to fix it.

Thanks,
Guohui