Bluetooth: controller: split: Added Adv Random Address set

Added implementation to set advertising random address.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
This commit is contained in:
Vinayak Kariappa Chettimada 2020-04-08 16:32:25 +05:30 committed by Carles Cufí
commit 6b17eb2291
5 changed files with 32 additions and 10 deletions

View file

@ -24,7 +24,6 @@ uint8_t ll_adv_data_set(uint8_t handle, uint8_t len,
uint8_t ll_adv_scan_rsp_set(uint8_t handle, uint8_t len,
uint8_t const *const p_data);
uint8_t ll_adv_aux_random_addr_set(uint8_t handle, uint8_t *addr);
uint8_t *ll_adv_aux_random_addr_get(uint8_t handle, uint8_t *addr);
uint8_t ll_adv_aux_ad_data_set(uint8_t handle, uint8_t op, uint8_t frag_pref,
uint8_t len, uint8_t *data);
uint8_t ll_adv_aux_sr_data_set(uint8_t handle, uint8_t op, uint8_t frag_pref,

View file

@ -481,9 +481,11 @@ uint8_t ll_adv_enable(uint8_t enable)
/* AdvA, fill here at enable */
if (h->adv_addr) {
uint8_t *tx_addr = ll_addr_get(pdu_adv->tx_addr, NULL);
uint8_t *tx_addr =
ll_adv_aux_random_addr_get(adv, NULL);
/* TODO: Privacy */
/* TODO: Privacy check */
if (pdu_adv->tx_addr && !mem_nz(tx_addr, BDADDR_SIZE)) {
return BT_HCI_ERR_INVALID_PARAM;
}
@ -503,10 +505,11 @@ uint8_t ll_adv_enable(uint8_t enable)
ps = (uint8_t *)hs + sizeof(*hs);
if (hs->adv_addr) {
uint8_t *tx_addr = ll_addr_get(pdu_aux->tx_addr,
NULL);
uint8_t *tx_addr =
ll_adv_aux_random_addr_get(adv, NULL);
/* TODO: Privacy */
/* TODO: Privacy check */
if (pdu_aux->tx_addr &&
!mem_nz(tx_addr, BDADDR_SIZE)) {
return BT_HCI_ERR_INVALID_PARAM;

View file

@ -53,14 +53,30 @@ static void *adv_aux_free;
uint8_t ll_adv_aux_random_addr_set(uint8_t handle, uint8_t *addr)
{
/* TODO: store in adv set instance */
struct ll_adv_set *adv;
adv = ull_adv_is_created_get(handle);
if (!adv) {
return BT_HCI_ERR_CMD_DISALLOWED;
}
/* TODO: Fail if connectable advertising is enabled */
if (0) {
return BT_HCI_ERR_CMD_DISALLOWED;
}
memcpy(adv->rnd_addr, addr, BDADDR_SIZE);
return 0;
}
uint8_t *ll_adv_aux_random_addr_get(uint8_t handle, uint8_t *addr)
uint8_t *ll_adv_aux_random_addr_get(struct ll_adv_set *adv, uint8_t *addr)
{
/* TODO: copy adv set instance addr into addr and/or return reference */
return NULL;
if (addr) {
memcpy(addr, adv->rnd_addr, BDADDR_SIZE);
}
return adv->rnd_addr;
}
#if (CONFIG_BT_CTLR_ADV_AUX_SET > 0)

View file

@ -39,6 +39,9 @@ uint8_t scan_rsp_set(struct ll_adv_set *adv, uint8_t len,
int ull_adv_aux_init(void);
int ull_adv_aux_reset(void);
/* Helper to read back random address */
uint8_t *ll_adv_aux_random_addr_get(struct ll_adv_set *adv, uint8_t *addr);
/* helper function to start auxiliary advertising */
uint32_t ull_adv_aux_start(struct ll_adv_aux_set *aux, uint32_t ticks_anchor,
uint32_t volatile *ret_cb);

View file

@ -16,6 +16,7 @@ struct ll_adv_set {
#if defined(CONFIG_BT_CTLR_ADV_EXT)
uint32_t interval;
uint8_t rnd_addr[BDADDR_SIZE];
uint8_t sid:4;
uint8_t is_created:1;
#else /* !CONFIG_BT_CTLR_ADV_EXT */