From 4a6fc0b94671d5de8bc73246360b5bd06e93a6c6 Mon Sep 17 00:00:00 2001 From: Miao Jian Yu Date: Tue, 5 Nov 2024 17:01:27 +0800 Subject: [PATCH] feat: add knob ext1_wakeup mode --- README.md | 2 +- README_CN.md | 2 +- components/knob/CHANGELOG.md | 15 +++++++------ components/knob/idf_component.yml | 4 ++-- components/knob/knob_gpio.c | 35 ++++++++++++++++++++++++++++++- 5 files changed, 47 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index e1f6195a3..2b75a6bda 100644 --- a/README.md +++ b/README.md @@ -106,7 +106,7 @@ The registered components in ESP-IoT-Solution are listed below: | [iot_usbh_modem](https://components.espressif.com/components/espressif/iot_usbh_modem/versions/0.2.1) | [![0.2.1](https://img.shields.io/badge/Beta-0.2.1-yellow)](https://components.espressif.com/components/espressif/iot_usbh_modem/versions/0.2.1) | | [ir_learn](https://components.espressif.com/components/espressif/ir_learn/versions/0.2.0) | [![0.2.0](https://img.shields.io/badge/Beta-0.2.0-yellow)](https://components.espressif.com/components/espressif/ir_learn/versions/0.2.0) | | [keyboard_button](https://components.espressif.com/components/espressif/keyboard_button/versions/1.0.0) | [![1.0.0](https://img.shields.io/badge/Stable-1.0.0-blue)](https://components.espressif.com/components/espressif/keyboard_button/versions/1.0.0) | -| [knob](https://components.espressif.com/components/espressif/knob/versions/0.1.5) | [![0.1.5](https://img.shields.io/badge/Beta-0.1.5-yellow)](https://components.espressif.com/components/espressif/knob/versions/0.1.5) | +| [knob](https://components.espressif.com/components/espressif/knob/versions/1.0.0) | [![1.0.0](https://img.shields.io/badge/Stable-1.0.0-blue)](https://components.espressif.com/components/espressif/knob/versions/1.0.0) | | [led_indicator](https://components.espressif.com/components/espressif/led_indicator/versions/1.0.0) | [![1.0.0](https://img.shields.io/badge/Stable-1.0.0-blue)](https://components.espressif.com/components/espressif/led_indicator/versions/1.0.0) | | [lightbulb_driver](https://components.espressif.com/components/espressif/lightbulb_driver/versions/1.3.2) | [![1.3.2](https://img.shields.io/badge/Stable-1.3.2-blue)](https://components.espressif.com/components/espressif/lightbulb_driver/versions/1.3.2) | | [ntc_driver](https://components.espressif.com/components/espressif/ntc_driver/versions/1.0.0) | [![1.0.0](https://img.shields.io/badge/Stable-1.0.0-blue)](https://components.espressif.com/components/espressif/ntc_driver/versions/1.0.0) | diff --git a/README_CN.md b/README_CN.md index 85d613fb9..b4483af2b 100644 --- a/README_CN.md +++ b/README_CN.md @@ -106,7 +106,7 @@ ESP-IoT-Solution 中注册的组件如下: | [iot_usbh_modem](https://components.espressif.com/components/espressif/iot_usbh_modem/versions/0.2.1) | [![0.2.1](https://img.shields.io/badge/Beta-0.2.1-yellow)](https://components.espressif.com/components/espressif/iot_usbh_modem/versions/0.2.1) | | [ir_learn](https://components.espressif.com/components/espressif/ir_learn/versions/0.2.0) | [![0.2.0](https://img.shields.io/badge/Beta-0.2.0-yellow)](https://components.espressif.com/components/espressif/ir_learn/versions/0.2.0) | | [keyboard_button](https://components.espressif.com/components/espressif/keyboard_button/versions/1.0.0) | [![1.0.0](https://img.shields.io/badge/Stable-1.0.0-blue)](https://components.espressif.com/components/espressif/keyboard_button/versions/1.0.0) | -| [knob](https://components.espressif.com/components/espressif/knob/versions/0.1.5) | [![0.1.5](https://img.shields.io/badge/Beta-0.1.5-yellow)](https://components.espressif.com/components/espressif/knob/versions/0.1.5) | +| [knob](https://components.espressif.com/components/espressif/knob/versions/1.0.0) | [![1.0.0](https://img.shields.io/badge/Stable-1.0.0-blue)](https://components.espressif.com/components/espressif/knob/versions/1.0.0) | | [led_indicator](https://components.espressif.com/components/espressif/led_indicator/versions/1.0.0) | [![1.0.0](https://img.shields.io/badge/Stable-1.0.0-blue)](https://components.espressif.com/components/espressif/led_indicator/versions/1.0.0) | | [lightbulb_driver](https://components.espressif.com/components/espressif/lightbulb_driver/versions/1.3.2) | [![1.3.2](https://img.shields.io/badge/Stable-1.3.2-blue)](https://components.espressif.com/components/espressif/lightbulb_driver/versions/1.3.2) | | [ntc_driver](https://components.espressif.com/components/espressif/ntc_driver/versions/1.0.0) | [![1.0.0](https://img.shields.io/badge/Stable-1.0.0-blue)](https://components.espressif.com/components/espressif/ntc_driver/versions/1.0.0) | diff --git a/components/knob/CHANGELOG.md b/components/knob/CHANGELOG.md index 63454a23e..797e39ab4 100644 --- a/components/knob/CHANGELOG.md +++ b/components/knob/CHANGELOG.md @@ -1,8 +1,13 @@ # ChangeLog +## v1.0.0 - 2024-9-26 + +* Add ext1_wakeup mode for Knob when define CONFIG_PM_POWER_DOWN_PERIPHERAL_IN_LIGHT_SLEEP=y + ## v0.1.5 - 2024-7-3 -### Enhancements: +### Enhancements: + * Support power save mode ## v0.1.4 - 2023-11-23 @@ -11,7 +16,7 @@ ## v0.1.3 - 2023-6-2 -### Enhancements: +### Enhancements: * Add power on knob position detection to avoid logical inversion caused by knob position * Change test to test_apps project @@ -34,10 +39,9 @@ ### Enhancements: * Initial version - * The following types of events are supported -| EVENT | 描述 | +| EVENT | 描述 | | ---------- | -------------------------------------- | | KNOB_LEFT | EVENT: Rotate to the left | | KNOB_RIGHT | EVENT: Rotate to the right | @@ -46,5 +50,4 @@ | KNOB_ZERO | EVENT: Count back to 0 | * Support for defining multiple knobs - -* Support binding callback functions for each event and adding user-data \ No newline at end of file +* Support binding callback functions for each event and adding user-data diff --git a/components/knob/idf_component.yml b/components/knob/idf_component.yml index 624f2d61b..eb0a02c45 100644 --- a/components/knob/idf_component.yml +++ b/components/knob/idf_component.yml @@ -1,5 +1,5 @@ -version: "0.1.5" -description: Knob driver implemented through software quadrature decoding. +version: "1.0.0" +description: Knob driver implemented through software pcnt url: https://github.com/espressif/esp-iot-solution/tree/master/components/knob documentation: https://docs.espressif.com/projects/esp-iot-solution/en/latest/input_device/knob.html issues: https://github.com/espressif/esp-iot-solution/issues diff --git a/components/knob/knob_gpio.c b/components/knob/knob_gpio.c index c530c8c51..4251765b0 100644 --- a/components/knob/knob_gpio.c +++ b/components/knob/knob_gpio.c @@ -66,8 +66,23 @@ esp_err_t knob_gpio_wake_up_control(uint32_t gpio_num, uint8_t wake_up_level, bo { esp_err_t ret; if (enable) { +#if CONFIG_PM_POWER_DOWN_PERIPHERAL_IN_LIGHT_SLEEP +#if SOC_PM_SUPPORT_EXT1_WAKEUP + ret = esp_sleep_enable_ext1_wakeup_io((1ULL << gpio_num), wake_up_level == 0 ? ESP_EXT1_WAKEUP_ANY_LOW : ESP_EXT1_WAKEUP_ANY_HIGH); +#else + /*!< Not support etc: esp32c2, esp32c3. Target must support ext1 wakeup */ + ret = ESP_FAIL; + ESP_RETURN_ON_FALSE(ret == ESP_OK, ESP_FAIL, TAG, "Target must support ext1 wakeup"); +#endif +#endif + /* Enable wake up from GPIO */ ret = gpio_wakeup_enable(gpio_num, wake_up_level == 0 ? GPIO_INTR_LOW_LEVEL : GPIO_INTR_HIGH_LEVEL); } else { +#if CONFIG_PM_POWER_DOWN_PERIPHERAL_IN_LIGHT_SLEEP +#if SOC_PM_SUPPORT_EXT1_WAKEUP + ret = esp_sleep_disable_ext1_wakeup_io(1ULL << gpio_num); +#endif +#endif ret = gpio_wakeup_disable(gpio_num); } return ret; @@ -75,11 +90,29 @@ esp_err_t knob_gpio_wake_up_control(uint32_t gpio_num, uint8_t wake_up_level, bo esp_err_t knob_gpio_wake_up_init(uint32_t gpio_num, uint8_t wake_up_level) { +#if CONFIG_PM_POWER_DOWN_PERIPHERAL_IN_LIGHT_SLEEP + if (!esp_sleep_is_valid_wakeup_gpio(gpio_num)) { + ESP_LOGE(TAG, "GPIO %ld is not a valid wakeup source under CONFIG_PM_POWER_DOWN_PERIPHERAL_IN_LIGHT_SLEEP", + gpio_num); + return ESP_FAIL; + } + gpio_hold_en(gpio_num); +#endif /* Enable wake up from GPIO */ esp_err_t ret = gpio_wakeup_enable(gpio_num, wake_up_level == 0 ? GPIO_INTR_LOW_LEVEL : GPIO_INTR_HIGH_LEVEL); ESP_RETURN_ON_FALSE(ret == ESP_OK, ESP_FAIL, TAG, "Enable gpio wakeup failed"); + +#if CONFIG_PM_POWER_DOWN_PERIPHERAL_IN_LIGHT_SLEEP +#if SOC_PM_SUPPORT_EXT1_WAKEUP + ret = esp_sleep_enable_ext1_wakeup_io((1ULL << gpio_num), wake_up_level == 0 ? ESP_EXT1_WAKEUP_ANY_LOW : ESP_EXT1_WAKEUP_ANY_HIGH); +#else + /*!< Not support etc: esp32c2, esp32c3. Target must support ext1 wakeup */ + ret = ESP_FAIL; + ESP_RETURN_ON_FALSE(ret == ESP_OK, ESP_FAIL, TAG, "Target must support ext1 wakeup"); +#endif +#else ret = esp_sleep_enable_gpio_wakeup(); ESP_RETURN_ON_FALSE(ret == ESP_OK, ESP_FAIL, TAG, "esp sleep enable gpio wakeup failed"); - +#endif return ESP_OK; }