Bluetooth: controller: Add ext_hdr member to pdu_adv_com_ext_adv
'ext_hdr' member only covers extended header part of 'ext_hdr_adv_data' and with addition of 'data' member to 'pdu_adv_ext_hdr' those can be used to quickly access both extended header flags and data directly from 'pdu_adv' without need for extra local variables and casts. Signed-off-by: Andrzej Kaczmarek <andrzej.kaczmarek@codecoup.pl>
This commit is contained in:
parent
def072ea65
commit
99226e1e95
7 changed files with 41 additions and 37 deletions
|
@ -4519,7 +4519,7 @@ static void le_ext_adv_report(struct pdu_data *pdu_data,
|
|||
goto no_ext_hdr;
|
||||
}
|
||||
|
||||
ptr += sizeof(*h);
|
||||
ptr = h->data;
|
||||
|
||||
if (h->adv_addr) {
|
||||
bt_addr_le_t addr;
|
||||
|
|
|
@ -129,7 +129,7 @@ static int prepare_cb(struct lll_prepare_param *p)
|
|||
/* Get reference to extended header */
|
||||
pri_com_hdr = (void *)&pri_pdu->adv_ext_ind;
|
||||
pri_hdr = (void *)pri_com_hdr->ext_hdr_adv_data;
|
||||
pri_dptr = (uint8_t *)pri_hdr + sizeof(*pri_hdr);
|
||||
pri_dptr = pri_hdr->data;
|
||||
|
||||
/* traverse through adv_addr, if present */
|
||||
if (pri_hdr->adv_addr) {
|
||||
|
@ -196,8 +196,8 @@ static int prepare_cb(struct lll_prepare_param *p)
|
|||
/* Copy the address from the adv packet we will send
|
||||
* into the scan response.
|
||||
*/
|
||||
memcpy(&scan_pdu->adv_ext_ind.ext_hdr_adv_data[1],
|
||||
&sec_pdu->adv_ext_ind.ext_hdr_adv_data[1],
|
||||
memcpy(&scan_pdu->adv_ext_ind.ext_hdr.data[0],
|
||||
&sec_pdu->adv_ext_ind.ext_hdr.data[0],
|
||||
BDADDR_SIZE);
|
||||
}
|
||||
#else
|
||||
|
@ -421,8 +421,8 @@ static inline int isr_rx_pdu(struct lll_adv_aux *lll_aux,
|
|||
pdu_adv = lll_adv_data_curr_get(lll);
|
||||
pdu_aux = lll_adv_aux_data_latest_get(lll_aux, &upd);
|
||||
|
||||
/* AdvA is placed at 2nd byte of ext hdr data */
|
||||
addr = &pdu_aux->adv_ext_ind.ext_hdr_adv_data[1];
|
||||
/* AdvA is placed at the beginning of extended header data */
|
||||
addr = pdu_aux->adv_ext_ind.ext_hdr.data;
|
||||
tx_addr = pdu_aux->tx_addr;
|
||||
|
||||
if ((pdu_rx->type == PDU_ADV_TYPE_AUX_SCAN_REQ) &&
|
||||
|
|
|
@ -213,25 +213,6 @@ struct pdu_adv_connect_ind {
|
|||
} __packed;
|
||||
} __packed;
|
||||
|
||||
struct pdu_adv_com_ext_adv {
|
||||
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
|
||||
uint8_t ext_hdr_len:6;
|
||||
uint8_t adv_mode:2;
|
||||
#elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
|
||||
uint8_t adv_mode:2;
|
||||
uint8_t ext_hdr_len:6;
|
||||
#else
|
||||
#error "Unsupported endianness"
|
||||
#endif
|
||||
uint8_t ext_hdr_adv_data[254];
|
||||
} __packed;
|
||||
|
||||
enum pdu_adv_mode {
|
||||
EXT_ADV_MODE_NON_CONN_NON_SCAN = 0x00,
|
||||
EXT_ADV_MODE_CONN_NON_SCAN = 0x01,
|
||||
EXT_ADV_MODE_NON_CONN_SCAN = 0x02,
|
||||
};
|
||||
|
||||
struct pdu_adv_ext_hdr {
|
||||
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
|
||||
uint8_t adv_addr:1;
|
||||
|
@ -254,8 +235,31 @@ struct pdu_adv_ext_hdr {
|
|||
#else
|
||||
#error "Unsupported endianness"
|
||||
#endif
|
||||
uint8_t data[0];
|
||||
} __packed;
|
||||
|
||||
struct pdu_adv_com_ext_adv {
|
||||
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
|
||||
uint8_t ext_hdr_len:6;
|
||||
uint8_t adv_mode:2;
|
||||
#elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
|
||||
uint8_t adv_mode:2;
|
||||
uint8_t ext_hdr_len:6;
|
||||
#else
|
||||
#error "Unsupported endianness"
|
||||
#endif
|
||||
union {
|
||||
struct pdu_adv_ext_hdr ext_hdr;
|
||||
uint8_t ext_hdr_adv_data[254];
|
||||
};
|
||||
} __packed;
|
||||
|
||||
enum pdu_adv_mode {
|
||||
EXT_ADV_MODE_NON_CONN_NON_SCAN = 0x00,
|
||||
EXT_ADV_MODE_CONN_NON_SCAN = 0x01,
|
||||
EXT_ADV_MODE_NON_CONN_SCAN = 0x02,
|
||||
};
|
||||
|
||||
struct pdu_adv_adi {
|
||||
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
|
||||
uint16_t did:12;
|
||||
|
|
|
@ -368,7 +368,7 @@ uint8_t ll_adv_params_set(uint16_t interval, uint8_t adv_type,
|
|||
|
||||
pri_com_hdr = (void *)&pdu->adv_ext_ind;
|
||||
pri_hdr = (void *)pri_com_hdr->ext_hdr_adv_data;
|
||||
pri_dptr = (uint8_t *)pri_hdr + sizeof(*pri_hdr);
|
||||
pri_dptr = pri_hdr->data;
|
||||
pri_dptr_prev = pri_dptr;
|
||||
|
||||
/* No ACAD and no AdvData */
|
||||
|
|
|
@ -273,7 +273,7 @@ uint8_t ll_adv_aux_sr_data_set(uint8_t handle, uint8_t op, uint8_t frag_pref, ui
|
|||
sr_prev = lll_adv_scan_rsp_peek(lll);
|
||||
|
||||
/* AdvA */
|
||||
memcpy(sr_dptr, &sr_prev->adv_ext_ind.ext_hdr_adv_data[1],
|
||||
memcpy(sr_dptr, &sr_prev->adv_ext_ind.ext_hdr.data[0],
|
||||
BDADDR_SIZE);
|
||||
sr_dptr += BDADDR_SIZE;
|
||||
|
||||
|
@ -459,7 +459,7 @@ uint8_t ull_adv_aux_hdr_set_clear(struct ll_adv_set *adv,
|
|||
pri_com_hdr_prev = (void *)&pri_pdu_prev->adv_ext_ind;
|
||||
pri_hdr = (void *)pri_com_hdr_prev->ext_hdr_adv_data;
|
||||
pri_hdr_prev = *pri_hdr;
|
||||
pri_dptr_prev = (uint8_t *)pri_hdr + sizeof(*pri_hdr);
|
||||
pri_dptr_prev = pri_hdr->data;
|
||||
|
||||
/* Advertising data are not supported by scannable instances */
|
||||
if ((sec_hdr_add_fields & ULL_ADV_PDU_HDR_FIELD_AD_DATA) &&
|
||||
|
@ -475,7 +475,7 @@ uint8_t ull_adv_aux_hdr_set_clear(struct ll_adv_set *adv,
|
|||
pri_com_hdr = (void *)&pri_pdu->adv_ext_ind;
|
||||
pri_com_hdr->adv_mode = pri_com_hdr_prev->adv_mode;
|
||||
pri_hdr = (void *)pri_com_hdr->ext_hdr_adv_data;
|
||||
pri_dptr = (uint8_t *)pri_hdr + sizeof(*pri_hdr);
|
||||
pri_dptr = pri_hdr->data;
|
||||
*(uint8_t *)pri_hdr = 0U;
|
||||
|
||||
/* Get the reference to aux instance */
|
||||
|
@ -511,7 +511,7 @@ uint8_t ull_adv_aux_hdr_set_clear(struct ll_adv_set *adv,
|
|||
ext_hdr_adv_data);
|
||||
*(uint8_t *)&sec_hdr_prev = 0U;
|
||||
}
|
||||
sec_dptr_prev = (uint8_t *)sec_hdr + sizeof(*sec_hdr);
|
||||
sec_dptr_prev = sec_hdr->data;
|
||||
|
||||
/* Get reference to new secondary PDU data buffer */
|
||||
sec_pdu = lll_adv_aux_data_alloc(lll_aux, &sec_idx);
|
||||
|
@ -525,7 +525,7 @@ uint8_t ull_adv_aux_hdr_set_clear(struct ll_adv_set *adv,
|
|||
sec_com_hdr = (void *)&sec_pdu->adv_ext_ind;
|
||||
sec_com_hdr->adv_mode = pri_com_hdr->adv_mode;
|
||||
sec_hdr = (void *)sec_com_hdr->ext_hdr_adv_data;
|
||||
sec_dptr = (uint8_t *)sec_hdr + sizeof(*sec_hdr);
|
||||
sec_dptr = sec_hdr->data;
|
||||
*(uint8_t *)sec_hdr = 0U;
|
||||
|
||||
/* AdvA flag */
|
||||
|
@ -940,7 +940,7 @@ struct pdu_adv_aux_ptr *ull_adv_aux_lll_offset_fill(uint32_t ticks_offset,
|
|||
|
||||
pri_com_hdr = (void *)&pdu->adv_ext_ind;
|
||||
h = (void *)pri_com_hdr->ext_hdr_adv_data;
|
||||
ptr = (uint8_t *)h + sizeof(*h);
|
||||
ptr = h->data;
|
||||
|
||||
if (h->adv_addr) {
|
||||
ptr += BDADDR_SIZE;
|
||||
|
|
|
@ -126,7 +126,7 @@ uint8_t ll_adv_sync_param_set(uint8_t handle, uint16_t interval, uint16_t flags)
|
|||
|
||||
ter_com_hdr = (void *)&ter_pdu->adv_ext_ind;
|
||||
ter_hdr = (void *)ter_com_hdr->ext_hdr_adv_data;
|
||||
ter_dptr = (uint8_t *)ter_hdr + sizeof(*ter_hdr);
|
||||
ter_dptr = ter_hdr->data;
|
||||
ter_hdr_prev = *ter_hdr;
|
||||
*(uint8_t *)ter_hdr = 0U;
|
||||
ter_dptr_prev = ter_dptr;
|
||||
|
@ -191,7 +191,7 @@ uint8_t ll_adv_sync_ad_data_set(uint8_t handle, uint8_t op, uint8_t len,
|
|||
ter_com_hdr_prev = (void *)&ter_pdu_prev->adv_ext_ind;
|
||||
ter_hdr = (void *)ter_com_hdr_prev->ext_hdr_adv_data;
|
||||
ter_hdr_prev = *ter_hdr;
|
||||
ter_dptr_prev = (uint8_t *)ter_hdr + sizeof(*ter_hdr);
|
||||
ter_dptr_prev = ter_hdr->data;
|
||||
|
||||
/* Get reference to new tertiary PDU data buffer */
|
||||
ter_pdu = lll_adv_sync_data_alloc(lll_sync, &ter_idx);
|
||||
|
@ -201,7 +201,7 @@ uint8_t ll_adv_sync_ad_data_set(uint8_t handle, uint8_t op, uint8_t len,
|
|||
ter_com_hdr = (void *)&ter_pdu->adv_ext_ind;
|
||||
ter_com_hdr->adv_mode = ter_com_hdr_prev->adv_mode;
|
||||
ter_hdr = (void *)ter_com_hdr->ext_hdr_adv_data;
|
||||
ter_dptr = (uint8_t *)ter_hdr + sizeof(*ter_hdr);
|
||||
ter_dptr = ter_hdr->data;
|
||||
*(uint8_t *)ter_hdr = 0U;
|
||||
|
||||
/* No AdvA */
|
||||
|
@ -652,7 +652,7 @@ static inline struct pdu_adv_sync_info *sync_info_get(struct pdu_adv *pdu)
|
|||
|
||||
p = (void *)&pdu->adv_ext_ind;
|
||||
h = (void *)p->ext_hdr_adv_data;
|
||||
ptr = (uint8_t *)h + sizeof(*h);
|
||||
ptr = h->data;
|
||||
|
||||
if (h->adv_addr) {
|
||||
ptr += BDADDR_SIZE;
|
||||
|
|
|
@ -192,7 +192,7 @@ void ull_scan_aux_setup(memq_link_t *link, struct node_rx_hdr *rx)
|
|||
goto ull_scan_aux_rx_flush;
|
||||
}
|
||||
|
||||
ptr = (uint8_t *)h + sizeof(*h);
|
||||
ptr = h->data;
|
||||
|
||||
if (h->adv_addr) {
|
||||
#if defined(CONFIG_BT_CTLR_SYNC_PERIODIC)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue