From 5fb117e0ea202d03eee8e6487f4010f43c809b39 Mon Sep 17 00:00:00 2001 From: brisk Date: Fri, 5 Jul 2024 21:40:54 +0930 Subject: [PATCH] pulse_counter_ulp: expunge other storage types --- .../pulse_counter_ulp_sensor.cpp | 127 ------------------ .../pulse_counter_ulp_sensor.h | 31 ----- 2 files changed, 158 deletions(-) diff --git a/esphome/components/pulse_counter_ulp/pulse_counter_ulp_sensor.cpp b/esphome/components/pulse_counter_ulp/pulse_counter_ulp_sensor.cpp index f05264a071..770c81b911 100644 --- a/esphome/components/pulse_counter_ulp/pulse_counter_ulp_sensor.cpp +++ b/esphome/components/pulse_counter_ulp/pulse_counter_ulp_sensor.cpp @@ -13,131 +13,6 @@ static const char *const TAG = "pulse_counter_ulp"; const char *const EDGE_MODE_TO_STRING[] = {"DISABLE", "INCREMENT", "DECREMENT"}; -void IRAM_ATTR BasicPulseCounterStorage::gpio_intr(BasicPulseCounterStorage *arg) { - const uint32_t now = micros(); - const bool discard = now - arg->last_pulse < arg->filter_us; - arg->last_pulse = now; - if (discard) - return; - - PulseCounterCountMode mode = arg->isr_pin.digital_read() ? arg->rising_edge_mode : arg->falling_edge_mode; - switch (mode) { - case PULSE_COUNTER_DISABLE: - break; - case PULSE_COUNTER_INCREMENT: - arg->counter++; - break; - case PULSE_COUNTER_DECREMENT: - arg->counter--; - break; - } -} -bool BasicPulseCounterStorage::pulse_counter_setup(InternalGPIOPin *pin) { - this->pin = pin; - this->pin->setup(); - this->isr_pin = this->pin->to_isr(); - this->pin->attach_interrupt(BasicPulseCounterStorage::gpio_intr, this, gpio::INTERRUPT_ANY_EDGE); - return true; -} -pulse_counter_t BasicPulseCounterStorage::read_raw_value() { - pulse_counter_t counter = this->counter; - pulse_counter_t ret = counter - this->last_value; - this->last_value = counter; - return ret; -} - -#ifdef HAS_PCNT -bool HwPulseCounterStorage::pulse_counter_setup(InternalGPIOPin *pin) { - static pcnt_unit_t next_pcnt_unit = PCNT_UNIT_0; - this->pin = pin; - this->pin->setup(); - this->pcnt_unit = next_pcnt_unit; - next_pcnt_unit = pcnt_unit_t(int(next_pcnt_unit) + 1); - - ESP_LOGCONFIG(TAG, " PCNT Unit Number: %u", this->pcnt_unit); - - pcnt_count_mode_t rising = PCNT_COUNT_DIS, falling = PCNT_COUNT_DIS; - switch (this->rising_edge_mode) { - case PULSE_COUNTER_DISABLE: - rising = PCNT_COUNT_DIS; - break; - case PULSE_COUNTER_INCREMENT: - rising = PCNT_COUNT_INC; - break; - case PULSE_COUNTER_DECREMENT: - rising = PCNT_COUNT_DEC; - break; - } - switch (this->falling_edge_mode) { - case PULSE_COUNTER_DISABLE: - falling = PCNT_COUNT_DIS; - break; - case PULSE_COUNTER_INCREMENT: - falling = PCNT_COUNT_INC; - break; - case PULSE_COUNTER_DECREMENT: - falling = PCNT_COUNT_DEC; - break; - } - - pcnt_config_t pcnt_config = { - .pulse_gpio_num = this->pin->get_pin(), - .ctrl_gpio_num = PCNT_PIN_NOT_USED, - .lctrl_mode = PCNT_MODE_KEEP, - .hctrl_mode = PCNT_MODE_KEEP, - .pos_mode = rising, - .neg_mode = falling, - .counter_h_lim = 0, - .counter_l_lim = 0, - .unit = this->pcnt_unit, - .channel = PCNT_CHANNEL_0, - }; - esp_err_t error = pcnt_unit_config(&pcnt_config); - if (error != ESP_OK) { - ESP_LOGE(TAG, "Configuring Pulse Counter failed: %s", esp_err_to_name(error)); - return false; - } - - if (this->filter_us != 0) { - uint16_t filter_val = std::min(static_cast(this->filter_us * 80u), 1023u); - ESP_LOGCONFIG(TAG, " Filter Value: %" PRIu32 "us (val=%u)", this->filter_us, filter_val); - error = pcnt_set_filter_value(this->pcnt_unit, filter_val); - if (error != ESP_OK) { - ESP_LOGE(TAG, "Setting filter value failed: %s", esp_err_to_name(error)); - return false; - } - error = pcnt_filter_enable(this->pcnt_unit); - if (error != ESP_OK) { - ESP_LOGE(TAG, "Enabling filter failed: %s", esp_err_to_name(error)); - return false; - } - } - - error = pcnt_counter_pause(this->pcnt_unit); - if (error != ESP_OK) { - ESP_LOGE(TAG, "Pausing pulse counter failed: %s", esp_err_to_name(error)); - return false; - } - error = pcnt_counter_clear(this->pcnt_unit); - if (error != ESP_OK) { - ESP_LOGE(TAG, "Clearing pulse counter failed: %s", esp_err_to_name(error)); - return false; - } - error = pcnt_counter_resume(this->pcnt_unit); - if (error != ESP_OK) { - ESP_LOGE(TAG, "Resuming pulse counter failed: %s", esp_err_to_name(error)); - return false; - } - return true; -} -pulse_counter_t HwPulseCounterStorage::read_raw_value() { - pulse_counter_t counter; - pcnt_get_counter_value(this->pcnt_unit, &counter); - pulse_counter_t ret = counter - this->last_value; - this->last_value = counter; - return ret; -} - /* === ULP === */ extern const uint8_t ulp_main_bin_start[] asm("_binary_ulp_main_bin_start"); @@ -237,8 +112,6 @@ pulse_counter_t UlpPulseCounterStorage::read_raw_value() { /* === END ULP ===*/ -#endif - void PulseCounterSensor::setup() { ESP_LOGCONFIG(TAG, "Setting up pulse counter '%s'...", this->name_.c_str()); if (!this->storage_.pulse_counter_setup(this->pin_)) { diff --git a/esphome/components/pulse_counter_ulp/pulse_counter_ulp_sensor.h b/esphome/components/pulse_counter_ulp/pulse_counter_ulp_sensor.h index fa2bba69a0..07d0b9acbd 100644 --- a/esphome/components/pulse_counter_ulp/pulse_counter_ulp_sensor.h +++ b/esphome/components/pulse_counter_ulp/pulse_counter_ulp_sensor.h @@ -10,11 +10,6 @@ #include -#if defined(USE_ESP32) && !defined(USE_ESP32_VARIANT_ESP32C3) -#include -#define HAS_PCNT -#endif - namespace esphome { namespace pulse_counter { @@ -24,12 +19,7 @@ enum PulseCounterCountMode { PULSE_COUNTER_DECREMENT, }; -#ifdef HAS_PCNT -using pulse_counter_t = int16_t; -#else using pulse_counter_t = int32_t; -#endif - using timestamp_t = int64_t; struct PulseCounterStorageBase { @@ -43,31 +33,10 @@ struct PulseCounterStorageBase { pulse_counter_t last_value{0}; }; -struct BasicPulseCounterStorage : public PulseCounterStorageBase { - static void gpio_intr(BasicPulseCounterStorage *arg); - - bool pulse_counter_setup(InternalGPIOPin *pin) override; - pulse_counter_t read_raw_value() override; - - volatile pulse_counter_t counter{0}; - volatile uint32_t last_pulse{0}; - - ISRInternalGPIOPin isr_pin; -}; - -#ifdef HAS_PCNT -struct HwPulseCounterStorage : public PulseCounterStorageBase { - bool pulse_counter_setup(InternalGPIOPin *pin) override; - pulse_counter_t read_raw_value() override; - - pcnt_unit_t pcnt_unit; -}; - struct UlpPulseCounterStorage : public PulseCounterStorageBase { bool pulse_counter_setup(InternalGPIOPin *pin) override; pulse_counter_t read_raw_value() override; }; -#endif class PulseCounterSensor : public sensor::Sensor, public PollingComponent { public: