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:
parent
b0dd599db1
commit
6b17eb2291
5 changed files with 32 additions and 10 deletions
|
@ -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,
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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 */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue