I wrote a simple peripheral application using CC2541. The application sends some high-throughput data using Notifications.
I'm still perplexed by retransmission and acknowledgement logic when using BLE Notifications and Indications. Specifically:
- The BLE specification says that Indications are acknowledged by the GATT layer, while Notifications are not.
- It also says, (see e.g. TI and others on this), that each and every packet is acknowledged and, if necessary, retransmitted by the Link-Layer.
- Retransmission will persist until either the packet is acknowledged or the link is dropped. This is true regardless of the transport method (Read / Write / Notification / Indication).
- While sending sequential data I do experience lost packets from time to time.
Some questions:
- What happens if I update a Notified Characteristic before it was successfully transmitted (i.e. update the data and call GATTServApp_ProcessCharCfg())? Will the original data be lost?
- If so, is there a way, other than using Indications, for the application to know if the previous packet was transmitted successfully?