Merge pull request #87 from sjanc/adv_random_fix

nimble/gap: Fix assert on slave connection with ext advertising
This commit is contained in:
Szymon Janc
2018-05-14 15:14:55 +02:00
committed by GitHub
3 changed files with 25 additions and 2 deletions
+7 -2
View File
@@ -152,14 +152,15 @@ struct ble_gap_slave_state {
unsigned int preempted:1; /** Set to 1 if advertising was preempted. */
unsigned int connectable:1;
#if MYNEWT_VAL(BLE_EXT_ADV)
unsigned int configured:1; /** If instance is configured */
unsigned int scannable:1;
unsigned int directed:1;
unsigned int legacy_pdu:1;
unsigned int rnd_addr_set:1;
uint8_t rnd_addr[6];
#else
/* timer is used only with legacy advertising */
#if !MYNEWT_VAL(BLE_EXT_ADV)
unsigned int exp_set:1;
ble_npl_time_t exp_os_ticks;
#endif
@@ -1424,6 +1425,9 @@ ble_gap_rx_conn_complete(struct hci_le_conn_complete *evt, uint8_t instance)
conn->bhc_cb = ble_gap_slave[instance].cb;
conn->bhc_cb_arg = ble_gap_slave[instance].cb_arg;
conn->bhc_our_addr_type = ble_gap_slave[instance].our_addr_type;
#if MYNEWT_VAL(BLE_EXT_ADV)
memcpy(conn->bhc_our_rnd_addr, ble_gap_slave[instance].rnd_addr, 6);
#endif
ble_gap_slave_reset_state(instance);
}
@@ -2565,6 +2569,7 @@ ble_gap_ext_adv_set_addr_no_lock(uint8_t instance, const uint8_t *addr)
}
ble_gap_slave[instance].rnd_addr_set = 1;
memcpy(ble_gap_slave[instance].rnd_addr, addr, 6);
return 0;
}
+15
View File
@@ -365,8 +365,23 @@ ble_hs_conn_addrs(const struct ble_hs_conn *conn,
/* Determine our address information. */
addrs->our_id_addr.type =
ble_hs_misc_addr_type_to_id(conn->bhc_our_addr_type);
#if MYNEWT_VAL(BLE_EXT_ADV)
/* With EA enabled random address for slave connection is per advertising
* instance and requires special handling here.
*/
if (!(conn->bhc_flags & BLE_HS_CONN_F_MASTER) &&
addrs->our_id_addr.type == BLE_ADDR_RANDOM) {
our_id_addr_val = conn->bhc_our_rnd_addr;
} else {
rc = ble_hs_id_addr(addrs->our_id_addr.type, &our_id_addr_val, NULL);
assert(rc == 0);
}
#else
rc = ble_hs_id_addr(addrs->our_id_addr.type, &our_id_addr_val, NULL);
assert(rc == 0);
#endif
memcpy(addrs->our_id_addr.val, our_id_addr_val, 6);
+3
View File
@@ -42,6 +42,9 @@ struct ble_hs_conn {
SLIST_ENTRY(ble_hs_conn) bhc_next;
uint16_t bhc_handle;
uint8_t bhc_our_addr_type;
#if MYNEWT_VAL(BLE_EXT_ADV)
uint8_t bhc_our_rnd_addr[6];
#endif
ble_addr_t bhc_peer_addr;
ble_addr_t bhc_our_rpa_addr;
ble_addr_t bhc_peer_rpa_addr;