Fixes to work again with old idf too

This commit is contained in:
2022-03-05 15:26:17 +01:00
parent 9f58515d7f
commit 0bfbfd527d

View File

@ -21,11 +21,7 @@
#include "esp8266-compat.h" #include "esp8266-compat.h"
#include "soc/gpio_reg.h" #include "soc/gpio_reg.h"
#include "soc/rmt_struct.h" #include "soc/rmt_struct.h"
#ifdef OLD_IDF
#include "esp_private/periph_ctrl.h"
#else
#include "driver/periph_ctrl.h" #include "driver/periph_ctrl.h"
#endif
#include "esp_intr_alloc.h" #include "esp_intr_alloc.h"
#include "hal/rmt_ll.h" #include "hal/rmt_ll.h"
#include "driver/rmt.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; RMT.conf_ch[channel].conf1.mem_wr_rst = 0;
// set the tx end mark // 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 // clear and enable both Tx completed and half tx event
RMT.int_clr.val = _INT_TX_END(channel); 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; *rmt_mem_ptr++ = data[i].val;
} }
// tx end mark // tx end mark
RMTMEM.chan[channel].data32[size] = 0; RMTMEM.chan[channel].data32[size]
#ifdef OLD_IDF
.val
#endif
= 0;
} }
RMT_MUTEX_LOCK(channel); RMT_MUTEX_LOCK(channel);
@ -692,7 +696,11 @@ static void ARDUINO_ISR_ATTR _rmt_isr(void* arg)
} }
uint32_t *data_received = data; uint32_t *data_received = data;
for (i = 0; i < g_rmt_objects[ch].data_size; i++ ) { 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) { if (g_rmt_objects[ch].cb) {
// actually received data ptr // 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 // will the remaining data occupy the entire halfbuffer
if (remaining_size > half_tx_nr) { if (remaining_size > half_tx_nr) {
for (i = 0; i < half_tx_nr; i++) { 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_size -= half_tx_nr;
g_rmt_objects[ch].data_ptr += half_tx_nr; g_rmt_objects[ch].data_ptr += half_tx_nr;
} else { } else {
for (i = 0; i < half_tx_nr; i++) { for (i = 0; i < half_tx_nr; i++) {
if (i < remaining_size) { 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 { } 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; 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)) && } else if ((!(g_rmt_objects[ch].tx_state & E_LAST_DATA)) &&
(!(g_rmt_objects[ch].tx_state & E_END_TRANS))) { (!(g_rmt_objects[ch].tx_state & E_END_TRANS))) {
for (i = 0; i < half_tx_nr; i++) { 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; g_rmt_objects[ch].tx_state |= E_LAST_DATA;
RMT.conf_ch[ch].conf1.tx_conti_mode = 0; RMT.conf_ch[ch].conf1.tx_conti_mode = 0;
} else { } 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 // will the remaining data occupy the entire halfbuffer
if (remaining_size > half_tx_nr) { 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++) { 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; g_rmt_objects[ch].tx_state &= ~E_FIRST_HALF;
// turn off the treshold interrupt // 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_size -= half_tx_nr;
g_rmt_objects[ch].data_ptr += half_tx_nr; g_rmt_objects[ch].data_ptr += half_tx_nr;
} else { } 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++) { for (i = 1; i < half_tx_nr; i++) {
if (i < remaining_size) { if (i < remaining_size) {
RMTMEM.chan[ch].data32[i] = data[i]; RMTMEM.chan[ch].data32[i]
#ifdef OLD_IDF
.val
#endif
= data[i];
} else { } 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 { } else {
for (i = 0; i < half_tx_nr; i++) { 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; g_rmt_objects[ch].tx_state &= ~E_FIRST_HALF;
RMT.tx_lim_ch[ch].limit = 0; RMT.tx_lim_ch[ch].limit = 0;