Commit ff56ad80 authored by Vinayak Kariappa Chettimada's avatar Vinayak Kariappa Chettimada Committed by Carles Cufi
Browse files

Bluetooth: Controller: Use defines in AD Data format implementation



Use defines for AD data format field sizes and offsets when
populating AD data format in advertising PDUs.

Signed-off-by: default avatarVinayak Kariappa Chettimada <vich@nordicsemi.no>
parent 8465dd4f
Loading
Loading
Loading
Loading
+9 −4
Original line number Diff line number Diff line
@@ -6320,14 +6320,19 @@ no_ext_hdr:
	}

	if ((le_event_mask & BT_EVT_MASK_LE_BIGINFO_ADV_REPORT) && acad &&
	    (acad_len >= (PDU_BIG_INFO_CLEARTEXT_SIZE + 2))) {
	    (acad_len >= (PDU_BIG_INFO_CLEARTEXT_SIZE +
			  PDU_ADV_DATA_HEADER_SIZE))) {
		struct bt_hci_evt_le_biginfo_adv_report *sep;
		struct pdu_big_info *bi;
		uint8_t bi_size;

		/* TODO: Parse and find the BIGInfo */
		bi_size = acad[0];
		bi = (void *)&acad[2];
		/* FIXME: Parse and find the BIGInfo */
		if (acad[PDU_ADV_DATA_HEADER_TYPE_OFFSET] != BT_DATA_BIG_INFO) {
			return;
		}

		bi_size = acad[PDU_ADV_DATA_HEADER_LEN_OFFSET];
		bi = (void *)&acad[PDU_ADV_DATA_HEADER_DATA_OFFSET];

		/* Allocate new event buffer if periodic advertising report was
		 * constructed with the caller supplied buffer.
+8 −0
Original line number Diff line number Diff line
@@ -137,6 +137,14 @@
/* Channel Map Size */
#define PDU_CHANNEL_MAP_SIZE 5

/* Advertising Data */
#define PDU_ADV_DATA_HEADER_SIZE        2U
#define PDU_ADV_DATA_HEADER_LEN_SIZE    1U
#define PDU_ADV_DATA_HEADER_TYPE_SIZE   1U
#define PDU_ADV_DATA_HEADER_LEN_OFFSET  0U
#define PDU_ADV_DATA_HEADER_TYPE_OFFSET 1U
#define PDU_ADV_DATA_HEADER_DATA_OFFSET 2U

/*
 * Macros to return correct Data Channel PDU time
 * Note: formula is valid for 1M, 2M and Coded S8
+7 −5
Original line number Diff line number Diff line
@@ -306,7 +306,7 @@ uint8_t ll_big_create(uint8_t big_handle, uint8_t adv_handle, uint8_t num_bis,
	} else {
		pdu_big_info_size = PDU_BIG_INFO_CLEARTEXT_SIZE;
	}
	hdr_data[0] = pdu_big_info_size + 2U;
	hdr_data[0] = pdu_big_info_size + PDU_ADV_DATA_HEADER_SIZE;
	err = ull_adv_sync_pdu_set_clear(lll_adv_sync, pdu_prev, pdu,
					 ULL_ADV_PDU_HDR_FIELD_ACAD, 0U,
					 &hdr_data);
@@ -317,10 +317,12 @@ uint8_t ll_big_create(uint8_t big_handle, uint8_t adv_handle, uint8_t num_bis,
		return err;
	}

	memcpy(&acad, &hdr_data[1], sizeof(acad));
	acad[0] = pdu_big_info_size + 1U;
	acad[1] = BT_DATA_BIG_INFO;
	big_info = (void *)&acad[2];
	(void)memcpy(&acad, &hdr_data[1], sizeof(acad));
	acad[PDU_ADV_DATA_HEADER_LEN_OFFSET] =
		pdu_big_info_size + (PDU_ADV_DATA_HEADER_SIZE -
				     PDU_ADV_DATA_HEADER_LEN_SIZE);
	acad[PDU_ADV_DATA_HEADER_TYPE_OFFSET] = BT_DATA_BIG_INFO;
	big_info = (void *)&acad[PDU_ADV_DATA_HEADER_DATA_OFFSET];

	/* big_info->offset, big_info->offset_units and
	 * big_info->payload_count_framing[] will be filled by periodic
+7 −5
Original line number Diff line number Diff line
@@ -882,8 +882,10 @@ void ull_adv_sync_chm_complete(struct node_rx_hdr *rx)
		     sizeof(acad));
	ad = acad;
	do {
		ad_len = ad[0];
		if (ad_len && (ad[1] == BT_DATA_CHANNEL_MAP_UPDATE_IND)) {
		ad_len = ad[PDU_ADV_DATA_HEADER_LEN_OFFSET];
		if (ad_len &&
		    (ad[PDU_ADV_DATA_HEADER_TYPE_OFFSET] ==
		     BT_DATA_CHANNEL_MAP_UPDATE_IND)) {
			break;
		}

@@ -1485,11 +1487,11 @@ static uint8_t sync_chm_update(uint8_t handle)
	(void)memcpy(&acad, &hdr_data[ULL_ADV_HDR_DATA_ACAD_PTR_OFFSET],
		     sizeof(acad));
	acad += acad_len_prev;
	acad[0] = sizeof(*chm_upd_ind) + 1U;
	acad[1] = BT_DATA_CHANNEL_MAP_UPDATE_IND;
	acad[PDU_ADV_DATA_HEADER_LEN_OFFSET] = sizeof(*chm_upd_ind) + 1U;
	acad[PDU_ADV_DATA_HEADER_TYPE_OFFSET] = BT_DATA_CHANNEL_MAP_UPDATE_IND;

	/* Populate the Channel Map Indication structure */
	chm_upd_ind = (void *)&acad[2];
	chm_upd_ind = (void *)&acad[PDU_ADV_DATA_HEADER_DATA_OFFSET];
	(void)ull_chan_map_get(chm_upd_ind->chm);
	instant = lll_sync->event_counter + 6U;
	chm_upd_ind->instant = sys_cpu_to_le16(instant);
+5 −3
Original line number Diff line number Diff line
@@ -917,8 +917,10 @@ void ull_sync_chm_update(uint8_t sync_handle, uint8_t *acad, uint8_t acad_len)
	/* Find the Channel Map Update Indication */
	do {
		/* Pick the length and find the Channel Map Update Indication */
		ad_len = acad[0];
		if (ad_len && (acad[1] == BT_DATA_CHANNEL_MAP_UPDATE_IND)) {
		ad_len = acad[PDU_ADV_DATA_HEADER_LEN_OFFSET];
		if (ad_len &&
		    (acad[PDU_ADV_DATA_HEADER_TYPE_OFFSET] ==
		     BT_DATA_CHANNEL_MAP_UPDATE_IND)) {
			break;
		}

@@ -945,7 +947,7 @@ void ull_sync_chm_update(uint8_t sync_handle, uint8_t *acad, uint8_t acad_len)
		chm_last = 0U;
	}

	chm_upd_ind = (void *)&acad[2];
	chm_upd_ind = (void *)&acad[PDU_ADV_DATA_HEADER_DATA_OFFSET];
	(void)memcpy(lll->chm[chm_last].data_chan_map, chm_upd_ind->chm,
		     sizeof(lll->chm[chm_last].data_chan_map));
	lll->chm[chm_last].data_chan_count =
Loading