Esp32 i2s cleanup (#521)

* ESP32 I2s deallocation

* NULL pointers
This commit is contained in:
Michael Miller
2021-10-12 13:17:09 -07:00
committed by GitHub
parent 9496b0ef15
commit b1fac57687
4 changed files with 27 additions and 4 deletions

View File

@@ -127,7 +127,7 @@ public:
ESP_ERROR_CHECK(ret);
}
free(_data);
free(_dmadata);
heap_caps_free(_dmadata);
_spiHandle = NULL;
}

View File

@@ -126,6 +126,7 @@ static i2s_bus_t I2S[I2S_NUM_MAX] = {
void IRAM_ATTR i2sDmaISR(void* arg);
bool i2sInitDmaItems(uint8_t bus_num) {
if (bus_num >= I2S_NUM_MAX) {
return false;
@@ -170,13 +171,29 @@ bool i2sInitDmaItems(uint8_t bus_num) {
I2S[bus_num].tx_queue = xQueueCreate(I2S_DMA_QUEUE_COUNT, sizeof(i2s_dma_item_t*));
if (I2S[bus_num].tx_queue == NULL) {// memory error
log_e("MEM ERROR!");
free(I2S[bus_num].dma_items);
heap_caps_free(I2S[bus_num].dma_items);
I2S[bus_num].dma_items = NULL;
return false;
}
return true;
}
bool i2sDeinitDmaItems(uint8_t bus_num) {
if (bus_num >= I2S_NUM_MAX) {
return false;
}
if (!I2S[bus_num].tx_queue) {
return false; // nothing to deinit
}
vQueueDelete(I2S[bus_num].tx_queue);
I2S[bus_num].tx_queue = NULL;
heap_caps_free(I2S[bus_num].dma_items);
I2S[bus_num].dma_items = NULL;
return true;
}
esp_err_t i2sSetClock(uint8_t bus_num, uint8_t div_num, uint8_t div_b, uint8_t div_a, uint8_t bck, uint8_t bits) {
if (bus_num >= I2S_NUM_MAX || div_a > 63 || div_b > 63 || bck > 63) {
return ESP_FAIL;
@@ -381,6 +398,10 @@ void i2sInit(uint8_t bus_num,
esp_intr_enable(I2S[bus_num].isr_handle);
}
void i2sDeinit(uint8_t bus_num) {
i2sDeinitDmaItems(bus_num);
}
esp_err_t i2sSetSampleRate(uint8_t bus_num, uint32_t rate, uint8_t bits) {
if (bus_num >= I2S_NUM_MAX) {
return ESP_FAIL;

View File

@@ -27,6 +27,8 @@ void i2sInit(uint8_t bus_num,
size_t dma_count,
size_t dma_len);
void i2sDeinit(uint8_t bus_num);
void i2sSetPins(uint8_t bus_num, int8_t out, bool invert);
esp_err_t i2sSetClock(uint8_t bus_num, uint8_t div_num, uint8_t div_b, uint8_t div_a, uint8_t bck, uint8_t bits_per_sample);

View File

@@ -170,9 +170,9 @@ public:
}
i2sSetPins(_bus.I2sBusNumber, -1, false);
i2sDeinit(_bus.I2sBusNumber);
free(_data);
free(_i2sBuffer);
heap_caps_free(_i2sBuffer);
}
bool IsReadyToUpdate() const