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 have created a test program that reproduces this problem: failure to receive events after a write or read request.  I have posted test program ImprivataTestNordicEventsNotReceived.zip and the main source file NordicTest-pc-ble-driver.cpp.   My intention is that you use the test program binaries, as described in the README.txt n the zip file. I included the source just so you can see what I'm doing, but I didn't include all headers to make it buildable.

  • Jørgen Holmefjord , have you run the test program with three copies at once? When I do this, I reproduce the problem every time, within a few hours.

    Have you reproduced the problem? As shown in the README file, you would see output (shortly followed by the program exiting) as follows:

    If the test program does not receive an event after a write request
        date/time: Thread %d: ERROR: never got BLE_GATTC_EVT_WRITE_RSP after waiting %d milliseconds.
    If the test program does not receive an event after a read request
        date/time: Thread %d: ERROR: never got BLE_GATTC_EVT_READ_RSP after waiting %d milliseconds.

Reply
  • Jørgen Holmefjord , have you run the test program with three copies at once? When I do this, I reproduce the problem every time, within a few hours.

    Have you reproduced the problem? As shown in the README file, you would see output (shortly followed by the program exiting) as follows:

    If the test program does not receive an event after a write request
        date/time: Thread %d: ERROR: never got BLE_GATTC_EVT_WRITE_RSP after waiting %d milliseconds.
    If the test program does not receive an event after a read request
        date/time: Thread %d: ERROR: never got BLE_GATTC_EVT_READ_RSP after waiting %d milliseconds.

Children
Related