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

disconnecting while operations are in progress never gives BLE_GAP_EVT_DISCONNECTED event

2020-01-24-092119EST-ProductStoppedGettingEventsFromNordicDK.txtImprivataTestNordicEventsNotReceived.zipCalls_to_pc_ble_driver.cpp0285.2020-02-24-TestProgramUploadedToNordicSupport.zipFeb25TestProgramUploadedToNordicSupport.zipImprivata_bgTestApp.zipbgSDKTestAppMay4.zip2020-05-05-035347-NordicDK_USB840M_200505_ClockInternal_2in1.hex.txt.txtbgSDKTestAppMay6.zipI’m developing an application based on pc-ble-driver to talk to an nRF52840-based dongle (from Fanstel).

I’m having trouble disconnecting cleanly when a connection has operations in progress.  For example, I call ‘sd_ble_gattc_write’, which returns NRF_SUCCESS, but I don’t receive event BLE_GATTC_EVT_WRITE_RSP (after waiting 60 seconds), so I decide to disconnect. When this happens, sd_ble_gap_disconnect returns NRF_SUCCESS, but I do not receive BLE_GAP_EVT_DISCONNECTED even after waiting 30 seconds. The connection supervision timeout is 4 seconds.  What could cause the disconnect to not generate any BLE_GAP_EVT_DISCONNECTED event?

What I’m trying to accomplish here: if a connection is not responsive, I want to end that connection, without disturbing other connections I have open.

Thanks,

Paul Bradford

Parents
  • I’d like to try to keep this support case somewhat limited.  Although the trace I sent shows that the GATTC write did receive a response from the phone, and that the response apparently was not seen by the nRF52840 dongle on my PC, let’s leave that for a separate support case.  For this case, let’s deal with the problem that I never get the BLE_GATTC_EVT_WRITE_RSP or BLE_GAP_EVT_DISCONNECTED events.

     

    In response to your questions:

    1. I don't have a project I can send. I see this behavior in the product I'm working on, and extracting this into a standalone project is a very large amount of work.
    2. I initiate a connection from a Windows 7 PC using pc-ble-driver-based code talking to a Fanstel USB840M dongle, which has the nRF52840 chipset. The device I'm talking to is an Android phone.   I have to talk to a wide variety of phones, so even if this non-response problem didn't appear with a different phone, it wouldn't help me.
    3. The dongle remains responsive. For example, if I issue a reset with sd_rpc_conn_reset, the dongle does reset.
    4. I'm using pc-ble-driver 4.1.1 with NRF_SD_BLE_API=6. The firmware is SoftDevice S140 with Connectivity firmware v4.1.1.  

     

    Regarding your response to my questions:

    1. Is the GATTC timeout hardcoded to 30 seconds, or is there some setting I can use to tweak it? Note from my original post that BLE_GATTC_EVT_WRITE_RSP doesn't appear even when I wait 60 seconds.
    2. If the BLE_GAP_EVT_DISCONNECTED event should come after the supervision timeout at the latest, then there is some problem here, because the supervision timeout is 4 seconds but the BLE_GAP_EVT_DISCONNECTED event doesn't appear even after 30 seconds.
Reply
  • I’d like to try to keep this support case somewhat limited.  Although the trace I sent shows that the GATTC write did receive a response from the phone, and that the response apparently was not seen by the nRF52840 dongle on my PC, let’s leave that for a separate support case.  For this case, let’s deal with the problem that I never get the BLE_GATTC_EVT_WRITE_RSP or BLE_GAP_EVT_DISCONNECTED events.

     

    In response to your questions:

    1. I don't have a project I can send. I see this behavior in the product I'm working on, and extracting this into a standalone project is a very large amount of work.
    2. I initiate a connection from a Windows 7 PC using pc-ble-driver-based code talking to a Fanstel USB840M dongle, which has the nRF52840 chipset. The device I'm talking to is an Android phone.   I have to talk to a wide variety of phones, so even if this non-response problem didn't appear with a different phone, it wouldn't help me.
    3. The dongle remains responsive. For example, if I issue a reset with sd_rpc_conn_reset, the dongle does reset.
    4. I'm using pc-ble-driver 4.1.1 with NRF_SD_BLE_API=6. The firmware is SoftDevice S140 with Connectivity firmware v4.1.1.  

     

    Regarding your response to my questions:

    1. Is the GATTC timeout hardcoded to 30 seconds, or is there some setting I can use to tweak it? Note from my original post that BLE_GATTC_EVT_WRITE_RSP doesn't appear even when I wait 60 seconds.
    2. If the BLE_GAP_EVT_DISCONNECTED event should come after the supervision timeout at the latest, then there is some problem here, because the supervision timeout is 4 seconds but the BLE_GAP_EVT_DISCONNECTED event doesn't appear even after 30 seconds.
Children
No Data
Related