diff --git a/tasmota/xdrv_01_webserver.ino b/tasmota/xdrv_01_webserver.ino index 7f510271c..112b9ac7f 100644 --- a/tasmota/xdrv_01_webserver.ino +++ b/tasmota/xdrv_01_webserver.ino @@ -2874,6 +2874,9 @@ void HandleUploadLoop(void) } else if (UPLOAD_FILE_ABORTED == upload.status) { restart_flag = 0; MqttRetryCounter(0); +#ifdef USE_COUNTER + CounterInterruptDisable(false); +#endif Web.upload_error = 7; // Upload aborted if (UPL_TASMOTA == Web.upload_file_type) { Update.end(); } } diff --git a/tasmota/xsns_01_counter.ino b/tasmota/xsns_01_counter.ino index 0337e17e5..73c19322e 100644 --- a/tasmota/xsns_01_counter.ino +++ b/tasmota/xsns_01_counter.ino @@ -44,7 +44,6 @@ struct COUNTER { uint8_t no_pullup = 0; // Counter input pullup flag (1 = No pullup) uint8_t pin_state = 0; // LSB0..3 Last state of counter pin; LSB7==0 IRQ is FALLING, LSB7==1 IRQ is CHANGE bool any_counter = false; - bool disable = false; } Counter; uint32_t last_cycle; @@ -52,8 +51,6 @@ uint32_t cycle_time; //void ICACHE_RAM_ATTR CounterUpdate(uint8_t index) { void ICACHE_RAM_ATTR CounterIsrArg(void *arg) { - if (Counter.disable) { return; } - uint32_t index = *static_cast(arg); uint32_t time = micros(); @@ -147,7 +144,20 @@ void ICACHE_RAM_ATTR CounterUpdate4(void) /********************************************************************************************/ void CounterInterruptDisable(bool state) { - Counter.disable = state; + if (state) { // Disable interrupts + if (Counter.any_counter) { + for (uint32_t i = 0; i < MAX_COUNTERS; i++) { + if (PinUsed(GPIO_CNTR1, i)) { + detachInterrupt(Pin(GPIO_CNTR1, i)); + } + } + Counter.any_counter = false; + } + } else { // Enable interrupts + if (!Counter.any_counter) { + CounterInit(); + } + } } bool CounterPinState(void)