Bluetooth: controller: Use define for common ext. header minimum size
Use define for the common extended header format's minimum length value. Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
This commit is contained in:
parent
c3befdc771
commit
9cb07ab413
5 changed files with 30 additions and 43 deletions
|
@ -4683,6 +4683,7 @@ static void le_ext_adv_report(struct pdu_data *pdu_data,
|
||||||
struct pdu_adv_ext_hdr *h;
|
struct pdu_adv_ext_hdr *h;
|
||||||
uint8_t sec_phy_curr = 0U;
|
uint8_t sec_phy_curr = 0U;
|
||||||
uint8_t evt_type_curr;
|
uint8_t evt_type_curr;
|
||||||
|
uint8_t hdr_buf_len;
|
||||||
uint8_t hdr_len;
|
uint8_t hdr_len;
|
||||||
uint8_t *ptr;
|
uint8_t *ptr;
|
||||||
|
|
||||||
|
@ -4707,8 +4708,7 @@ static void le_ext_adv_report(struct pdu_data *pdu_data,
|
||||||
evt_type_curr = p->adv_mode;
|
evt_type_curr = p->adv_mode;
|
||||||
|
|
||||||
if (!p->ext_hdr_len) {
|
if (!p->ext_hdr_len) {
|
||||||
hdr_len = offsetof(struct pdu_adv_com_ext_adv,
|
hdr_len = PDU_AC_EXT_HEADER_SIZE_MIN;
|
||||||
ext_hdr_adv_data);
|
|
||||||
|
|
||||||
goto no_ext_hdr;
|
goto no_ext_hdr;
|
||||||
}
|
}
|
||||||
|
@ -4798,24 +4798,18 @@ static void le_ext_adv_report(struct pdu_data *pdu_data,
|
||||||
}
|
}
|
||||||
|
|
||||||
hdr_len = ptr - (uint8_t *)p;
|
hdr_len = ptr - (uint8_t *)p;
|
||||||
if (hdr_len <= (offsetof(struct pdu_adv_com_ext_adv,
|
if (hdr_len <= (PDU_AC_EXT_HEADER_SIZE_MIN +
|
||||||
ext_hdr_adv_data) +
|
|
||||||
sizeof(struct pdu_adv_ext_hdr))) {
|
sizeof(struct pdu_adv_ext_hdr))) {
|
||||||
hdr_len = offsetof(struct pdu_adv_com_ext_adv,
|
hdr_len = PDU_AC_EXT_HEADER_SIZE_MIN;
|
||||||
ext_hdr_adv_data);
|
|
||||||
ptr = (uint8_t *)h;
|
ptr = (uint8_t *)h;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hdr_len > (p->ext_hdr_len +
|
hdr_buf_len = PDU_AC_EXT_HEADER_SIZE_MIN + p->ext_hdr_len;
|
||||||
offsetof(struct pdu_adv_com_ext_adv,
|
if (hdr_len > hdr_buf_len) {
|
||||||
ext_hdr_adv_data))) {
|
|
||||||
BT_WARN(" Header length %u/%u, INVALID.", hdr_len,
|
BT_WARN(" Header length %u/%u, INVALID.", hdr_len,
|
||||||
p->ext_hdr_len);
|
p->ext_hdr_len);
|
||||||
} else {
|
} else {
|
||||||
uint8_t acad_len = p->ext_hdr_len +
|
uint8_t acad_len = hdr_buf_len - hdr_len;
|
||||||
offsetof(struct pdu_adv_com_ext_adv,
|
|
||||||
ext_hdr_adv_data) -
|
|
||||||
hdr_len;
|
|
||||||
|
|
||||||
if (acad_len) {
|
if (acad_len) {
|
||||||
ptr += acad_len;
|
ptr += acad_len;
|
||||||
|
@ -5104,6 +5098,7 @@ static void le_per_adv_sync_report(struct pdu_data *pdu_data,
|
||||||
uint8_t *data_curr = NULL;
|
uint8_t *data_curr = NULL;
|
||||||
uint8_t sec_phy_curr = 0U;
|
uint8_t sec_phy_curr = 0U;
|
||||||
struct pdu_adv_ext_hdr *h;
|
struct pdu_adv_ext_hdr *h;
|
||||||
|
uint8_t hdr_buf_len;
|
||||||
uint8_t hdr_len;
|
uint8_t hdr_len;
|
||||||
uint8_t *ptr;
|
uint8_t *ptr;
|
||||||
|
|
||||||
|
@ -5167,24 +5162,18 @@ static void le_per_adv_sync_report(struct pdu_data *pdu_data,
|
||||||
}
|
}
|
||||||
|
|
||||||
hdr_len = ptr - (uint8_t *)p;
|
hdr_len = ptr - (uint8_t *)p;
|
||||||
if (hdr_len <= (offsetof(struct pdu_adv_com_ext_adv,
|
if (hdr_len <= (PDU_AC_EXT_HEADER_SIZE_MIN +
|
||||||
ext_hdr_adv_data) +
|
|
||||||
sizeof(struct pdu_adv_ext_hdr))) {
|
sizeof(struct pdu_adv_ext_hdr))) {
|
||||||
hdr_len = offsetof(struct pdu_adv_com_ext_adv,
|
hdr_len = PDU_AC_EXT_HEADER_SIZE_MIN;
|
||||||
ext_hdr_adv_data);
|
|
||||||
ptr = (uint8_t *)h;
|
ptr = (uint8_t *)h;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hdr_len > (p->ext_hdr_len +
|
hdr_buf_len = PDU_AC_EXT_HEADER_SIZE_MIN + p->ext_hdr_len;
|
||||||
offsetof(struct pdu_adv_com_ext_adv,
|
if (hdr_len > hdr_buf_len) {
|
||||||
ext_hdr_adv_data))) {
|
|
||||||
BT_WARN(" Header length %u/%u, INVALID.", hdr_len,
|
BT_WARN(" Header length %u/%u, INVALID.", hdr_len,
|
||||||
p->ext_hdr_len);
|
p->ext_hdr_len);
|
||||||
} else {
|
} else {
|
||||||
uint8_t acad_len = p->ext_hdr_len +
|
uint8_t acad_len = hdr_buf_len - hdr_len;
|
||||||
offsetof(struct pdu_adv_com_ext_adv,
|
|
||||||
ext_hdr_adv_data) -
|
|
||||||
hdr_len;
|
|
||||||
|
|
||||||
if (acad_len) {
|
if (acad_len) {
|
||||||
ptr += acad_len;
|
ptr += acad_len;
|
||||||
|
|
|
@ -39,13 +39,14 @@
|
||||||
|
|
||||||
/* Advertisement channel maximum payload size */
|
/* Advertisement channel maximum payload size */
|
||||||
#if defined(CONFIG_BT_CTLR_ADV_EXT)
|
#if defined(CONFIG_BT_CTLR_ADV_EXT)
|
||||||
|
#define PDU_AC_EXT_HEADER_SIZE_MIN offsetof(struct pdu_adv_com_ext_adv, \
|
||||||
|
ext_hdr_adv_data)
|
||||||
#define PDU_AC_EXT_HEADER_SIZE_MAX 63
|
#define PDU_AC_EXT_HEADER_SIZE_MAX 63
|
||||||
/* TODO: PDU_AC_EXT_PAYLOAD_OVERHEAD can be reduced based on supported
|
/* TODO: PDU_AC_EXT_PAYLOAD_OVERHEAD can be reduced based on supported
|
||||||
* features, like omitting support for periodic advertising will reduce
|
* features, like omitting support for periodic advertising will reduce
|
||||||
* 18 octets in the Common Extended Advertising Payload Format.
|
* 18 octets in the Common Extended Advertising Payload Format.
|
||||||
*/
|
*/
|
||||||
#define PDU_AC_EXT_PAYLOAD_OVERHEAD (offsetof(struct pdu_adv_com_ext_adv, \
|
#define PDU_AC_EXT_PAYLOAD_OVERHEAD (PDU_AC_EXT_HEADER_SIZE_MIN + \
|
||||||
ext_hdr_adv_data) + \
|
|
||||||
PDU_AC_EXT_HEADER_SIZE_MAX)
|
PDU_AC_EXT_HEADER_SIZE_MAX)
|
||||||
#define PDU_AC_PAYLOAD_SIZE_MAX MAX(MIN((PDU_AC_EXT_PAYLOAD_OVERHEAD + \
|
#define PDU_AC_PAYLOAD_SIZE_MAX MAX(MIN((PDU_AC_EXT_PAYLOAD_OVERHEAD + \
|
||||||
CONFIG_BT_CTLR_ADV_DATA_LEN_MAX), \
|
CONFIG_BT_CTLR_ADV_DATA_LEN_MAX), \
|
||||||
|
|
|
@ -438,15 +438,16 @@ uint8_t ull_adv_aux_hdr_set_clear(struct ll_adv_set *adv,
|
||||||
struct pdu_adv_com_ext_adv *sec_com_hdr, *sec_com_hdr_prev;
|
struct pdu_adv_com_ext_adv *sec_com_hdr, *sec_com_hdr_prev;
|
||||||
struct pdu_adv_ext_hdr *pri_hdr, pri_hdr_prev;
|
struct pdu_adv_ext_hdr *pri_hdr, pri_hdr_prev;
|
||||||
struct pdu_adv_ext_hdr *sec_hdr, sec_hdr_prev;
|
struct pdu_adv_ext_hdr *sec_hdr, sec_hdr_prev;
|
||||||
uint16_t pri_len, sec_len, sec_len_prev;
|
|
||||||
struct pdu_adv *pri_pdu, *pri_pdu_prev;
|
struct pdu_adv *pri_pdu, *pri_pdu_prev;
|
||||||
struct pdu_adv *sec_pdu_prev, *sec_pdu;
|
struct pdu_adv *sec_pdu_prev, *sec_pdu;
|
||||||
uint8_t *pri_dptr, *pri_dptr_prev;
|
uint8_t *pri_dptr, *pri_dptr_prev;
|
||||||
uint8_t *sec_dptr, *sec_dptr_prev;
|
uint8_t *sec_dptr, *sec_dptr_prev;
|
||||||
|
uint8_t pri_len, sec_len_prev;
|
||||||
struct lll_adv_aux *lll_aux;
|
struct lll_adv_aux *lll_aux;
|
||||||
struct lll_adv *lll;
|
struct lll_adv *lll;
|
||||||
uint8_t is_aux_new;
|
uint8_t is_aux_new;
|
||||||
uint8_t *ad_data;
|
uint8_t *ad_data;
|
||||||
|
uint16_t sec_len;
|
||||||
uint8_t sec_idx;
|
uint8_t sec_idx;
|
||||||
uint8_t ad_len;
|
uint8_t ad_len;
|
||||||
|
|
||||||
|
@ -524,8 +525,7 @@ uint8_t ull_adv_aux_hdr_set_clear(struct ll_adv_set *adv,
|
||||||
*/
|
*/
|
||||||
sec_pdu_prev->tx_addr = 0U;
|
sec_pdu_prev->tx_addr = 0U;
|
||||||
sec_pdu_prev->rx_addr = 0U;
|
sec_pdu_prev->rx_addr = 0U;
|
||||||
sec_pdu_prev->len = offsetof(struct pdu_adv_com_ext_adv,
|
sec_pdu_prev->len = PDU_AC_EXT_HEADER_SIZE_MIN;
|
||||||
ext_hdr_adv_data);
|
|
||||||
*(uint8_t *)&sec_hdr_prev = 0U;
|
*(uint8_t *)&sec_hdr_prev = 0U;
|
||||||
}
|
}
|
||||||
sec_dptr_prev = sec_hdr->data;
|
sec_dptr_prev = sec_hdr->data;
|
||||||
|
|
|
@ -125,10 +125,9 @@ ull_adv_aux_hdr_len_calc(struct pdu_adv_com_ext_adv *com_hdr, uint8_t **dptr)
|
||||||
uint8_t len;
|
uint8_t len;
|
||||||
|
|
||||||
len = *dptr - (uint8_t *)com_hdr;
|
len = *dptr - (uint8_t *)com_hdr;
|
||||||
if (len <= (offsetof(struct pdu_adv_com_ext_adv, ext_hdr_adv_data) +
|
if (len <= (PDU_AC_EXT_HEADER_SIZE_MIN +
|
||||||
sizeof(struct pdu_adv_ext_hdr))) {
|
sizeof(struct pdu_adv_ext_hdr))) {
|
||||||
len = offsetof(struct pdu_adv_com_ext_adv,
|
len = PDU_AC_EXT_HEADER_SIZE_MIN;
|
||||||
ext_hdr_adv_data);
|
|
||||||
*dptr = (uint8_t *)com_hdr + len;
|
*dptr = (uint8_t *)com_hdr + len;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -139,8 +138,7 @@ ull_adv_aux_hdr_len_calc(struct pdu_adv_com_ext_adv *com_hdr, uint8_t **dptr)
|
||||||
static inline void
|
static inline void
|
||||||
ull_adv_aux_hdr_len_fill(struct pdu_adv_com_ext_adv *com_hdr, uint8_t len)
|
ull_adv_aux_hdr_len_fill(struct pdu_adv_com_ext_adv *com_hdr, uint8_t len)
|
||||||
{
|
{
|
||||||
com_hdr->ext_hdr_len = len - offsetof(struct pdu_adv_com_ext_adv,
|
com_hdr->ext_hdr_len = len - PDU_AC_EXT_HEADER_SIZE_MIN;
|
||||||
ext_hdr_adv_data);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -657,9 +657,10 @@ static uint8_t adv_sync_hdr_set_clear(struct lll_adv_sync *lll_sync,
|
||||||
struct pdu_adv_com_ext_adv *ter_com_hdr, *ter_com_hdr_prev;
|
struct pdu_adv_com_ext_adv *ter_com_hdr, *ter_com_hdr_prev;
|
||||||
struct pdu_adv_ext_hdr *ter_hdr, ter_hdr_prev;
|
struct pdu_adv_ext_hdr *ter_hdr, ter_hdr_prev;
|
||||||
uint8_t *ter_dptr, *ter_dptr_prev;
|
uint8_t *ter_dptr, *ter_dptr_prev;
|
||||||
uint16_t ter_len, ter_len_prev;
|
|
||||||
uint16_t ext_hdr_buf_len;
|
|
||||||
uint8_t acad_len_prev;
|
uint8_t acad_len_prev;
|
||||||
|
uint8_t ter_len_prev;
|
||||||
|
uint8_t hdr_buf_len;
|
||||||
|
uint16_t ter_len;
|
||||||
uint8_t *ad_data;
|
uint8_t *ad_data;
|
||||||
#if IS_ENABLED(CONFIG_BT_CTLR_DF_ADV_CTE_TX)
|
#if IS_ENABLED(CONFIG_BT_CTLR_DF_ADV_CTE_TX)
|
||||||
uint8_t cte_info;
|
uint8_t cte_info;
|
||||||
|
@ -736,11 +737,10 @@ static uint8_t adv_sync_hdr_set_clear(struct lll_adv_sync *lll_sync,
|
||||||
|
|
||||||
/* Calc previous ACAD len and update PDU len */
|
/* Calc previous ACAD len and update PDU len */
|
||||||
ter_len_prev = ter_dptr_prev - (uint8_t *)ter_com_hdr_prev;
|
ter_len_prev = ter_dptr_prev - (uint8_t *)ter_com_hdr_prev;
|
||||||
ext_hdr_buf_len = ter_com_hdr_prev->ext_hdr_len +
|
hdr_buf_len = ter_com_hdr_prev->ext_hdr_len +
|
||||||
offsetof(struct pdu_adv_com_ext_adv,
|
PDU_AC_EXT_HEADER_SIZE_MIN;
|
||||||
ext_hdr_adv_data);
|
if (ter_len_prev <= hdr_buf_len) {
|
||||||
if (ter_len_prev <= ext_hdr_buf_len) {
|
acad_len_prev = hdr_buf_len - ter_len_prev;
|
||||||
acad_len_prev = ext_hdr_buf_len - ter_len_prev;
|
|
||||||
ter_len_prev += acad_len_prev;
|
ter_len_prev += acad_len_prev;
|
||||||
ter_dptr_prev += acad_len_prev;
|
ter_dptr_prev += acad_len_prev;
|
||||||
ter_dptr += acad_len_prev;
|
ter_dptr += acad_len_prev;
|
||||||
|
@ -752,8 +752,7 @@ static uint8_t adv_sync_hdr_set_clear(struct lll_adv_sync *lll_sync,
|
||||||
* hence set ter_len_prev to size of the length/mode
|
* hence set ter_len_prev to size of the length/mode
|
||||||
* field.
|
* field.
|
||||||
*/
|
*/
|
||||||
ter_len_prev = offsetof(struct pdu_adv_com_ext_adv,
|
ter_len_prev = PDU_AC_EXT_HEADER_SIZE_MIN;
|
||||||
ext_hdr_adv_data);
|
|
||||||
ter_dptr_prev = (uint8_t *)ter_com_hdr_prev + ter_len_prev;
|
ter_dptr_prev = (uint8_t *)ter_com_hdr_prev + ter_len_prev;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue