mirror of
https://github.com/espressif/esp-idf.git
synced 2026-10-03 03:31:41 +03:00
change(bt/ble_log): make checksum and enhanced statistics always enabled
Remove CONFIG_BLE_LOG_PAYLOAD_CHECKSUM_ENABLED conditional compilation -- payload checksum is always computed over the full frame. Remove CONFIG_BLE_LOG_XOR_CHECKSUM_ENABLED conditional -- XOR checksum is always used; delete the sum checksum dead code path. Remove CONFIG_BLE_LOG_ENH_STAT_ENABLED conditional -- enhanced statistics (frame/byte counters per source) are always active. Remove incorrect select on choice symbol BT_LE_CONTROLLER_LOG_MODE_BLE_LOG_V2 from BLE_LOG_IS_ESP_CONTROLLER.
This commit is contained in:
@@ -47,7 +47,6 @@ if BLE_LOG_ENABLED
|
|||||||
depends on SOC_ESP_NIMBLE_CONTROLLER
|
depends on SOC_ESP_NIMBLE_CONTROLLER
|
||||||
default y
|
default y
|
||||||
select BT_LE_CONTROLLER_LOG_ENABLED
|
select BT_LE_CONTROLLER_LOG_ENABLED
|
||||||
select BT_LE_CONTROLLER_LOG_MODE_BLE_LOG_V2
|
|
||||||
select BLE_LOG_LL_ENABLED
|
select BLE_LOG_LL_ENABLED
|
||||||
help
|
help
|
||||||
Current BLE Controller is ESP BLE Controller
|
Current BLE Controller is ESP BLE Controller
|
||||||
@@ -104,30 +103,6 @@ if BLE_LOG_ENABLED
|
|||||||
help
|
help
|
||||||
Enable BLE Host side HCI Logging
|
Enable BLE Host side HCI Logging
|
||||||
|
|
||||||
config BLE_LOG_PAYLOAD_CHECKSUM_ENABLED
|
|
||||||
bool "Enable payload checksum for BLE Log data integrity check"
|
|
||||||
default y
|
|
||||||
help
|
|
||||||
Checksum is the default method for BLE Log data integrity check,
|
|
||||||
but for targets with slow CPU speed, it may cause significant system
|
|
||||||
performance decrease; a compromise could be made to balance the
|
|
||||||
realtime performance and log data integrity, which is calculating the
|
|
||||||
checksum of frame head and payload all together by default, or only
|
|
||||||
calculate the checksum of frame head to minimize performance decrease
|
|
||||||
|
|
||||||
config BLE_LOG_XOR_CHECKSUM_ENABLED
|
|
||||||
bool "Enable XOR checksum for BLE Log payload integrity check"
|
|
||||||
default y
|
|
||||||
help
|
|
||||||
XOR checksum is introduced for integrity check performance optimization.
|
|
||||||
|
|
||||||
config BLE_LOG_ENH_STAT_ENABLED
|
|
||||||
bool "Enable enhanced statistics for BLE Log"
|
|
||||||
default n
|
|
||||||
help
|
|
||||||
Enable enhanced statistics for written/lost frame/bytes count, which may
|
|
||||||
cost additional ~100kB memory
|
|
||||||
|
|
||||||
config BLE_LOG_TS_ENABLED
|
config BLE_LOG_TS_ENABLED
|
||||||
bool "Enable BLE Log Timestamp Synchronization (TS)"
|
bool "Enable BLE Log Timestamp Synchronization (TS)"
|
||||||
default n
|
default n
|
||||||
|
|||||||
@@ -30,9 +30,7 @@ BLE_LOG_STATIC
|
|||||||
void ble_log_lbm_write_trans(ble_log_prph_trans_t **trans, ble_log_src_t src_code,
|
void ble_log_lbm_write_trans(ble_log_prph_trans_t **trans, ble_log_src_t src_code,
|
||||||
const uint8_t *addr, uint16_t len,
|
const uint8_t *addr, uint16_t len,
|
||||||
const uint8_t *addr_append, uint16_t len_append, bool omdata);
|
const uint8_t *addr_append, uint16_t len_append, bool omdata);
|
||||||
#if CONFIG_BLE_LOG_ENH_STAT_ENABLED
|
|
||||||
BLE_LOG_STATIC void ble_log_stat_mgr_update(ble_log_src_t src_code, uint32_t len, bool lost);
|
BLE_LOG_STATIC void ble_log_stat_mgr_update(ble_log_src_t src_code, uint32_t len, bool lost);
|
||||||
#endif /* CONFIG_BLE_LOG_ENH_STAT_ENABLED */
|
|
||||||
|
|
||||||
/* ------------------------- */
|
/* ------------------------- */
|
||||||
/* PRIVATE INTERFACE */
|
/* PRIVATE INTERFACE */
|
||||||
@@ -119,22 +117,13 @@ void ble_log_lbm_write_trans(ble_log_prph_trans_t **trans, ble_log_src_t src_cod
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Data integrity check */
|
/* Data integrity check */
|
||||||
#if CONFIG_BLE_LOG_PAYLOAD_CHECKSUM_ENABLED
|
|
||||||
uint32_t checksum = ble_log_fast_checksum((const uint8_t *)buf, BLE_LOG_FRAME_HEAD_LEN + payload_len);
|
uint32_t checksum = ble_log_fast_checksum((const uint8_t *)buf, BLE_LOG_FRAME_HEAD_LEN + payload_len);
|
||||||
#else /* !CONFIG_BLE_LOG_PAYLOAD_CHECKSUM_ENABLED */
|
|
||||||
/* Note:
|
|
||||||
* Minimum data integrity check is still required for log parsing reliability,
|
|
||||||
* which can be achieved by validating the checksum of frame head only */
|
|
||||||
uint32_t checksum = ble_log_fast_checksum((const uint8_t *)buf, BLE_LOG_FRAME_HEAD_LEN);
|
|
||||||
#endif /* CONFIG_BLE_LOG_PAYLOAD_CHECKSUM_ENABLED */
|
|
||||||
BLE_LOG_MEMCPY(buf + BLE_LOG_FRAME_HEAD_LEN + payload_len, &checksum, BLE_LOG_FRAME_TAIL_LEN);
|
BLE_LOG_MEMCPY(buf + BLE_LOG_FRAME_HEAD_LEN + payload_len, &checksum, BLE_LOG_FRAME_TAIL_LEN);
|
||||||
|
|
||||||
/* Update peripheral transport */
|
/* Update peripheral transport */
|
||||||
(*trans)->pos += payload_len + BLE_LOG_FRAME_OVERHEAD;
|
(*trans)->pos += payload_len + BLE_LOG_FRAME_OVERHEAD;
|
||||||
|
|
||||||
#if CONFIG_BLE_LOG_ENH_STAT_ENABLED
|
|
||||||
ble_log_stat_mgr_update(src_code, payload_len, false);
|
ble_log_stat_mgr_update(src_code, payload_len, false);
|
||||||
#endif /* CONFIG_BLE_LOG_ENH_STAT_ENABLED */
|
|
||||||
|
|
||||||
/* Queue trans if full */
|
/* Queue trans if full */
|
||||||
if (BLE_LOG_TRANS_FREE_SPACE((*trans)) <= BLE_LOG_FRAME_OVERHEAD) {
|
if (BLE_LOG_TRANS_FREE_SPACE((*trans)) <= BLE_LOG_FRAME_OVERHEAD) {
|
||||||
@@ -142,7 +131,6 @@ void ble_log_lbm_write_trans(ble_log_prph_trans_t **trans, ble_log_src_t src_cod
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#if CONFIG_BLE_LOG_ENH_STAT_ENABLED
|
|
||||||
BLE_LOG_IRAM_ATTR BLE_LOG_STATIC
|
BLE_LOG_IRAM_ATTR BLE_LOG_STATIC
|
||||||
void ble_log_stat_mgr_update(ble_log_src_t src_code, uint32_t len, bool lost)
|
void ble_log_stat_mgr_update(ble_log_src_t src_code, uint32_t len, bool lost)
|
||||||
{
|
{
|
||||||
@@ -159,7 +147,6 @@ void ble_log_stat_mgr_update(ble_log_src_t src_code, uint32_t len, bool lost)
|
|||||||
stat_mgr->enh_stat.written_bytes_cnt += bytes_cnt;
|
stat_mgr->enh_stat.written_bytes_cnt += bytes_cnt;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_BLE_LOG_ENH_STAT_ENABLED */
|
|
||||||
|
|
||||||
/* -------------------------- */
|
/* -------------------------- */
|
||||||
/* INTERNAL INTERFACE */
|
/* INTERNAL INTERFACE */
|
||||||
@@ -226,10 +213,8 @@ bool ble_log_lbm_init(void)
|
|||||||
}
|
}
|
||||||
BLE_LOG_MEMSET(stat_mgr_ctx[i], 0, sizeof(ble_log_stat_mgr_t));
|
BLE_LOG_MEMSET(stat_mgr_ctx[i], 0, sizeof(ble_log_stat_mgr_t));
|
||||||
|
|
||||||
#if CONFIG_BLE_LOG_ENH_STAT_ENABLED
|
|
||||||
stat_mgr_ctx[i]->enh_stat.int_src_code = BLE_LOG_INT_SRC_ENH_STAT;
|
stat_mgr_ctx[i]->enh_stat.int_src_code = BLE_LOG_INT_SRC_ENH_STAT;
|
||||||
stat_mgr_ctx[i]->enh_stat.src_code = i;
|
stat_mgr_ctx[i]->enh_stat.src_code = i;
|
||||||
#endif /* CONFIG_BLE_LOG_ENH_STAT_ENABLED */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Initialization done */
|
/* Initialization done */
|
||||||
@@ -312,7 +297,6 @@ ble_log_prph_trans_t **ble_log_lbm_get_trans(ble_log_lbm_t *lbm, size_t log_len)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if CONFIG_BLE_LOG_ENH_STAT_ENABLED
|
|
||||||
void ble_log_write_enh_stat(void)
|
void ble_log_write_enh_stat(void)
|
||||||
{
|
{
|
||||||
BLE_LOG_REF_COUNT_ACQUIRE(&lbm_ref_count);
|
BLE_LOG_REF_COUNT_ACQUIRE(&lbm_ref_count);
|
||||||
@@ -328,7 +312,6 @@ void ble_log_write_enh_stat(void)
|
|||||||
deref:
|
deref:
|
||||||
BLE_LOG_REF_COUNT_RELEASE(&lbm_ref_count);
|
BLE_LOG_REF_COUNT_RELEASE(&lbm_ref_count);
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_BLE_LOG_ENH_STAT_ENABLED */
|
|
||||||
|
|
||||||
/* ------------------------ */
|
/* ------------------------ */
|
||||||
/* PUBLIC INTERFACE */
|
/* PUBLIC INTERFACE */
|
||||||
@@ -349,10 +332,8 @@ void ble_log_flush(void)
|
|||||||
goto deref;
|
goto deref;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if CONFIG_BLE_LOG_ENH_STAT_ENABLED
|
|
||||||
/* Write enhanced statistics before module disable */
|
/* Write enhanced statistics before module disable */
|
||||||
ble_log_write_enh_stat();
|
ble_log_write_enh_stat();
|
||||||
#endif /* CONFIG_BLE_LOG_ENH_STAT_ENABLED */
|
|
||||||
|
|
||||||
/* Write BLE Log flush log */
|
/* Write BLE Log flush log */
|
||||||
ble_log_info_t ble_log_info = {
|
ble_log_info_t ble_log_info = {
|
||||||
@@ -408,11 +389,9 @@ void ble_log_flush(void)
|
|||||||
/* Reset statistics manager after all operations complete */
|
/* Reset statistics manager after all operations complete */
|
||||||
for (int i = 0; i < BLE_LOG_SRC_MAX; i++) {
|
for (int i = 0; i < BLE_LOG_SRC_MAX; i++) {
|
||||||
BLE_LOG_MEMSET(stat_mgr_ctx[i], 0, sizeof(ble_log_stat_mgr_t));
|
BLE_LOG_MEMSET(stat_mgr_ctx[i], 0, sizeof(ble_log_stat_mgr_t));
|
||||||
#if CONFIG_BLE_LOG_ENH_STAT_ENABLED
|
|
||||||
/* Reinitialize enhanced statistics fields */
|
/* Reinitialize enhanced statistics fields */
|
||||||
stat_mgr_ctx[i]->enh_stat.int_src_code = BLE_LOG_INT_SRC_ENH_STAT;
|
stat_mgr_ctx[i]->enh_stat.int_src_code = BLE_LOG_INT_SRC_ENH_STAT;
|
||||||
stat_mgr_ctx[i]->enh_stat.src_code = i;
|
stat_mgr_ctx[i]->enh_stat.src_code = i;
|
||||||
#endif /* CONFIG_BLE_LOG_ENH_STAT_ENABLED */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Resume enable status */
|
/* Resume enable status */
|
||||||
@@ -452,11 +431,9 @@ bool ble_log_write_hex(ble_log_src_t src_code, const uint8_t *addr, size_t len)
|
|||||||
return true;
|
return true;
|
||||||
|
|
||||||
failed:
|
failed:
|
||||||
#if CONFIG_BLE_LOG_ENH_STAT_ENABLED
|
|
||||||
if (lbm_inited) {
|
if (lbm_inited) {
|
||||||
ble_log_stat_mgr_update(src_code, payload_len, true);
|
ble_log_stat_mgr_update(src_code, payload_len, true);
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_BLE_LOG_ENH_STAT_ENABLED */
|
|
||||||
exit:
|
exit:
|
||||||
BLE_LOG_REF_COUNT_RELEASE(&lbm_ref_count);
|
BLE_LOG_REF_COUNT_RELEASE(&lbm_ref_count);
|
||||||
return false;
|
return false;
|
||||||
@@ -524,11 +501,9 @@ void ble_log_write_hex_ll(uint32_t len, const uint8_t *addr,
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
failed:
|
failed:
|
||||||
#if CONFIG_BLE_LOG_ENH_STAT_ENABLED
|
|
||||||
if (lbm_inited) {
|
if (lbm_inited) {
|
||||||
ble_log_stat_mgr_update(src_code, payload_len, true);
|
ble_log_stat_mgr_update(src_code, payload_len, true);
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_BLE_LOG_ENH_STAT_ENABLED */
|
|
||||||
exit:
|
exit:
|
||||||
BLE_LOG_REF_COUNT_RELEASE(&lbm_ref_count);
|
BLE_LOG_REF_COUNT_RELEASE(&lbm_ref_count);
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -69,9 +69,7 @@ BLE_LOG_IRAM_ATTR BLE_LOG_STATIC void ble_log_rt_task(void *pvParameters)
|
|||||||
ble_log_rt_ts_trigger(NULL);
|
ble_log_rt_ts_trigger(NULL);
|
||||||
#endif /* CONFIG_BLE_LOG_TS_TRIGGER_TASK_EVENT */
|
#endif /* CONFIG_BLE_LOG_TS_TRIGGER_TASK_EVENT */
|
||||||
|
|
||||||
#if CONFIG_BLE_LOG_ENH_STAT_ENABLED
|
|
||||||
ble_log_write_enh_stat();
|
ble_log_write_enh_stat();
|
||||||
#endif /* CONFIG_BLE_LOG_ENH_STAT_ENABLED */
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* SPDX-FileCopyrightText: 2025 Espressif Systems (Shanghai) CO LTD
|
* SPDX-FileCopyrightText: 2025-2026 Espressif Systems (Shanghai) CO LTD
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
@@ -17,7 +17,6 @@ portMUX_TYPE ble_log_spin_lock = portMUX_INITIALIZER_UNLOCKED;
|
|||||||
#endif /* !UNIT_TEST */
|
#endif /* !UNIT_TEST */
|
||||||
|
|
||||||
/* INTERNAL INTERFACE */
|
/* INTERNAL INTERFACE */
|
||||||
#if CONFIG_BLE_LOG_XOR_CHECKSUM_ENABLED
|
|
||||||
#include "esp_compiler.h"
|
#include "esp_compiler.h"
|
||||||
|
|
||||||
BLE_LOG_IRAM_ATTR BLE_LOG_STATIC BLE_LOG_INLINE
|
BLE_LOG_IRAM_ATTR BLE_LOG_STATIC BLE_LOG_INLINE
|
||||||
@@ -69,35 +68,3 @@ uint32_t ble_log_fast_checksum(const uint8_t *data, size_t len)
|
|||||||
/* Step 6: Rotate the final result */
|
/* Step 6: Rotate the final result */
|
||||||
return ror32(checksum, start_offset_shift);
|
return ror32(checksum, start_offset_shift);
|
||||||
}
|
}
|
||||||
#else /* !CONFIG_BLE_LOG_XOR_CHECKSUM_ENABLED */
|
|
||||||
BLE_LOG_IRAM_ATTR
|
|
||||||
uint32_t ble_log_fast_checksum(const uint8_t *data, size_t len)
|
|
||||||
{
|
|
||||||
uint32_t sum = 0;
|
|
||||||
size_t i = 0;
|
|
||||||
|
|
||||||
/* Step 1: Sum up until 4-byte aligned */
|
|
||||||
while (((uintptr_t)(data + i) & 0x3) && (i < len)) {
|
|
||||||
sum += data[i++];
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Step 2: Sum up 4-byte aligned blocks */
|
|
||||||
const uint32_t *p32 = (const uint32_t *)(data + i);
|
|
||||||
size_t blocks = (len - i) / 4;
|
|
||||||
for (size_t b = 0; b < blocks; b++) {
|
|
||||||
uint32_t v = p32[b];
|
|
||||||
sum += (v & 0xFF)
|
|
||||||
+ ((v >> 8) & 0xFF)
|
|
||||||
+ ((v >> 16) & 0xFF)
|
|
||||||
+ ((v >> 24) & 0xFF);
|
|
||||||
}
|
|
||||||
i += blocks * 4;
|
|
||||||
|
|
||||||
/* Step 3: Sum up remaining bytes */
|
|
||||||
while (i < len) {
|
|
||||||
sum += data[i++];
|
|
||||||
}
|
|
||||||
|
|
||||||
return sum;
|
|
||||||
}
|
|
||||||
#endif /* CONFIG_BLE_LOG_XOR_CHECKSUM_ENABLED */
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* SPDX-FileCopyrightText: 2025 Espressif Systems (Shanghai) CO LTD
|
* SPDX-FileCopyrightText: 2025-2026 Espressif Systems (Shanghai) CO LTD
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
@@ -124,7 +124,6 @@ typedef struct {
|
|||||||
/* ---------------------------------------- */
|
/* ---------------------------------------- */
|
||||||
/* Enhanced Statistics Data Defines */
|
/* Enhanced Statistics Data Defines */
|
||||||
/* ---------------------------------------- */
|
/* ---------------------------------------- */
|
||||||
#if CONFIG_BLE_LOG_ENH_STAT_ENABLED
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint8_t int_src_code;
|
uint8_t int_src_code;
|
||||||
uint8_t src_code;
|
uint8_t src_code;
|
||||||
@@ -133,16 +132,13 @@ typedef struct {
|
|||||||
uint32_t written_bytes_cnt;
|
uint32_t written_bytes_cnt;
|
||||||
uint32_t lost_bytes_cnt;
|
uint32_t lost_bytes_cnt;
|
||||||
} __attribute__((packed)) ble_log_enh_stat_t;
|
} __attribute__((packed)) ble_log_enh_stat_t;
|
||||||
#endif /* CONFIG_BLE_LOG_ENH_STAT_ENABLED */
|
|
||||||
|
|
||||||
/* -------------------------------------- */
|
/* -------------------------------------- */
|
||||||
/* Log Statistics Manager Context */
|
/* Log Statistics Manager Context */
|
||||||
/* -------------------------------------- */
|
/* -------------------------------------- */
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint32_t frame_sn;
|
uint32_t frame_sn;
|
||||||
#if CONFIG_BLE_LOG_ENH_STAT_ENABLED
|
|
||||||
ble_log_enh_stat_t enh_stat;
|
ble_log_enh_stat_t enh_stat;
|
||||||
#endif /* CONFIG_BLE_LOG_ENH_STAT_ENABLED */
|
|
||||||
} ble_log_stat_mgr_t;
|
} ble_log_stat_mgr_t;
|
||||||
|
|
||||||
#define BLE_LOG_GET_FRAME_SN(VAR) __atomic_fetch_add(VAR, 1, __ATOMIC_RELAXED)
|
#define BLE_LOG_GET_FRAME_SN(VAR) __atomic_fetch_add(VAR, 1, __ATOMIC_RELAXED)
|
||||||
@@ -170,8 +166,6 @@ bool ble_log_lbm_init(void);
|
|||||||
void ble_log_lbm_deinit(void);
|
void ble_log_lbm_deinit(void);
|
||||||
ble_log_prph_trans_t **ble_log_lbm_get_trans(ble_log_lbm_t *lbm, size_t log_len);
|
ble_log_prph_trans_t **ble_log_lbm_get_trans(ble_log_lbm_t *lbm, size_t log_len);
|
||||||
void ble_log_lbm_enable(bool enable);
|
void ble_log_lbm_enable(bool enable);
|
||||||
#if CONFIG_BLE_LOG_ENH_STAT_ENABLED
|
|
||||||
void ble_log_write_enh_stat(void);
|
void ble_log_write_enh_stat(void);
|
||||||
#endif /* CONFIG_BLE_LOG_ENH_STAT_ENABLED */
|
|
||||||
|
|
||||||
#endif /* __BLE_LOG_LBM_H__ */
|
#endif /* __BLE_LOG_LBM_H__ */
|
||||||
|
|||||||
Reference in New Issue
Block a user