diff --git a/samples/bluetooth/central/src/main.c b/samples/bluetooth/central/src/main.c index 05d835add00..f3086b4701e 100644 --- a/samples/bluetooth/central/src/main.c +++ b/samples/bluetooth/central/src/main.c @@ -50,6 +50,20 @@ static void device_found(const bt_addr_le_t *addr, s8_t rssi, u8_t type, default_conn = bt_conn_create_le(addr, BT_LE_CONN_PARAM_DEFAULT); } +static void start_scan(void) +{ + int err; + + /* This demo doesn't require active scan */ + err = bt_le_scan_start(BT_LE_SCAN_PASSIVE, device_found); + if (err) { + printk("Scanning failed to start (err %d)\n", err); + return; + } + + printk("Scanning successfully started\n"); +} + static void connected(struct bt_conn *conn, u8_t err) { char addr[BT_ADDR_LE_STR_LEN]; @@ -58,6 +72,11 @@ static void connected(struct bt_conn *conn, u8_t err) if (err) { printk("Failed to connect to %s (%u)\n", addr, err); + + bt_conn_unref(default_conn); + default_conn = NULL; + + start_scan(); return; } @@ -73,7 +92,6 @@ static void connected(struct bt_conn *conn, u8_t err) static void disconnected(struct bt_conn *conn, u8_t reason) { char addr[BT_ADDR_LE_STR_LEN]; - int err; if (conn != default_conn) { return; @@ -86,11 +104,7 @@ static void disconnected(struct bt_conn *conn, u8_t reason) bt_conn_unref(default_conn); default_conn = NULL; - /* This demo doesn't require active scan */ - err = bt_le_scan_start(BT_LE_SCAN_PASSIVE, device_found); - if (err) { - printk("Scanning failed to start (err %d)\n", err); - } + start_scan(); } static struct bt_conn_cb conn_callbacks = { @@ -112,11 +126,5 @@ void main(void) bt_conn_cb_register(&conn_callbacks); - err = bt_le_scan_start(BT_LE_SCAN_ACTIVE, device_found); - if (err) { - printk("Scanning failed to start (err %d)\n", err); - return; - } - - printk("Scanning successfully started\n"); + start_scan(); } diff --git a/samples/bluetooth/central_hr/src/main.c b/samples/bluetooth/central_hr/src/main.c index f30f535bd0b..f3e056f6007 100644 --- a/samples/bluetooth/central_hr/src/main.c +++ b/samples/bluetooth/central_hr/src/main.c @@ -150,8 +150,10 @@ static void device_found(const bt_addr_le_t *addr, s8_t rssi, u8_t type, } } -static int scan_start(void) +static void start_scan(void) { + int err; + /* Use active scanning and disable duplicate filtering to handle any * devices that might update their advertising data at runtime. */ struct bt_le_scan_param scan_param = { @@ -161,7 +163,13 @@ static int scan_start(void) .window = BT_GAP_SCAN_FAST_WINDOW, }; - return bt_le_scan_start(&scan_param, device_found); + err = bt_le_scan_start(&scan_param, device_found); + if (err) { + printk("Scanning failed to start (err %d)\n", err); + return; + } + + printk("Scanning successfully started\n"); } static void connected(struct bt_conn *conn, u8_t conn_err) @@ -173,6 +181,11 @@ static void connected(struct bt_conn *conn, u8_t conn_err) if (conn_err) { printk("Failed to connect to %s (%u)\n", addr, conn_err); + + bt_conn_unref(default_conn); + default_conn = NULL; + + start_scan(); return; } @@ -209,10 +222,7 @@ static void disconnected(struct bt_conn *conn, u8_t reason) bt_conn_unref(default_conn); default_conn = NULL; - err = scan_start(); - if (err) { - printk("Scanning failed to start (err %d)\n", err); - } + start_scan(); } static struct bt_conn_cb conn_callbacks = { @@ -234,12 +244,5 @@ void main(void) bt_conn_cb_register(&conn_callbacks); - err = scan_start(); - - if (err) { - printk("Scanning failed to start (err %d)\n", err); - return; - } - - printk("Scanning successfully started\n"); + start_scan(); }