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
  • Are you using a precompiled version of the connectivity firmware, or did you compile it yourself? It would be helpful if you can enable logging on the dongle, to see if the events are received from the softdevice.

    If you have compiled the connectivity firmware yourself, you can enable debug level logging by setting the following defines in the sdk_config.h file:

    #define NRF_LOG_BACKEND_RTT_ENABLED 1
    #define NRF_LOG_ENABLED 1
    #define NRF_LOG_DEFAULT_LEVEL 4

    With this set, you can connect a J-Link debugger to the SWD interface of the dongle, and read out the logs using J-Link RTT Viewer.

    It is also possible to enable logging over UART if you have a UART to USB cable. You then need to set the following defines:

    #define NRF_LOG_BACKEND_UART_ENABLED 1
    #define NRF_LOG_BACKEND_UART_TX_PIN 31 // Or some other available GPIO on the dongle

    And connect the UART to USB cable to the UART_TX_PIN config.

    If you have not compiled the connectivity firmware yourself, I will try to create an example project that can be used for debugging. Please let me know.

Reply
  • Are you using a precompiled version of the connectivity firmware, or did you compile it yourself? It would be helpful if you can enable logging on the dongle, to see if the events are received from the softdevice.

    If you have compiled the connectivity firmware yourself, you can enable debug level logging by setting the following defines in the sdk_config.h file:

    #define NRF_LOG_BACKEND_RTT_ENABLED 1
    #define NRF_LOG_ENABLED 1
    #define NRF_LOG_DEFAULT_LEVEL 4

    With this set, you can connect a J-Link debugger to the SWD interface of the dongle, and read out the logs using J-Link RTT Viewer.

    It is also possible to enable logging over UART if you have a UART to USB cable. You then need to set the following defines:

    #define NRF_LOG_BACKEND_UART_ENABLED 1
    #define NRF_LOG_BACKEND_UART_TX_PIN 31 // Or some other available GPIO on the dongle

    And connect the UART to USB cable to the UART_TX_PIN config.

    If you have not compiled the connectivity firmware yourself, I will try to create an example project that can be used for debugging. Please let me know.

Children
No Data
Related