Fix RPA usage for scanner when advertising not using RPA
Project: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/commit/c6725f9c Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/c6725f9c Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/c6725f9c Branch: refs/heads/develop Commit: c6725f9c64f76ac0a47ff6933c9cc1d5e25505cf Parents: 81fe132 Author: William San Filippo <wi...@runtime.io> Authored: Fri Jun 3 08:39:30 2016 -0700 Committer: William San Filippo <wi...@runtime.io> Committed: Fri Jun 3 08:40:31 2016 -0700 ---------------------------------------------------------------------- apps/bletest/src/main.c | 34 ++++++++++++---------------- net/nimble/controller/src/ble_ll_scan.c | 19 ++++++++-------- 2 files changed, 25 insertions(+), 28 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/c6725f9c/apps/bletest/src/main.c ---------------------------------------------------------------------- diff --git a/apps/bletest/src/main.c b/apps/bletest/src/main.c index f4e4424..7aa2396 100755 --- a/apps/bletest/src/main.c +++ b/apps/bletest/src/main.c @@ -99,23 +99,24 @@ os_membuf_t g_mbuf_buffer[MBUF_MEMPOOL_SIZE]; #define BLETEST_ROLE_INITIATOR (2) //#define BLETEST_CFG_ROLE (BLETEST_ROLE_INITIATOR) -#define BLETEST_CFG_ROLE (BLETEST_ROLE_ADVERTISER) -//#define BLETEST_CFG_ROLE (BLETEST_ROLE_SCANNER) +//#define BLETEST_CFG_ROLE (BLETEST_ROLE_ADVERTISER) +#define BLETEST_CFG_ROLE (BLETEST_ROLE_SCANNER) /* Advertiser config */ #define BLETEST_CFG_ADV_OWN_ADDR_TYPE (BLE_HCI_ADV_OWN_ADDR_PRIV_PUB) #define BLETEST_CFG_ADV_PEER_ADDR_TYPE (BLE_HCI_ADV_PEER_ADDR_PUBLIC) -#define BLETEST_CFG_FILT_DUP_ADV (1) #define BLETEST_CFG_ADV_ITVL (60000 / BLE_HCI_ADV_ITVL) #define BLETEST_CFG_ADV_TYPE BLE_HCI_ADV_TYPE_ADV_IND #define BLETEST_CFG_ADV_FILT_POLICY (BLE_HCI_ADV_FILT_NONE) +#define BLETEST_CFG_ADV_ADDR_RES_EN (1) /* Scan config */ #define BLETEST_CFG_SCAN_ITVL (700000 / BLE_HCI_SCAN_ITVL) #define BLETEST_CFG_SCAN_WINDOW (700000 / BLE_HCI_SCAN_ITVL) -#define BLETEST_CFG_SCAN_TYPE (BLE_HCI_SCAN_TYPE_PASSIVE) -#define BLETEST_CFG_SCAN_OWN_ADDR_TYPE (BLE_HCI_ADV_OWN_ADDR_PUBLIC) -#define BLETEST_CFG_SCAN_FILT_POLICY (BLE_HCI_SCAN_FILT_NO_WL) +#define BLETEST_CFG_SCAN_TYPE (BLE_HCI_SCAN_TYPE_ACTIVE) +#define BLETEST_CFG_SCAN_OWN_ADDR_TYPE (BLE_HCI_ADV_OWN_ADDR_PRIV_PUB) +#define BLETEST_CFG_SCAN_FILT_POLICY (BLE_HCI_SCAN_FILT_USE_WL) +#define BLETEST_CFG_FILT_DUP_ADV (1) /* Connection config */ #define BLETEST_CFG_CONN_ITVL (128) /* in 1.25 msec increments */ @@ -125,7 +126,7 @@ os_membuf_t g_mbuf_buffer[MBUF_MEMPOOL_SIZE]; #define BLETEST_CFG_MIN_CE_LEN (6) #define BLETEST_CFG_MAX_CE_LEN (BLETEST_CFG_CONN_ITVL) #define BLETEST_CFG_CONN_PEER_ADDR_TYPE (BLE_HCI_CONN_PEER_ADDR_PUBLIC_IDENT) -#define BLETEST_CFG_CONN_OWN_ADDR_TYPE (BLE_HCI_ADV_OWN_ADDR_PUBLIC) +#define BLETEST_CFG_CONN_OWN_ADDR_TYPE (BLE_HCI_ADV_OWN_ADDR_PRIV_PUB) #define BLETEST_CFG_CONCURRENT_CONNS (1) /* Test packet config */ @@ -343,6 +344,9 @@ bletest_init_advertising(void) adv.adv_type = BLETEST_CFG_ADV_TYPE; adv.adv_channel_map = 0x07; adv.adv_filter_policy = BLETEST_CFG_ADV_FILT_POLICY; + if ((adv.adv_filter_policy & 1) || (BLETEST_CFG_ADV_ADDR_RES_EN == 1)) { + set_peer_addr = 1; + } adv.peer_addr_type = BLETEST_CFG_ADV_PEER_ADDR_TYPE; if ((adv.adv_type == BLE_HCI_ADV_TYPE_ADV_DIRECT_IND_HD) || (adv.adv_type == BLE_HCI_ADV_TYPE_ADV_DIRECT_IND_LD)) { @@ -380,7 +384,8 @@ bletest_init_advertising(void) assert(rc == 0); #if (BLE_LL_CFG_FEAT_LL_PRIVACY == 1) - if (adv.own_addr_type > BLE_HCI_ADV_OWN_ADDR_RANDOM) { + if ((adv.own_addr_type > BLE_HCI_ADV_OWN_ADDR_RANDOM) || + (BLETEST_CFG_ADV_ADDR_RES_EN == 1)) { rc = bletest_hci_le_add_resolv_list(g_bletest_adv_irk, g_bletest_init_irk, adv.peer_addr, @@ -410,7 +415,6 @@ bletest_init_scanner(void) { int rc; uint8_t own_addr_type; - uint8_t dev_addr[BLE_DEV_ADDR_LEN]; uint8_t buf[BLE_HCI_CMD_HDR_LEN + BLE_HCI_SET_SCAN_PARAM_LEN]; uint8_t add_whitelist; @@ -435,19 +439,11 @@ bletest_init_scanner(void) rc = bletest_hci_le_enable_resolv_list(1); assert(rc == 0); - - add_whitelist = 0; } #endif if (add_whitelist & 1) { - /* Add peer to whitelist */ - dev_addr[0] = 0x00; - dev_addr[1] = 0x00; - dev_addr[2] = 0x00; - dev_addr[3] = 0x88; - dev_addr[4] = 0x88; - dev_addr[5] = 0x08; - rc = bletest_hci_le_add_to_whitelist(dev_addr,BLE_ADDR_TYPE_PUBLIC); + rc = bletest_hci_le_add_to_whitelist(g_bletest_cur_peer_addr, + BLE_ADDR_TYPE_PUBLIC); assert(rc == 0); } } http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/c6725f9c/net/nimble/controller/src/ble_ll_scan.c ---------------------------------------------------------------------- diff --git a/net/nimble/controller/src/ble_ll_scan.c b/net/nimble/controller/src/ble_ll_scan.c index 008f632..e5c0b22 100644 --- a/net/nimble/controller/src/ble_ll_scan.c +++ b/net/nimble/controller/src/ble_ll_scan.c @@ -160,22 +160,23 @@ ble_ll_scan_req_pdu_make(struct ble_ll_scan_sm *scansm, uint8_t *adv_addr, #if (BLE_LL_CFG_FEAT_LL_PRIVACY == 1) if (scansm->own_addr_type > BLE_HCI_ADV_OWN_ADDR_RANDOM) { + rl = NULL; if (ble_ll_is_rpa(adv_addr, adv_addr_type)) { - rl = NULL; if (scansm->scan_rpa_index >= 0) { /* Generate a RPA to use for scana */ rl = &g_ble_ll_resolv_list[scansm->scan_rpa_index]; - } else { - if (ble_ll_resolv_enabled()) { - rl = ble_ll_resolv_list_find(adv_addr, adv_addr_type); - } } - - if (rl) { - ble_ll_resolv_gen_priv_addr(rl, 1, rpa); - scana = rpa; + } else { + if (ble_ll_resolv_enabled()) { + rl = ble_ll_resolv_list_find(adv_addr, adv_addr_type); } } + + if (rl) { + ble_ll_resolv_gen_priv_addr(rl, 1, rpa); + scana = rpa; + pdu_type |= BLE_ADV_PDU_HDR_TXADD_RAND; + } } #endif