cancel
Showing results for 
Search instead for 
Did you mean: 

Missing Functionality: Indication Acknowledgement Event

charles23
Associate III
Posted on April 16, 2015 at 18:46

I can get a Peripheral to send a succession of Indications to a Central, by changing the value of an attribute with a BLUEHCI_GATT_UPDATE_CHAR_VALUE command.

The Central is required to acknowledge the Indication (if a BlueNRG then with the BLUENRG_GATT_CONFIRM_INDICATION), but might not do so (for example if it cannot keep up with the Peripheral). But the Peripheral does not know whether or not it has received this Indication acknowledgement. Furthermore, there is no error if the Peripheral attempts to send a second Indication (by issuing a second BLUEHCI_GATT_UPDATE_CHAR_VALUE command) before the first acknowledgement arrives. (The Central does not see this second Indication). Eventually (but only after 30s) the Peripheral receives an EVT_BLUE_GATT_PROCEDURE_TIMEOUT event.

So the whole point of using Indications for reliable data transfer is lost.

Is there any way for the Peripheral to know whether the Central has sent the acknowledgement?

If not, could I suggest this functionality is added.
1 REPLY 1
Posted on April 20, 2015 at 13:22

Hi Palmer,

an indication is a server-initiated message that can be sent at any time by a server to a client. These messages have flow control and therefore a server cannot send an indication until the last indication was confirmed as received by the client.

In BlueNRG, no event is triggered when the client send a confirmation, so the server doesn't receive anything to understand that a confirmation for an indication has been sent.

If the server sends continuous indications without receive the confirmations, the error code 100 (insufficient resource) occurs . These indications are loaded in a queue so when this is full the error raises.

If no confirmation is sent by the client an Timeout event is triggered after 30 second.

Regards,

Graziella

I can get a Peripheral to send a succession of Indications to a Central, by changing the value of an attribute with a BLUEHCI_GATT_UPDATE_CHAR_VALUE command.

The Central is required to acknowledge the Indication (if a BlueNRG then with the BLUENRG_GATT_CONFIRM_INDICATION), but might not do so (for example if it cannot keep up with the Peripheral). But the Peripheral does not know whether or not it has received this Indication acknowledgement. Furthermore, there is no error if the Peripheral attempts to send a second Indication (by issuing a second BLUEHCI_GATT_UPDATE_CHAR_VALUE command) before the first acknowledgement arrives. (The Central does not see this second Indication). Eventually (but only after 30s) the Peripheral receives an EVT_BLUE_GATT_PROCEDURE_TIMEOUT event.

So the whole point of using Indications for reliable data transfer is lost.

Is there any way for the Peripheral to know whether the Central has sent the acknowledgement?

If not, could I suggest this functionality is added.