@@ -140,14 +140,16 @@ static int spi_out_init_trans(spi_out_trans_cb_t **trans_cb, uint16_t buf_size)
140140 if (!(* trans_cb )) {
141141 return -1 ;
142142 }
143+ memset (* trans_cb , 0 , sizeof (spi_out_trans_cb_t ));
144+
143145 uint8_t * buf = (uint8_t * )spi_bus_dma_memory_alloc (SPI_OUT_BUS , (size_t )buf_size , 0 );
144146 if (!buf ) {
145147 free (* trans_cb );
148+ * trans_cb = NULL ;
146149 return -1 ;
147150 }
148151
149152 // Initialization
150- memset (* trans_cb , 0 , sizeof (spi_out_trans_cb_t ));
151153 (* trans_cb )-> buf_size = buf_size ;
152154 (* trans_cb )-> trans .tx_buffer = buf ;
153155 return 0 ;
@@ -158,8 +160,13 @@ static void spi_out_deinit_trans(spi_out_trans_cb_t **trans_cb)
158160 if (!(* trans_cb )) {
159161 return ;
160162 }
163+ if ((* trans_cb )-> trans .tx_buffer ) {
164+ // Do not free buffer until recycled
165+ while ((* trans_cb )-> flag == SPI_OUT_TRANS_CB_FLAG_IN_QUEUE ) {}
166+ free ((uint8_t * )(* trans_cb )-> trans .tx_buffer );
167+ (* trans_cb )-> trans .tx_buffer = NULL ;
168+ }
161169
162- free ((uint8_t * )(* trans_cb )-> trans .tx_buffer );
163170 free (* trans_cb );
164171 * trans_cb = NULL ;
165172 return ;
@@ -174,7 +181,7 @@ IRAM_ATTR static void spi_out_tx_done_cb(spi_transaction_t *ret_trans)
174181
175182IRAM_ATTR static inline int spi_out_append_trans (spi_out_trans_cb_t * trans_cb )
176183{
177- if (trans_cb -> flag != SPI_OUT_TRANS_CB_FLAG_NEED_QUEUE ) {
184+ if (trans_cb -> flag != SPI_OUT_TRANS_CB_FLAG_NEED_QUEUE || ! trans_cb -> length ) {
178185 return -1 ;
179186 }
180187
@@ -185,6 +192,8 @@ IRAM_ATTR static inline int spi_out_append_trans(spi_out_trans_cb_t *trans_cb)
185192 trans_cb -> flag = SPI_OUT_TRANS_CB_FLAG_IN_QUEUE ;
186193 return 0 ;
187194 } else {
195+ trans_cb -> length = 0 ;
196+ trans_cb -> flag = SPI_OUT_TRANS_CB_FLAG_AVAILABLE ;
188197 return -1 ;
189198 }
190199}
@@ -224,6 +233,7 @@ static void spi_out_log_cb_deinit(spi_out_log_cb_t **log_cb)
224233 }
225234 }
226235 free (* log_cb );
236+ * log_cb = NULL ;
227237 return ;
228238}
229239
@@ -578,7 +588,7 @@ static void spi_out_ts_sync_deinit(void)
578588}
579589
580590// CRITICAL: This function is called in ESP Timer task
581- IRAM_ATTR static void esp_timer_cb_ts_sync (void )
591+ static void esp_timer_cb_ts_sync (void )
582592{
583593 // Initialize variables
584594 uint32_t lc_ts = 0 ;
@@ -627,7 +637,9 @@ int ble_log_spi_out_init(void)
627637 .quadwp_io_num = -1 ,
628638 .quadhd_io_num = -1 ,
629639 .max_transfer_sz = SPI_OUT_MAX_TRANSFER_SIZE ,
640+ #if CONFIG_SPI_MASTER_ISR_IN_IRAM
630641 .intr_flags = ESP_INTR_FLAG_IRAM
642+ #endif // CONFIG_SPI_MASTER_ISR_IN_IRAM
631643 };
632644 spi_device_interface_config_t dev_config = {
633645 .clock_speed_hz = SPI_MASTER_FREQ_20M ,
@@ -782,7 +794,7 @@ IRAM_ATTR void ble_log_spi_out_ll_log_ev_proc(void)
782794}
783795#endif // CONFIG_BT_BLE_LOG_SPI_OUT_LL_ENABLED
784796
785- IRAM_ATTR int ble_log_spi_out_write (uint8_t source , const uint8_t * addr , uint16_t len )
797+ int ble_log_spi_out_write (uint8_t source , const uint8_t * addr , uint16_t len )
786798{
787799 if (!ul_log_inited ) {
788800 return -1 ;
@@ -798,7 +810,7 @@ IRAM_ATTR int ble_log_spi_out_write(uint8_t source, const uint8_t *addr, uint16_
798810 return ret ;
799811}
800812
801- IRAM_ATTR int ble_log_spi_out_printf (uint8_t source , const char * format , ...)
813+ int ble_log_spi_out_printf (uint8_t source , const char * format , ...)
802814{
803815 if (!ul_log_inited ) {
804816 return -1 ;
@@ -845,7 +857,7 @@ IRAM_ATTR int ble_log_spi_out_printf(uint8_t source, const char *format, ...)
845857 return ret ;
846858}
847859
848- IRAM_ATTR int ble_log_spi_out_printf_enh (uint8_t source , uint8_t level , const char * tag , const char * format , ...)
860+ int ble_log_spi_out_printf_enh (uint8_t source , uint8_t level , const char * tag , const char * format , ...)
849861{
850862 if (!ul_log_inited ) {
851863 return -1 ;
@@ -897,7 +909,7 @@ IRAM_ATTR int ble_log_spi_out_printf_enh(uint8_t source, uint8_t level, const ch
897909 return ret ;
898910}
899911
900- IRAM_ATTR int ble_log_spi_out_write_with_ts (uint8_t source , const uint8_t * addr , uint16_t len )
912+ int ble_log_spi_out_write_with_ts (uint8_t source , const uint8_t * addr , uint16_t len )
901913{
902914 if (!ul_log_inited ) {
903915 return -1 ;
0 commit comments