From aecf08021176d919508bb36a514bf4551a7fe633 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Thu, 12 Jun 2025 13:16:48 -0500 Subject: [PATCH] touch ups --- esphome/components/esp32_touch/esp32_touch.h | 10 ---------- esphome/components/esp32_touch/esp32_touch_v1.cpp | 12 +++++++++--- esphome/components/esp32_touch/esp32_touch_v2.cpp | 12 +++++++++--- 3 files changed, 18 insertions(+), 16 deletions(-) diff --git a/esphome/components/esp32_touch/esp32_touch.h b/esphome/components/esp32_touch/esp32_touch.h index c1b0a3c377..ba05cdcebb 100644 --- a/esphome/components/esp32_touch/esp32_touch.h +++ b/esphome/components/esp32_touch/esp32_touch.h @@ -19,16 +19,6 @@ static const uint32_t SETUP_MODE_LOG_INTERVAL_MS = 250; class ESP32TouchBinarySensor; -struct TouchPadEvent { - touch_pad_t pad; - uint32_t value; - bool is_touched; // Whether this pad is currently touched -#if defined(USE_ESP32_VARIANT_ESP32S2) || defined(USE_ESP32_VARIANT_ESP32S3) - uint32_t intr_mask; // Interrupt mask for S2/S3 - uint32_t pad_status; // Pad status bitmap for S2/S3 -#endif -}; - class ESP32TouchComponent : public Component { public: void register_touch_pad(ESP32TouchBinarySensor *pad) { this->children_.push_back(pad); } diff --git a/esphome/components/esp32_touch/esp32_touch_v1.cpp b/esphome/components/esp32_touch/esp32_touch_v1.cpp index b040a63355..0ee7990a94 100644 --- a/esphome/components/esp32_touch/esp32_touch_v1.cpp +++ b/esphome/components/esp32_touch/esp32_touch_v1.cpp @@ -18,6 +18,12 @@ namespace esp32_touch { static const char *const TAG = "esp32_touch"; +struct TouchPadEventV1 { + touch_pad_t pad; + uint32_t value; + bool is_touched; +}; + void ESP32TouchComponent::setup() { ESP_LOGCONFIG(TAG, "Running setup for ESP32"); @@ -29,7 +35,7 @@ void ESP32TouchComponent::setup() { if (queue_size < 8) queue_size = 8; - this->touch_queue_ = xQueueCreate(queue_size, sizeof(TouchPadEvent)); + this->touch_queue_ = xQueueCreate(queue_size, sizeof(TouchPadEventV1)); if (this->touch_queue_ == nullptr) { ESP_LOGE(TAG, "Failed to create touch event queue of size %d", queue_size); this->mark_failed(); @@ -106,7 +112,7 @@ void ESP32TouchComponent::loop() { } // Process any queued touch events from interrupts - TouchPadEvent event; + TouchPadEventV1 event; while (xQueueReceive(this->touch_queue_, &event, 0) == pdTRUE) { // Find the corresponding sensor for (auto *child : this->children_) { @@ -228,7 +234,7 @@ void IRAM_ATTR ESP32TouchComponent::touch_isr_handler(void *arg) { bool is_touched = value < child->get_threshold(); // Always send the current state - the main loop will filter for changes - TouchPadEvent event; + TouchPadEventV1 event; event.pad = pad; event.value = value; event.is_touched = is_touched; diff --git a/esphome/components/esp32_touch/esp32_touch_v2.cpp b/esphome/components/esp32_touch/esp32_touch_v2.cpp index c570bcd8f6..8aa40f1c6a 100644 --- a/esphome/components/esp32_touch/esp32_touch_v2.cpp +++ b/esphome/components/esp32_touch/esp32_touch_v2.cpp @@ -20,6 +20,12 @@ namespace esp32_touch { static const char *const TAG = "esp32_touch"; +struct TouchPadEventV2 { + touch_pad_t pad; + uint32_t intr_mask; + uint32_t pad_status; +}; + void ESP32TouchComponent::setup() { // Add a delay to allow serial connection, but feed the watchdog ESP_LOGCONFIG(TAG, "Waiting 5 seconds before touch sensor setup..."); @@ -36,7 +42,7 @@ void ESP32TouchComponent::setup() { if (queue_size < 8) queue_size = 8; - this->touch_queue_ = xQueueCreate(queue_size, sizeof(TouchPadEvent)); + this->touch_queue_ = xQueueCreate(queue_size, sizeof(TouchPadEventV2)); if (this->touch_queue_ == nullptr) { ESP_LOGE(TAG, "Failed to create touch event queue of size %d", queue_size); this->mark_failed(); @@ -257,7 +263,7 @@ void ESP32TouchComponent::loop() { const uint32_t now = App.get_loop_component_start_time(); // Process any queued touch events from interrupts - TouchPadEvent event; + TouchPadEventV2 event; while (xQueueReceive(this->touch_queue_, &event, 0) == pdTRUE) { // Handle timeout events if (event.intr_mask & TOUCH_PAD_INTR_MASK_TIMEOUT) { @@ -350,7 +356,7 @@ void IRAM_ATTR ESP32TouchComponent::touch_isr_handler(void *arg) { BaseType_t xHigherPriorityTaskWoken = pdFALSE; // Read interrupt status and pad status - TouchPadEvent event; + TouchPadEventV2 event; event.intr_mask = touch_pad_read_intr_status_mask(); event.pad_status = touch_pad_get_status(); event.pad = touch_pad_get_current_meas_channel();