acquiring bus in the dio task seems to result in the double release.

additional locking was added which could also help with the situation
This commit is contained in:
Morgan 'ARR\!' Allen 2026-03-13 15:05:11 -07:00
parent c71ed05f8f
commit ec1dc66f9b

View file

@ -416,7 +416,7 @@ static void IRAM_ATTR lora32_dio_task(void *arg) {
// wait for event over Queue // wait for event over Queue
if(xQueueReceive(dio_event_queue, (void*)&lora, portMAX_DELAY) != pdPASS) continue; if(xQueueReceive(dio_event_queue, (void*)&lora, portMAX_DELAY) != pdPASS) continue;
spi_device_acquire_bus(lora->spi, portMAX_DELAY); //spi_device_acquire_bus(lora->spi, portMAX_DELAY);
// read IRQ flags // read IRQ flags
uint8_t irqs = lora32_read_reg(lora, REG_IRQ_FLAGS); uint8_t irqs = lora32_read_reg(lora, REG_IRQ_FLAGS);
@ -426,7 +426,7 @@ static void IRAM_ATTR lora32_dio_task(void *arg) {
ESP_LOGD(TAG, "clearing irqs"); ESP_LOGD(TAG, "clearing irqs");
lora32_write_reg(lora, REG_IRQ_FLAGS, irqs); lora32_write_reg(lora, REG_IRQ_FLAGS, irqs);
spi_device_release_bus(lora->spi); //spi_device_release_bus(lora->spi);
// TODO handle header validation // TODO handle header validation
if((irqs & IRQ_RX_DONE) == IRQ_RX_DONE) { if((irqs & IRQ_RX_DONE) == IRQ_RX_DONE) {