bluetooth: host: refactor bt_hci_le_per_adv_report data reassembly
Refactoring the periodic advertisment report receive function to make the handling of data reassembly more readable. Signed-off-by: Pierce Lowe <pierce.lowe@nordicsemi.no>
This commit is contained in:
parent
a7c1c27e38
commit
ba09a252ec
1 changed files with 29 additions and 25 deletions
|
|
@ -798,21 +798,6 @@ void bt_hci_le_per_adv_report(struct net_buf *buf)
|
||||||
|
|
||||||
if (!per_adv_sync->report_truncated) {
|
if (!per_adv_sync->report_truncated) {
|
||||||
#if CONFIG_BT_PER_ADV_SYNC_BUF_SIZE > 0
|
#if CONFIG_BT_PER_ADV_SYNC_BUF_SIZE > 0
|
||||||
if (evt->data_status == BT_HCI_LE_ADV_EVT_TYPE_DATA_STATUS_COMPLETE &&
|
|
||||||
per_adv_sync->reassembly.len == 0) {
|
|
||||||
/* We have not received any partial data before.
|
|
||||||
* This buffer can be forwarded without an extra copy.
|
|
||||||
*/
|
|
||||||
bt_hci_le_per_adv_report_recv(per_adv_sync, &buf->b, &info);
|
|
||||||
} else {
|
|
||||||
if (evt->data_status == BT_HCI_LE_ADV_EVT_TYPE_DATA_STATUS_INCOMPLETE) {
|
|
||||||
LOG_DBG("Received incomplete advertising data. "
|
|
||||||
"Advertising report dropped.");
|
|
||||||
|
|
||||||
per_adv_sync->report_truncated = true;
|
|
||||||
net_buf_simple_reset(&per_adv_sync->reassembly);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (net_buf_simple_tailroom(&per_adv_sync->reassembly) < evt->length) {
|
if (net_buf_simple_tailroom(&per_adv_sync->reassembly) < evt->length) {
|
||||||
/* The buffer is too small for the entire report. Drop it */
|
/* The buffer is too small for the entire report. Drop it */
|
||||||
LOG_WRN("Buffer is too small to reassemble the report. "
|
LOG_WRN("Buffer is too small to reassemble the report. "
|
||||||
|
|
@ -823,12 +808,31 @@ void bt_hci_le_per_adv_report(struct net_buf *buf)
|
||||||
net_buf_simple_reset(&per_adv_sync->reassembly);
|
net_buf_simple_reset(&per_adv_sync->reassembly);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
net_buf_simple_add_mem(&per_adv_sync->reassembly, buf->data, evt->length);
|
|
||||||
if (evt->data_status == BT_HCI_LE_ADV_EVT_TYPE_DATA_STATUS_COMPLETE) {
|
if (evt->data_status == BT_HCI_LE_ADV_EVT_TYPE_DATA_STATUS_COMPLETE) {
|
||||||
|
if (per_adv_sync->reassembly.len == 0) {
|
||||||
|
/* We have not received any partial data before.
|
||||||
|
* This buffer can be forwarded without an extra copy.
|
||||||
|
*/
|
||||||
|
bt_hci_le_per_adv_report_recv(per_adv_sync, &buf->b, &info);
|
||||||
|
} else {
|
||||||
|
net_buf_simple_add_mem(&per_adv_sync->reassembly,
|
||||||
|
buf->data, evt->length);
|
||||||
bt_hci_le_per_adv_report_recv(per_adv_sync,
|
bt_hci_le_per_adv_report_recv(per_adv_sync,
|
||||||
&per_adv_sync->reassembly, &info);
|
&per_adv_sync->reassembly, &info);
|
||||||
net_buf_simple_reset(&per_adv_sync->reassembly);
|
net_buf_simple_reset(&per_adv_sync->reassembly);
|
||||||
}
|
}
|
||||||
|
} else if (evt->data_status == BT_HCI_LE_ADV_EVT_TYPE_DATA_STATUS_INCOMPLETE) {
|
||||||
|
LOG_DBG("Received incomplete advertising data. "
|
||||||
|
"Advertising report dropped.");
|
||||||
|
|
||||||
|
per_adv_sync->report_truncated = true;
|
||||||
|
net_buf_simple_reset(&per_adv_sync->reassembly);
|
||||||
|
|
||||||
|
} else if (evt->data_status == BT_HCI_LE_ADV_EVT_TYPE_DATA_STATUS_PARTIAL) {
|
||||||
|
net_buf_simple_add_mem(&per_adv_sync->reassembly, buf->data, evt->length);
|
||||||
|
} else {
|
||||||
|
__ASSERT(false, "Invalid data status 0x%02X", evt->data_status);
|
||||||
}
|
}
|
||||||
#else /* CONFIG_BT_PER_ADV_SYNC_BUF_SIZE > 0 */
|
#else /* CONFIG_BT_PER_ADV_SYNC_BUF_SIZE > 0 */
|
||||||
if (evt->data_status == BT_HCI_LE_ADV_EVT_TYPE_DATA_STATUS_COMPLETE) {
|
if (evt->data_status == BT_HCI_LE_ADV_EVT_TYPE_DATA_STATUS_COMPLETE) {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue