From daee25c3436c0c3c8a974a03f3a8dc8e3907baa0 Mon Sep 17 00:00:00 2001 From: Alexey Zholtikov Date: Thu, 12 Feb 2026 18:29:02 +0300 Subject: [PATCH] fix: handling of simultaneous interrupts of several gpio not work --- version.txt | 2 +- zh_pcf8574.c | 18 +++++++----------- 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/version.txt b/version.txt index 58073ef..acdc3f1 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -2.4.1 \ No newline at end of file +2.4.2 \ No newline at end of file diff --git a/zh_pcf8574.c b/zh_pcf8574.c index 10d2574..da53521 100755 --- a/zh_pcf8574.c +++ b/zh_pcf8574.c @@ -305,7 +305,6 @@ static void IRAM_ATTR _zh_pcf8574_isr_processing_task(void *pvParameter) } zh_pcf8574_event_on_isr_t event = {0}; event.i2c_address = handle->i2c_address; - event.gpio_number = 0xFF; uint8_t old_reg = handle->gpio_status; uint8_t new_reg = 0; esp_err_t err = _zh_pcf8574_read_register(handle, &new_reg); @@ -322,19 +321,16 @@ static void IRAM_ATTR _zh_pcf8574_isr_processing_task(void *pvParameter) { event.gpio_number = j; event.gpio_level = new_reg & _gpio_matrix[j]; + err = esp_event_post(ZH_PCF8574, 0, &event, sizeof(event), 1000 / portTICK_PERIOD_MS); + if (err != ESP_OK) + { + ++_stats.event_post_error; + ZH_LOGE("PCF8574 isr processing failed. Failed to post interrupt event.", err); + continue; + } } } } - if (event.gpio_number != 0xFF) - { - err = esp_event_post(ZH_PCF8574, 0, &event, sizeof(event), 1000 / portTICK_PERIOD_MS); - if (err != ESP_OK) - { - ++_stats.event_post_error; - ZH_LOGE("PCF8574 isr processing failed. Failed to post interrupt event.", err); - continue; - } - } } _stats.min_stack_size = (uint32_t)uxTaskGetStackHighWaterMark(NULL); }