Reliability fixes for wired comms

This commit is contained in:
2026-03-02 11:20:45 -05:00
parent b1ca6da6a1
commit da858d1ca6
4 changed files with 27 additions and 11 deletions

View File

@@ -30,9 +30,6 @@ esp_err_t RMTManager::init_tx_channel(){
esp_err_t res_tx = ESP_FAIL;
memory_to_free = xQueueCreate(15, sizeof(uint8_t*));
xTaskCreate(RMTManager::freeMemory, "RIPFreeMem", 4096, static_cast<void*>(memory_to_free), 5, NULL);
memory_to_free = xQueueCreate(15, sizeof(uint8_t*));
xTaskCreate(RMTManager::freeMemory, "RIPFreeMem", 4096, static_cast<void*>(memory_to_free), 5, NULL);
for (uint8_t i = 0; i < num_channels; i++){
@@ -414,7 +411,10 @@ esp_err_t RMTManager::send(uint8_t* data, size_t size, rmt_transmit_config_t* co
esp_err_t res = rmt_transmit(this->channels[channel_num].tx_rmt_handle, this->channels[channel_num].encoder, new_data_to_send_buf.data, new_data_to_send_buf.length, config);
if (res != ESP_OK){
// printf("Failed to send %s\n", data);
// rmt_transmit() failed: pull our item back out of the queue so the
// TX-done callback won't see it, then free the memory exactly once.
TxBuffer discarded = {};
xQueueReceive(channels[channel_num].tx_queue, &discarded, 0);
vPortFree((void*)new_data_to_send_buf.data);
ESP_LOGE(DEBUG_TAG, "Failed to send %s", data);
return ESP_FAIL;
@@ -593,7 +593,7 @@ esp_err_t RMTManager::receive(uint8_t* recv_buf, size_t size, size_t* output_siz
// printf("duration0 %d level0 %d duration1 %d level1 %d\n", rx_data.received_symbols[i].duration0, rx_data.received_symbols[i].level0, rx_data.received_symbols[i].duration1, rx_data.received_symbols[i].level1);
// }
int num = this->decode_symbols(rx_data.received_symbols, rx_data.num_symbols, channels[channel_num].decoded_recv_symbols, sizeof(channels[channel_num].decoded_recv_symbols));
int num = this->decode_symbols(rx_data.received_symbols, rx_data.num_symbols, channels[channel_num].decoded_recv_symbols, RECEIVE_BUFFER_SIZE);
if (num < 0){
return ESP_FAIL;
}