From edd5d46b0224f7ac010a765eda0f48d6dacf0db1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Rymanowski?= Date: Tue, 4 Jul 2017 11:35:07 +0200 Subject: [PATCH] nimble/controller: Fix for missing scansm pointer in connsm This fix issue with creating legacy connection when BLE_EXT_ADV is on. X-Original-Commit: 0faccea4d62ddbc7f72e4f72c58765cd40d04e5f --- .../include/controller/ble_ll_scan.h | 3 ++- nimble/controller/src/ble_ll_conn_hci.c | 2 +- nimble/controller/src/ble_ll_scan.c | 20 +++++++++++++++++-- 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/nimble/controller/include/controller/ble_ll_scan.h b/nimble/controller/include/controller/ble_ll_scan.h index 6be6dfa84..aee946502 100644 --- a/nimble/controller/include/controller/ble_ll_scan.h +++ b/nimble/controller/include/controller/ble_ll_scan.h @@ -169,7 +169,8 @@ int ble_ll_scan_whitelist_enabled(void); /* Initialize the scanner when we start initiating */ struct hci_create_conn; -int ble_ll_scan_initiator_start(struct hci_create_conn *hcc); +int ble_ll_scan_initiator_start(struct hci_create_conn *hcc, + struct ble_ll_scan_sm **sm); /* Returns the PDU allocated by the scanner */ struct os_mbuf *ble_ll_scan_get_pdu(void); diff --git a/nimble/controller/src/ble_ll_conn_hci.c b/nimble/controller/src/ble_ll_conn_hci.c index d5cf8acf1..beeaf9990 100644 --- a/nimble/controller/src/ble_ll_conn_hci.c +++ b/nimble/controller/src/ble_ll_conn_hci.c @@ -506,7 +506,7 @@ ble_ll_conn_create(uint8_t *cmdbuf) /* CSA will be selected when advertising is received */ /* Start scanning */ - rc = ble_ll_scan_initiator_start(hcc); + rc = ble_ll_scan_initiator_start(hcc, &connsm->scansm); if (rc) { SLIST_REMOVE(&g_ble_ll_conn_active_list,connsm,ble_ll_conn_sm,act_sle); STAILQ_INSERT_TAIL(&g_ble_ll_conn_free_list, connsm, free_stqe); diff --git a/nimble/controller/src/ble_ll_scan.c b/nimble/controller/src/ble_ll_scan.c index 374474f13..dbdb34df2 100644 --- a/nimble/controller/src/ble_ll_scan.c +++ b/nimble/controller/src/ble_ll_scan.c @@ -2485,13 +2485,18 @@ ble_ll_scan_can_chg_whitelist(void) } int -ble_ll_scan_initiator_start(struct hci_create_conn *hcc) +ble_ll_scan_initiator_start(struct hci_create_conn *hcc, + struct ble_ll_scan_sm **sm) { struct ble_ll_scan_sm *scansm; struct ble_ll_scan_params *scanphy; + int rc; scansm = &g_ble_ll_scan_sm; scansm->own_addr_type = hcc->own_addr_type; + scansm->ext_scanning = 0; + scansm->cur_phy = PHY_UNCODED; + scansm->next_phy = PHY_NOT_CONFIGURED; scanphy = &scansm->phy_data[scansm->cur_phy]; scanphy->scan_filt_policy = hcc->filter_policy; @@ -2499,7 +2504,18 @@ ble_ll_scan_initiator_start(struct hci_create_conn *hcc) scanphy->scan_window = hcc->scan_window; scanphy->scan_type = BLE_SCAN_TYPE_INITIATE; - return ble_ll_scan_sm_start(scansm); + rc = ble_ll_scan_sm_start(scansm); + if (sm == NULL) { + return rc; + } + + if (rc == BLE_ERR_SUCCESS) { + *sm = scansm; + } else { + *sm = NULL; + } + + return rc; } #if MYNEWT_VAL(BLE_LL_CFG_FEAT_LL_EXT_ADV)