This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

Are notifications always sent before disconnecting?

Hi,

In our code we would like to respond to a write with a notification and then disconnect. So we first we call sd_ble_gatts_rw_authorize_reply to reply to the write, then sd_ble_gatts_hvx for the notification and then sd_ble_gap_disconnect. Now I was wondering if the write response and the notification are always sent before the disconnection occurs, or do I have to wait for BLE_EVT_TX_COMPLETE (for 2 packets) to know for sure that they are sent?

Regards,

Thiemo van Engelen

Parents
  • FormerMember
    +1 FormerMember

    No, there is no guarantee that the sd_ble_gatts_rw_authorize_reply() and the notifications will be sent before the disconnect command.

    So yes, to be sure that sd_ble_gatts_rw_authorize_reply() and the notifications are transmitted before the disconnect command, you should wait for BLE_EVT_TX_COMPLETE/BLE_GATTS_EVT_HVN_TX_COMPLETE (S132 v. 4.x.x)

  • There is a very simple case. I just try to send in timer timeout handle every 2 sec: if(is_connected) send_new_val(&buf[to_send_index]); and then on ble evt i check:

    ... case BLE_EVT_TX_COMPLETE:

       to_send_index++;
    enter code here
    send_new_val(&buf[to_send_index]);
    enter code here
    ...
    

    Now i look at nrf_connect logs on android app (swipe to right). For debug purposes i filled the buffer and sending packet values with incrementing values. What i see is if i connect, subscribe to the characteristic, get stream of packets. Now if i unsubscribe and after subscribe again, android input logs continues from the right buf element. But if i just press disconnect while subscribed, and then connect. What i see i lose 3-20 input packets in between (depends on how long i disconnected). Conn. interval is 10-70 ms, s132 of SDK v12.3..

Reply
  • There is a very simple case. I just try to send in timer timeout handle every 2 sec: if(is_connected) send_new_val(&buf[to_send_index]); and then on ble evt i check:

    ... case BLE_EVT_TX_COMPLETE:

       to_send_index++;
    enter code here
    send_new_val(&buf[to_send_index]);
    enter code here
    ...
    

    Now i look at nrf_connect logs on android app (swipe to right). For debug purposes i filled the buffer and sending packet values with incrementing values. What i see is if i connect, subscribe to the characteristic, get stream of packets. Now if i unsubscribe and after subscribe again, android input logs continues from the right buf element. But if i just press disconnect while subscribed, and then connect. What i see i lose 3-20 input packets in between (depends on how long i disconnected). Conn. interval is 10-70 ms, s132 of SDK v12.3..

Children
No Data
Related