@@ -672,10 +672,16 @@ uint8_t ll_adv_enable(uint8_t enable)
672
672
#if defined(CONFIG_BT_CTLR_ADV_EXT )
673
673
} else if (pdu_adv -> type == PDU_ADV_TYPE_EXT_IND ) {
674
674
struct pdu_adv_com_ext_adv * pri_com_hdr ;
675
+ struct pdu_adv_ext_hdr pri_hdr_flags ;
675
676
struct pdu_adv_ext_hdr * pri_hdr ;
676
677
677
678
pri_com_hdr = (void * )& pdu_adv -> adv_ext_ind ;
678
679
pri_hdr = (void * )pri_com_hdr -> ext_hdr_adv_data ;
680
+ if (pri_com_hdr -> ext_hdr_len ) {
681
+ pri_hdr_flags = * pri_hdr ;
682
+ } else {
683
+ * (uint8_t * )& pri_hdr_flags = 0U ;
684
+ }
679
685
680
686
if (pri_com_hdr -> adv_mode & BT_HCI_LE_ADV_PROP_SCAN ) {
681
687
struct pdu_adv * sr = lll_adv_scan_rsp_peek (lll );
@@ -686,20 +692,26 @@ uint8_t ll_adv_enable(uint8_t enable)
686
692
}
687
693
688
694
/* AdvA, fill here at enable */
689
- if (pri_hdr -> adv_addr ) {
695
+ if (pri_hdr_flags . adv_addr ) {
690
696
pdu_adv_to_update = pdu_adv ;
691
697
#if (CONFIG_BT_CTLR_ADV_AUX_SET > 0 )
692
- } else if (pri_hdr -> aux_ptr ) {
698
+ } else if (pri_hdr_flags . aux_ptr ) {
693
699
struct pdu_adv_com_ext_adv * sec_com_hdr ;
700
+ struct pdu_adv_ext_hdr sec_hdr_flags ;
694
701
struct pdu_adv_ext_hdr * sec_hdr ;
695
702
struct pdu_adv * sec_pdu ;
696
703
697
704
sec_pdu = lll_adv_aux_data_peek (lll -> aux );
698
705
699
706
sec_com_hdr = (void * )& sec_pdu -> adv_ext_ind ;
700
707
sec_hdr = (void * )sec_com_hdr -> ext_hdr_adv_data ;
708
+ if (sec_com_hdr -> ext_hdr_len ) {
709
+ sec_hdr_flags = * sec_hdr ;
710
+ } else {
711
+ * (uint8_t * )& sec_hdr_flags = 0U ;
712
+ }
701
713
702
- if (sec_hdr -> adv_addr ) {
714
+ if (sec_hdr_flags . adv_addr ) {
703
715
pdu_adv_to_update = sec_pdu ;
704
716
}
705
717
#endif /* (CONFIG_BT_CTLR_ADV_AUX_SET > 0) */
@@ -1659,10 +1671,19 @@ void ull_adv_done(struct node_rx_event_done *done)
1659
1671
const uint8_t * ull_adv_pdu_update_addrs (struct ll_adv_set * adv ,
1660
1672
struct pdu_adv * pdu )
1661
1673
{
1674
+ const uint8_t * adv_addr ;
1675
+
1662
1676
#if defined(CONFIG_BT_CTLR_ADV_EXT )
1663
- struct pdu_adv_ext_hdr * hdr = (void * )pdu -> adv_ext_ind .ext_hdr_adv_data ;
1677
+ struct pdu_adv_com_ext_adv * com_hdr = (void * )& pdu -> adv_ext_ind ;
1678
+ struct pdu_adv_ext_hdr * hdr = (void * )com_hdr -> ext_hdr_adv_data ;
1679
+ struct pdu_adv_ext_hdr hdr_flags ;
1680
+
1681
+ if (com_hdr -> ext_hdr_len ) {
1682
+ hdr_flags = * hdr ;
1683
+ } else {
1684
+ * (uint8_t * )& hdr_flags = 0U ;
1685
+ }
1664
1686
#endif
1665
- const uint8_t * adv_addr ;
1666
1687
1667
1688
adv_addr = adva_update (adv , pdu );
1668
1689
@@ -1672,7 +1693,7 @@ const uint8_t *ull_adv_pdu_update_addrs(struct ll_adv_set *adv,
1672
1693
*/
1673
1694
if ((pdu -> type == PDU_ADV_TYPE_DIRECT_IND ) ||
1674
1695
#if defined(CONFIG_BT_CTLR_ADV_EXT )
1675
- ((pdu -> type == PDU_ADV_TYPE_EXT_IND ) && hdr -> tgt_addr ) ||
1696
+ ((pdu -> type == PDU_ADV_TYPE_EXT_IND ) && hdr_flags . tgt_addr ) ||
1676
1697
#endif
1677
1698
0 ) {
1678
1699
tgta_update (adv , pdu );
@@ -2117,12 +2138,21 @@ static inline uint8_t disable(uint8_t handle)
2117
2138
static inline uint8_t * adv_pdu_adva_get (struct pdu_adv * pdu )
2118
2139
{
2119
2140
#if defined(CONFIG_BT_CTLR_ADV_EXT )
2120
- struct pdu_adv_ext_hdr * hdr = (void * )pdu -> adv_ext_ind .ext_hdr_adv_data ;
2141
+ struct pdu_adv_com_ext_adv * com_hdr = (void * )& pdu -> adv_ext_ind ;
2142
+ struct pdu_adv_ext_hdr * hdr = (void * )com_hdr -> ext_hdr_adv_data ;
2143
+ struct pdu_adv_ext_hdr hdr_flags ;
2144
+
2145
+ if (com_hdr -> ext_hdr_len ) {
2146
+ hdr_flags = * hdr ;
2147
+ } else {
2148
+ * (uint8_t * )& hdr_flags = 0U ;
2149
+ }
2121
2150
2122
2151
/* All extended PDUs have AdvA at the same offset in common header */
2123
2152
if (pdu -> type == PDU_ADV_TYPE_EXT_IND ) {
2124
- LL_ASSERT (hdr -> adv_addr );
2125
- return & pdu -> adv_ext_ind .ext_hdr_adv_data [1 ];
2153
+ LL_ASSERT (hdr_flags .adv_addr );
2154
+
2155
+ return & com_hdr -> ext_hdr_adv_data [1 ];
2126
2156
}
2127
2157
#endif
2128
2158
0 commit comments