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"
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
8790enum {
@@ -128,6 +131,11 @@ static esp_timer_handle_t ts_sync_timer = NULL;
128131static 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
132140extern 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);
142150static inline bool spi_out_log_cb_check_trans (spi_out_log_cb_t * log_cb , uint16_t len , bool * need_append );
143151static inline void spi_out_log_cb_append_trans (spi_out_log_cb_t * log_cb );
144152static 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 );
147156static void spi_out_log_cb_write_packet_loss (spi_out_log_cb_t * log_cb , uint8_t flag );
148157static void spi_out_log_cb_dump (spi_out_log_cb_t * log_cb );
149158static 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
182196static 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
732784int 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
807865timer_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 ();
811873ts_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
0 commit comments