8989 SPI_OUT_HCI_QUEUE_SIZE +\
9090 SPI_OUT_MESH_QUEUE_SIZE)
9191
92+ #if SPI_OUT_LL_ENABLED && CONFIG_SOC_ESP_NIMBLE_CONTROLLER
93+ #include "os/os_mbuf.h"
94+ #endif /* SPI_OUT_LL_ENABLED && CONFIG_SOC_ESP_NIMBLE_CONTROLLER */
95+
9296// Private typedefs
9397typedef struct {
9498 // CRITICAL: 0 for available, 1 for need queue (ISR), 2 for in queue
@@ -156,6 +160,7 @@ enum {
156160 LL_LOG_FLAG_ISR ,
157161 LL_LOG_FLAG_HCI ,
158162 LL_LOG_FLAG_RAW ,
163+ LL_LOG_FLAG_OMDATA ,
159164 LL_LOG_FLAG_HCI_UPSTREAM ,
160165};
161166
@@ -205,7 +210,7 @@ static inline void spi_out_log_cb_append_trans(spi_out_log_cb_t *log_cb);
205210static inline void spi_out_log_cb_flush_trans (spi_out_log_cb_t * log_cb );
206211static bool spi_out_log_cb_write (spi_out_log_cb_t * log_cb , const uint8_t * addr , uint16_t len ,
207212 const uint8_t * addr_append , uint16_t len_append , uint8_t source ,
208- bool with_checksum );
213+ bool with_checksum , bool omdata );
209214static void spi_out_log_cb_write_loss (spi_out_log_cb_t * log_cb );
210215static void spi_out_log_cb_dump (spi_out_log_cb_t * log_cb );
211216
@@ -582,7 +587,7 @@ IRAM_ATTR static inline void spi_out_log_cb_flush_trans(spi_out_log_cb_t *log_cb
582587// Return value: Need append
583588IRAM_ATTR static bool spi_out_log_cb_write (spi_out_log_cb_t * log_cb , const uint8_t * addr , uint16_t len ,
584589 const uint8_t * addr_append , uint16_t len_append , uint8_t source ,
585- bool with_checksum )
590+ bool with_checksum , bool omdata )
586591{
587592 spi_out_trans_cb_t * trans_cb = log_cb -> trans_cb [log_cb -> trans_cb_idx ];
588593
@@ -598,7 +603,16 @@ IRAM_ATTR static bool spi_out_log_cb_write(spi_out_log_cb_t *log_cb, const uint8
598603 memcpy (buf , (const uint8_t * )& head , SPI_OUT_FRAME_HEAD_LEN );
599604 memcpy (buf + SPI_OUT_FRAME_HEAD_LEN , addr , len );
600605 if (len_append && addr_append ) {
601- memcpy (buf + SPI_OUT_FRAME_HEAD_LEN + len , addr_append , len_append );
606+ #if SPI_OUT_LL_ENABLED && CONFIG_SOC_ESP_NIMBLE_CONTROLLER
607+ if (omdata ) {
608+ os_mbuf_copydata ((struct os_mbuf * )addr_append , 0 ,
609+ len_append , buf + SPI_OUT_FRAME_HEAD_LEN + len );
610+ }
611+ else
612+ #endif /* SPI_OUT_LL_ENABLED && CONFIG_SOC_ESP_NIMBLE_CONTROLLER */
613+ {
614+ memcpy (buf + SPI_OUT_FRAME_HEAD_LEN + len , addr_append , len_append );
615+ }
602616 }
603617
604618 uint32_t checksum = 0 ;
@@ -628,7 +642,7 @@ IRAM_ATTR static void spi_out_log_cb_write_loss(spi_out_log_cb_t *log_cb)
628642 .lost_bytes_cnt = log_cb -> lost_bytes_cnt ,
629643 };
630644 spi_out_log_cb_write (log_cb , (const uint8_t * )& payload , sizeof (loss_payload_t ),
631- NULL , 0 , BLE_LOG_SPI_OUT_SOURCE_LOSS , true);
645+ NULL , 0 , BLE_LOG_SPI_OUT_SOURCE_LOSS , true, false );
632646
633647 log_cb -> lost_frame_cnt = 0 ;
634648 log_cb -> lost_bytes_cnt = 0 ;
@@ -756,9 +770,9 @@ static void spi_out_write_hex(spi_out_log_cb_t *log_cb, uint8_t source,
756770 if (with_ts ) {
757771 uint32_t os_ts = pdTICKS_TO_MS (xTaskGetTickCount ());
758772 need_append |= spi_out_log_cb_write (log_cb , (const uint8_t * )& os_ts ,
759- sizeof (uint32_t ), addr , len , source , true);
773+ sizeof (uint32_t ), addr , len , source , true, false );
760774 } else {
761- need_append |= spi_out_log_cb_write (log_cb , addr , len , NULL , 0 , source , true);
775+ need_append |= spi_out_log_cb_write (log_cb , addr , len , NULL , 0 , source , true, false );
762776 }
763777 }
764778 if (need_append ) {
@@ -1157,11 +1171,12 @@ IRAM_ATTR void ble_log_spi_out_ll_write(uint32_t len, const uint8_t *addr, uint3
11571171 log_cb = ll_task_log_cb ;
11581172 source = BLE_LOG_SPI_OUT_SOURCE_ESP ;
11591173 }
1174+ bool omdata = flag & BIT (LL_LOG_FLAG_OMDATA );
11601175
11611176 bool need_append ;
11621177 if (spi_out_log_cb_check_trans (log_cb , (uint16_t )(len + len_append ), & need_append )) {
11631178 need_append |= spi_out_log_cb_write (log_cb , addr , (uint16_t )len , addr_append ,
1164- (uint16_t )len_append , source , true);
1179+ (uint16_t )len_append , source , true, omdata );
11651180 }
11661181 if (need_append ) {
11671182 if (in_isr ) {
@@ -1288,7 +1303,7 @@ IRAM_ATTR void ble_log_spi_out_le_audio_write(const uint8_t *addr, uint16_t len)
12881303 bool need_append ;
12891304 if (spi_out_log_cb_check_trans (log_cb , len , & need_append )) {
12901305 need_append |= spi_out_log_cb_write (log_cb , addr , len , NULL , 0 ,
1291- BLE_LOG_SPI_OUT_SOURCE_LE_AUDIO , false);
1306+ BLE_LOG_SPI_OUT_SOURCE_LE_AUDIO , false, false );
12921307 }
12931308 if (need_append ) {
12941309 spi_out_log_cb_append_trans (log_cb );
0 commit comments