From 0bfbfd527d76c23b281d441cb4544fedcc331919 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 Date: Sat, 5 Mar 2022 15:26:17 +0100 Subject: [PATCH] Fixes to work again with old idf too --- cores/esp32/esp32-hal-rmt.c | 94 +++++++++++++++++++++++++++++-------- 1 file changed, 75 insertions(+), 19 deletions(-) diff --git a/cores/esp32/esp32-hal-rmt.c b/cores/esp32/esp32-hal-rmt.c index 97857295..2bb86846 100644 --- a/cores/esp32/esp32-hal-rmt.c +++ b/cores/esp32/esp32-hal-rmt.c @@ -21,11 +21,7 @@ #include "esp8266-compat.h" #include "soc/gpio_reg.h" #include "soc/rmt_struct.h" -#ifdef OLD_IDF -#include "esp_private/periph_ctrl.h" -#else #include "driver/periph_ctrl.h" -#endif #include "esp_intr_alloc.h" #include "hal/rmt_ll.h" #include "driver/rmt.h" @@ -297,7 +293,11 @@ bool rmtWrite(rmt_obj_t* rmt, rmt_data_t* data, size_t size) RMT.conf_ch[channel].conf1.mem_wr_rst = 0; // set the tx end mark - RMTMEM.chan[channel].data32[MAX_DATA_PER_ITTERATION] = 0; + RMTMEM.chan[channel].data32[MAX_DATA_PER_ITTERATION] +#ifdef OLD_IDF + .val +#endif + = 0; // clear and enable both Tx completed and half tx event RMT.int_clr.val = _INT_TX_END(channel); @@ -619,7 +619,11 @@ bool _rmtSendOnce(rmt_obj_t* rmt, rmt_data_t* data, size_t size, bool continuous *rmt_mem_ptr++ = data[i].val; } // tx end mark - RMTMEM.chan[channel].data32[size] = 0; + RMTMEM.chan[channel].data32[size] +#ifdef OLD_IDF + .val +#endif + = 0; } RMT_MUTEX_LOCK(channel); @@ -692,7 +696,11 @@ static void ARDUINO_ISR_ATTR _rmt_isr(void* arg) } uint32_t *data_received = data; for (i = 0; i < g_rmt_objects[ch].data_size; i++ ) { - *data++ = RMTMEM.chan[ch].data32[i]; + *data++ = RMTMEM.chan[ch].data32[i] +#ifdef OLD_IDF + .val +#endif + ; } if (g_rmt_objects[ch].cb) { // actually received data ptr @@ -771,16 +779,28 @@ static void ARDUINO_ISR_ATTR _rmt_tx_mem_second(uint8_t ch) // will the remaining data occupy the entire halfbuffer if (remaining_size > half_tx_nr) { for (i = 0; i < half_tx_nr; i++) { - RMTMEM.chan[ch].data32[half_tx_nr+i] = data[i]; + RMTMEM.chan[ch].data32[half_tx_nr+i] +#ifdef OLD_IDF + .val +#endif + = data[i]; } g_rmt_objects[ch].data_size -= half_tx_nr; g_rmt_objects[ch].data_ptr += half_tx_nr; } else { for (i = 0; i < half_tx_nr; i++) { if (i < remaining_size) { - RMTMEM.chan[ch].data32[half_tx_nr+i] = data[i]; + RMTMEM.chan[ch].data32[half_tx_nr+i] +#ifdef OLD_IDF + .val +#endif + = data[i]; } else { - RMTMEM.chan[ch].data32[half_tx_nr+i] = 0x000F000F; + RMTMEM.chan[ch].data32[half_tx_nr+i] +#ifdef OLD_IDF + .val +#endif + = 0x000F000F; } } g_rmt_objects[ch].data_ptr = NULL; @@ -789,9 +809,17 @@ static void ARDUINO_ISR_ATTR _rmt_tx_mem_second(uint8_t ch) } else if ((!(g_rmt_objects[ch].tx_state & E_LAST_DATA)) && (!(g_rmt_objects[ch].tx_state & E_END_TRANS))) { for (i = 0; i < half_tx_nr; i++) { - RMTMEM.chan[ch].data32[half_tx_nr+i] = 0x000F000F; + RMTMEM.chan[ch].data32[half_tx_nr+i] +#ifdef OLD_IDF + .val +#endif + = 0x000F000F; } - RMTMEM.chan[ch].data32[half_tx_nr+i] = 0; + RMTMEM.chan[ch].data32[half_tx_nr+i] +#ifdef OLD_IDF + .val +#endif + = 0; g_rmt_objects[ch].tx_state |= E_LAST_DATA; RMT.conf_ch[ch].conf1.tx_conti_mode = 0; } else { @@ -819,9 +847,17 @@ static void ARDUINO_ISR_ATTR _rmt_tx_mem_first(uint8_t ch) // will the remaining data occupy the entire halfbuffer if (remaining_size > half_tx_nr) { - RMTMEM.chan[ch].data32[0] = data[0] - 1; + RMTMEM.chan[ch].data32[0] +#ifdef OLD_IDF + .val +#endif + = data[0] - 1; for (i = 1; i < half_tx_nr; i++) { - RMTMEM.chan[ch].data32[i] = data[i]; + RMTMEM.chan[ch].data32[i] +#ifdef OLD_IDF + .val +#endif + = data[i]; } g_rmt_objects[ch].tx_state &= ~E_FIRST_HALF; // turn off the treshold interrupt @@ -830,12 +866,24 @@ static void ARDUINO_ISR_ATTR _rmt_tx_mem_first(uint8_t ch) g_rmt_objects[ch].data_size -= half_tx_nr; g_rmt_objects[ch].data_ptr += half_tx_nr; } else { - RMTMEM.chan[ch].data32[0] = data[0] - 1; + RMTMEM.chan[ch].data32[0] +#ifdef OLD_IDF + .val +#endif + = data[0] - 1; for (i = 1; i < half_tx_nr; i++) { if (i < remaining_size) { - RMTMEM.chan[ch].data32[i] = data[i]; + RMTMEM.chan[ch].data32[i] +#ifdef OLD_IDF + .val +#endif + = data[i]; } else { - RMTMEM.chan[ch].data32[i] = 0x000F000F; + RMTMEM.chan[ch].data32[i] +#ifdef OLD_IDF + .val +#endif + = 0x000F000F; } } @@ -844,9 +892,17 @@ static void ARDUINO_ISR_ATTR _rmt_tx_mem_first(uint8_t ch) } } else { for (i = 0; i < half_tx_nr; i++) { - RMTMEM.chan[ch].data32[i] = 0x000F000F; + RMTMEM.chan[ch].data32[i] +#ifdef OLD_IDF + .val +#endif + = 0x000F000F; } - RMTMEM.chan[ch].data32[i] = 0; + RMTMEM.chan[ch].data32[i] +#ifdef OLD_IDF + .val +#endif + = 0; g_rmt_objects[ch].tx_state &= ~E_FIRST_HALF; RMT.tx_lim_ch[ch].limit = 0;