Beware that this post is related to an SDK in maintenance mode
More Info: Consider nRF Connect SDK for new designs

Can't connect two peripheral to a central, Error code: -111

Hi,

I am working on the v1.7.0 and I am trying to connect two peripheral with the same services to a central. The first works without any problems:

Scanning successfully started
[00:00:00.006,988] <inf> sdc_hci_driver: SoftDevice Controller build revision:
                                         3f 47 70 8e 81 95 4e 86  9d d3 a2 95 88 f6 30 0a |?Gp...N. ......0.
                                         7f 53 49 fd                                      |.SI.
[00:00:00.010,314] <inf> bt_hci_core: HW Platform: Nordic Semiconductor (0x0002)
[00:00:00.010,345] <inf> bt_hci_core: HW Variant: nRF52x (0x0002)
[00:00:00.010,345] <inf> bt_hci_core: Firmware: Standard Bluetooth controller (0x00) Version 63.28743 Build 1318420878
[00:00:00.011,566] <inf> bt_hci_core: Identity: FD:A4:A5:64:D6:48 (random)
[00:00:00.011,596] <inf> bt_hci_core: HCI: version 5.2 (0x0b) revision 0x125b, manufacturer 0x0059
[00:00:00.011,596] <inf> bt_hci_core: LMP: version 5.2 (0x0b) subver 0x125b

// first connection
Connected: D8:E8:A2:5E:BD:75 (random)
Scanning successfully started

// second one does not succeed
Create conn failed (err -111)

When I unplug / disconnect the first connected, the other one is able to join. Here is my code:

#pragma once

#include <autoconf.h>
#include <bluetooth/bluetooth.h>
#include <bluetooth/gatt.h>
#include <bluetooth/gap.h>
#include <bluetooth/gatt_dm.h>
#include "services/pressed.h"

static void start_scan(void);
static struct bt_conn *default_conn;

static void connected(struct bt_conn *conn, uint8_t err)
{
	char addr[BT_ADDR_LE_STR_LEN];
	bt_addr_le_to_str(bt_conn_get_dst(conn), addr, sizeof(addr));
	default_conn = NULL;
	printk("Connected: %s\n", addr);
    
    start_scan();
}

static void disconnected(struct bt_conn *conn, uint8_t reason)
{
	char addr[BT_ADDR_LE_STR_LEN];

	bt_addr_le_to_str(bt_conn_get_dst(conn), addr, sizeof(addr));
	printk("Disconnected: %s (reason 0x%02x)\n", addr, reason);

	bt_conn_unref(conn);
	default_conn = NULL;

	start_scan();
}

static struct bt_conn_cb master_conn_callbacks = {
    .connected = connected,
    .disconnected = disconnected,
};

static void scan_filter_match(struct bt_scan_device_info *device_info,
			      struct bt_scan_filter_match *filter_match,
			      bool connectable)
{
	int err;
	char addr[BT_ADDR_LE_STR_LEN];

	bt_addr_le_to_str(device_info->recv_info->addr, addr, sizeof(addr));

	err = bt_scan_stop();
	if (err) {
		printk("Stop LE scan failed (err %d)\n", err);
	}

    struct bt_conn_le_create_param create_params = { 
        .options = BT_CONN_LE_OPT_CODED | BT_CONN_LE_OPT_NO_1M, 
        .interval = BT_GAP_SCAN_FAST_INTERVAL, .window = BT_GAP_SCAN_FAST_INTERVAL, 
        .interval_coded = 0, 
        .window_coded = 0, 
        .timeout = 0, 
    };

    struct bt_le_conn_param conn_params = { 
        .interval_min = BT_GAP_INIT_CONN_INT_MIN, 
        .interval_max = BT_GAP_INIT_CONN_INT_MAX, 
        .latency = 0, 
        .timeout = 400, // 4 seconds 
    };

	err = bt_conn_le_create(device_info->recv_info->addr, &create_params,
				&conn_params,
				&default_conn);

	if (err) {
		printk("Create conn failed (err %d)\n", err);

		err = bt_scan_start(BT_SCAN_TYPE_SCAN_ACTIVE);
		if (err) {
			printk("Scanning failed to start (err %d)\n", err);
			return;
		}
        return;
	}
}

BT_SCAN_CB_INIT(scan_cb, scan_filter_match, NULL, NULL, NULL);

static void init_start_scan(void) {

	int err;

    bt_le_scan_param scan_param = { 
        .type = BT_LE_SCAN_TYPE_ACTIVE, 
        .options = BT_LE_SCAN_OPT_FILTER_DUPLICATE, 
        .interval = BT_GAP_SCAN_FAST_INTERVAL, 
        .window = BT_GAP_SCAN_FAST_WINDOW, 
        .timeout = 0, 
        .interval_coded = 0, 
        .window_coded = 0, 
    };

    struct bt_scan_init_param scan_init = {
        .scan_param = &scan_param,
		.connect_if_match = 0,
		.conn_param = NULL
	};

    bt_conn_cb_register(&master_conn_callbacks);
    bt_scan_init(&scan_init);
    bt_scan_cb_register(&scan_cb);

    err = bt_scan_filter_add(BT_SCAN_FILTER_TYPE_UUID, &pressed_service_id.uuid);
	if (err) {
		printk("Scanning filters cannot be set (err %d)\n", err);
		return;
	}

    err = bt_scan_filter_enable(BT_SCAN_UUID_FILTER, false);
	if (err) {
		printk("Filters cannot be turned on (err %d)\n", err);
        return;
	}

    start_scan();
}

static void start_scan(void)
{
	int err;

    err = bt_scan_start(BT_SCAN_TYPE_SCAN_ACTIVE);
	if (err) {
		printk("Scanning failed to start (err %d)\n", err);
		return;
	}

	printk("Scanning successfully started\n");
}

Does anyone has a clue, why this is happening? What means the error-code -111?

Related