Skip to content

Commit e100fc7

Browse files
author
Zhou Xiao
committed
feat(ble): support le audio log buffer separation
(cherry picked from commit cd3aa65) Co-authored-by: Zhou Xiao <zhouxiao@espressif.com>
1 parent a73197e commit e100fc7

File tree

3 files changed

+113
-14
lines changed

3 files changed

+113
-14
lines changed

components/bt/common/Kconfig.in

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,3 +116,18 @@ config BT_BLE_LOG_SPI_OUT_FLUSH_TIMEOUT
116116
default 1000
117117
help
118118
Buffer flush out period in unit of ms
119+
120+
config BT_BLE_LOG_SPI_OUT_LE_AUDIO_ENABLED
121+
bool "Enable LE Audio log output to SPI"
122+
depends on BT_BLE_LOG_SPI_OUT_ENABLED
123+
default n
124+
help
125+
Enable LE Audio log output to SPI
126+
127+
config BT_BLE_LOG_SPI_OUT_LE_AUDIO_BUF_SIZE
128+
int "SPI transaction buffer size for LE Audio logs"
129+
depends on BT_BLE_LOG_SPI_OUT_LE_AUDIO_ENABLED
130+
default 1024
131+
help
132+
SPI transaction buffer size for LE Audio logs.
133+
There will be 2 SPI DMA buffers with the same size.

components/bt/common/ble_log/ble_log_spi_out.c

Lines changed: 96 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323
#define SPI_OUT_SYNC_IO_NUM CONFIG_BT_BLE_LOG_SPI_OUT_SYNC_IO_NUM
2424
#define SPI_OUT_FLUSH_TIMER_ENABLED CONFIG_BT_BLE_LOG_SPI_OUT_FLUSH_TIMER_ENABLED
2525
#define SPI_OUT_FLUSH_TIMEOUT_US (CONFIG_BT_BLE_LOG_SPI_OUT_FLUSH_TIMEOUT * 1000)
26+
#define SPI_OUT_LE_AUDIO_ENABLED CONFIG_BT_BLE_LOG_SPI_OUT_LE_AUDIO_ENABLED
27+
#define SPI_OUT_LE_AUDIO_BUF_SIZE CONFIG_BT_BLE_LOG_SPI_OUT_LE_AUDIO_BUF_SIZE
2628

2729
// Private defines
2830
#define BLE_LOG_TAG "BLE_LOG"
@@ -82,6 +84,7 @@ enum {
8284
LOG_CB_TYPE_LL_TASK,
8385
LOG_CB_TYPE_LL_ISR,
8486
LOG_CB_TYPE_LL_HCI,
87+
LOG_CB_TYPE_LE_AUDIO,
8588
};
8689

8790
enum {
@@ -128,6 +131,11 @@ static esp_timer_handle_t ts_sync_timer = NULL;
128131
static esp_timer_handle_t flush_timer = NULL;
129132
#endif // SPI_OUT_FLUSH_TIMER_ENABLED
130133

134+
#if SPI_OUT_LE_AUDIO_ENABLED
135+
static bool le_audio_log_inited = false;
136+
static spi_out_log_cb_t *le_audio_log_cb = NULL;
137+
#endif // SPI_OUT_LE_AUDIO_ENABLED
138+
131139
// Extern function declarations
132140
extern void esp_panic_handler_feed_wdts(void);
133141

@@ -142,8 +150,9 @@ static void spi_out_log_cb_deinit(spi_out_log_cb_t **log_cb);
142150
static inline bool spi_out_log_cb_check_trans(spi_out_log_cb_t *log_cb, uint16_t len, bool *need_append);
143151
static inline void spi_out_log_cb_append_trans(spi_out_log_cb_t *log_cb);
144152
static inline void spi_out_log_cb_flush_trans(spi_out_log_cb_t *log_cb);
145-
static bool spi_out_log_cb_write(spi_out_log_cb_t *log_cb, const uint8_t *addr, uint16_t len, \
146-
const uint8_t *addr_append, uint16_t len_append, uint8_t source);
153+
static bool spi_out_log_cb_write(spi_out_log_cb_t *log_cb, const uint8_t *addr, uint16_t len,
154+
const uint8_t *addr_append, uint16_t len_append, uint8_t source,
155+
bool with_checksum);
147156
static void spi_out_log_cb_write_packet_loss(spi_out_log_cb_t *log_cb, uint8_t flag);
148157
static void spi_out_log_cb_dump(spi_out_log_cb_t *log_cb);
149158
static void spi_out_log_flush(void);
@@ -178,6 +187,11 @@ extern uint32_t r_os_cputime_get32(void);
178187

179188
#endif // SPI_OUT_TS_SYNC_ENABLED
180189

190+
#if SPI_OUT_LE_AUDIO_ENABLED
191+
static int spi_out_le_audio_log_init(void);
192+
static void spi_out_le_audio_log_deinit(void);
193+
#endif // SPI_OUT_LE_AUDIO_ENABLED
194+
181195
// Private functions
182196
static int spi_out_init_trans(spi_out_trans_cb_t **trans_cb, uint16_t buf_size)
183197
{
@@ -349,20 +363,23 @@ IRAM_ATTR static inline void spi_out_log_cb_flush_trans(spi_out_log_cb_t *log_cb
349363
}
350364

351365
// Return value: Need append
352-
IRAM_ATTR static bool spi_out_log_cb_write(spi_out_log_cb_t *log_cb, const uint8_t *addr, uint16_t len, \
353-
const uint8_t *addr_append, uint16_t len_append, uint8_t source)
366+
IRAM_ATTR static bool spi_out_log_cb_write(spi_out_log_cb_t *log_cb, const uint8_t *addr, uint16_t len,
367+
const uint8_t *addr_append, uint16_t len_append, uint8_t source,
368+
bool with_checksum)
354369
{
355370
spi_out_trans_cb_t *trans_cb = log_cb->trans_cb[log_cb->trans_cb_idx];
356371

357372
uint8_t *buf = (uint8_t *)trans_cb->trans.tx_buffer + trans_cb->length;
358373
uint16_t total_length = len + len_append;
359374
const uint8_t head[4] = {total_length & 0xFF, (total_length >> 8) & 0xFF, source, log_cb->frame_cnt};
360375
uint32_t checksum = 0;
361-
for (int i = 0; i < len; i++) {
362-
checksum += addr[i];
363-
}
364-
for (int i = 0; i < len_append; i++) {
365-
checksum += addr_append[i];
376+
if (with_checksum) {
377+
for (int i = 0; i < len; i++) {
378+
checksum += addr[i];
379+
}
380+
for (int i = 0; i < len_append; i++) {
381+
checksum += addr_append[i];
382+
}
366383
}
367384

368385
memcpy(buf, head, SPI_OUT_FRAME_HEAD_LEN);
@@ -392,7 +409,8 @@ IRAM_ATTR static void spi_out_log_cb_write_packet_loss(spi_out_log_cb_t *log_cb,
392409
packet_loss_frame[0] = flag;
393410
memcpy(packet_loss_frame + 1, (uint8_t *)&log_cb->bytes_loss_cnt, 4);
394411
packet_loss_frame[5] = log_cb->trans_loss_cnt;
395-
spi_out_log_cb_write(log_cb, packet_loss_frame, SPI_OUT_PACKET_LOSS_FRAME_SIZE, NULL, 0, BLE_LOG_SPI_OUT_SOURCE_LOSS);
412+
spi_out_log_cb_write(log_cb, packet_loss_frame, SPI_OUT_PACKET_LOSS_FRAME_SIZE,
413+
NULL, 0, BLE_LOG_SPI_OUT_SOURCE_LOSS, true);
396414

397415
log_cb->bytes_loss_cnt = 0;
398416
log_cb->trans_loss_cnt = 0;
@@ -515,9 +533,9 @@ static void spi_out_ul_log_write(uint8_t source, const uint8_t *addr, uint16_t l
515533
if (with_ts) {
516534
uint32_t esp_ts = esp_timer_get_time();
517535
need_append |= spi_out_log_cb_write(ul_log_cb, (const uint8_t *)&esp_ts,
518-
sizeof(uint32_t), addr, len, source);
536+
sizeof(uint32_t), addr, len, source, true);
519537
} else {
520-
need_append |= spi_out_log_cb_write(ul_log_cb, addr, len, NULL, 0, source);
538+
need_append |= spi_out_log_cb_write(ul_log_cb, addr, len, NULL, 0, source, true);
521539
}
522540
}
523541
if (need_append) {
@@ -728,6 +746,40 @@ static void esp_timer_cb_ts_sync(void)
728746
}
729747
#endif // SPI_OUT_TS_SYNC_ENABLED
730748

749+
#if SPI_OUT_LE_AUDIO_ENABLED
750+
static int spi_out_le_audio_log_init(void)
751+
{
752+
if (le_audio_log_inited) {
753+
return 0;
754+
}
755+
756+
// Initialize log control blocks for controller task & ISR logs
757+
if (spi_out_log_cb_init(&le_audio_log_cb, SPI_OUT_LE_AUDIO_BUF_SIZE) != 0) {
758+
ESP_LOGE(BLE_LOG_TAG, "Failed to initialize log control blocks for LE audio!");
759+
return -1;
760+
}
761+
762+
// Initialization done
763+
ESP_LOGI(BLE_LOG_TAG, "Succeeded to initialize log control blocks for LE Audio!");
764+
le_audio_log_inited = true;
765+
return 0;
766+
}
767+
768+
static void spi_out_le_audio_log_deinit(void)
769+
{
770+
if (!le_audio_log_inited) {
771+
return;
772+
}
773+
774+
spi_out_log_cb_deinit(&le_audio_log_cb);
775+
776+
// Deinitialization done
777+
ESP_LOGI(BLE_LOG_TAG, "Succeeded to deinitialize LE audio log!");
778+
le_audio_log_inited = false;
779+
return;
780+
}
781+
#endif // SPI_OUT_LE_AUDIO_ENABLED
782+
731783
// Public functions
732784
int ble_log_spi_out_init(void)
733785
{
@@ -782,6 +834,12 @@ int ble_log_spi_out_init(void)
782834
}
783835
#endif // SPI_OUT_TS_SYNC_ENABLED
784836

837+
#if SPI_OUT_LE_AUDIO_ENABLED
838+
if (spi_out_le_audio_log_init() != 0) {
839+
goto le_audio_init_failed;
840+
}
841+
#endif // SPI_OUT_LE_AUDIO_ENABLED
842+
785843
#if SPI_OUT_FLUSH_TIMER_ENABLED
786844
esp_timer_create_args_t timer_args = {
787845
.callback = (esp_timer_cb_t)esp_timer_cb_log_flush,
@@ -806,6 +864,10 @@ int ble_log_spi_out_init(void)
806864
#if SPI_OUT_FLUSH_TIMER_ENABLED
807865
timer_init_failed:
808866
#endif // SPI_OUT_FLUSH_TIMER_ENABLED
867+
#if SPI_OUT_LE_AUDIO_ENABLED
868+
spi_out_le_audio_log_deinit();
869+
le_audio_init_failed:
870+
#endif // SPI_OUT_LE_AUDIO_ENABLED
809871
#if SPI_OUT_TS_SYNC_ENABLED
810872
spi_out_ts_sync_deinit();
811873
ts_sync_init_failed:
@@ -898,7 +960,7 @@ void ble_log_spi_out_ts_sync_stop(void)
898960

899961
#if SPI_OUT_LL_ENABLED
900962
// Only LL task has access to this API
901-
IRAM_ATTR void ble_log_spi_out_ll_write(uint32_t len, const uint8_t *addr, uint32_t len_append,\
963+
IRAM_ATTR void ble_log_spi_out_ll_write(uint32_t len, const uint8_t *addr, uint32_t len_append,
902964
const uint8_t *addr_append, uint32_t flag)
903965
{
904966
if (!ll_log_inited) {
@@ -926,7 +988,8 @@ IRAM_ATTR void ble_log_spi_out_ll_write(uint32_t len, const uint8_t *addr, uint3
926988

927989
bool need_append;
928990
if (spi_out_log_cb_check_trans(log_cb, (uint16_t)(len + len_append), &need_append)) {
929-
need_append |= spi_out_log_cb_write(log_cb, addr, (uint16_t)len, addr_append, (uint16_t)len_append, source);
991+
need_append |= spi_out_log_cb_write(log_cb, addr, (uint16_t)len, addr_append,
992+
(uint16_t)len_append, source, true);
930993
}
931994
if (need_append) {
932995
if (in_isr) {
@@ -1078,4 +1141,23 @@ void ble_log_spi_out_flush(void)
10781141
spi_out_log_flush();
10791142
}
10801143

1144+
#if CONFIG_BT_BLE_LOG_SPI_OUT_LE_AUDIO_ENABLED
1145+
IRAM_ATTR void ble_log_spi_out_le_audio_write(const uint8_t *addr, uint16_t len)
1146+
{
1147+
if (!le_audio_log_inited) {
1148+
return;
1149+
}
1150+
1151+
bool need_append;
1152+
if (spi_out_log_cb_check_trans(le_audio_log_cb, len, &need_append)) {
1153+
need_append |= spi_out_log_cb_write(le_audio_log_cb, addr, len, NULL, 0,
1154+
BLE_LOG_SPI_OUT_SOURCE_LE_AUDIO, false);
1155+
}
1156+
if (need_append) {
1157+
spi_out_log_cb_append_trans(le_audio_log_cb);
1158+
}
1159+
spi_out_log_cb_write_packet_loss(le_audio_log_cb, LOG_CB_TYPE_LE_AUDIO);
1160+
return;
1161+
}
1162+
#endif // CONFIG_BT_BLE_LOG_SPI_OUT_LE_AUDIO_ENABLED
10811163
#endif // CONFIG_BT_BLE_LOG_SPI_OUT_ENABLED

components/bt/common/ble_log/include/ble_log/ble_log_spi_out.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ enum {
2525
BLE_LOG_SPI_OUT_SOURCE_ESP_ISR,
2626
BLE_LOG_SPI_OUT_SOURCE_ESP_LEGACY_ISR,
2727
BLE_LOG_SPI_OUT_SOURCE_LL_HCI,
28+
BLE_LOG_SPI_OUT_SOURCE_LE_AUDIO,
2829
BLE_LOG_SPI_OUT_SOURCE_USER = 0x10,
2930
BLE_LOG_SPI_OUT_SOURCE_SSC = 0xFD,
3031
BLE_LOG_SPI_OUT_SOURCE_SYNC,
@@ -57,5 +58,6 @@ int ble_log_spi_out_write_with_ts(uint8_t source, const uint8_t *addr, uint16_t
5758
void ble_log_spi_out_dump_all(void);
5859
void ble_log_spi_out_enable(bool enable);
5960
void ble_log_spi_out_flush(void);
61+
void ble_log_spi_out_le_audio_write(const uint8_t *addr, uint16_t len);
6062

6163
#endif // __BT_SPI_OUT_H__

0 commit comments

Comments
 (0)