nrf52 observer scanning intervals erratic in nrf connect 2.7 when connected as peripheral

I have a device that acts as a peripheral with a connecting interval of 100-150mS and  also as an observer listening for beacons.  When I get a beacon I update the scan interval from an interval of 100mS with a window of 20mS to an interval of 500mS with a window of 250mS.  Up until 2.7 this worked correctly and I had no issue sending indicate events during this window. 

In a effort to keep on the latest code base we have updated to 2.7 and this no longer works and it hangs on indicate events seemingly locking up the devices Bluetooth as I do not get an indicate failed for 30s.  Even if I am only connected without indicates enabled i see the same erratic scanning and do not get anywhere near either interval and the scan seems to be random.  When I disconnect i see the expected scanning.

Please let me know if something has changed in 2.7 as this is a show stopper.  Any help would be appreciated.

Observer low and high speed scan
static struct bt_le_scan_param scan_param_slow = {
    .type     = BT_LE_SCAN_TYPE_ACTIVE,
    .interval = 160,        //n*.625 = 100ms  
    .window   = 32,         //n*.625 = 20ms
    .options  = BT_LE_SCAN_OPT_CODED | BT_LE_SCAN_OPT_NO_1M
};

static struct bt_le_scan_param scan_param_fast = {
    .type     = BT_LE_SCAN_TYPE_ACTIVE,
    .interval = 800,            //n*.625 = 500ms  
    .window   = 400,            //n*.625 = 250ms
    .options  = BT_LE_SCAN_OPT_CODED | BT_LE_SCAN_OPT_NO_1M
};
 
peripheral interval
#define BT_LE_CONN_PARAM_HFR BT_LE_CONN_PARAM(  \
                          80, \    
                          120, \
                          0, 600)

2.6.2

2.7 peripheral connected

2.7 peripheral not connected

Parents Reply
  • The indicate is sent out when we receive a broadcast message to the central takes a long time to fail with error -12 it looks like it is locking up for a good 30s and this was also not the case in 2.6 is there a buffer that needs to be increased? a lot of these messages get received.

    int rc = bt_gatt_indicate(NULL, &g_armed_char_ind_params);
        if (rc)
        {
            LOG_WRN("Armed Indicate failed: %d", rc);
        }

    [00:02:36.018,371] <wrn> hfrCentral: Armed MSG Filters matched. Address: EC:C0:85:69:36:93 (random) RSSI: -63 dRSSI 2818
    [00:03:05.906,463] <wrn> bt_det: Armed Indicate failed: -12

Children
Related