Skip to content

Commit d8aad76

Browse files
committed
Bluetooth: Controller: Use macros for SCA and Channel Map access
Use macros to access SCA and Channel Map fields in the Sync Info structure in advertising PDUs. Signed-off-by: Vinayak Kariappa Chettimada <[email protected]>
1 parent ff6cdf0 commit d8aad76

File tree

4 files changed

+30
-6
lines changed

4 files changed

+30
-6
lines changed

subsys/bluetooth/controller/hci/hci.c

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5019,9 +5019,13 @@ static void le_ext_adv_report(struct pdu_data *pdu_data,
50195019
sys_le16_to_cpu(si->offs),
50205020
si->offs_units,
50215021
sys_le16_to_cpu(si->interval),
5022-
(si->sca_chm[4] >> 5),
5022+
((si->sca_chm[PDU_SYNC_INFO_SCA_CHM_SCA_BYTE_OFFSET] &
5023+
PDU_SYNC_INFO_SCA_CHM_SCA_BIT_MASK) >>
5024+
PDU_SYNC_INFO_SCA_CHM_SCA_BIT_POS),
50235025
si->sca_chm[0], si->sca_chm[1], si->sca_chm[2],
5024-
si->sca_chm[3], (si->sca_chm[4] & 0x1F),
5026+
si->sca_chm[3],
5027+
(si->sca_chm[PDU_SYNC_INFO_SCA_CHM_SCA_BYTE_OFFSET] &
5028+
~PDU_SYNC_INFO_SCA_CHM_SCA_BIT_MASK),
50255029
sys_le32_to_cpu(si->aa),
50265030
si->crc_init[0], si->crc_init[1],
50275031
si->crc_init[2], sys_le16_to_cpu(si->evt_cntr));

subsys/bluetooth/controller/ll_sw/pdu.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -366,6 +366,11 @@ struct pdu_adv_sync_info {
366366
uint16_t evt_cntr;
367367
} __packed;
368368

369+
#define PDU_SYNC_INFO_SCA_CHM_SCA_BYTE_OFFSET 4
370+
#define PDU_SYNC_INFO_SCA_CHM_SCA_BIT_POS 5
371+
#define PDU_SYNC_INFO_SCA_CHM_SCA_BIT_MASK \
372+
(0x07 << (PDU_SYNC_INFO_SCA_CHM_SCA_BIT_POS))
373+
369374
enum pdu_adv_type {
370375
PDU_ADV_TYPE_ADV_IND = 0x00,
371376
PDU_ADV_TYPE_DIRECT_IND = 0x01,

subsys/bluetooth/controller/ll_sw/ull_adv_sync.c

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -724,8 +724,12 @@ void ull_adv_sync_info_fill(struct ll_adv_sync_set *sync,
724724
lll_sync = &sync->lll;
725725
memcpy(si->sca_chm, lll_sync->data_chan_map,
726726
sizeof(si->sca_chm));
727-
si->sca_chm[4] &= 0x1f;
728-
si->sca_chm[4] |= lll_clock_sca_local_get() << 5;
727+
si->sca_chm[PDU_SYNC_INFO_SCA_CHM_SCA_BYTE_OFFSET] &=
728+
~PDU_SYNC_INFO_SCA_CHM_SCA_BIT_MASK;
729+
si->sca_chm[PDU_SYNC_INFO_SCA_CHM_SCA_BYTE_OFFSET] |=
730+
((lll_clock_sca_local_get() <<
731+
PDU_SYNC_INFO_SCA_CHM_SCA_BIT_POS) &
732+
PDU_SYNC_INFO_SCA_CHM_SCA_BIT_MASK);
729733
memcpy(&si->aa, lll_sync->access_addr, sizeof(si->aa));
730734
memcpy(si->crc_init, lll_sync->crc_init, sizeof(si->crc_init));
731735

subsys/bluetooth/controller/ll_sw/ull_sync.c

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -383,8 +383,13 @@ void ull_sync_setup(struct ll_scan_set *scan, struct ll_scan_aux_set *aux,
383383
}
384384

385385
lll = &sync->lll;
386+
387+
/* Copy channel map from sca_chm field in sync_info structure, and
388+
* clear the SCA bits.
389+
*/
386390
memcpy(lll->data_chan_map, si->sca_chm, sizeof(lll->data_chan_map));
387-
lll->data_chan_map[4] &= ~0xE0;
391+
lll->data_chan_map[PDU_SYNC_INFO_SCA_CHM_SCA_BYTE_OFFSET] &=
392+
~PDU_SYNC_INFO_SCA_CHM_SCA_BIT_MASK;
388393
lll->data_chan_count = util_ones_count_get(&lll->data_chan_map[0],
389394
sizeof(lll->data_chan_map));
390395
if (lll->data_chan_count < 2) {
@@ -397,7 +402,13 @@ void ull_sync_setup(struct ll_scan_set *scan, struct ll_scan_aux_set *aux,
397402
lll->event_counter = si->evt_cntr;
398403
lll->phy = aux->lll.phy;
399404

400-
sca = si->sca_chm[4] >> 5;
405+
/* Extract the SCA value from the sca_chm field of the sync_info
406+
* structure.
407+
*/
408+
sca = (si->sca_chm[PDU_SYNC_INFO_SCA_CHM_SCA_BYTE_OFFSET] &
409+
PDU_SYNC_INFO_SCA_CHM_SCA_BIT_MASK) >>
410+
PDU_SYNC_INFO_SCA_CHM_SCA_BIT_POS;
411+
401412
interval = sys_le16_to_cpu(si->interval);
402413
interval_us = interval * CONN_INT_UNIT_US;
403414

0 commit comments

Comments
 (0)