From f15a60f2f65f8c2e2096150b2a620c01edfe6dac Mon Sep 17 00:00:00 2001 From: laokaiyao Date: Wed, 3 Sep 2025 11:20:49 +0800 Subject: [PATCH] remove(touch_element): remove touch_element from idf Touch Element Library is moved to managed component. (https://components.espressif.com/components/espressif/touch_element/versions/1.0.0/readme) --- .gitlab/CODEOWNERS | 1 - .../driver/test_apps/.build-test-rules.yml | 13 + .../test_apps/touch_element}/CMakeLists.txt | 0 .../test_apps/touch_element}/README.md | 0 .../touch_element}/main/CMakeLists.txt | 2 +- .../touch_element/main/idf_component.yml | 2 + .../touch_element}/main/test_app_main.c | 1 - .../touch_element}/main/test_touch_button.c | 30 +- .../touch_element}/main/test_touch_element.c | 18 +- .../touch_element}/main/test_touch_matrix.c | 33 +- .../touch_element}/main/test_touch_slider.c | 13 +- .../touch_element}/pytest_touch_element.py | 0 .../touch_element}/sdkconfig.ci.opt_o0 | 0 .../touch_element}/sdkconfig.ci.opt_o2 | 0 .../touch_element}/sdkconfig.defaults | 0 components/touch_element/CMakeLists.txt | 17 - .../include/touch_element/touch_button.h | 196 --- .../include/touch_element/touch_element.h | 338 ----- .../touch_element/touch_element_private.h | 200 --- .../include/touch_element/touch_matrix.h | 213 ---- .../include/touch_element/touch_slider.h | 197 --- .../test_apps/.build-test-rules.yml | 6 - components/touch_element/touch_button.c | 440 ------- components/touch_element/touch_element.c | 1116 ----------------- components/touch_element/touch_matrix.c | 647 ---------- components/touch_element/touch_slider.c | 678 ---------- .../source/te_architecture.drawio | 1 - .../touch_element/source/te_button.odg | Bin 68160 -> 0 bytes .../touch_element/source/te_component.odg | Bin 113486 -> 0 bytes .../touch_element/source/te_matrix.odg | Bin 71440 -> 0 bytes .../touch_element/source/te_slider.odg | Bin 68477 -> 0 bytes .../touch_element/source/te_threshold.odg | Bin 82491 -> 0 bytes .../_static/touch_element/te_architecture.svg | 3 - docs/_static/touch_element/te_button.svg | 244 ---- docs/_static/touch_element/te_component.svg | 669 ---------- docs/_static/touch_element/te_matrix.svg | 393 ------ docs/_static/touch_element/te_signal.png | Bin 125226 -> 0 bytes docs/_static/touch_element/te_slider.svg | 297 ----- docs/_static/touch_element/te_threshold.svg | 299 ----- docs/conf_common.py | 2 - docs/doxygen/Doxyfile_esp32s2 | 4 - docs/doxygen/Doxyfile_esp32s3 | 4 - docs/en/api-reference/peripherals/index.rst | 1 - .../peripherals/touch_element.rst | 486 ------- .../release-6.x/6.0/peripherals.rst | 7 + docs/page_redirects.txt | 1 + .../zh_CN/api-reference/peripherals/index.rst | 1 - .../peripherals/touch_element.rst | 486 ------- .../release-6.x/6.0/peripherals.rst | 8 + examples/bluetooth/.build-test-rules.yml | 1 - examples/peripherals/.build-test-rules.yml | 5 - .../touch_element/touch_button/CMakeLists.txt | 8 - .../touch_element/touch_button/README.md | 71 -- .../touch_button/main/CMakeLists.txt | 3 - .../touch_button/main/Kconfig.projbuild | 15 - .../main/touch_button_example_main.c | 134 -- .../touch_button/pytest_touch_button.py | 14 - .../touch_element_waterproof/CMakeLists.txt | 8 - .../touch_element_waterproof/README.md | 59 - .../main/CMakeLists.txt | 3 - .../main/Kconfig.projbuild | 10 - .../main/waterproof_example_main.c | 91 -- .../pytest_touch_element_waterproof.py | 14 - .../touch_elements_combination/CMakeLists.txt | 8 - .../touch_elements_combination/README.md | 150 --- .../main/CMakeLists.txt | 3 - .../main/touch_elements_example_main.c | 157 --- .../pytest_touch_elements_combination.py | 16 - .../touch_element/touch_matrix/CMakeLists.txt | 8 - .../touch_element/touch_matrix/README.md | 65 - .../touch_matrix/main/CMakeLists.txt | 3 - .../touch_matrix/main/Kconfig.projbuild | 15 - .../main/touch_matrix_example_main.c | 132 -- .../touch_matrix/pytest_touch_matrix.py | 14 - .../touch_element/touch_slider/CMakeLists.txt | 8 - .../touch_element/touch_slider/README.md | 96 -- .../touch_slider/main/CMakeLists.txt | 3 - .../touch_slider/main/Kconfig.projbuild | 15 - .../main/touch_slider_example_main.c | 117 -- .../touch_slider/pytest_touch_slider.py | 14 - tools/ci/astyle-rules.yml | 1 - tools/idf_py_actions/hints.yml | 11 +- 82 files changed, 98 insertions(+), 8241 deletions(-) rename components/{touch_element/test_apps => driver/test_apps/touch_element}/CMakeLists.txt (100%) rename components/{touch_element/test_apps => driver/test_apps/touch_element}/README.md (100%) rename components/{touch_element/test_apps => driver/test_apps/touch_element}/main/CMakeLists.txt (75%) create mode 100644 components/driver/test_apps/touch_element/main/idf_component.yml rename components/{touch_element/test_apps => driver/test_apps/touch_element}/main/test_app_main.c (91%) rename components/{touch_element/test_apps => driver/test_apps/touch_element}/main/test_touch_button.c (96%) rename components/{touch_element/test_apps => driver/test_apps/touch_element}/main/test_touch_element.c (97%) rename components/{touch_element/test_apps => driver/test_apps/touch_element}/main/test_touch_matrix.c (94%) rename components/{touch_element/test_apps => driver/test_apps/touch_element}/main/test_touch_slider.c (95%) rename components/{touch_element/test_apps => driver/test_apps/touch_element}/pytest_touch_element.py (100%) rename components/{touch_element/test_apps => driver/test_apps/touch_element}/sdkconfig.ci.opt_o0 (100%) rename components/{touch_element/test_apps => driver/test_apps/touch_element}/sdkconfig.ci.opt_o2 (100%) rename components/{touch_element/test_apps => driver/test_apps/touch_element}/sdkconfig.defaults (100%) delete mode 100644 components/touch_element/CMakeLists.txt delete mode 100644 components/touch_element/include/touch_element/touch_button.h delete mode 100644 components/touch_element/include/touch_element/touch_element.h delete mode 100644 components/touch_element/include/touch_element/touch_element_private.h delete mode 100644 components/touch_element/include/touch_element/touch_matrix.h delete mode 100644 components/touch_element/include/touch_element/touch_slider.h delete mode 100644 components/touch_element/test_apps/.build-test-rules.yml delete mode 100644 components/touch_element/touch_button.c delete mode 100644 components/touch_element/touch_element.c delete mode 100644 components/touch_element/touch_matrix.c delete mode 100644 components/touch_element/touch_slider.c delete mode 100644 docs/_static/touch_element/source/te_architecture.drawio delete mode 100644 docs/_static/touch_element/source/te_button.odg delete mode 100644 docs/_static/touch_element/source/te_component.odg delete mode 100644 docs/_static/touch_element/source/te_matrix.odg delete mode 100644 docs/_static/touch_element/source/te_slider.odg delete mode 100644 docs/_static/touch_element/source/te_threshold.odg delete mode 100644 docs/_static/touch_element/te_architecture.svg delete mode 100644 docs/_static/touch_element/te_button.svg delete mode 100644 docs/_static/touch_element/te_component.svg delete mode 100644 docs/_static/touch_element/te_matrix.svg delete mode 100644 docs/_static/touch_element/te_signal.png delete mode 100644 docs/_static/touch_element/te_slider.svg delete mode 100644 docs/_static/touch_element/te_threshold.svg delete mode 100644 docs/en/api-reference/peripherals/touch_element.rst delete mode 100644 docs/zh_CN/api-reference/peripherals/touch_element.rst delete mode 100644 examples/peripherals/touch_sensor/touch_element/touch_button/CMakeLists.txt delete mode 100644 examples/peripherals/touch_sensor/touch_element/touch_button/README.md delete mode 100644 examples/peripherals/touch_sensor/touch_element/touch_button/main/CMakeLists.txt delete mode 100644 examples/peripherals/touch_sensor/touch_element/touch_button/main/Kconfig.projbuild delete mode 100644 examples/peripherals/touch_sensor/touch_element/touch_button/main/touch_button_example_main.c delete mode 100644 examples/peripherals/touch_sensor/touch_element/touch_button/pytest_touch_button.py delete mode 100644 examples/peripherals/touch_sensor/touch_element/touch_element_waterproof/CMakeLists.txt delete mode 100644 examples/peripherals/touch_sensor/touch_element/touch_element_waterproof/README.md delete mode 100644 examples/peripherals/touch_sensor/touch_element/touch_element_waterproof/main/CMakeLists.txt delete mode 100644 examples/peripherals/touch_sensor/touch_element/touch_element_waterproof/main/Kconfig.projbuild delete mode 100644 examples/peripherals/touch_sensor/touch_element/touch_element_waterproof/main/waterproof_example_main.c delete mode 100644 examples/peripherals/touch_sensor/touch_element/touch_element_waterproof/pytest_touch_element_waterproof.py delete mode 100644 examples/peripherals/touch_sensor/touch_element/touch_elements_combination/CMakeLists.txt delete mode 100644 examples/peripherals/touch_sensor/touch_element/touch_elements_combination/README.md delete mode 100644 examples/peripherals/touch_sensor/touch_element/touch_elements_combination/main/CMakeLists.txt delete mode 100644 examples/peripherals/touch_sensor/touch_element/touch_elements_combination/main/touch_elements_example_main.c delete mode 100644 examples/peripherals/touch_sensor/touch_element/touch_elements_combination/pytest_touch_elements_combination.py delete mode 100644 examples/peripherals/touch_sensor/touch_element/touch_matrix/CMakeLists.txt delete mode 100644 examples/peripherals/touch_sensor/touch_element/touch_matrix/README.md delete mode 100644 examples/peripherals/touch_sensor/touch_element/touch_matrix/main/CMakeLists.txt delete mode 100644 examples/peripherals/touch_sensor/touch_element/touch_matrix/main/Kconfig.projbuild delete mode 100644 examples/peripherals/touch_sensor/touch_element/touch_matrix/main/touch_matrix_example_main.c delete mode 100644 examples/peripherals/touch_sensor/touch_element/touch_matrix/pytest_touch_matrix.py delete mode 100644 examples/peripherals/touch_sensor/touch_element/touch_slider/CMakeLists.txt delete mode 100644 examples/peripherals/touch_sensor/touch_element/touch_slider/README.md delete mode 100644 examples/peripherals/touch_sensor/touch_element/touch_slider/main/CMakeLists.txt delete mode 100644 examples/peripherals/touch_sensor/touch_element/touch_slider/main/Kconfig.projbuild delete mode 100644 examples/peripherals/touch_sensor/touch_element/touch_slider/main/touch_slider_example_main.c delete mode 100644 examples/peripherals/touch_sensor/touch_element/touch_slider/pytest_touch_slider.py diff --git a/.gitlab/CODEOWNERS b/.gitlab/CODEOWNERS index 82b29a703e..387b2061d1 100644 --- a/.gitlab/CODEOWNERS +++ b/.gitlab/CODEOWNERS @@ -156,7 +156,6 @@ /components/spi_flash/ @esp-idf-codeowners/peripherals /components/spiffs/ @esp-idf-codeowners/storage /components/tcp_transport/ @esp-idf-codeowners/network -/components/touch_element/ @esp-idf-codeowners/peripherals /components/ulp/ @esp-idf-codeowners/system /components/unity/ @esp-idf-codeowners/peripherals @esp-idf-codeowners/system /components/usb/ @esp-idf-codeowners/peripherals/usb diff --git a/components/driver/test_apps/.build-test-rules.yml b/components/driver/test_apps/.build-test-rules.yml index d38f53a23c..fe0fd7590d 100644 --- a/components/driver/test_apps/.build-test-rules.yml +++ b/components/driver/test_apps/.build-test-rules.yml @@ -23,6 +23,19 @@ components/driver/test_apps/legacy_twai: depends_components: - esp_driver_gpio +components/driver/test_apps/touch_element: + disable: + - if: IDF_TARGET not in ["esp32s2", "esp32s3"] + reason: only supports esp32s2 and esp32s3 + depends_filepatterns: + - components/soc/**/touch_sensor_periph.h + - components/soc/esp32s2/**/rtc_cntl_* + - components/soc/esp32s3/**/rtc_cntl_* + - components/soc/esp32s2/**/rtc_io_struct.h + - components/soc/esp32s3/**/rtc_io_struct.h + - components/soc/esp32s2/**/sens_struct.h + - components/soc/esp32s3/**/sens_struct.h + components/driver/test_apps/touch_sensor_v1: disable: - if: SOC_TOUCH_SENSOR_VERSION != 1 diff --git a/components/touch_element/test_apps/CMakeLists.txt b/components/driver/test_apps/touch_element/CMakeLists.txt similarity index 100% rename from components/touch_element/test_apps/CMakeLists.txt rename to components/driver/test_apps/touch_element/CMakeLists.txt diff --git a/components/touch_element/test_apps/README.md b/components/driver/test_apps/touch_element/README.md similarity index 100% rename from components/touch_element/test_apps/README.md rename to components/driver/test_apps/touch_element/README.md diff --git a/components/touch_element/test_apps/main/CMakeLists.txt b/components/driver/test_apps/touch_element/main/CMakeLists.txt similarity index 75% rename from components/touch_element/test_apps/main/CMakeLists.txt rename to components/driver/test_apps/touch_element/main/CMakeLists.txt index 813e3e60b4..9b15920ea1 100644 --- a/components/touch_element/test_apps/main/CMakeLists.txt +++ b/components/driver/test_apps/touch_element/main/CMakeLists.txt @@ -1,5 +1,5 @@ idf_component_register(SRCS "test_app_main.c" "test_touch_element.c" "test_touch_button.c" "test_touch_slider.c" "test_touch_matrix.c" - PRIV_REQUIRES unity touch_element + PRIV_REQUIRES unity touch_element esp_pm WHOLE_ARCHIVE ) diff --git a/components/driver/test_apps/touch_element/main/idf_component.yml b/components/driver/test_apps/touch_element/main/idf_component.yml new file mode 100644 index 0000000000..7bbb03395b --- /dev/null +++ b/components/driver/test_apps/touch_element/main/idf_component.yml @@ -0,0 +1,2 @@ +dependencies: + espressif/touch_element: ^1.0.0 diff --git a/components/touch_element/test_apps/main/test_app_main.c b/components/driver/test_apps/touch_element/main/test_app_main.c similarity index 91% rename from components/touch_element/test_apps/main/test_app_main.c rename to components/driver/test_apps/touch_element/main/test_app_main.c index e6429bb6b2..498beb797d 100644 --- a/components/touch_element/test_apps/main/test_app_main.c +++ b/components/driver/test_apps/touch_element/main/test_app_main.c @@ -10,7 +10,6 @@ #include "freertos/FreeRTOS.h" #include "freertos/task.h" -// Some resources are lazy allocated in gpio/dedicated_gpio/delta_sigma driver, the threshold is left for that case #define TEST_MEMORY_LEAK_THRESHOLD (-400) static size_t before_free_8bit; diff --git a/components/touch_element/test_apps/main/test_touch_button.c b/components/driver/test_apps/touch_element/main/test_touch_button.c similarity index 96% rename from components/touch_element/test_apps/main/test_touch_button.c rename to components/driver/test_apps/touch_element/main/test_touch_button.c index 24ae89e406..3f6bfd2f11 100644 --- a/components/touch_element/test_apps/main/test_touch_button.c +++ b/components/driver/test_apps/touch_element/main/test_touch_button.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2022-2025 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Unlicense OR CC0-1.0 */ @@ -14,7 +14,8 @@ #include "unity.h" #include "esp_random.h" -#include "touch_element/touch_element_private.h" +#include "esp_private/touch_element_private.h" +#include "esp_private/touch_sensor_legacy_ll.h" #include "touch_element/touch_button.h" static portMUX_TYPE test_button_spinlock = portMUX_INITIALIZER_UNLOCKED; @@ -103,11 +104,14 @@ void test_button_event_simulator(touch_button_handle_t button_handle, touch_butt te_button_handle_t te_button = (te_button_handle_t) button_handle; touch_pad_t channel = te_button->device->channel; if (button_event == TOUCH_BUTTON_EVT_ON_PRESS) { - touch_pad_set_cnt_mode(channel, TOUCH_PAD_SLOPE_3, TOUCH_PAD_TIE_OPT_DEFAULT); + touch_ll_set_slope(channel, TOUCH_PAD_SLOPE_3); + touch_ll_set_tie_option(channel, TOUCH_PAD_TIE_OPT_DEFAULT); } else if (button_event == TOUCH_BUTTON_EVT_ON_RELEASE) { - touch_pad_set_cnt_mode(channel, TOUCH_PAD_SLOPE_7, TOUCH_PAD_TIE_OPT_DEFAULT); + touch_ll_set_slope(channel, TOUCH_PAD_SLOPE_7); + touch_ll_set_tie_option(channel, TOUCH_PAD_TIE_OPT_DEFAULT); } else { - touch_pad_set_cnt_mode(channel, TOUCH_PAD_SLOPE_3, TOUCH_PAD_TIE_OPT_DEFAULT); //LongPress + touch_ll_set_slope(channel, TOUCH_PAD_SLOPE_3); + touch_ll_set_tie_option(channel, TOUCH_PAD_TIE_OPT_DEFAULT); } } @@ -129,7 +133,8 @@ static void test_button_callback_check(touch_button_handle_t current_handle, tou } void test_button_event_trigger_and_check(touch_button_handle_t handle, touch_button_event_t button_event) -{//TODO: refactor this with a constructor +{ + //TODO: refactor this with a constructor touch_elem_message_t valid_message = { .handle = handle, .element_type = TOUCH_ELEM_TYPE_BUTTON, @@ -189,8 +194,8 @@ static void test_button_disp_event(void) }; TEST_ESP_OK(touch_button_create(&button_config, &button_handle[i])); TEST_ESP_OK(touch_button_subscribe_event(button_handle[i], - TOUCH_ELEM_EVENT_ON_PRESS | TOUCH_ELEM_EVENT_ON_RELEASE | TOUCH_ELEM_EVENT_ON_LONGPRESS, - (void *) button_channel_array[i])); + TOUCH_ELEM_EVENT_ON_PRESS | TOUCH_ELEM_EVENT_ON_RELEASE | TOUCH_ELEM_EVENT_ON_LONGPRESS, + (void *) button_channel_array[i])); TEST_ESP_OK(touch_button_set_longpress(button_handle[i], 300)); TEST_ESP_OK(touch_button_set_dispatch_method(button_handle[i], TOUCH_ELEM_DISP_EVENT)); } @@ -233,8 +238,8 @@ static void test_button_disp_callback(void) }; TEST_ESP_OK(touch_button_create(&button_config, &button_handle[i])); TEST_ESP_OK(touch_button_subscribe_event(button_handle[i], - TOUCH_ELEM_EVENT_ON_PRESS | TOUCH_ELEM_EVENT_ON_RELEASE | TOUCH_ELEM_EVENT_ON_LONGPRESS, - (void *) &monitor)); + TOUCH_ELEM_EVENT_ON_PRESS | TOUCH_ELEM_EVENT_ON_RELEASE | TOUCH_ELEM_EVENT_ON_LONGPRESS, + (void *) &monitor)); TEST_ESP_OK(touch_button_set_dispatch_method(button_handle[i], TOUCH_ELEM_DISP_CALLBACK)); TEST_ESP_OK(touch_button_set_callback(button_handle[i], &test_button_handler)); TEST_ESP_OK(touch_button_set_longpress(button_handle[i], 300)); @@ -295,7 +300,7 @@ static void test_button_event_change_lp(void) printf("Touch button event change longtime test start\n"); for (int i = 0; i < 10; i++) { printf("Touch button event change longtime test... (%d/10)\n", i + 1); - esp_err_t ret; + esp_err_t ret = ESP_OK; uint8_t channel_index = random() % BUTTON_CHANNEL_NUM; touch_elem_message_t valid_message = { .handle = button_handle[channel_index], @@ -412,7 +417,7 @@ static void test_button_event_concurrent(void) printf("Touch button event concurrent test start\n"); for (int i = 0; i < 10; i++) { printf("Touch button event concurrent test... (%d/10)\n", i + 1); - esp_err_t ret; + esp_err_t ret = ESP_OK; uint32_t message_count = 0; touch_elem_message_t current_message; @@ -488,7 +493,6 @@ static void test_button_random_trigger_concurrent(void) TEST_ASSERT(os_ret == pdPASS); } - uint32_t run_count = 0; while (1) { if (run_count++ % 1000 == 0) { diff --git a/components/touch_element/test_apps/main/test_touch_element.c b/components/driver/test_apps/touch_element/main/test_touch_element.c similarity index 97% rename from components/touch_element/test_apps/main/test_touch_element.c rename to components/driver/test_apps/touch_element/main/test_touch_element.c index 6fee84bdde..9c458cee0a 100644 --- a/components/touch_element/test_apps/main/test_touch_element.c +++ b/components/driver/test_apps/touch_element/main/test_touch_element.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2022-2025 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Unlicense OR CC0-1.0 */ @@ -34,6 +34,7 @@ #include "touch_element/touch_button.h" #include "touch_element/touch_slider.h" #include "touch_element/touch_matrix.h" +#include "esp_private/touch_sensor_legacy_ll.h" typedef struct { QueueHandle_t valid_msg_handle; @@ -110,7 +111,8 @@ static void test_system_waterproof_guard(void) printf("Touch Element waterproof guard sensor test start\n"); srandom((unsigned int)time(NULL)); - {//No use waterproof guard sensor + { + //No use waterproof guard sensor touch_elem_waterproof_config_t waterproof_config = { .guard_channel = TOUCH_WATERPROOF_GUARD_NOUSE, .guard_sensitivity = 0.0F @@ -128,7 +130,8 @@ static void test_system_waterproof_guard(void) touch_element_waterproof_uninstall(); } - {//Use waterproof guard sensor(Add all handles) + { + //Use waterproof guard sensor(Add all handles) touch_elem_waterproof_config_t waterproof_config = { .guard_channel = TOUCH_PAD_NUM13, .guard_sensitivity = 0.1F @@ -158,7 +161,8 @@ static void test_system_waterproof_guard(void) touch_element_waterproof_uninstall(); } - {//Put half button handles into guard ring + { + //Put half button handles into guard ring const uint8_t protect_handle_threshold = BUTTON_CHANNEL_NUM / 2; touch_elem_waterproof_config_t waterproof_config = { .guard_channel = TOUCH_PAD_NUM13, @@ -196,9 +200,11 @@ static void test_system_waterproof_guard(void) static void test_waterproof_event_simulator(touch_pad_t guard_channel, touch_button_event_t guard_state) { if (guard_state == TOUCH_BUTTON_EVT_ON_PRESS) { - touch_pad_set_cnt_mode(guard_channel, TOUCH_PAD_SLOPE_3, TOUCH_PAD_TIE_OPT_DEFAULT); + touch_ll_set_slope(guard_channel, TOUCH_PAD_SLOPE_3); + touch_ll_set_tie_option(guard_channel, TOUCH_PAD_TIE_OPT_DEFAULT); } else if (guard_state == TOUCH_BUTTON_EVT_ON_RELEASE) { - touch_pad_set_cnt_mode(guard_channel, TOUCH_PAD_SLOPE_7, TOUCH_PAD_TIE_OPT_DEFAULT); + touch_ll_set_slope(guard_channel, TOUCH_PAD_SLOPE_7); + touch_ll_set_tie_option(guard_channel, TOUCH_PAD_TIE_OPT_DEFAULT); } else { printf("guard sensor simulator doesn't support this operation\n"); } diff --git a/components/touch_element/test_apps/main/test_touch_matrix.c b/components/driver/test_apps/touch_element/main/test_touch_matrix.c similarity index 94% rename from components/touch_element/test_apps/main/test_touch_matrix.c rename to components/driver/test_apps/touch_element/main/test_touch_matrix.c index da1f3abd1a..93710733f8 100644 --- a/components/touch_element/test_apps/main/test_touch_matrix.c +++ b/components/driver/test_apps/touch_element/main/test_touch_matrix.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2022-2025 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Unlicense OR CC0-1.0 */ @@ -13,7 +13,8 @@ #include "freertos/semphr.h" #include "unity.h" -#include "touch_element/touch_element_private.h" +#include "esp_private/touch_element_private.h" +#include "esp_private/touch_sensor_legacy_ll.h" #include "touch_element/touch_matrix.h" static const touch_pad_t x_axis_channel[3] = { @@ -95,23 +96,31 @@ void test_matrix_event_simulator(touch_matrix_handle_t matrix_handle, touch_matr touch_pad_t x_channel = te_matrix->device[pos_index / te_matrix->y_channel_num]->channel; touch_pad_t y_channel = te_matrix->device[te_matrix->x_channel_num + (pos_index % te_matrix->y_channel_num)]->channel; if (matrix_event == TOUCH_MATRIX_EVT_ON_PRESS) { - touch_pad_set_cnt_mode(x_channel, TOUCH_PAD_SLOPE_3, TOUCH_PAD_TIE_OPT_DEFAULT); - touch_pad_set_cnt_mode(y_channel, TOUCH_PAD_SLOPE_3, TOUCH_PAD_TIE_OPT_DEFAULT); + touch_ll_set_slope(x_channel, TOUCH_PAD_SLOPE_3); + touch_ll_set_tie_option(x_channel, TOUCH_PAD_TIE_OPT_DEFAULT); + touch_ll_set_slope(y_channel, TOUCH_PAD_SLOPE_3); + touch_ll_set_tie_option(y_channel, TOUCH_PAD_TIE_OPT_DEFAULT); } else if (matrix_event == TOUCH_MATRIX_EVT_ON_RELEASE) { - touch_pad_set_cnt_mode(x_channel, TOUCH_PAD_SLOPE_7, TOUCH_PAD_TIE_OPT_DEFAULT); - touch_pad_set_cnt_mode(y_channel, TOUCH_PAD_SLOPE_7, TOUCH_PAD_TIE_OPT_DEFAULT); + touch_ll_set_slope(x_channel, TOUCH_PAD_SLOPE_7); + touch_ll_set_tie_option(x_channel, TOUCH_PAD_TIE_OPT_DEFAULT); + touch_ll_set_slope(y_channel, TOUCH_PAD_SLOPE_7); + touch_ll_set_tie_option(y_channel, TOUCH_PAD_TIE_OPT_DEFAULT); } else { - touch_pad_set_cnt_mode(x_channel, TOUCH_PAD_SLOPE_3, TOUCH_PAD_TIE_OPT_DEFAULT); // LongPress - touch_pad_set_cnt_mode(y_channel, TOUCH_PAD_SLOPE_3, TOUCH_PAD_TIE_OPT_DEFAULT); + touch_ll_set_slope(x_channel, TOUCH_PAD_SLOPE_3); + touch_ll_set_tie_option(x_channel, TOUCH_PAD_TIE_OPT_DEFAULT); + touch_ll_set_slope(y_channel, TOUCH_PAD_SLOPE_3); + touch_ll_set_tie_option(y_channel, TOUCH_PAD_TIE_OPT_DEFAULT); } } static void test_matrix_channel_simulator(touch_pad_t channel, touch_matrix_event_t matrix_event) { if (matrix_event == TOUCH_MATRIX_EVT_ON_PRESS) { - touch_pad_set_cnt_mode(channel, TOUCH_PAD_SLOPE_3, TOUCH_PAD_TIE_OPT_DEFAULT); + touch_ll_set_slope(channel, TOUCH_PAD_SLOPE_3); + touch_ll_set_tie_option(channel, TOUCH_PAD_TIE_OPT_DEFAULT); } else if (matrix_event == TOUCH_MATRIX_EVT_ON_RELEASE) { - touch_pad_set_cnt_mode(channel, TOUCH_PAD_SLOPE_7, TOUCH_PAD_TIE_OPT_DEFAULT); + touch_ll_set_slope(channel, TOUCH_PAD_SLOPE_7); + touch_ll_set_tie_option(channel, TOUCH_PAD_TIE_OPT_DEFAULT); } } @@ -218,7 +227,7 @@ static void test_matrix_disp_event(void) printf("Touch matrix event test start\n"); for (int i = 0; i < 10; i++) { printf("Touch matrix event test... (%d/10)\n", i + 1); - uint32_t button_num = random() % ( MATRIX_CHANNEL_NUM_X * MATRIX_CHANNEL_NUM_Y ); + uint32_t button_num = random() % (MATRIX_CHANNEL_NUM_X * MATRIX_CHANNEL_NUM_Y); test_matrix_event_trigger_and_check(matrix_handle, TOUCH_MATRIX_EVT_ON_PRESS, button_num); test_matrix_event_trigger_and_check(matrix_handle, TOUCH_MATRIX_EVT_ON_LONGPRESS, button_num); test_matrix_event_trigger_and_check(matrix_handle, TOUCH_MATRIX_EVT_ON_RELEASE, button_num); @@ -377,7 +386,7 @@ static void test_matrix_event_change_lp(void) printf("Touch matrix event change longtime test start\n"); for (int i = 0; i < 10; i++) { printf("Touch matrix event change longtime test... (%d/10)\n", i + 1); - uint32_t button_num = random() % ( MATRIX_CHANNEL_NUM_X * MATRIX_CHANNEL_NUM_Y ); + uint32_t button_num = random() % (MATRIX_CHANNEL_NUM_X * MATRIX_CHANNEL_NUM_Y); TEST_ESP_OK(touch_matrix_set_longpress(matrix_handle, 200 + (i + 1) * 50)); test_matrix_event_trigger_and_check(matrix_handle, TOUCH_MATRIX_EVT_ON_LONGPRESS, button_num); test_matrix_event_simulator(matrix_handle, TOUCH_MATRIX_EVT_ON_RELEASE, button_num); //Reset hardware diff --git a/components/touch_element/test_apps/main/test_touch_slider.c b/components/driver/test_apps/touch_element/main/test_touch_slider.c similarity index 95% rename from components/touch_element/test_apps/main/test_touch_slider.c rename to components/driver/test_apps/touch_element/main/test_touch_slider.c index effd3ba068..6be36ee8ed 100644 --- a/components/touch_element/test_apps/main/test_touch_slider.c +++ b/components/driver/test_apps/touch_element/main/test_touch_slider.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2022-2025 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Unlicense OR CC0-1.0 */ @@ -13,7 +13,8 @@ #include "freertos/semphr.h" #include "unity.h" -#include "touch_element/touch_element_private.h" +#include "esp_private/touch_element_private.h" +#include "esp_private/touch_sensor_legacy_ll.h" #include "touch_element/touch_slider.h" static const touch_pad_t slider_channel_array[5] = { @@ -63,9 +64,11 @@ void test_slider_event_simulator(touch_slider_handle_t slider_handle, touch_slid te_slider_handle_t te_slider = (te_slider_handle_t) slider_handle; touch_pad_t channel = te_slider->device[random % te_slider->channel_sum]->channel; if (slider_event == TOUCH_SLIDER_EVT_ON_PRESS) { - touch_pad_set_cnt_mode(channel, TOUCH_PAD_SLOPE_3, TOUCH_PAD_TIE_OPT_DEFAULT); + touch_ll_set_slope(channel, TOUCH_PAD_SLOPE_3); + touch_ll_set_tie_option(channel, TOUCH_PAD_TIE_OPT_DEFAULT); } else if (slider_event == TOUCH_SLIDER_EVT_ON_RELEASE) { - touch_pad_set_cnt_mode(channel, TOUCH_PAD_SLOPE_7, TOUCH_PAD_TIE_OPT_DEFAULT); + touch_ll_set_slope(channel, TOUCH_PAD_SLOPE_7); + touch_ll_set_tie_option(channel, TOUCH_PAD_TIE_OPT_DEFAULT); } } @@ -126,7 +129,6 @@ void test_slider_callback_trigger_and_check(touch_slider_handle_t handle, touch_ } } - static void test_slider_disp_event(void) { touch_slider_handle_t slider_handle; @@ -161,7 +163,6 @@ static void test_slider_disp_event(void) touch_slider_uninstall(); } - static void test_slider_disp_callback(void) { test_monitor_t monitor; diff --git a/components/touch_element/test_apps/pytest_touch_element.py b/components/driver/test_apps/touch_element/pytest_touch_element.py similarity index 100% rename from components/touch_element/test_apps/pytest_touch_element.py rename to components/driver/test_apps/touch_element/pytest_touch_element.py diff --git a/components/touch_element/test_apps/sdkconfig.ci.opt_o0 b/components/driver/test_apps/touch_element/sdkconfig.ci.opt_o0 similarity index 100% rename from components/touch_element/test_apps/sdkconfig.ci.opt_o0 rename to components/driver/test_apps/touch_element/sdkconfig.ci.opt_o0 diff --git a/components/touch_element/test_apps/sdkconfig.ci.opt_o2 b/components/driver/test_apps/touch_element/sdkconfig.ci.opt_o2 similarity index 100% rename from components/touch_element/test_apps/sdkconfig.ci.opt_o2 rename to components/driver/test_apps/touch_element/sdkconfig.ci.opt_o2 diff --git a/components/touch_element/test_apps/sdkconfig.defaults b/components/driver/test_apps/touch_element/sdkconfig.defaults similarity index 100% rename from components/touch_element/test_apps/sdkconfig.defaults rename to components/driver/test_apps/touch_element/sdkconfig.defaults diff --git a/components/touch_element/CMakeLists.txt b/components/touch_element/CMakeLists.txt deleted file mode 100644 index f9b13c5f08..0000000000 --- a/components/touch_element/CMakeLists.txt +++ /dev/null @@ -1,17 +0,0 @@ -idf_build_get_property(target IDF_TARGET) - -if(${target} STREQUAL "linux") - return() # This component is not supported by the POSIX/Linux simulator -endif() - -set(TOUCH_ELEMENT_COMPATIBLE_TARGETS "esp32s2" "esp32s3") - -if(${target} IN_LIST TOUCH_ELEMENT_COMPATIBLE_TARGETS) - idf_component_register(SRCS "touch_element.c" - "touch_button.c" - "touch_slider.c" - "touch_matrix.c" - INCLUDE_DIRS include - REQUIRES driver # touch_element uses legacy "driver/touch_sensor.h" - PRIV_REQUIRES esp_timer) -endif() diff --git a/components/touch_element/include/touch_element/touch_button.h b/components/touch_element/include/touch_element/touch_button.h deleted file mode 100644 index 2b0c15dcef..0000000000 --- a/components/touch_element/include/touch_element/touch_button.h +++ /dev/null @@ -1,196 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2016-2022 Espressif Systems (Shanghai) CO LTD - * - * SPDX-License-Identifier: Apache-2.0 - */ -#pragma once - -#include "touch_element/touch_element.h" - -#ifdef __cplusplus -extern "C" { -#endif -/* --------------------------------- General button instance default configuration --------------------------------- */ -#define TOUCH_BUTTON_GLOBAL_DEFAULT_CONFIG() \ -{ \ - .threshold_divider = 0.8, \ - .default_lp_time = 1000 \ -} -/* ------------------------------------------------------------------------------------------------------------------ */ - -/** - * @brief Button initialization configuration passed to touch_button_install - */ -typedef struct { - float threshold_divider; //!< Button channel threshold divider - uint32_t default_lp_time; //!< Button default LongPress event time (ms) -} touch_button_global_config_t; - -/** - * @brief Button configuration (for new instance) passed to touch_button_create() - */ -typedef struct { - touch_pad_t channel_num; //!< Button channel number (index) - float channel_sens; //!< Button channel sensitivity -} touch_button_config_t; - -/** - * @brief Button event type - */ -typedef enum { - TOUCH_BUTTON_EVT_ON_PRESS, //!< Button Press event - TOUCH_BUTTON_EVT_ON_RELEASE, //!< Button Release event - TOUCH_BUTTON_EVT_ON_LONGPRESS, //!< Button LongPress event - TOUCH_BUTTON_EVT_MAX -} touch_button_event_t; - -/** - * @brief Button message type - */ -typedef struct { - touch_button_event_t event; //!< Button event -} touch_button_message_t; - -typedef touch_elem_handle_t touch_button_handle_t; //!< Button handle -typedef void(*touch_button_callback_t)(touch_button_handle_t, touch_button_message_t *, void *); //!< Button callback type - -/** - * @brief Touch Button initialize - * - * This function initializes touch button global and acts on all - * touch button instances. - * - * @param[in] global_config Button object initialization configuration - * - * @return - * - ESP_OK: Successfully initialized touch button - * - ESP_ERR_INVALID_STATE: Touch element library was not initialized - * - ESP_ERR_INVALID_ARG: button_init is NULL - * - ESP_ERR_NO_MEM: Insufficient memory - */ -esp_err_t touch_button_install(const touch_button_global_config_t *global_config); - -/** - * @brief Release resources allocated using touch_button_install() - */ -void touch_button_uninstall(void); - -/** - * @brief Create a new touch button instance - * - * @param[in] button_config Button configuration - * @param[out] button_handle Button handle - * - * @note The sensitivity has to be explored in experiments, - * Sensitivity = (Raw(touch) - Raw(release)) / Raw(release) * 100% - * - * @return - * - ESP_OK: Successfully create touch button - * - ESP_ERR_INVALID_STATE: Touch button driver was not initialized - * - ESP_ERR_NO_MEM: Insufficient memory - * - ESP_ERR_INVALID_ARG: Invalid configuration struct or arguments is NULL - */ -esp_err_t touch_button_create(const touch_button_config_t *button_config, touch_button_handle_t *button_handle); - -/** - * @brief Release resources allocated using touch_button_create() - * - * @param[in] button_handle Button handle - * @return - * - ESP_OK: Successfully released resources - * - ESP_ERR_INVALID_STATE: Touch button driver was not initialized - * - ESP_ERR_INVALID_ARG: button_handle is null - * - ESP_ERR_NOT_FOUND: Input handle is not a button handle - */ -esp_err_t touch_button_delete(touch_button_handle_t button_handle); - -/** - * @brief Touch button subscribes event - * - * This function uses event mask to subscribe to touch button events, once one of - * the subscribed events occurs, the event message could be retrieved by calling - * touch_element_message_receive() or input callback routine. - * - * @param[in] button_handle Button handle - * @param[in] event_mask Button subscription event mask - * @param[in] arg User input argument - * - * @note Touch button only support three kind of event masks, they are - * TOUCH_ELEM_EVENT_ON_PRESS, TOUCH_ELEM_EVENT_ON_RELEASE, TOUCH_ELEM_EVENT_ON_LONGPRESS. - * You can use those event masks in any combination to achieve the desired effect. - * - * @return - * - ESP_OK: Successfully subscribed touch button event - * - ESP_ERR_INVALID_STATE: Touch button driver was not initialized - * - ESP_ERR_INVALID_ARG: button_handle is null or event is not supported - */ -esp_err_t touch_button_subscribe_event(touch_button_handle_t button_handle, uint32_t event_mask, void *arg); - -/** - * @brief Touch button set dispatch method - * - * This function sets a dispatch method that the driver core will use - * this method as the event notification method. - * - * @param[in] button_handle Button handle - * @param[in] dispatch_method Dispatch method (By callback/event) - * - * @return - * - ESP_OK: Successfully set dispatch method - * - ESP_ERR_INVALID_STATE: Touch button driver was not initialized - * - ESP_ERR_INVALID_ARG: button_handle is null or dispatch_method is invalid - */ -esp_err_t touch_button_set_dispatch_method(touch_button_handle_t button_handle, touch_elem_dispatch_t dispatch_method); - -/** - * @brief Touch button set callback - * - * This function sets a callback routine into touch element driver core, - * when the subscribed events occur, the callback routine will be called. - * - * @param[in] button_handle Button handle - * @param[in] button_callback User input callback - * - * @note Button message will be passed from the callback function and it will be destroyed when the callback function return. - * - * @warning Since this input callback routine runs on driver core (esp-timer callback routine), - * it should not do something that attempts to Block, such as calling vTaskDelay(). - * - * @return - * - ESP_OK: Successfully set callback - * - ESP_ERR_INVALID_STATE: Touch button driver was not initialized - * - ESP_ERR_INVALID_ARG: button_handle or button_callback is null - */ -esp_err_t touch_button_set_callback(touch_button_handle_t button_handle, touch_button_callback_t button_callback); - -/** - * @brief Touch button set long press trigger time - * - * This function sets the threshold time (ms) for a long press event. If a button is pressed - * and held for a period of time that exceeds the threshold time, a long press event is triggered. - * - * @param[in] button_handle Button handle - * @param[in] threshold_time Threshold time (ms) of long press event occur - * - * @return - * - ESP_OK: Successfully set the threshold time of long press event - * - ESP_ERR_INVALID_STATE: Touch button driver was not initialized - * - ESP_ERR_INVALID_ARG: button_handle is null or time (ms) is not lager than 0 - */ -esp_err_t touch_button_set_longpress(touch_button_handle_t button_handle, uint32_t threshold_time); - -/** - * @brief Touch button get message - * - * This function decodes the element message from touch_element_message_receive() and return - * a button message pointer. - * - * @param[in] element_message element message - * - * @return Touch button message pointer - */ -const touch_button_message_t* touch_button_get_message(const touch_elem_message_t* element_message); - -#ifdef __cplusplus -} -#endif diff --git a/components/touch_element/include/touch_element/touch_element.h b/components/touch_element/include/touch_element/touch_element.h deleted file mode 100644 index fa32d8f42c..0000000000 --- a/components/touch_element/include/touch_element/touch_element.h +++ /dev/null @@ -1,338 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2016-2024 Espressif Systems (Shanghai) CO LTD - * - * SPDX-License-Identifier: Apache-2.0 - */ - -#pragma once - -#include "driver/touch_sensor_legacy.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* -------------------------------- General hardware & system default configuration -------------------------------- */ -/* Since those are important hardware and algorithm parameters, user should not change them before knowing all details*/ -/* ------------------------------------------------------------------------------------------------------------------ */ -#define TOUCH_ELEM_GLOBAL_DEFAULT_CONFIG() \ -{ \ - .hardware = { \ - .upper_voltage = TOUCH_HVOLT_2V7, \ - .voltage_attenuation = TOUCH_HVOLT_ATTEN_0V5, \ - .lower_voltage = TOUCH_LVOLT_0V5, \ - .suspend_channel_polarity = TOUCH_PAD_CONN_HIGHZ, \ - .denoise_level = TOUCH_PAD_DENOISE_BIT4, \ - .denoise_equivalent_cap = TOUCH_PAD_DENOISE_CAP_L0, \ - .smooth_filter_mode = TOUCH_PAD_SMOOTH_IIR_2, \ - .benchmark_filter_mode = TOUCH_PAD_FILTER_IIR_16, \ - .sample_count = 500, \ - .sleep_cycle = 0xf, \ - .benchmark_debounce_count = 2, \ - .benchmark_calibration_threshold = 2, \ - .benchmark_jitter_step = 5 \ - }, \ - .software = { \ - .waterproof_threshold_divider = 0.8, \ - .processing_period = 10, \ - .intr_message_size = 14, \ - .event_message_size = 20 \ - } \ -} -/* ------------------------------------------------------------------------------------------------------------------ */ - -/* ---------------------------------------------- Event subscription ----------------------------------------------- */ -#define TOUCH_ELEM_EVENT_NONE BIT(0) //!< None event -#define TOUCH_ELEM_EVENT_ON_PRESS BIT(1) //!< On Press event -#define TOUCH_ELEM_EVENT_ON_RELEASE BIT(2) //!< On Release event -#define TOUCH_ELEM_EVENT_ON_LONGPRESS BIT(3) //!< On LongPress event -#define TOUCH_ELEM_EVENT_ON_CALCULATION BIT(4) //!< On Calculation event -/* ------------------------------------------------------------------------------------------------------------------ */ -#define TOUCH_WATERPROOF_GUARD_NOUSE (0) //!< Waterproof no use guard sensor -/* -------------------------------- Global hardware & software configuration struct --------------------------------- */ -/** - * @brief Touch element software configuration - */ -typedef struct { - float waterproof_threshold_divider; //!< Waterproof guard channel threshold divider - uint8_t processing_period; //!< Processing period(ms) - uint8_t intr_message_size; //!< Interrupt message queue size - uint8_t event_message_size; //!< Event message queue size -} touch_elem_sw_config_t; - -/** - * @brief Touch element hardware configuration - */ -typedef struct { - touch_high_volt_t upper_voltage; //!< Touch sensor channel upper charge voltage - touch_volt_atten_t voltage_attenuation; //!< Touch sensor channel upper charge voltage attenuation (Diff voltage is upper - attenuation - lower) - touch_low_volt_t lower_voltage; //!< Touch sensor channel lower charge voltage - touch_pad_conn_type_t suspend_channel_polarity; //!< Suspend channel polarity (High Impedance State or GND) - touch_pad_denoise_grade_t denoise_level; //!< Internal de-noise level - touch_pad_denoise_cap_t denoise_equivalent_cap; //!< Internal de-noise channel (Touch channel 0) equivalent capacitance - touch_smooth_mode_t smooth_filter_mode; //!< Smooth value filter mode (This only apply to touch_pad_filter_read_smooth()) - touch_filter_mode_t benchmark_filter_mode; //!< Benchmark filter mode - uint16_t sample_count; //!< The count of sample in each measurement of touch sensor - uint16_t sleep_cycle; //!< The cycle (RTC slow clock) of sleep - uint8_t benchmark_debounce_count; //!< Benchmark debounce count - uint8_t benchmark_calibration_threshold; //!< Benchmark calibration threshold - uint8_t benchmark_jitter_step; //!< Benchmark jitter filter step (This only works at while benchmark filter mode is jitter filter) -} touch_elem_hw_config_t; - -/** - * @brief Touch element global configuration passed to touch_element_install - */ -typedef struct { - touch_elem_hw_config_t hardware; //!< Hardware configuration - touch_elem_sw_config_t software; //!< Software configuration -} touch_elem_global_config_t; - -/** - * @brief Touch element waterproof configuration passed to touch_element_waterproof_install - */ -typedef struct { - touch_pad_t guard_channel; //!< Waterproof Guard-Sensor channel number (index) - float guard_sensitivity; //!< Waterproof Guard-Sensor sensitivity -} touch_elem_waterproof_config_t; - -/** - * @brief Touch element sleep configuration passed to touch_element_enable_light_sleep or touch_element_enable_deep_sleep -*/ -typedef struct { - uint16_t sample_count; //!< scan times in every measurement, normally equal to the 'sample_count' field in 'touch_elem_hw_config_t'. - uint16_t sleep_cycle; //!< sleep_cycle decide the interval between two measurements, t_sleep = sleep_cycle / (RTC_SLOW_CLK frequency), normally equal to the 'sleep_cycle' field in 'touch_elem_hw_config_t'. -} touch_elem_sleep_config_t; -/* ------------------------------------------------------------------------------------------------------------------ */ -typedef void *touch_elem_handle_t; //!< Touch element handle type -typedef uint32_t touch_elem_event_t; //!< Touch element event type - -/** - * @brief Touch element handle type - */ -typedef enum { - TOUCH_ELEM_TYPE_BUTTON, //!< Touch element button - TOUCH_ELEM_TYPE_SLIDER, //!< Touch element slider - TOUCH_ELEM_TYPE_MATRIX, //!< Touch element matrix button -} touch_elem_type_t; - -/** - * @brief Touch element event dispatch methods (event queue/callback) - */ -typedef enum { - TOUCH_ELEM_DISP_EVENT, //!< Event queue dispatch - TOUCH_ELEM_DISP_CALLBACK, //!< Callback dispatch - TOUCH_ELEM_DISP_MAX -} touch_elem_dispatch_t; - -/** - * @brief Touch element event message type from touch_element_message_receive() - */ -typedef struct { - touch_elem_handle_t handle; //!< Touch element handle - touch_elem_type_t element_type; //!< Touch element type - void *arg; //!< User input argument - uint8_t child_msg[8]; //!< Encoded message -} touch_elem_message_t; -/* ------------------------------------------------------------------------------------------------------------------ */ - -/** - * @brief Touch element processing initialization - * - * @param[in] global_config Global initialization configuration structure - * - * @note To reinitialize the touch element object, call touch_element_uninstall() first - * - * @return - * - ESP_OK: Successfully initialized - * - ESP_ERR_INVALID_ARG: Invalid argument - * - ESP_ERR_NO_MEM: Insufficient memory - * - ESP_ERR_INVALID_STATE: Touch element is already initialized - * - Others: Unknown touch driver layer or lower layer error - */ -esp_err_t touch_element_install(const touch_elem_global_config_t *global_config); - -/** - * @brief Touch element processing start - * - * This function starts the touch element processing system - * - * @note This function must only be called after all the touch element instances finished creating - * - * @return - * - ESP_OK: Successfully started to process - * - Others: Unknown touch driver layer or lower layer error - */ -esp_err_t touch_element_start(void); - -/** - * @brief Touch element processing stop - * - * This function stops the touch element processing system - * - * @note This function must be called before changing the system (hardware, software) parameters - * - * @return - * - ESP_OK: Successfully stopped to process - * - Others: Unknown touch driver layer or lower layer error - */ -esp_err_t touch_element_stop(void); - -/** - * @brief Release resources allocated using touch_element_install - * - */ -void touch_element_uninstall(void); - -/** - * @brief Get current event message of touch element instance - * - * This function will receive the touch element message (handle, event type, etc...) - * from te_event_give(). It will block until a touch element event or a timeout occurs. - * - * @param[out] element_message Touch element event message structure - * @param[in] ticks_to_wait Number of FreeRTOS ticks to block for waiting event - * @return - * - ESP_OK: Successfully received touch element event - * - ESP_ERR_INVALID_STATE: Touch element library is not initialized - * - ESP_ERR_INVALID_ARG: element_message is null - * - ESP_ERR_TIMEOUT: Timed out waiting for event - */ -esp_err_t touch_element_message_receive(touch_elem_message_t *element_message, uint32_t ticks_to_wait); - -/** - * @brief Touch element waterproof initialization - * - * This function enables the hardware waterproof, then touch element system uses Shield-Sensor - * and Guard-Sensor to mitigate the influence of water-drop and water-stream. - * - * @param[in] waterproof_config Waterproof configuration - * - * @note If the waterproof function is used, Shield-Sensor can not be disabled and it will use channel 14 as - * it's internal channel. Hence, the user can not use channel 14 for another propose. And the Guard-Sensor - * is not necessary since it is optional. - * - * @note Shield-Sensor: It always uses channel 14 as the shield channel, so user must connect - * the channel 14 and Shield-Layer in PCB since it will generate a synchronous signal automatically - * - * @note Guard-Sensor: This function is optional. If used, the user must connect the guard channel and Guard-Ring - * in PCB. Any channels user wants to protect should be added into Guard-Ring in PCB. - * - * @return - * - ESP_OK: Successfully initialized - * - ESP_ERR_INVALID_STATE: Touch element library is not initialized - * - ESP_ERR_INVALID_ARG: waterproof_config is null or invalid Guard-Sensor channel - * - ESP_ERR_NO_MEM: Insufficient memory - */ -esp_err_t touch_element_waterproof_install(const touch_elem_waterproof_config_t *waterproof_config); - -/** - * @brief Release resources allocated using touch_element_waterproof_install() - */ -void touch_element_waterproof_uninstall(void); - -/** - * @brief Add a masked handle to protect while Guard-Sensor has been triggered - * - * This function will add an application handle (button, slider, etc...) as a masked handle. While Guard-Sensor - * has been triggered, waterproof function will start working and lock the application internal state. While the - * influence of water is reduced, the application will be unlock and reset into IDLE state. - * - * @param[in] element_handle Touch element instance handle - * - * @note The waterproof protection logic must follow the real circuit in PCB, it means that all of the channels - * inside the input handle must be inside the Guard-Ring in real circuit. - * - * @return - * - ESP_OK: Successfully added a masked handle - * - ESP_ERR_INVALID_STATE: Waterproof is not initialized - * - ESP_ERR_INVALID_ARG: element_handle is null - */ -esp_err_t touch_element_waterproof_add(touch_elem_handle_t element_handle); - -/** - * @brief Remove a masked handle to protect - * - * This function will remove an application handle from masked handle table. - * - * @param[in] element_handle Touch element instance handle - * - * @return - * - ESP_OK: Successfully removed a masked handle - * - ESP_ERR_INVALID_STATE: Waterproof is not initialized - * - ESP_ERR_INVALID_ARG: element_handle is null - * - ESP_ERR_NOT_FOUND: Failed to search element_handle from waterproof mask_handle list - */ -esp_err_t touch_element_waterproof_remove(touch_elem_handle_t element_handle); - -/** - * @brief Touch element light sleep initialization - * - * @note It should be called after touch button element installed. - * Any of installed touch element can wake up from the light sleep - * - * @param[in] sleep_config Sleep configurations, set NULL to use default config - * @return - * - ESP_OK: Successfully initialized touch sleep - * - ESP_ERR_INVALID_STATE: Touch element is not installed or touch sleep has been installed - * - ESP_ERR_INVALID_ARG: inputted argument is NULL - * - ESP_ERR_NO_MEM: no memory for touch sleep struct - * - ESP_ERR_NOT_SUPPORTED: inputted wakeup_elem_handle is not touch_button_handle_t type, currently only touch_button_handle_t supported - */ -esp_err_t touch_element_enable_light_sleep(const touch_elem_sleep_config_t *sleep_config); - -/** - * @brief Release the resources that allocated by touch_element_enable_deep_sleep() - * - * This function will also disable the touch sensor to wake up the device - * - * @return - * - ESP_OK: uninstall success - * - ESP_ERR_INVALID_STATE: touch sleep has not been installed - */ -esp_err_t touch_element_disable_light_sleep(void); - -/** - * @brief Touch element deep sleep initialization - * - * This function will enable the device wake-up from deep sleep or light sleep by touch sensor - * - * @note It should be called after touch button element installed. - * Only one touch button can be registered as the deep sleep wake-up button - * - * @param[in] wakeup_elem_handle Touch element instance handle for waking up the device, only support button element - * @param[in] sleep_config Sleep configurations, set NULL to use default config - * - * @return - * - ESP_OK: Successfully initialized touch sleep - * - ESP_ERR_INVALID_STATE: Touch element is not installed or touch sleep has been installed - * - ESP_ERR_INVALID_ARG: inputted argument is NULL - * - ESP_ERR_NO_MEM: no memory for touch sleep struct - * - ESP_ERR_NOT_SUPPORTED: inputted wakeup_elem_handle is not touch_button_handle_t type, currently only touch_button_handle_t supported - */ -esp_err_t touch_element_enable_deep_sleep(touch_elem_handle_t wakeup_elem_handle, const touch_elem_sleep_config_t *sleep_config); - -/** - * @brief Release the resources that allocated by touch_element_enable_deep_sleep() - * - * This function will also disable the touch sensor to wake up the device - * - * @return - * - ESP_OK: uninstall success - * - ESP_ERR_INVALID_STATE: touch sleep has not been installed - */ -esp_err_t touch_element_disable_deep_sleep(void); - -/** - * @brief Touch element wake up calibrations - * - * This function will also disable the touch sensor to wake up the device - * - * @return - * - ESP_OK: uninstall success - * - ESP_ERR_INVALID_STATE: touch sleep has not been installed - */ -esp_err_t touch_element_sleep_enable_wakeup_calibration(touch_elem_handle_t element_handle, bool en); - -#ifdef __cplusplus -} -#endif diff --git a/components/touch_element/include/touch_element/touch_element_private.h b/components/touch_element/include/touch_element/touch_element_private.h deleted file mode 100644 index fe09bb31f4..0000000000 --- a/components/touch_element/include/touch_element/touch_element_private.h +++ /dev/null @@ -1,200 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2016-2021 Espressif Systems (Shanghai) CO LTD - * - * SPDX-License-Identifier: Apache-2.0 - */ - -#pragma once - -#include "touch_element/touch_element.h" -#include "touch_element/touch_button.h" -#include "touch_element/touch_slider.h" -#include "touch_element/touch_matrix.h" -#include "esp_pm.h" -#include "sdkconfig.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define TE_TAG "Touch Element" -#define TE_DEBUG_TAG "Touch Element Debug" -#define TE_UNUSED(arg) (void)arg - -#define TE_CHECK(cond, ret_val) ({ \ - if (!(cond)) { \ - ESP_LOGE(TE_TAG, "%s(%d)", __FUNCTION__, __LINE__); \ - return (ret_val); \ - } \ -}) - -#define TE_CHECK_GOTO(cond, label) ({ \ - if (!(cond)) { \ - goto label; \ - } \ -}) - -#define TE_FREE_AND_NULL(ptr) ({ \ - free(ptr); \ - (ptr) = NULL; \ -}) - -#define TE_DEFAULT_THRESHOLD_DIVIDER(obj) ((obj)->global_config->threshold_divider) -#define TE_DEFAULT_LONGPRESS_TIME(obj) ((obj)->global_config->default_lp_time) - -typedef enum { - TE_STATE_IDLE = 0, - TE_STATE_PRESS, - TE_STATE_RELEASE, -} te_state_t; - -typedef te_state_t te_dev_state_t; -typedef touch_elem_type_t te_dev_type_t; - -typedef struct { - float sens; //!< Touch channel sensitivity - touch_pad_t channel; //!< Touch channel number(index) - te_dev_type_t type; //!< Touch channel type TODO: need to refactor as te_class_type_t - te_dev_state_t state; //!< Touch channel current state - bool is_use_last_threshold; -} te_dev_t; - -typedef enum { - TE_CLS_TYPE_BUTTON = 0, - TE_CLS_TYPE_SLIDER, - TE_CLS_TYPE_MATRIX, - TE_CLS_TYPE_MAX //TODO: add waterproof class -} te_class_type_t; - -typedef struct { - touch_elem_handle_t handle; - bool (*check_channel) (touch_pad_t); - esp_err_t (*set_threshold) (void); - void (*process_state) (void); - void (*update_state) (touch_pad_t, te_state_t); -} te_object_methods_t; - -/* -------------------------------------------- Waterproof basic type --------------------------------------------- */ -struct te_waterproof_s { - te_dev_t *guard_device; //Waterproof guard channel device - touch_elem_handle_t *mask_handle; //Waterproof masked handle array - touch_pad_t shield_channel; //Waterproof shield channel - bool is_shield_level_set; //Waterproof shield level setting bit -}; -typedef struct te_waterproof_s* te_waterproof_handle_t; -/* -------------------------------------------- Sleep basic type --------------------------------------------- */ -struct te_sleep_s { - touch_elem_handle_t wakeup_handle; -#ifdef CONFIG_PM_ENABLE - esp_pm_lock_handle_t pm_lock; -#endif - uint32_t *non_volatile_threshold; -}; - -typedef struct te_sleep_s* te_sleep_handle_t; -/* -------------------------------------------- Button basic type --------------------------------------------- */ -typedef struct { - touch_elem_dispatch_t dispatch_method; //Button dispatch method - touch_button_callback_t callback; //Button callback routine - uint32_t event_mask; //Button subscribed event mask - void *arg; //User input argument -} te_button_handle_config_t; - -typedef te_state_t te_button_state_t; //TODO: add Long Press state - -struct te_button_s { - te_button_handle_config_t *config; //Button configuration - te_dev_t *device; //Base device information - te_button_state_t current_state; //Button current state - te_button_state_t last_state; //Button last state - touch_button_event_t event; //Button outside state(for application layer) - uint32_t trigger_cnt; //Button long time trigger counter - uint32_t trigger_thr; //Button long time trigger counter threshold -}; - -typedef struct te_button_s* te_button_handle_t; -/* -------------------------------------------- Slider basic type --------------------------------------------- */ -typedef struct { - touch_elem_dispatch_t dispatch_method; //Slider dispatch method - touch_slider_callback_t callback; //Slider callback routine - uint32_t event_mask; //Slider subscribed event mask - void *arg; //User input argument -} te_slider_handle_config_t; - -typedef te_state_t te_slider_state_t; - -struct te_slider_s { - te_slider_handle_config_t *config; //Slider configuration - te_dev_t **device; //Base device information set - te_slider_state_t current_state; //Slider current state - te_slider_state_t last_state; //Slider last state - touch_slider_event_t event; //Slider outside state(for application layer) - float position_scale; //Slider position scale(step size) - float *quantify_signal_array; //Slider re-quantization array - uint32_t *channel_bcm; //Channel benchmark array - uint32_t channel_bcm_update_cnt; //Channel benchmark update counter - uint32_t filter_reset_cnt; //Slider reset counter - uint32_t last_position; //Slider last position - touch_slider_position_t position; //Slider position - uint8_t position_range; //Slider position range([0, position_range]) - uint8_t channel_sum; //Slider channel sum - uint8_t *pos_filter_window; //Slider position moving average filter window - uint8_t pos_window_idx; //Slider position moving average filter window index - bool is_first_sample; //Slider first time sample record bit -}; - -typedef struct te_slider_s* te_slider_handle_t; -/* -------------------------------------------- Matrix basic type --------------------------------------------- */ -typedef struct { - touch_elem_dispatch_t dispatch_method; //Matrix button dispatch method - touch_matrix_callback_t callback; //Matrix button callback routine - uint32_t event_mask; //Matrix button subscribed event mask - void *arg; //User input argument -} te_matrix_handle_config_t; - -typedef te_state_t te_matrix_state_t; //TODO: add Long Press state - -struct te_matrix_s { - te_matrix_handle_config_t *config; //Matrix button configuration - te_dev_t **device; //Base device information - te_matrix_state_t current_state; //Matrix button current state - te_matrix_state_t last_state; //Matrix button current state - touch_matrix_event_t event; //Matrix button outside state(for application layer) - uint32_t trigger_cnt; //Matrix button long time trigger counter - uint32_t trigger_thr; //Matrix button long time trigger counter threshold - touch_matrix_position_t position; //Matrix button position - uint8_t x_channel_num; //The number of touch sensor channel in x axis - uint8_t y_channel_num; //The number of touch sensor channel in y axis -}; - -typedef struct te_matrix_s* te_matrix_handle_t; -/* ------------------------------------------------------------------------------------------------------------------ */ - -/* --------------------------------------------- Global system methods ---------------------------------------------- */ -uint32_t te_read_smooth_signal(touch_pad_t channel_num); -bool te_system_check_state(void); -//TODO: Refactor this function with function overload -esp_err_t te_dev_init(te_dev_t **device, uint8_t device_num, te_dev_type_t type, const touch_pad_t *channel, const float *sens, float divider); -void te_dev_deinit(te_dev_t **device, uint8_t device_num); -esp_err_t te_dev_set_threshold(te_dev_t *device); -esp_err_t te_event_give(touch_elem_message_t te_message); -uint8_t te_get_timer_period(void); -void te_object_method_register(te_object_methods_t *object_methods, te_class_type_t object_type); -void te_object_method_unregister(te_class_type_t object_type); -bool te_object_check_channel(const touch_pad_t *channel_array, uint8_t channel_sum); -bool waterproof_check_mask_handle(touch_elem_handle_t te_handle); -bool te_is_touch_dsleep_wakeup(void); -touch_pad_t te_get_sleep_channel(void); - -bool is_button_object_handle(touch_elem_handle_t element_handle); -bool is_slider_object_handle(touch_elem_handle_t element_handle); -bool is_matrix_object_handle(touch_elem_handle_t element_handle); - -void button_enable_wakeup_calibration(te_button_handle_t button_handle, bool en); -void slider_enable_wakeup_calibration(te_slider_handle_t slider_handle, bool en); -void matrix_enable_wakeup_calibration(te_matrix_handle_t matrix_handle, bool en); -/* ------------------------------------------------------------------------------------------------------------------ */ - -#ifdef __cplusplus -} -#endif diff --git a/components/touch_element/include/touch_element/touch_matrix.h b/components/touch_element/include/touch_element/touch_matrix.h deleted file mode 100644 index bb2e177392..0000000000 --- a/components/touch_element/include/touch_element/touch_matrix.h +++ /dev/null @@ -1,213 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2016-2022 Espressif Systems (Shanghai) CO LTD - * - * SPDX-License-Identifier: Apache-2.0 - */ - -#pragma once - -#include "touch_element/touch_element.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* ----------------------------- General matrix button instance default configuration ------------------------------ */ -#define TOUCH_MATRIX_GLOBAL_DEFAULT_CONFIG() \ -{ \ - .threshold_divider = 0.8, \ - .default_lp_time = 1000 \ -} -/* ------------------------------------------------------------------------------------------------------------------ */ -/** - * @brief Matrix button initialization configuration passed to touch_matrix_install - */ -typedef struct { - float threshold_divider; //!< Matrix button channel threshold divider - uint32_t default_lp_time; //!< Matrix button default LongPress event time (ms) -} touch_matrix_global_config_t; - -/** - * @brief Matrix button configuration (for new instance) passed to touch_matrix_create() - */ -typedef struct { - const touch_pad_t *x_channel_array; //!< Matrix button x-axis channels array - const touch_pad_t *y_channel_array; //!< Matrix button y-axis channels array - const float *x_sensitivity_array; //!< Matrix button x-axis channels sensitivity array - const float *y_sensitivity_array; //!< Matrix button y-axis channels sensitivity array - uint8_t x_channel_num; //!< The number of channels in x-axis - uint8_t y_channel_num; //!< The number of channels in y-axis -} touch_matrix_config_t; - -/** - * @brief Matrix button event type - */ -typedef enum { - TOUCH_MATRIX_EVT_ON_PRESS, //!< Matrix button Press event - TOUCH_MATRIX_EVT_ON_RELEASE, //!< Matrix button Press event - TOUCH_MATRIX_EVT_ON_LONGPRESS, //!< Matrix button LongPress event - TOUCH_MATRIX_EVT_MAX -} touch_matrix_event_t; - -/** - * @brief Matrix button position data type - */ -typedef struct { - uint8_t x_axis; //!< Matrix button x axis position - uint8_t y_axis; //!< Matrix button y axis position - uint8_t index; //!< Matrix button position index -} touch_matrix_position_t; - -/** - * @brief Matrix message type - */ -typedef struct { - touch_matrix_event_t event; //!< Matrix event - touch_matrix_position_t position; //!< Matrix position -} touch_matrix_message_t; - -typedef touch_elem_handle_t touch_matrix_handle_t; //!< Matrix button instance handle -typedef void(*touch_matrix_callback_t)(touch_matrix_handle_t, touch_matrix_message_t *, void *); //!< Matrix button callback type - -/** - * @brief Touch matrix button initialize - * - * This function initializes touch matrix button object and acts on all - * touch matrix button instances. - * - * @param[in] global_config Touch matrix global initialization configuration - * - * @return - * - ESP_OK: Successfully initialized touch matrix button - * - ESP_ERR_INVALID_STATE: Touch element library was not initialized - * - ESP_ERR_INVALID_ARG: matrix_init is NULL - * - ESP_ERR_NO_MEM: Insufficient memory - */ -esp_err_t touch_matrix_install(const touch_matrix_global_config_t *global_config); - -/** - * @brief Release resources allocated using touch_matrix_install() - * - */ -void touch_matrix_uninstall(void); - -/** - * @brief Create a new touch matrix button instance - * - * @param[in] matrix_config Matrix button configuration - * @param[out] matrix_handle Matrix button handle - * - * @note Channel array and sensitivity array must be one-one correspondence in those array - * - * @note Touch matrix button does not support Multi-Touch now - * - * @return - * - ESP_OK: Successfully create touch matrix button - * - ESP_ERR_INVALID_STATE: Touch matrix driver was not initialized - * - ESP_ERR_INVALID_ARG: Invalid configuration struct or arguments is NULL - * - ESP_ERR_NO_MEM: Insufficient memory - */ -esp_err_t touch_matrix_create(const touch_matrix_config_t *matrix_config, touch_matrix_handle_t *matrix_handle); - -/** - * @brief Release resources allocated using touch_matrix_create() - * - * @param[in] matrix_handle Matrix handle - * @return - * - ESP_OK: Successfully released resources - * - ESP_ERR_INVALID_STATE: Touch matrix driver was not initialized - * - ESP_ERR_INVALID_ARG: matrix_handle is null - * - ESP_ERR_NOT_FOUND: Input handle is not a matrix handle - */ -esp_err_t touch_matrix_delete(touch_matrix_handle_t matrix_handle); - -/** - * @brief Touch matrix button subscribes event - * - * This function uses event mask to subscribe to touch matrix events, once one of - * the subscribed events occurs, the event message could be retrieved by calling - * touch_element_message_receive() or input callback routine. - * - * @param[in] matrix_handle Matrix handle - * @param[in] event_mask Matrix subscription event mask - * @param[in] arg User input argument - * - * @note Touch matrix button only support three kind of event masks, they are - * TOUCH_ELEM_EVENT_ON_PRESS, TOUCH_ELEM_EVENT_ON_RELEASE, TOUCH_ELEM_EVENT_ON_LONGPRESS. You can use those event - * masks in any combination to achieve the desired effect. - * - * @return - * - ESP_OK: Successfully subscribed touch matrix event - * - ESP_ERR_INVALID_STATE: Touch matrix driver was not initialized - * - ESP_ERR_INVALID_ARG: matrix_handle is null or event is not supported - */ -esp_err_t touch_matrix_subscribe_event(touch_matrix_handle_t matrix_handle, uint32_t event_mask, void *arg); - -/** - * @brief Touch matrix button set dispatch method - * - * This function sets a dispatch method that the driver core will use - * this method as the event notification method. - * - * @param[in] matrix_handle Matrix button handle - * @param[in] dispatch_method Dispatch method (By callback/event) - * - * @return - * - ESP_OK: Successfully set dispatch method - * - ESP_ERR_INVALID_STATE: Touch matrix driver was not initialized - * - ESP_ERR_INVALID_ARG: matrix_handle is null or dispatch_method is invalid - */ -esp_err_t touch_matrix_set_dispatch_method(touch_matrix_handle_t matrix_handle, touch_elem_dispatch_t dispatch_method); - -/** - * @brief Touch matrix button set callback - * - * This function sets a callback routine into touch element driver core, - * when the subscribed events occur, the callback routine will be called. - * - * @param[in] matrix_handle Matrix button handle - * @param[in] matrix_callback User input callback - * - * @note Matrix message will be passed from the callback function and it will be destroyed when the callback function return. - * - * @warning Since this input callback routine runs on driver core (esp-timer callback routine), - * it should not do something that attempts to Block, such as calling vTaskDelay(). - * - * @return - * - ESP_OK: Successfully set callback - * - ESP_ERR_INVALID_STATE: Touch matrix driver was not initialized - * - ESP_ERR_INVALID_ARG: matrix_handle or matrix_callback is null - */ -esp_err_t touch_matrix_set_callback(touch_matrix_handle_t matrix_handle, touch_matrix_callback_t matrix_callback); - -/** - * @brief Touch matrix button set long press trigger time - * - * This function sets the threshold time (ms) for a long press event. If a matrix button is pressed - * and held for a period of time that exceeds the threshold time, a long press event is triggered. - * - * @param[in] matrix_handle Matrix button handle - * @param[in] threshold_time Threshold time (ms) of long press event occur - * - * @return - * - ESP_OK: Successfully set the time of long press event - * - ESP_ERR_INVALID_STATE: Touch matrix driver was not initialized - * - ESP_ERR_INVALID_ARG: matrix_handle is null or time (ms) is 0 - */ -esp_err_t touch_matrix_set_longpress(touch_matrix_handle_t matrix_handle, uint32_t threshold_time); - -/** - * @brief Touch matrix get message - * - * This function decodes the element message from touch_element_message_receive() and return - * a matrix message pointer. - * - * @param[in] element_message element message - * - * @return Touch matrix message pointer - */ -const touch_matrix_message_t* touch_matrix_get_message(const touch_elem_message_t* element_message); - -#ifdef __cplusplus -} -#endif diff --git a/components/touch_element/include/touch_element/touch_slider.h b/components/touch_element/include/touch_element/touch_slider.h deleted file mode 100644 index f491981bda..0000000000 --- a/components/touch_element/include/touch_element/touch_slider.h +++ /dev/null @@ -1,197 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2016-2022 Espressif Systems (Shanghai) CO LTD - * - * SPDX-License-Identifier: Apache-2.0 - */ - -#pragma once - -#include "touch_element/touch_element.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* --------------------------------- General slider instance default configuration --------------------------------- */ -#define TOUCH_SLIDER_GLOBAL_DEFAULT_CONFIG() \ -{ \ - .quantify_lower_threshold = 0.3, \ - .threshold_divider = 0.8, \ - .filter_reset_time = 50, \ - .benchmark_update_time = 500, \ - .position_filter_size = 10, \ - .position_filter_factor = 2, \ - .calculate_channel_count = 3 \ -} -/* ------------------------------------------------------------------------------------------------------------------ */ - -/** - * @brief Slider initialization configuration passed to touch_slider_install - */ -typedef struct { - float quantify_lower_threshold; //!< Slider signal quantification threshold - float threshold_divider; //!< Slider channel threshold divider - uint16_t filter_reset_time; //!< Slider position filter reset time (Unit is esp_timer callback tick) - uint16_t benchmark_update_time; //!< Slider benchmark update time (Unit is esp_timer callback tick) - uint8_t position_filter_size; //!< Moving window filter buffer size - uint8_t position_filter_factor; //!< One-order IIR filter factor - uint8_t calculate_channel_count; //!< The number of channels which will take part in calculation -} touch_slider_global_config_t; - -/** - * @brief Slider configuration (for new instance) passed to touch_slider_create() - */ -typedef struct { - const touch_pad_t *channel_array; //!< Slider channel array - const float *sensitivity_array; //!< Slider channel sensitivity array - uint8_t channel_num; //!< The number of slider channels - uint8_t position_range; //!< The right region of touch slider position range, [0, position_range (less than or equal to 255)] -} touch_slider_config_t; - -/** - * @brief Slider event type - */ -typedef enum { - TOUCH_SLIDER_EVT_ON_PRESS, //!< Slider on Press event - TOUCH_SLIDER_EVT_ON_RELEASE, //!< Slider on Release event - TOUCH_SLIDER_EVT_ON_CALCULATION, //!< Slider on Calculation event - TOUCH_SLIDER_EVT_MAX -} touch_slider_event_t; - -typedef uint32_t touch_slider_position_t; //!< Slider position data type - -/** - * @brief Slider message type - */ -typedef struct { - touch_slider_event_t event; //!< Slider event - touch_slider_position_t position; //!< Slider position -} touch_slider_message_t; - -typedef touch_elem_handle_t touch_slider_handle_t; //!< Slider instance handle -typedef void(*touch_slider_callback_t)(touch_slider_handle_t, touch_slider_message_t *, void *); //!< Slider callback type - -/** - * @brief Touch slider initialize - * - * This function initializes touch slider object and acts on all - * touch slider instances. - * - * @param[in] global_config Touch slider global initialization configuration - * - * @return - * - ESP_OK: Successfully initialized touch slider - * - ESP_ERR_INVALID_STATE: Touch element library was not initialized - * - ESP_ERR_INVALID_ARG: slider_init is NULL - * - ESP_ERR_NO_MEM: Insufficient memory - */ -esp_err_t touch_slider_install(const touch_slider_global_config_t *global_config); - -/** - * @brief Release resources allocated using touch_slider_install() - * - */ -void touch_slider_uninstall(void); - -/** -* @brief Create a new touch slider instance -* -* @param[in] slider_config Slider configuration -* @param[out] slider_handle Slider handle -* -* @note The index of Channel array and sensitivity array must be one-one correspondence -* -* @return -* - ESP_OK: Successfully create touch slider -* - ESP_ERR_INVALID_STATE: Touch slider driver was not initialized -* - ESP_ERR_INVALID_ARG: Invalid configuration struct or arguments is NULL -* - ESP_ERR_NO_MEM: Insufficient memory -*/ -esp_err_t touch_slider_create(const touch_slider_config_t *slider_config, touch_slider_handle_t *slider_handle); - -/** - * @brief Release resources allocated using touch_slider_create - * - * @param[in] slider_handle Slider handle - * @return - * - ESP_OK: Successfully released resources - * - ESP_ERR_INVALID_STATE: Touch slider driver was not initialized - * - ESP_ERR_INVALID_ARG: slider_handle is null - * - ESP_ERR_NOT_FOUND: Input handle is not a slider handle - */ -esp_err_t touch_slider_delete(touch_slider_handle_t slider_handle); - -/** - * @brief Touch slider subscribes event - * - * This function uses event mask to subscribe to touch slider events, once one of - * the subscribed events occurs, the event message could be retrieved by calling - * touch_element_message_receive() or input callback routine. - * - * @param[in] slider_handle Slider handle - * @param[in] event_mask Slider subscription event mask - * @param[in] arg User input argument - * - * @note Touch slider only support three kind of event masks, they are - * TOUCH_ELEM_EVENT_ON_PRESS, TOUCH_ELEM_EVENT_ON_RELEASE. You can use those event masks in any - * combination to achieve the desired effect. - * - * @return - * - ESP_OK: Successfully subscribed touch slider event - * - ESP_ERR_INVALID_STATE: Touch slider driver was not initialized - * - ESP_ERR_INVALID_ARG: slider_handle is null or event is not supported - */ -esp_err_t touch_slider_subscribe_event(touch_slider_handle_t slider_handle, uint32_t event_mask, void *arg); - -/** - * @brief Touch slider set dispatch method - * - * This function sets a dispatch method that the driver core will use - * this method as the event notification method. - * - * @param[in] slider_handle Slider handle - * @param[in] dispatch_method Dispatch method (By callback/event) - * - * @return - * - ESP_OK: Successfully set dispatch method - * - ESP_ERR_INVALID_STATE: Touch slider driver was not initialized - * - ESP_ERR_INVALID_ARG: slider_handle is null or dispatch_method is invalid - */ -esp_err_t touch_slider_set_dispatch_method(touch_slider_handle_t slider_handle, touch_elem_dispatch_t dispatch_method); - -/** - * @brief Touch slider set callback - * - * This function sets a callback routine into touch element driver core, - * when the subscribed events occur, the callback routine will be called. - * - * @param[in] slider_handle Slider handle - * @param[in] slider_callback User input callback - * - * @note Slider message will be passed from the callback function and it will be destroyed when the callback function return. - * - * @warning Since this input callback routine runs on driver core (esp-timer callback routine), - * it should not do something that attempts to Block, such as calling vTaskDelay(). - * - * @return - * - ESP_OK: Successfully set callback - * - ESP_ERR_INVALID_STATE: Touch slider driver was not initialized - * - ESP_ERR_INVALID_ARG: slider_handle or slider_callback is null - */ -esp_err_t touch_slider_set_callback(touch_slider_handle_t slider_handle, touch_slider_callback_t slider_callback); - -/** - * @brief Touch slider get message - * - * This function decodes the element message from touch_element_message_receive() and return - * a slider message pointer. - * - * @param[in] element_message element message - * - * @return Touch slider message pointer - */ -const touch_slider_message_t* touch_slider_get_message(const touch_elem_message_t* element_message); - -#ifdef __cplusplus -} -#endif diff --git a/components/touch_element/test_apps/.build-test-rules.yml b/components/touch_element/test_apps/.build-test-rules.yml deleted file mode 100644 index c210fd1b8c..0000000000 --- a/components/touch_element/test_apps/.build-test-rules.yml +++ /dev/null @@ -1,6 +0,0 @@ -# Documentation: .gitlab/ci/README.md#manifest-file-to-control-the-buildtest-apps - -components/touch_element/test_apps: - enable: - - if: IDF_TARGET in ["esp32s2", "esp32s3"] - reason: only supports esp32s2 and esp32s3 diff --git a/components/touch_element/touch_button.c b/components/touch_element/touch_button.c deleted file mode 100644 index 6c0dd3680f..0000000000 --- a/components/touch_element/touch_button.c +++ /dev/null @@ -1,440 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD - * - * SPDX-License-Identifier: Apache-2.0 - */ - -#include -#include -#include -#include "freertos/FreeRTOS.h" -#include "freertos/semphr.h" -#include "esp_log.h" -#include "touch_element/touch_element_private.h" - -typedef struct te_button_handle_list { - te_button_handle_t button_handle; //Button handle - SLIST_ENTRY(te_button_handle_list) next; //Button handle list entry -} te_button_handle_list_t; - -typedef struct { - SLIST_HEAD(te_button_handle_list_head, te_button_handle_list) handle_list; //Button handle (instance) list - touch_button_global_config_t *global_config; //Button global configuration - SemaphoreHandle_t mutex; //Button object mutex -} te_button_obj_t; - -static te_button_obj_t *s_te_btn_obj = NULL; //Button object -/* ---------------------------------------- Button handle(instance) methods ----------------------------------------- */ -static bool button_channel_check(te_button_handle_t button_handle, touch_pad_t channel_num); -static esp_err_t button_set_threshold(te_button_handle_t button_handle); -static inline te_state_t button_get_state(te_dev_t *device); -static void button_reset_state(te_button_handle_t button_handle); -static void button_update_state(te_button_handle_t button_handle, touch_pad_t channel_num, te_state_t channel_state); -static void button_proc_state(te_button_handle_t button_handle); -static void button_event_give(te_button_handle_t button_handle); -static inline void button_dispatch(te_button_handle_t button_handle, touch_elem_dispatch_t dispatch_method); -/* ------------------------------------------ Button object(class) methods ------------------------------------------ */ -static esp_err_t button_object_add_instance(te_button_handle_t button_handle); -static esp_err_t button_object_remove_instance(te_button_handle_t button_handle); -static bool button_object_check_channel(touch_pad_t channel_num); -static esp_err_t button_object_set_threshold(void); -static void button_object_process_state(void); -static void button_object_update_state(touch_pad_t channel_num, te_state_t channel_state); -/* ------------------------------------------------------------------------------------------------------------------ */ - -esp_err_t touch_button_install(const touch_button_global_config_t *global_config) -{ - TE_CHECK(te_system_check_state() == true, ESP_ERR_INVALID_STATE); - TE_CHECK(global_config != NULL, ESP_ERR_INVALID_ARG); - //Fixme: Make it thread-safe - s_te_btn_obj = (te_button_obj_t *)calloc(1, sizeof(te_button_obj_t)); - TE_CHECK(s_te_btn_obj != NULL, ESP_ERR_NO_MEM); - s_te_btn_obj->global_config = (touch_button_global_config_t *)calloc(1, sizeof(touch_button_global_config_t)); - s_te_btn_obj->mutex = xSemaphoreCreateMutex(); - TE_CHECK_GOTO(s_te_btn_obj->global_config != NULL && s_te_btn_obj->global_config != NULL, cleanup); - xSemaphoreTake(s_te_btn_obj->mutex, portMAX_DELAY); - SLIST_INIT(&s_te_btn_obj->handle_list); - memcpy(s_te_btn_obj->global_config, global_config, sizeof(touch_button_global_config_t)); - te_object_methods_t button_methods = { - .handle = s_te_btn_obj, - .check_channel = button_object_check_channel, - .set_threshold = button_object_set_threshold, - .process_state = button_object_process_state, - .update_state = button_object_update_state - }; - te_object_method_register(&button_methods, TE_CLS_TYPE_BUTTON); - xSemaphoreGive(s_te_btn_obj->mutex); - return ESP_OK; - -cleanup: - TE_FREE_AND_NULL(s_te_btn_obj->global_config); - if (s_te_btn_obj->mutex != NULL) { - vSemaphoreDelete(s_te_btn_obj->mutex); - } - TE_FREE_AND_NULL(s_te_btn_obj); - return ESP_ERR_NO_MEM; -} - -void touch_button_uninstall(void) -{ - xSemaphoreTake(s_te_btn_obj->mutex, portMAX_DELAY); - if (s_te_btn_obj == NULL) { - xSemaphoreGive(s_te_btn_obj->mutex); - return; - } - te_object_method_unregister(TE_CLS_TYPE_BUTTON); - free(s_te_btn_obj->global_config); - s_te_btn_obj->global_config = NULL; - while (!SLIST_EMPTY(&s_te_btn_obj->handle_list)) { - SLIST_FIRST(&s_te_btn_obj->handle_list); - SLIST_REMOVE_HEAD(&s_te_btn_obj->handle_list, next); - } - xSemaphoreGive(s_te_btn_obj->mutex); - vSemaphoreDelete(s_te_btn_obj->mutex); - free(s_te_btn_obj); - s_te_btn_obj = NULL; -} - -esp_err_t touch_button_create(const touch_button_config_t *button_config, touch_button_handle_t *button_handle) -{ - TE_CHECK(s_te_btn_obj != NULL, ESP_ERR_INVALID_STATE); - TE_CHECK(button_handle != NULL && button_config != NULL, ESP_ERR_INVALID_ARG); - TE_CHECK(button_config->channel_num > TOUCH_PAD_NUM0 && - button_config->channel_num < TOUCH_PAD_MAX && - button_config->channel_sens > 0, - ESP_ERR_INVALID_ARG); - TE_CHECK(te_object_check_channel(&button_config->channel_num, 1) == false, ESP_ERR_INVALID_ARG); - te_button_handle_t te_button = (te_button_handle_t)calloc(1, sizeof(struct te_button_s)); - TE_CHECK(te_button != NULL, ESP_ERR_NO_MEM); - - esp_err_t ret = ESP_ERR_NO_MEM; - te_button->config = (te_button_handle_config_t *)calloc(1, sizeof(te_button_handle_config_t)); - te_button->device = (te_dev_t *)calloc(1, sizeof(te_dev_t)); - TE_CHECK_GOTO(te_button->config != NULL && te_button->device != NULL, cleanup); - - ret = te_dev_init(&te_button->device, 1, TOUCH_ELEM_TYPE_BUTTON, - &button_config->channel_num, &button_config->channel_sens, TE_DEFAULT_THRESHOLD_DIVIDER(s_te_btn_obj)); - TE_CHECK_GOTO(ret == ESP_OK, cleanup); - - te_button->config->event_mask = TOUCH_ELEM_EVENT_NONE; - te_button->config->dispatch_method = TOUCH_ELEM_DISP_MAX; - te_button->config->callback = NULL; - te_button->config->arg = NULL; - te_button->current_state = TE_STATE_IDLE; - te_button->last_state = TE_STATE_IDLE; - te_button->event = TOUCH_BUTTON_EVT_MAX; - te_button->trigger_cnt = 0; - te_button->trigger_thr = 0xffffffff; - ret = button_object_add_instance(te_button); - TE_CHECK_GOTO(ret == ESP_OK, cleanup); - *button_handle = (touch_elem_handle_t)te_button; - ESP_LOGD(TE_DEBUG_TAG, "channel: %d, channel_sens: %f", button_config->channel_num, button_config->channel_sens); - return ESP_OK; - -cleanup: - TE_FREE_AND_NULL(te_button->config); - TE_FREE_AND_NULL(te_button->device); - TE_FREE_AND_NULL(te_button); - return ret; -} - -esp_err_t touch_button_delete(touch_button_handle_t button_handle) -{ - TE_CHECK(s_te_btn_obj != NULL, ESP_ERR_INVALID_STATE); - TE_CHECK(button_handle != NULL, ESP_ERR_INVALID_ARG); - esp_err_t ret = button_object_remove_instance(button_handle); - TE_CHECK(ret == ESP_OK, ret); - te_button_handle_t te_button = (te_button_handle_t)button_handle; - te_dev_deinit(&te_button->device, 1); - free(te_button->config); - free(te_button->device); - free(te_button); - return ESP_OK; -} - -esp_err_t touch_button_set_dispatch_method(touch_button_handle_t button_handle, touch_elem_dispatch_t dispatch_method) -{ - TE_CHECK(s_te_btn_obj != NULL, ESP_ERR_INVALID_STATE); - TE_CHECK(button_handle != NULL, ESP_ERR_INVALID_ARG); - TE_CHECK(dispatch_method >= TOUCH_ELEM_DISP_EVENT && dispatch_method <= TOUCH_ELEM_DISP_MAX, ESP_ERR_INVALID_ARG); - xSemaphoreTake(s_te_btn_obj->mutex, portMAX_DELAY); - te_button_handle_t te_button = (te_button_handle_t)button_handle; - te_button->config->dispatch_method = dispatch_method; - xSemaphoreGive(s_te_btn_obj->mutex); - return ESP_OK; -} - -esp_err_t touch_button_subscribe_event(touch_button_handle_t button_handle, uint32_t event_mask, void *arg) -{ - TE_CHECK(s_te_btn_obj != NULL, ESP_ERR_INVALID_STATE); - TE_CHECK(button_handle != NULL, ESP_ERR_INVALID_ARG); - if (!(event_mask & TOUCH_ELEM_EVENT_ON_PRESS) && !(event_mask & TOUCH_ELEM_EVENT_ON_RELEASE) && - !(event_mask & TOUCH_ELEM_EVENT_ON_LONGPRESS) && !(event_mask & TOUCH_ELEM_EVENT_NONE)) { - ESP_LOGE(TE_TAG, "Touch button only support TOUCH_ELEM_EVENT_ON_PRESS, " - "TOUCH_ELEM_EVENT_ON_RELEASE, TOUCH_ELEM_EVENT_ON_LONGPRESS event mask"); - return ESP_ERR_INVALID_ARG; - } - if (event_mask & TOUCH_ELEM_EVENT_ON_LONGPRESS) { - touch_button_set_longpress(button_handle, TE_DEFAULT_LONGPRESS_TIME(s_te_btn_obj)); //set the default time(1000ms) for long press - } - xSemaphoreTake(s_te_btn_obj->mutex, portMAX_DELAY); - te_button_handle_t te_button = (te_button_handle_t)button_handle; - te_button->config->event_mask = event_mask; - te_button->config->arg = arg; - xSemaphoreGive(s_te_btn_obj->mutex); - return ESP_OK; -} - -esp_err_t touch_button_set_callback(touch_button_handle_t button_handle, touch_button_callback_t button_callback) -{ - TE_CHECK(s_te_btn_obj != NULL, ESP_ERR_INVALID_STATE); - TE_CHECK(button_handle != NULL, ESP_ERR_INVALID_ARG); - TE_CHECK(button_callback != NULL, ESP_ERR_INVALID_ARG); - te_button_handle_t te_button = (te_button_handle_t)button_handle; - xSemaphoreTake(s_te_btn_obj->mutex, portMAX_DELAY); - te_button->config->callback = button_callback; - xSemaphoreGive(s_te_btn_obj->mutex); - return ESP_OK; -} - -esp_err_t touch_button_set_longpress(touch_button_handle_t button_handle, uint32_t threshold_time) -{ - TE_CHECK(s_te_btn_obj != NULL, ESP_ERR_INVALID_STATE); - TE_CHECK(button_handle != NULL, ESP_ERR_INVALID_ARG); - TE_CHECK(threshold_time > 0, ESP_ERR_INVALID_ARG); - te_button_handle_t te_button = (te_button_handle_t)button_handle; - touch_elem_dispatch_t dispatch_method = te_button->config->dispatch_method; - if (dispatch_method == TOUCH_ELEM_DISP_EVENT) { - xSemaphoreTake(s_te_btn_obj->mutex, portMAX_DELAY); - } - uint8_t timer_period = te_get_timer_period(); - te_button->trigger_thr = threshold_time / timer_period; - if (dispatch_method == TOUCH_ELEM_DISP_EVENT) { - xSemaphoreGive(s_te_btn_obj->mutex); - } - return ESP_OK; -} - -const touch_button_message_t* touch_button_get_message(const touch_elem_message_t* element_message) -{ - return (touch_button_message_t*)&element_message->child_msg; - _Static_assert(sizeof(element_message->child_msg) >= sizeof(touch_button_message_t), "Message size overflow"); -} - -static bool button_object_check_channel(touch_pad_t channel_num) -{ - te_button_handle_list_t *item; - SLIST_FOREACH(item, &s_te_btn_obj->handle_list, next) { - if (button_channel_check(item->button_handle, channel_num)) { - return true; - } - } - return false; -} - -static esp_err_t button_object_set_threshold(void) -{ - esp_err_t ret = ESP_OK; - te_button_handle_list_t *item; - SLIST_FOREACH(item, &s_te_btn_obj->handle_list, next) { - ret = button_set_threshold(item->button_handle); - if (ret != ESP_OK) { - break; - } - } - return ret; -} - -static void button_object_process_state(void) -{ - te_button_handle_list_t *item; - SLIST_FOREACH(item, &s_te_btn_obj->handle_list, next) { - if (waterproof_check_mask_handle(item->button_handle)) { - button_reset_state(item->button_handle); - continue; - } - button_proc_state(item->button_handle); - } -} - -static void button_object_update_state(touch_pad_t channel_num, te_state_t channel_state) -{ - te_button_handle_list_t *item; - SLIST_FOREACH(item, &s_te_btn_obj->handle_list, next) { - if (waterproof_check_mask_handle(item->button_handle)) { - continue; - } - button_update_state(item->button_handle, channel_num, channel_state); - } -} - -static esp_err_t button_object_add_instance(te_button_handle_t button_handle) -{ - te_button_handle_list_t *item = (te_button_handle_list_t *)calloc(1, sizeof(te_button_handle_list_t)); - TE_CHECK(item != NULL, ESP_ERR_NO_MEM); - item->button_handle = button_handle; - xSemaphoreTake(s_te_btn_obj->mutex, portMAX_DELAY); - SLIST_INSERT_HEAD(&s_te_btn_obj->handle_list, item, next); - xSemaphoreGive(s_te_btn_obj->mutex); - return ESP_OK; -} - -static esp_err_t button_object_remove_instance(te_button_handle_t button_handle) -{ - esp_err_t ret = ESP_ERR_NOT_FOUND; - te_button_handle_list_t *item; - SLIST_FOREACH(item, &s_te_btn_obj->handle_list, next) { - if (button_handle == item->button_handle) { - xSemaphoreTake(s_te_btn_obj->mutex, portMAX_DELAY); - SLIST_REMOVE(&s_te_btn_obj->handle_list, item, te_button_handle_list, next); - xSemaphoreGive(s_te_btn_obj->mutex); - free(item); - ret = ESP_OK; - break; - } - } - return ret; -} - -bool is_button_object_handle(touch_elem_handle_t element_handle) -{ - te_button_handle_list_t *item; - xSemaphoreTake(s_te_btn_obj->mutex, portMAX_DELAY); - SLIST_FOREACH(item, &s_te_btn_obj->handle_list, next) { - if (element_handle == item->button_handle) { - xSemaphoreGive(s_te_btn_obj->mutex); - return true; - } - } - xSemaphoreGive(s_te_btn_obj->mutex); - return false; -} - -static bool button_channel_check(te_button_handle_t button_handle, touch_pad_t channel_num) -{ - return (channel_num == button_handle->device->channel); -} - -static esp_err_t button_set_threshold(te_button_handle_t button_handle) -{ - return te_dev_set_threshold(button_handle->device); -} - -static void button_update_state(te_button_handle_t button_handle, touch_pad_t channel_num, te_state_t channel_state) -{ - te_dev_t *device = button_handle->device; - if (channel_num != device->channel) { - return; - } - device->state = channel_state; -} - -static void button_reset_state(te_button_handle_t button_handle) -{ - button_handle->trigger_cnt = 0; - button_handle->current_state = TE_STATE_IDLE; - button_handle->device->state = TE_STATE_IDLE; -} - -static void button_event_give(te_button_handle_t button_handle) -{ - touch_elem_message_t element_message; - touch_button_message_t button_message = { - .event = button_handle->event - }; - element_message.handle = (touch_elem_handle_t)button_handle; - element_message.element_type = TOUCH_ELEM_TYPE_BUTTON; - element_message.arg = button_handle->config->arg; - memcpy(element_message.child_msg, &button_message, sizeof(button_message)); - te_event_give(element_message); -} - -static inline void button_dispatch(te_button_handle_t button_handle, touch_elem_dispatch_t dispatch_method) -{ - if (dispatch_method == TOUCH_ELEM_DISP_EVENT) { - button_event_give(button_handle); //Event queue - } else if (dispatch_method == TOUCH_ELEM_DISP_CALLBACK) { - touch_button_message_t button_info; - button_info.event = button_handle->event; - button_handle->config->callback(button_handle, &button_info, button_handle->config->arg); //Event callback - } -} - -void button_enable_wakeup_calibration(te_button_handle_t button_handle, bool en) -{ - button_handle->device->is_use_last_threshold = !en; -} - -/** - * @brief Button process - * - * This function will process the button state and maintain a button FSM: - * IDLE ----> Press ----> Release ----> IDLE - * - * The state transition procedure is as follow: - * (channel state ----> button state) - * - * TODO: add state transition diagram - */ -static void button_proc_state(te_button_handle_t button_handle) -{ - uint32_t event_mask = button_handle->config->event_mask; - touch_elem_dispatch_t dispatch_method = button_handle->config->dispatch_method; - - BaseType_t mux_ret = xSemaphoreTake(s_te_btn_obj->mutex, 0); - if (mux_ret != pdPASS) { - return; - } - - button_handle->current_state = button_get_state(button_handle->device); - - if (button_handle->current_state == TE_STATE_PRESS) { - if (button_handle->last_state == TE_STATE_IDLE) { //IDLE ---> Press = On_Press - ESP_LOGD(TE_DEBUG_TAG, "button press"); - if (event_mask & TOUCH_ELEM_EVENT_ON_PRESS) { - button_handle->event = TOUCH_BUTTON_EVT_ON_PRESS; - button_dispatch(button_handle, dispatch_method); - } - } else if (button_handle->last_state == TE_STATE_PRESS) { //Press ---> Press = On_LongPress - if (event_mask & TOUCH_ELEM_EVENT_ON_LONGPRESS) { - if (++button_handle->trigger_cnt >= button_handle->trigger_thr) { - ESP_LOGD(TE_DEBUG_TAG, "button longpress"); - button_handle->event = TOUCH_BUTTON_EVT_ON_LONGPRESS; - button_dispatch(button_handle, dispatch_method); - button_handle->trigger_cnt = 0; - } - } - } - } else if (button_handle->current_state == TE_STATE_RELEASE) { - if (button_handle->last_state == TE_STATE_PRESS) { //Press ---> Release = On_Release - ESP_LOGD(TE_DEBUG_TAG, "button release"); - if (event_mask & TOUCH_ELEM_EVENT_ON_RELEASE) { - button_handle->event = TOUCH_BUTTON_EVT_ON_RELEASE; - button_dispatch(button_handle, dispatch_method); - } - } else if (button_handle->last_state == TE_STATE_RELEASE) { // Release ---> Release = On_IDLE (Not dispatch) - button_reset_state(button_handle); //Reset the button state for the next time touch action detection - } - } else if (button_handle->current_state == TE_STATE_IDLE) { - if (button_handle->last_state == TE_STATE_RELEASE) { //Release ---> IDLE = On_IDLE (Not dispatch) - //Nothing - } else if (button_handle->last_state == TE_STATE_IDLE) { //IDLE ---> IDLE = Running IDLE (Not dispatch) - //Nothing - } - } - button_handle->last_state = button_handle->current_state; - xSemaphoreGive(s_te_btn_obj->mutex); -} - -static inline te_state_t button_get_state(te_dev_t *device) -{ - te_state_t button_state; - if (device->state == TE_STATE_PRESS) { - button_state = TE_STATE_PRESS; - } else if (device->state == TE_STATE_RELEASE) { - button_state = TE_STATE_RELEASE; - } else { - button_state = TE_STATE_IDLE; - } - return button_state; -} diff --git a/components/touch_element/touch_element.c b/components/touch_element/touch_element.c deleted file mode 100644 index 06580b0bf1..0000000000 --- a/components/touch_element/touch_element.c +++ /dev/null @@ -1,1116 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2016-2022 Espressif Systems (Shanghai) CO LTD - * - * SPDX-License-Identifier: Apache-2.0 - */ - -#include -#include -#include "freertos/FreeRTOS.h" -#include "freertos/semphr.h" -#include "freertos/queue.h" -#include "esp_sleep.h" -#include "esp_timer.h" -#include "esp_check.h" -#include "hal/touch_sensor_hal.h" //TODO: remove hal -#include "touch_element/touch_element_private.h" - -#include "esp_rom_sys.h" - - -#define TE_CLASS_ITEM(cls, cls_type, cls_item) ((&((cls)[cls_type]))->cls_item) - -#define TE_CLASS_FOREACH(cls_var, cls_start, cls_end) \ - for ((cls_var) = (cls_start); \ - (cls_var) < (cls_end); \ - (cls_var)++) - -#define TE_CLS_METHODS_INITIALIZER(cls, cls_start, cls_end) do { \ - typeof(cls_start) cls_method; \ - TE_CLASS_FOREACH(cls_method, cls_start, cls_end) { \ - TE_CLASS_ITEM(cls, cls_method, handle) = NULL; \ - } \ -} while (0) - -#define TE_CLASS_FOREACH_CHECK_CHANNEL(cls, cls_start, cls_end, channel) ({ \ - bool ret = false; \ - typeof(cls_start) cls_method; \ - TE_CLASS_FOREACH(cls_method, cls_start, cls_end) { \ - if (TE_CLASS_ITEM(cls, cls_method, handle) != NULL) { \ - ret |= TE_CLASS_ITEM(cls, cls_method, check_channel(channel)); \ - } \ - } \ - ret; \ -}) - -#define TE_CLASS_FOREACH_SET_THRESHOLD(cls, cls_start, cls_end) do { \ - typeof(cls_start) cls_method; \ - TE_CLASS_FOREACH(cls_method, cls_start, cls_end) { \ - if (TE_CLASS_ITEM(cls, cls_method, handle) != NULL) { \ - TE_CLASS_ITEM(cls, cls_method, set_threshold()); \ - } \ - } \ -} while (0) - -#define TE_CLASS_FOREACH_PROCESS_STATE(cls, cls_start, cls_end) do { \ - typeof(cls_start) cls_method; \ - TE_CLASS_FOREACH(cls_method, cls_start, cls_end) { \ - if (TE_CLASS_ITEM(cls, cls_method, handle) != NULL) { \ - TE_CLASS_ITEM(cls, cls_method, process_state()); \ - } \ - } \ -} while (0) - -#define TE_CLASS_FOREACH_UPDATE_STATE(cls, cls_start, cls_end, channel, state) do {\ - typeof(cls_start) cls_method; \ - TE_CLASS_FOREACH(cls_method, cls_start, cls_end) { \ - if (TE_CLASS_ITEM(cls, cls_method, handle) != NULL) { \ - TE_CLASS_ITEM(cls, cls_method, update_state(channel, state)); \ - } \ - } \ -} while (0) - -#define TE_PROCESSING_PERIOD(obj) ((obj)->global_config->software.processing_period) -#define TE_WATERPROOF_DIVIDER(obj) ((obj)->global_config->software.waterproof_threshold_divider) - -typedef enum { - TE_INTR_PRESS = 0, //Touch sensor press interrupt(TOUCH_PAD_INTR_MASK_ACTIVE) - TE_INTR_RELEASE, //Touch sensor release interrupt(TOUCH_PAD_INTR_MASK_INACTIVE) - TE_INTR_TIMEOUT, //Touch sensor scan timeout interrupt(TOUCH_PAD_INTR_MASK_TIMEOUT) - TE_INTR_SCAN_DONE, //Touch sensor scan done interrupt(TOUCH_PAD_INTR_MASK_SCAN_DONE), now just use for setting threshold - TE_INTR_MAX -} te_intr_t; - -typedef struct { - te_intr_t intr_type; //channel interrupt type - te_state_t channel_state; //channel state - touch_pad_t channel_num; //channel index -} te_intr_msg_t; - -typedef struct { - te_object_methods_t object_methods[TE_CLS_TYPE_MAX]; //Class(object) methods - touch_elem_global_config_t *global_config; //Global initialization - te_waterproof_handle_t waterproof_handle; //Waterproof configuration - te_sleep_handle_t sleep_handle; - esp_timer_handle_t proc_timer; //Processing timer handle - QueueHandle_t event_msg_queue; //Application event message queue (for user) - QueueHandle_t intr_msg_queue; //Interrupt message (for internal) - SemaphoreHandle_t mutex; //Global resource mutex - bool is_set_threshold; //Threshold configuration state bit - uint32_t denoise_channel_raw; //De-noise channel(TO) raw signal -} te_obj_t; - -static te_obj_t *s_te_obj = NULL; -RTC_FAST_ATTR uint32_t threshold_shadow[TOUCH_PAD_MAX - 1] = {0}; - -/** - * Internal de-noise channel(Touch channel 0) equivalent capacitance table, depends on hardware design - * - * Units: pF - */ -static const float denoise_channel_equ_cap[TOUCH_PAD_DENOISE_CAP_MAX] = {5.0f, 6.4f, 7.8f, 9.2f, 10.6f, 12.0f, 13.4f, 14.8f}; - -/** - * Waterproof shield channel(Touch channel 14) equivalent capacitance table, depends on hardware design - * - * Units: pF - */ -static const float shield_channel_ref_cap[TOUCH_PAD_SHIELD_DRV_MAX] = {40.0f, 80.0f, 120.0f, 160.0f, 200.0f, 240.0f, 280.0f, 320.0f}; - -/* -------------------------------------------- Internal shared methods --------------------------------------------- */ -/* ------------------------------------------------- */ -/* ------------------------------------------------- System methods ------------------------------------------------- */ -static esp_err_t te_hw_init(const touch_elem_hw_config_t *hardware_init); -static esp_err_t te_sw_init(const touch_elem_sw_config_t *software_init); -static inline float te_get_internal_equ_cap(touch_pad_denoise_cap_t denoise_level); -static float te_channel_get_equ_cap(touch_pad_t channel_num); -static uint32_t te_read_raw_signal(touch_pad_t channel_num); -static void te_intr_cb(void *arg); -static void te_proc_timer_cb(void *arg); -static inline esp_err_t te_object_set_threshold(void); -static inline void te_object_process_state(void); -static inline void te_object_update_state(te_intr_msg_t te_intr_msg); -/* ----------------------------------------------- Waterproof methods ----------------------------------------------- */ -static inline bool waterproof_check_state(void); -static inline bool waterproof_shield_check_state(void); -static inline bool waterproof_guard_check_state(void); -static bool waterproof_channel_check(touch_pad_t channel_num); -static void waterproof_guard_set_threshold(void); -static void waterproof_guard_update_state(touch_pad_t current_channel, te_state_t current_state); -static touch_pad_shield_driver_t waterproof_get_shield_level(touch_pad_t guard_channel_num); -/* ------------------------------------------------------------------------------------------------------------------ */ - -esp_err_t touch_element_install(const touch_elem_global_config_t *global_config) -{ - TE_CHECK(s_te_obj == NULL, ESP_ERR_INVALID_STATE); - TE_CHECK(global_config != NULL, ESP_ERR_INVALID_ARG); - - s_te_obj = (te_obj_t *)calloc(1, sizeof(te_obj_t)); - TE_CHECK(s_te_obj != NULL, ESP_ERR_NO_MEM); - - esp_err_t ret = ESP_ERR_NO_MEM; - s_te_obj->global_config = (touch_elem_global_config_t *)calloc(1, sizeof(touch_elem_global_config_t)); - s_te_obj->mutex = xSemaphoreCreateMutex(); - TE_CHECK_GOTO(s_te_obj->global_config != NULL && s_te_obj->mutex != NULL, cleanup); - xSemaphoreTake(s_te_obj->mutex, portMAX_DELAY); - TE_CLS_METHODS_INITIALIZER(s_te_obj->object_methods, TE_CLS_TYPE_BUTTON, TE_CLS_TYPE_MAX); - ret = te_hw_init(&global_config->hardware); - if (ret != ESP_OK) { - abort(); - } - ret = te_sw_init(&global_config->software); - if (ret != ESP_OK) { - xSemaphoreGive(s_te_obj->mutex); - goto cleanup; - } - xSemaphoreGive(s_te_obj->mutex); - return ESP_OK; - -cleanup: - TE_FREE_AND_NULL(s_te_obj->global_config); - if (s_te_obj->mutex != NULL) { - vSemaphoreDelete(s_te_obj->mutex); - } - TE_FREE_AND_NULL(s_te_obj); - return ret; -} - -esp_err_t touch_element_start(void) -{ - TE_CHECK(s_te_obj != NULL, ESP_ERR_INVALID_STATE); - esp_err_t ret; - uint16_t inited_channel_mask; - do { - xSemaphoreTake(s_te_obj->mutex, portMAX_DELAY); - ret = touch_pad_get_channel_mask(&inited_channel_mask); - if (inited_channel_mask == 0x0) { - ESP_LOGE(TE_TAG, "Can not find Touch Sensor channel that has been initialized"); - ret = ESP_ERR_INVALID_STATE; - break; - } - if (ret != ESP_OK) { - break; - } - s_te_obj->is_set_threshold = false; //Threshold configuration will be set on touch sense start - ret = esp_timer_start_periodic(s_te_obj->proc_timer, TE_PROCESSING_PERIOD(s_te_obj) * 1000); - if (ret != ESP_OK) { - break; - } - ret = touch_pad_intr_enable(TOUCH_PAD_INTR_MASK_SCAN_DONE); //Use scan done interrupt to set threshold - if (ret != ESP_OK) { - break; - } - ret = touch_pad_fsm_start(); - if (ret != ESP_OK) { - break; - } - xQueueReset(s_te_obj->event_msg_queue); - xQueueReset(s_te_obj->intr_msg_queue); - xSemaphoreGive(s_te_obj->mutex); - return ESP_OK; - } while (0); - - ESP_LOGE(TE_TAG, "Touch interface start failed:(%s)", __FUNCTION__ ); - xSemaphoreGive(s_te_obj->mutex); - return ret; -} - -esp_err_t touch_element_stop(void) -{ - TE_CHECK(s_te_obj != NULL, ESP_ERR_INVALID_STATE); - esp_err_t ret; - xSemaphoreTake(s_te_obj->mutex, portMAX_DELAY); - ret = touch_pad_fsm_stop(); - if (ret != ESP_OK) { - return ret; - } - ret = touch_pad_intr_disable(TOUCH_PAD_INTR_MASK_SCAN_DONE); - if (ret != ESP_OK) { - return ret; - } - ret = esp_timer_stop(s_te_obj->proc_timer); - if (ret != ESP_OK) { - return ret; - } - xSemaphoreGive(s_te_obj->mutex); - return ESP_OK; -} - -//TODO: add a new api that output system's run-time state - -void touch_element_uninstall(void) -{ - xSemaphoreTake(s_te_obj->mutex, portMAX_DELAY); - if (s_te_obj == NULL) { - xSemaphoreGive(s_te_obj->mutex); - return; - } - esp_err_t ret; - ret = touch_pad_deinit(); - if (ret != ESP_OK) { - abort(); - } - ret = esp_timer_delete(s_te_obj->proc_timer); - if (ret != ESP_OK) { - abort(); - } - ret = touch_pad_intr_disable(TOUCH_PAD_INTR_MASK_ACTIVE | TOUCH_PAD_INTR_MASK_INACTIVE | TOUCH_PAD_INTR_MASK_TIMEOUT); - if (ret != ESP_OK) { - abort(); - } - ret = touch_pad_isr_deregister(te_intr_cb, NULL); - if (ret != ESP_OK) { - abort(); - } - vQueueDelete(s_te_obj->event_msg_queue); - vQueueDelete(s_te_obj->intr_msg_queue); - xSemaphoreGive(s_te_obj->mutex); - vSemaphoreDelete(s_te_obj->mutex); - free(s_te_obj->global_config); - s_te_obj->global_config = NULL; - free(s_te_obj); - s_te_obj = NULL; -} - -esp_err_t touch_element_message_receive(touch_elem_message_t *element_message, uint32_t ticks_to_wait) -{ - //TODO: Use the generic data struct to refactor this api - TE_CHECK(s_te_obj != NULL, ESP_ERR_INVALID_STATE); - TE_CHECK(element_message != NULL, ESP_ERR_INVALID_ARG); - TE_CHECK(s_te_obj->event_msg_queue != NULL, ESP_ERR_INVALID_STATE); - int ret = xQueueReceive(s_te_obj->event_msg_queue, element_message, ticks_to_wait); - return (ret == pdTRUE) ? ESP_OK : ESP_ERR_TIMEOUT; -} - -static uint32_t te_read_raw_signal(touch_pad_t channel_num) -{ - uint32_t raw_signal = 0; - touch_pad_sleep_channel_t sleep_channel_info; - touch_pad_sleep_channel_get_info(&sleep_channel_info); - if (channel_num != sleep_channel_info.touch_num) { - touch_pad_read_raw_data(channel_num, &raw_signal); - } else { - touch_pad_sleep_channel_read_data(channel_num, &raw_signal); - } - return raw_signal; -} - -uint32_t te_read_smooth_signal(touch_pad_t channel_num) -{ - uint32_t smooth_signal = 0; - touch_pad_sleep_channel_t sleep_channel_info; - touch_pad_sleep_channel_get_info(&sleep_channel_info); - if (channel_num != sleep_channel_info.touch_num) { - touch_pad_filter_read_smooth(channel_num, &smooth_signal); - } else { - touch_pad_sleep_channel_read_smooth(channel_num, &smooth_signal); - } - return smooth_signal; -} - -esp_err_t te_event_give(touch_elem_message_t te_message) -{ - //TODO: add queue overwrite here when the queue is full - int ret = xQueueSend(s_te_obj->event_msg_queue, &te_message, 0); - if (ret != pdTRUE) { - ESP_LOGE(TE_TAG, "event queue send failed, event message queue is full"); - return ESP_ERR_TIMEOUT; - } - return ESP_OK; -} - -uint32_t te_get_threshold(touch_pad_t channel_num) -{ - uint32_t threshold = 0; - touch_pad_sleep_channel_t sleep_channel_info; - touch_pad_sleep_channel_get_info(&sleep_channel_info); - if (channel_num != sleep_channel_info.touch_num) { - touch_pad_get_thresh(channel_num, &threshold); - } else { - touch_pad_sleep_get_threshold(channel_num, &threshold); - } - return threshold; -} - -bool te_is_touch_dsleep_wakeup(void) -{ - soc_reset_reason_t reset_reason = esp_rom_get_reset_reason(0); - if (reset_reason != RESET_REASON_CORE_DEEP_SLEEP) { - return false; - } - return !!(esp_sleep_get_wakeup_causes() & BIT(ESP_SLEEP_WAKEUP_TOUCHPAD)); -} - -touch_pad_t te_get_sleep_channel(void) -{ - touch_pad_sleep_channel_t sleep_channel_info; - touch_pad_sleep_channel_get_info(&sleep_channel_info); - return sleep_channel_info.touch_num; -} - -/** - * @brief Touch sensor interrupt service routine - * - * This function is touch sensor ISR, all the touch - * sensor channel state will be updated here. - */ -static void te_intr_cb(void *arg) -{ - TE_UNUSED(arg); - static int scan_done_cnt = 0; - static uint32_t touch_pre_trig_status = 0; - int task_awoken = pdFALSE; - te_intr_msg_t te_intr_msg = {}; - /*< Figure out which touch sensor channel is triggered and the trigger type */ - uint32_t intr_mask = touch_pad_read_intr_status_mask(); - if (intr_mask == 0x0) { //For dummy interrupt - return; - } - - bool need_send_queue = true; - uint8_t pad_num = 0; - uint32_t touch_trig_status = touch_pad_get_status(); - uint32_t touch_trig_diff = touch_trig_status ^ touch_pre_trig_status; - while (touch_trig_diff) { - if (touch_trig_diff & 0x1) { - if (touch_trig_status & BIT(pad_num)) { - if (s_te_obj->sleep_handle != NULL) { -#ifdef CONFIG_PM_ENABLE - esp_pm_lock_acquire(s_te_obj->sleep_handle->pm_lock); -#endif - } - te_intr_msg.channel_state = TE_STATE_PRESS; - te_intr_msg.intr_type = TE_INTR_PRESS; - } else { - te_intr_msg.channel_state = TE_STATE_RELEASE; - te_intr_msg.intr_type = TE_INTR_RELEASE; - } - touch_pre_trig_status = touch_trig_status; - te_intr_msg.channel_num = pad_num; - } - pad_num++; - touch_trig_diff >>= 1; - } - - if (intr_mask & TOUCH_PAD_INTR_MASK_TIMEOUT) { - te_intr_msg.channel_state = TE_STATE_IDLE; - te_intr_msg.intr_type = TE_INTR_TIMEOUT; - } else if (intr_mask & TOUCH_PAD_INTR_MASK_SCAN_DONE) { - te_intr_msg.channel_state = TE_STATE_IDLE; - te_intr_msg.intr_type = TE_INTR_SCAN_DONE; - need_send_queue = false; - /*< Due to a hardware issue, all of the data read operation(read raw, read smooth, read benchmark) */ - /*< must be after the second times of measure_done interrupt. */ - if (++scan_done_cnt >= 5) { - touch_hal_intr_disable(TOUCH_PAD_INTR_MASK_SCAN_DONE); //TODO: remove hal - scan_done_cnt = 0; - need_send_queue = true; - } - /*< De-noise channel signal must be read at the time between SCAN_DONE and next measurement beginning(sleep)!!! */ - touch_pad_denoise_read_data(&s_te_obj->denoise_channel_raw); //Update de-noise signal - } - if (need_send_queue) { - xQueueSendFromISR(s_te_obj->intr_msg_queue, &te_intr_msg, &task_awoken); - } - if (task_awoken == pdTRUE) { - portYIELD_FROM_ISR(); - } -} - -/** - * @brief esp-timer callback routine - * - * This function is an esp-timer daemon routine, all the touch sensor - * application(button, slider, etc...) will be processed in here. - * - */ -static void te_proc_timer_cb(void *arg) -{ - TE_UNUSED(arg); - te_intr_msg_t te_intr_msg; - te_intr_msg.intr_type = TE_INTR_MAX; - BaseType_t ret = xSemaphoreTake(s_te_obj->mutex, 0); - if (ret != pdPASS) { - return; - } - ret = xQueueReceive(s_te_obj->intr_msg_queue, &te_intr_msg, 0); - if (ret == pdPASS) { - if (te_intr_msg.intr_type == TE_INTR_PRESS || te_intr_msg.intr_type == TE_INTR_RELEASE) { - te_object_update_state(te_intr_msg); - if ((s_te_obj->sleep_handle != NULL) && (te_intr_msg.intr_type == TE_INTR_RELEASE)) { -#ifdef CONFIG_PM_ENABLE - esp_pm_lock_release(s_te_obj->sleep_handle->pm_lock); -#endif - } - } else if (te_intr_msg.intr_type == TE_INTR_SCAN_DONE) { - if (s_te_obj->is_set_threshold != true) { - s_te_obj->is_set_threshold = true; - te_object_set_threshold(); //TODO: add set threshold error processing - ESP_LOGD(TE_DEBUG_TAG, "Set threshold"); - if (s_te_obj->sleep_handle != NULL) { -#ifdef CONFIG_PM_ENABLE - esp_pm_lock_release(s_te_obj->sleep_handle->pm_lock); -#endif - } - } - if (waterproof_check_state()) { - te_waterproof_handle_t waterproof_handle = s_te_obj->waterproof_handle; - if (waterproof_handle->is_shield_level_set != true) { - waterproof_handle->is_shield_level_set = true; - touch_pad_waterproof_t wp_conf; - wp_conf.shield_driver = waterproof_get_shield_level(waterproof_handle->shield_channel); - wp_conf.guard_ring_pad = (waterproof_guard_check_state() ? waterproof_handle->guard_device->channel : TOUCH_WATERPROOF_GUARD_NOUSE); - touch_pad_waterproof_set_config(&wp_conf); - touch_pad_waterproof_enable(); - ESP_LOGD(TE_DEBUG_TAG, "Set waterproof shield level"); - } - } - ESP_LOGD(TE_DEBUG_TAG, "read denoise channel %"PRIu32, s_te_obj->denoise_channel_raw); - } else if (te_intr_msg.intr_type == TE_INTR_TIMEOUT) { //Timeout processing - touch_pad_timeout_resume(); - } - } - te_object_process_state(); - xSemaphoreGive(s_te_obj->mutex); -} - -void te_object_method_register(te_object_methods_t *object_methods, te_class_type_t object_type) -{ - xSemaphoreTake(s_te_obj->mutex, portMAX_DELAY); - TE_CLASS_ITEM(s_te_obj->object_methods, object_type, handle) = object_methods->handle; - TE_CLASS_ITEM(s_te_obj->object_methods, object_type, check_channel) = object_methods->check_channel; - TE_CLASS_ITEM(s_te_obj->object_methods, object_type, set_threshold) = object_methods->set_threshold; - TE_CLASS_ITEM(s_te_obj->object_methods, object_type, process_state) = object_methods->process_state; - TE_CLASS_ITEM(s_te_obj->object_methods, object_type, update_state) = object_methods->update_state; - xSemaphoreGive(s_te_obj->mutex); -} - -void te_object_method_unregister(te_class_type_t object_type) -{ - xSemaphoreTake(s_te_obj->mutex, portMAX_DELAY); - TE_CLASS_ITEM(s_te_obj->object_methods, object_type, handle) = NULL; - TE_CLASS_ITEM(s_te_obj->object_methods, object_type, check_channel) = NULL; - TE_CLASS_ITEM(s_te_obj->object_methods, object_type, set_threshold) = NULL; - TE_CLASS_ITEM(s_te_obj->object_methods, object_type, process_state) = NULL; - TE_CLASS_ITEM(s_te_obj->object_methods, object_type, update_state) = NULL; - xSemaphoreGive(s_te_obj->mutex); -} - -/** - * @brief Touch Sense channel check - * - * This function will check the input channel whether is - * associated with the Touch Sense Object - * - * @return - * - true: Channel has been initialized, pls adjust the input channel - * - false: Channel has not been initialized, pass - */ -bool te_object_check_channel(const touch_pad_t *channel_array, uint8_t channel_sum) -{ - touch_pad_t current_channel; - for (int idx = 0; idx < channel_sum; idx++) { - current_channel = channel_array[idx]; - if (waterproof_channel_check(current_channel)) { - goto INITIALIZED; - } - if (TE_CLASS_FOREACH_CHECK_CHANNEL(s_te_obj->object_methods, TE_CLS_TYPE_BUTTON, TE_CLS_TYPE_MAX, current_channel)) { - goto INITIALIZED; - } - } - return false; - -INITIALIZED: - ESP_LOGE(TE_TAG, "Current channel [%d] has been initialized:(%s)", current_channel, __FUNCTION__ ); - return true; -} - - -static inline esp_err_t te_object_set_threshold(void) -{ - if (waterproof_guard_check_state() == true) { //TODO: add to object methods - waterproof_guard_set_threshold(); - } - - TE_CLASS_FOREACH_SET_THRESHOLD(s_te_obj->object_methods, TE_CLS_TYPE_BUTTON, TE_CLS_TYPE_MAX); - return ESP_OK; -} - -static inline void te_object_process_state(void) -{ - TE_CLASS_FOREACH_PROCESS_STATE(s_te_obj->object_methods, TE_CLS_TYPE_BUTTON, TE_CLS_TYPE_MAX); -} - -static inline void te_object_update_state(te_intr_msg_t te_intr_msg) -{ - if (waterproof_guard_check_state()) { - waterproof_guard_update_state(te_intr_msg.channel_num, te_intr_msg.channel_state); - } - TE_CLASS_FOREACH_UPDATE_STATE(s_te_obj->object_methods, TE_CLS_TYPE_BUTTON, TE_CLS_TYPE_MAX, - te_intr_msg.channel_num, te_intr_msg.channel_state); -} - -uint8_t te_get_timer_period(void) -{ - return (TE_PROCESSING_PERIOD(s_te_obj)); -} - -esp_err_t te_dev_init(te_dev_t **device, uint8_t device_num, te_dev_type_t type, const touch_pad_t *channel, const float *sens, float divider) -{ - for (int idx = 0; idx < device_num; idx++) { - device[idx]->channel = channel[idx]; - device[idx]->sens = sens[idx] * divider; - device[idx]->type = type; - device[idx]->state = TE_STATE_IDLE; - device[idx]->is_use_last_threshold = false; - esp_err_t ret = touch_pad_config(device[idx]->channel); - TE_CHECK(ret == ESP_OK, ret); - } - return ESP_OK; -} - -void te_dev_deinit(te_dev_t **device, uint8_t device_num) -{ - for (int idx = 0; idx < device_num; idx++) { - touch_pad_clear_channel_mask((1UL << device[idx]->channel)); - } -} - -static esp_err_t te_config_thresh(touch_pad_t channel_num, uint32_t threshold) -{ - esp_err_t ret; - touch_pad_sleep_channel_t sleep_channel_info; - touch_pad_sleep_channel_get_info(&sleep_channel_info); - if (channel_num != sleep_channel_info.touch_num) { - ret = touch_pad_set_thresh(channel_num, threshold); - } else { - ret = touch_pad_sleep_set_threshold(channel_num, threshold); - } - return ret; -} - -esp_err_t te_dev_set_threshold(te_dev_t *device) -{ - esp_err_t ret = ESP_OK; - uint32_t smo_val = 0; - - if (s_te_obj->sleep_handle && device->is_use_last_threshold) { - if (te_is_touch_dsleep_wakeup()) { //Deep sleep wakeup reset - ret = te_config_thresh(device->channel, s_te_obj->sleep_handle->non_volatile_threshold[device->channel - 1]); - } else { //Other reset - smo_val = te_read_smooth_signal(device->channel); - ret = te_config_thresh(device->channel, device->sens * smo_val); - uint32_t threshold = te_get_threshold(device->channel); - s_te_obj->sleep_handle->non_volatile_threshold[device->channel - 1] = threshold; //Write threshold into RTC Fast Memory - } - } else { - smo_val = te_read_smooth_signal(device->channel); - ret = te_config_thresh(device->channel, device->sens * smo_val); - } - ESP_LOGD(TE_DEBUG_TAG, "channel: %"PRIu8", smo_val: %"PRIu32, (uint8_t)device->channel, smo_val); - return ret; -} - -/** - * This function returns the s_te_obj whether is initialized - * - * @return - * - true: initialized - * - false: not initialized - */ -bool te_system_check_state(void) -{ - return (s_te_obj != NULL); -} - -static inline float te_get_internal_equ_cap(touch_pad_denoise_cap_t denoise_level) -{ - return denoise_channel_equ_cap[denoise_level]; -} - -/** - * @brief Get channel equivalent capacitance - * - * This function calculates the equivalent capacitance of input channel by - * using the Touch channel 0 equivalent capacitance. The formula is: - * - * Raw_N / Raw_0 = Cap_N / Cap_0 - * - * Note that Raw_N and Raw_0 are the raw data of touch channel N and touch channel 0 respectively, - * Cap_N and Cap_0 are the equivalent capacitance of touch channel N and touch channel 0. - * - * @param[in] channel_num Input touch sensor channel - * - * @note The unit is pF - * - * @return Specified channel equivalent capacitance. - */ -static float te_channel_get_equ_cap(touch_pad_t channel_num) -{ - //Fixme: add a mutex in here and prevent the system call this function - TE_CHECK(channel_num > TOUCH_PAD_NUM0 && channel_num < TOUCH_PAD_MAX, 0); - uint32_t tn_raw, t0_raw; - float tn_ref_cap, t0_ref_cap; - touch_pad_denoise_t denoise_channel_conf; - touch_pad_denoise_get_config(&denoise_channel_conf); - tn_raw = te_read_raw_signal(channel_num); - t0_raw = s_te_obj->denoise_channel_raw; - t0_ref_cap = te_get_internal_equ_cap(denoise_channel_conf.cap_level); - if (t0_raw == 0) { - return 0; - } - tn_ref_cap = (float)tn_raw / t0_raw * t0_ref_cap; - return tn_ref_cap; -} - -/** - * @brief Touch sensor driver default init [ESP32S2 only] - * - * 1. Channel measure time: Raw_value / RTC_FAST_CLK ==> Raw_value / 8000 000 - * 2. Channel sleep time: TOUCH_PAD_SLEEP_CYCLE_DEFAULT / RTC_SLOW_CLK ==> 0xf / 90 000(default) = 0.16ms - * 3. Channel charge voltage threshold(upper/lower): 2.7V upper voltage, 0.5V lower voltage, 0.5V attenuation voltage - * 4. IDLE channel processing: Connecting to GND - * 5. Interrupt type: ACTIVE, INACTIVE, TIMEOUT - * - * @note A touch sensor channel will spend the time = measure time + sleep time, RTC_FAST_CLK is 8M - * - */ -static esp_err_t te_hw_init(const touch_elem_hw_config_t *hardware_init) -{ - esp_err_t ret; - ret = touch_pad_init(); - TE_CHECK(ret == ESP_OK, ret); - ret = touch_pad_set_fsm_mode(TOUCH_FSM_MODE_TIMER); - TE_CHECK(ret == ESP_OK, ret); - ret = touch_pad_set_measurement_interval(hardware_init->sleep_cycle); - TE_CHECK(ret == ESP_OK, ret); - ret = touch_pad_set_charge_discharge_times(hardware_init->sample_count); - TE_CHECK(ret == ESP_OK, ret); - ret = touch_pad_set_voltage(hardware_init->upper_voltage, hardware_init->lower_voltage, - hardware_init->voltage_attenuation); - TE_CHECK(ret == ESP_OK, ret); - ret = touch_pad_set_idle_channel_connect(hardware_init->suspend_channel_polarity); - TE_CHECK(ret == ESP_OK, ret); - ret = touch_pad_isr_register(te_intr_cb, NULL, - TOUCH_PAD_INTR_MASK_ACTIVE | TOUCH_PAD_INTR_MASK_INACTIVE | - TOUCH_PAD_INTR_MASK_TIMEOUT | TOUCH_PAD_INTR_MASK_SCAN_DONE); - TE_CHECK(ret == ESP_OK, ret); - ret = touch_pad_intr_enable(TOUCH_PAD_INTR_MASK_ACTIVE | - TOUCH_PAD_INTR_MASK_INACTIVE | TOUCH_PAD_INTR_MASK_TIMEOUT); - TE_CHECK(ret == ESP_OK, ret); - - /*< Internal de-noise configuration */ - touch_pad_denoise_t denoise_config; - denoise_config.grade = hardware_init->denoise_level; - denoise_config.cap_level = hardware_init->denoise_equivalent_cap; - ret = touch_pad_denoise_set_config(&denoise_config); - TE_CHECK(ret == ESP_OK, ret); - ret = touch_pad_denoise_enable(); - TE_CHECK(ret == ESP_OK, ret); - - /*< benchmark filter configuration */ - touch_filter_config_t filter_config; - filter_config.smh_lvl = hardware_init->smooth_filter_mode; - filter_config.mode = hardware_init->benchmark_filter_mode; - filter_config.debounce_cnt = hardware_init->benchmark_debounce_count; - filter_config.noise_thr = hardware_init->benchmark_calibration_threshold; - filter_config.jitter_step = hardware_init->benchmark_jitter_step; - ret = touch_pad_filter_set_config(&filter_config); - TE_CHECK(ret == ESP_OK, ret); - ret = touch_pad_filter_enable(); - TE_CHECK(ret == ESP_OK, ret); - memcpy(&s_te_obj->global_config->hardware, hardware_init, sizeof(touch_elem_hw_config_t)); - return ESP_OK; -} - -static esp_err_t te_sw_init(const touch_elem_sw_config_t *software_init) -{ - TE_CHECK(software_init->processing_period > 1, ESP_ERR_INVALID_ARG); - TE_CHECK(software_init->waterproof_threshold_divider > 0, ESP_ERR_INVALID_ARG); - TE_CHECK(software_init->intr_message_size >= (TOUCH_PAD_MAX - 1), ESP_ERR_INVALID_ARG); - TE_CHECK(software_init->event_message_size > 0, ESP_ERR_INVALID_ARG); - - esp_err_t ret = ESP_ERR_NO_MEM; - s_te_obj->intr_msg_queue = xQueueCreate(software_init->intr_message_size, sizeof(te_intr_msg_t)); - s_te_obj->event_msg_queue = xQueueCreate(software_init->event_message_size, sizeof(touch_elem_message_t)); - TE_CHECK_GOTO(s_te_obj->event_msg_queue != NULL && s_te_obj->intr_msg_queue != NULL, cleanup); - - const esp_timer_create_args_t te_proc_timer_args = { - .name = "te_proc_timer_cb", - .arg = NULL, - .callback = &te_proc_timer_cb, - .skip_unhandled_events = true, - }; - ret = esp_timer_create(&te_proc_timer_args, &s_te_obj->proc_timer); - TE_CHECK_GOTO(ret == ESP_OK, cleanup); - memcpy(&s_te_obj->global_config->software, software_init, sizeof(touch_elem_sw_config_t)); - return ret; - -cleanup: - if (s_te_obj->event_msg_queue != NULL) { - vQueueDelete(s_te_obj->event_msg_queue); - } - if (s_te_obj->intr_msg_queue != NULL) { - vQueueDelete(s_te_obj->intr_msg_queue); - } - return ret; -} - -//TODO: add waterproof guard-lock hysteresis -esp_err_t touch_element_waterproof_install(const touch_elem_waterproof_config_t *waterproof_config) -{ - TE_CHECK(s_te_obj != NULL, ESP_ERR_INVALID_STATE); - TE_CHECK(waterproof_config != NULL, ESP_ERR_INVALID_ARG); - TE_CHECK(waterproof_config->guard_channel >= TOUCH_PAD_NUM0 && - waterproof_config->guard_channel < TOUCH_PAD_MAX, - ESP_ERR_INVALID_ARG); - te_waterproof_handle_t waterproof_handle = (te_waterproof_handle_t)calloc(1, sizeof(struct te_waterproof_s)); - TE_CHECK(waterproof_handle != NULL, ESP_ERR_NO_MEM); - waterproof_handle->shield_channel = TOUCH_PAD_NUM14; - - esp_err_t ret; - if (waterproof_config->guard_channel != TOUCH_WATERPROOF_GUARD_NOUSE) { //Use guard sensor - if (te_object_check_channel(&waterproof_config->guard_channel, 1)) { - ret = ESP_ERR_INVALID_ARG; - goto cleanup; - } - ret = ESP_ERR_NO_MEM; - waterproof_handle->mask_handle = (touch_elem_handle_t *) calloc(TOUCH_PAD_MAX, sizeof(touch_elem_handle_t)); - waterproof_handle->guard_device = (te_dev_t *)calloc(1, sizeof(te_dev_t)); - TE_CHECK_GOTO(waterproof_handle->mask_handle != NULL && waterproof_handle->guard_device, cleanup); - - ret = te_dev_init(&waterproof_handle->guard_device, 1, TOUCH_ELEM_TYPE_BUTTON, - &waterproof_config->guard_channel, &waterproof_config->guard_sensitivity, - TE_WATERPROOF_DIVIDER(s_te_obj)); - TE_CHECK_GOTO(ret == ESP_OK, cleanup); - waterproof_handle->guard_device->state = TE_STATE_RELEASE; - for (int idx = 0; idx < TOUCH_PAD_MAX; idx++) { - waterproof_handle->mask_handle[idx] = NULL; - } - } else { //No use waterproof guard sensor - waterproof_handle->guard_device = NULL; - waterproof_handle->mask_handle = NULL; - } - waterproof_handle->is_shield_level_set = 0; //Set a state bit so as to configure the shield level at the run-time - touch_pad_waterproof_t wp_conf; - wp_conf.shield_driver = TOUCH_PAD_SHIELD_DRV_L0; //Set a default shield level - wp_conf.guard_ring_pad = waterproof_config->guard_channel; - ret = touch_pad_waterproof_set_config(&wp_conf); - TE_CHECK_GOTO(ret == ESP_OK, cleanup); - ret = touch_pad_waterproof_enable(); - TE_CHECK_GOTO(ret == ESP_OK, cleanup); - s_te_obj->waterproof_handle = waterproof_handle; //Fixme: add mutex - return ESP_OK; - -cleanup: - TE_FREE_AND_NULL(waterproof_handle->mask_handle); - TE_FREE_AND_NULL(waterproof_handle->guard_device); - TE_FREE_AND_NULL(waterproof_handle); - return ret; -} - -esp_err_t touch_element_waterproof_add(touch_elem_handle_t element_handle) -{ - TE_CHECK(s_te_obj->waterproof_handle != NULL, ESP_ERR_INVALID_STATE); - TE_CHECK(s_te_obj->waterproof_handle->guard_device != NULL, ESP_ERR_INVALID_STATE); - TE_CHECK(element_handle != NULL, ESP_ERR_INVALID_ARG); - te_waterproof_handle_t waterproof_handle = s_te_obj->waterproof_handle; - xSemaphoreTake(s_te_obj->mutex, portMAX_DELAY); - for (int idx = 0; idx < TOUCH_PAD_MAX; idx++) { - if (waterproof_handle->mask_handle[idx] == NULL) { - waterproof_handle->mask_handle[idx] = element_handle; - break; - } - } - xSemaphoreGive(s_te_obj->mutex); - return ESP_OK; -} - -esp_err_t touch_element_waterproof_remove(touch_elem_handle_t element_handle) -{ - TE_CHECK(s_te_obj->waterproof_handle != NULL, ESP_ERR_INVALID_STATE); - TE_CHECK(element_handle != NULL, ESP_ERR_INVALID_ARG); - esp_err_t ret = ESP_ERR_NOT_FOUND; - te_waterproof_handle_t waterproof_handle = s_te_obj->waterproof_handle; - xSemaphoreTake(s_te_obj->mutex, portMAX_DELAY); - for (int idx = 0; idx < TOUCH_PAD_MAX; idx++) { - if (waterproof_handle->mask_handle[idx] == element_handle) { - waterproof_handle->mask_handle[idx] = NULL; - ret = ESP_OK; - break; - } - } - xSemaphoreGive(s_te_obj->mutex); - return ret; -} - -void touch_element_waterproof_uninstall(void) -{ - xSemaphoreTake(s_te_obj->mutex, portMAX_DELAY); - touch_pad_waterproof_disable(); - free(s_te_obj->waterproof_handle->guard_device); - free(s_te_obj->waterproof_handle->mask_handle); - free(s_te_obj->waterproof_handle); - s_te_obj->waterproof_handle = NULL; - xSemaphoreGive(s_te_obj->mutex); -} - -static touch_pad_shield_driver_t waterproof_get_shield_level(touch_pad_t guard_channel_num) -{ - touch_pad_shield_driver_t shield_level = TOUCH_PAD_SHIELD_DRV_L7; - float guard_ref_cap = te_channel_get_equ_cap(guard_channel_num); - for (int level = 0; level < TOUCH_PAD_SHIELD_DRV_MAX; level++) { - if (guard_ref_cap <= shield_channel_ref_cap[level]) { - shield_level = (touch_pad_shield_driver_t)level; - break; - } - } - return shield_level; -} - -/** - * This function returns the waterproof_handle whether is initialized - * - * @return - * - true: initialized - * - false: not initialized - */ -static inline bool waterproof_check_state(void) -{ - return (s_te_obj->waterproof_handle != NULL); -} - -static inline bool waterproof_shield_check_state(void) -{ - return waterproof_check_state(); //Driver does not allow to disable shield sensor after waterproof enabling -} - -static inline bool waterproof_guard_check_state(void) -{ - if (waterproof_check_state() == false) { - return false; - } - if (s_te_obj->waterproof_handle->guard_device == NULL || s_te_obj->waterproof_handle->mask_handle == NULL) { - return false; - } - return true; -} - -static bool waterproof_channel_check(touch_pad_t channel_num) -{ - if (waterproof_check_state() == false) { - return false; - } - te_waterproof_handle_t waterproof_handle = s_te_obj->waterproof_handle; - if (waterproof_shield_check_state()) { - if (channel_num == waterproof_handle->shield_channel) { - ESP_LOGE(TE_TAG, "TOUCH_PAD_NUM%"PRIu8" has been used for waterproof shield channel," - " please change the touch sensor channel or disable waterproof", (uint8_t)channel_num); - return true; - } - } - if (waterproof_guard_check_state()) { - if (channel_num == waterproof_handle->guard_device->channel) { - ESP_LOGE(TE_TAG, "TOUCH_PAD_NUM%"PRIu8" has been used for waterproof guard channel," - " please change the touch sensor channel or disable waterproof", (uint8_t)channel_num); - return true; - } - } - return false; -} - -static void waterproof_guard_set_threshold(void) -{ - if (waterproof_check_state() == false) { - return; - } - if (waterproof_guard_check_state() == false) { - return; - } - te_dev_set_threshold(s_te_obj->waterproof_handle->guard_device); -} - -/** - * This function will figure out current handle whether is a masked channel - * while guard channel is triggered. - * - * @param[in] te_handle Touch sensor application handle - * @return - * - true current handle is a masked channel - * - false current handle is not a masked channel - */ -bool waterproof_check_mask_handle(touch_elem_handle_t te_handle) -{ - if (waterproof_check_state() == false) { - return false; - } - if (waterproof_guard_check_state() == false) { - return false; - } - te_waterproof_handle_t waterproof_handle = s_te_obj->waterproof_handle; - bool ret = false; - if (waterproof_handle->guard_device->state == TE_STATE_PRESS) { - for (int idx = 0; idx < TOUCH_PAD_MAX; idx++) { - if (waterproof_handle->mask_handle[idx] == NULL) { - break; - } - if (waterproof_handle->mask_handle[idx] == te_handle) { - ret = true; - } - } - } - return ret; -} - -static void waterproof_guard_update_state(touch_pad_t current_channel, te_state_t current_state) -{ - te_dev_t *guard_device = s_te_obj->waterproof_handle->guard_device; - if (current_channel == guard_device->channel) { - guard_device->state = current_state; - } - ESP_LOGD(TE_DEBUG_TAG, "waterproof guard state update %d", guard_device->state); -} - -esp_err_t touch_element_enable_light_sleep(const touch_elem_sleep_config_t *sleep_config) -{ - TE_CHECK(s_te_obj != NULL, ESP_ERR_INVALID_STATE); - TE_CHECK(s_te_obj->sleep_handle == NULL, ESP_ERR_INVALID_STATE); - uint16_t sample_count = 500; - uint16_t sleep_cycle = 0x0f; - if (sleep_config) { - sample_count = sleep_config->sample_count; - sleep_cycle = sleep_config->sleep_cycle; - } - - s_te_obj->sleep_handle = calloc(1, sizeof(struct te_sleep_s)); - TE_CHECK(s_te_obj->sleep_handle, ESP_ERR_NO_MEM); - - esp_err_t ret = ESP_OK; - touch_pad_sleep_channel_set_work_time(sleep_cycle, sample_count); - TE_CHECK_GOTO(esp_sleep_enable_touchpad_wakeup() == ESP_OK, cleanup); - - TE_CHECK_GOTO(esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_ON) == ESP_OK, cleanup); - s_te_obj->sleep_handle->non_volatile_threshold = threshold_shadow; - -#ifdef CONFIG_PM_ENABLE - TE_CHECK_GOTO(esp_pm_lock_create(ESP_PM_NO_LIGHT_SLEEP, 0, "touch_element", &s_te_obj->sleep_handle->pm_lock) == ESP_OK, cleanup); - TE_CHECK_GOTO(esp_pm_lock_acquire(s_te_obj->sleep_handle->pm_lock) == ESP_OK, cleanup); -#endif - - return ESP_OK; - -cleanup: -#ifdef CONFIG_PM_ENABLE - if (s_te_obj->sleep_handle->pm_lock != NULL) { - if (esp_pm_lock_delete(s_te_obj->sleep_handle->pm_lock) != ESP_OK) { - abort(); - } - } -#endif - TE_FREE_AND_NULL(s_te_obj->sleep_handle); - return ret; -} - -esp_err_t touch_element_disable_light_sleep(void) -{ - TE_CHECK(s_te_obj->sleep_handle, ESP_ERR_INVALID_STATE); -#ifdef CONFIG_PM_ENABLE - if (s_te_obj->sleep_handle->pm_lock != NULL) { - /* Sleep channel is going to uninstall, pm lock is not needed anymore, - but we need to make sure that pm lock has been released before delete it. */ - while(esp_pm_lock_release(s_te_obj->sleep_handle->pm_lock) == ESP_OK); - esp_err_t ret = esp_pm_lock_delete(s_te_obj->sleep_handle->pm_lock); - TE_CHECK(ret == ESP_OK, ret); - s_te_obj->sleep_handle->pm_lock = NULL; - } -#endif - esp_sleep_disable_wakeup_source(ESP_SLEEP_WAKEUP_TOUCHPAD); - TE_FREE_AND_NULL(s_te_obj->sleep_handle); - return ESP_OK; -} - -esp_err_t touch_element_enable_deep_sleep(touch_elem_handle_t wakeup_elem_handle, const touch_elem_sleep_config_t *sleep_config) -{ - TE_CHECK(s_te_obj != NULL, ESP_ERR_INVALID_STATE); - TE_CHECK(s_te_obj->sleep_handle == NULL, ESP_ERR_INVALID_STATE); - TE_CHECK(wakeup_elem_handle != NULL, ESP_ERR_INVALID_ARG); - TE_CHECK(sleep_config != NULL, ESP_ERR_INVALID_ARG); - uint16_t sample_count = 500; - uint16_t sleep_cycle = 0x0f; - if (sleep_config) { - sample_count = sleep_config->sample_count; - sleep_cycle = sleep_config->sleep_cycle; - } - - s_te_obj->sleep_handle = calloc(1, sizeof(struct te_sleep_s)); - TE_CHECK(s_te_obj->sleep_handle, ESP_ERR_NO_MEM); - - esp_err_t ret = ESP_OK; - touch_pad_sleep_channel_set_work_time(sleep_cycle, sample_count); - TE_CHECK_GOTO(esp_sleep_enable_touchpad_wakeup() == ESP_OK, cleanup); - - TE_CHECK_GOTO(esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_ON) == ESP_OK, cleanup); - s_te_obj->sleep_handle->non_volatile_threshold = threshold_shadow; - -#ifdef CONFIG_PM_ENABLE - TE_CHECK_GOTO(esp_pm_lock_create(ESP_PM_NO_LIGHT_SLEEP, 0, "touch_element", &s_te_obj->sleep_handle->pm_lock) == ESP_OK, cleanup); - TE_CHECK_GOTO(esp_pm_lock_acquire(s_te_obj->sleep_handle->pm_lock) == ESP_OK, cleanup); -#endif - //Only support one channel/element as the deep sleep wakeup channel/element - TE_CHECK(is_button_object_handle(wakeup_elem_handle), ESP_ERR_NOT_SUPPORTED); - s_te_obj->sleep_handle->wakeup_handle = wakeup_elem_handle; - te_button_handle_t button_handle = wakeup_elem_handle; - ret = touch_pad_sleep_channel_enable(button_handle->device->channel, true); - TE_CHECK(ret == ESP_OK, ret); - - return ESP_OK; - -cleanup: -#ifdef CONFIG_PM_ENABLE - if (s_te_obj->sleep_handle->pm_lock != NULL) { - if (esp_pm_lock_delete(s_te_obj->sleep_handle->pm_lock) != ESP_OK) { - abort(); - } - } -#endif - TE_FREE_AND_NULL(s_te_obj->sleep_handle); - return ret; -} - -esp_err_t touch_element_disable_deep_sleep(void) -{ - TE_CHECK(s_te_obj->sleep_handle, ESP_ERR_INVALID_STATE); - esp_err_t ret; -#ifdef CONFIG_PM_ENABLE - if (s_te_obj->sleep_handle->pm_lock != NULL) { - /* Sleep channel is going to uninstall, pm lock is not needed anymore, - but we need to make sure that pm lock has been released before delete it. */ - while(esp_pm_lock_release(s_te_obj->sleep_handle->pm_lock) == ESP_OK); - ret = esp_pm_lock_delete(s_te_obj->sleep_handle->pm_lock); - TE_CHECK(ret == ESP_OK, ret); - s_te_obj->sleep_handle->pm_lock = NULL; - } -#endif - te_button_handle_t button_handle = s_te_obj->sleep_handle->wakeup_handle; - ret = touch_pad_sleep_channel_enable(button_handle->device->channel, false); - TE_CHECK(ret == ESP_OK, ret); - esp_sleep_disable_wakeup_source(ESP_SLEEP_WAKEUP_TOUCHPAD); - s_te_obj->sleep_handle->wakeup_handle = NULL; - TE_FREE_AND_NULL(s_te_obj->sleep_handle); - return ESP_OK; -} - -esp_err_t touch_element_sleep_enable_wakeup_calibration(touch_elem_handle_t element_handle, bool en) -{ - TE_CHECK(element_handle != NULL, ESP_ERR_INVALID_ARG); - if (is_button_object_handle(element_handle)) { - button_enable_wakeup_calibration(element_handle, en); - } else if (is_slider_object_handle(element_handle)) { - slider_enable_wakeup_calibration(element_handle, en); - } else if (is_matrix_object_handle(element_handle)) { - matrix_enable_wakeup_calibration(element_handle, en); - } else { - return ESP_ERR_NOT_FOUND; - } - return ESP_OK; -} diff --git a/components/touch_element/touch_matrix.c b/components/touch_element/touch_matrix.c deleted file mode 100644 index 1bc554834e..0000000000 --- a/components/touch_element/touch_matrix.c +++ /dev/null @@ -1,647 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD - * - * SPDX-License-Identifier: Apache-2.0 - */ - -#include -#include -#include -#include "freertos/FreeRTOS.h" -#include "freertos/semphr.h" -#include "esp_log.h" -#include "touch_element/touch_element_private.h" - -#define TE_MAT_POS_MAX (0xff) //!< Matrix button startup position - -typedef struct te_matrix_handle_list { - te_matrix_handle_t matrix_handle; //Matrix handle - SLIST_ENTRY(te_matrix_handle_list) next; //Matrix handle list entry -} te_matrix_handle_list_t; - -typedef struct { - SLIST_HEAD(te_matrix_handle_list_head, te_matrix_handle_list) handle_list; //Matrix handle (instance) list - touch_matrix_global_config_t *global_config; //Matrix global configuration - SemaphoreHandle_t mutex; //Matrix object mutex -} te_matrix_obj_t; - -te_matrix_obj_t *s_te_mat_obj = NULL; -/* ---------------------------------------- Matrix handle(instance) methods ----------------------------------------- */ -static bool matrix_channel_check(te_matrix_handle_t matrix_handle, touch_pad_t channel_num); -static esp_err_t matrix_set_threshold(te_matrix_handle_t matrix_handle); -static inline te_state_t matrix_get_state(te_matrix_state_t x_axis_state, te_matrix_state_t y_axis_state); -static void matrix_reset_state(te_matrix_handle_t matrix_handle); -static void matrix_update_state(te_matrix_handle_t matrix_handle, touch_pad_t channel_num, te_state_t channel_state); -static void matrix_update_position(te_matrix_handle_t matrix_handle, touch_matrix_position_t new_pos); -static void matrix_proc_state(te_matrix_handle_t matrix_handle); -static void matrix_event_give(te_matrix_handle_t matrix_handle); -static inline void matrix_dispatch(te_matrix_handle_t matrix_handle, touch_elem_dispatch_t dispatch_method); -/* ------------------------------------------ Matrix object(class) methods ------------------------------------------ */ -static esp_err_t matrix_object_add_instance(te_matrix_handle_t matrix_handle); -static esp_err_t matrix_object_remove_instance(te_matrix_handle_t matrix_handle); -static bool matrix_object_check_channel(touch_pad_t channel_num); -static esp_err_t matrix_object_set_threshold(void); -static void matrix_object_process_state(void); -static void matrix_object_update_state(touch_pad_t channel_num, te_state_t channel_state); -/* ------------------------------------------------------------------------------------------------------------------ */ - -esp_err_t touch_matrix_install(const touch_matrix_global_config_t *global_config) -{ - TE_CHECK(te_system_check_state() == true, ESP_ERR_INVALID_STATE); - TE_CHECK(global_config != NULL, ESP_ERR_INVALID_ARG); - - //Fixme: Make it thread-safe - s_te_mat_obj = (te_matrix_obj_t *)calloc(1, sizeof(te_matrix_obj_t)); - TE_CHECK(s_te_mat_obj != NULL, ESP_ERR_NO_MEM); - s_te_mat_obj->global_config = (touch_matrix_global_config_t *)calloc(1, sizeof(touch_matrix_global_config_t)); - s_te_mat_obj->mutex = xSemaphoreCreateMutex(); - TE_CHECK_GOTO(s_te_mat_obj->global_config != NULL && s_te_mat_obj->mutex != NULL, cleanup); - xSemaphoreTake(s_te_mat_obj->mutex, portMAX_DELAY); - SLIST_INIT(&s_te_mat_obj->handle_list); - memcpy(s_te_mat_obj->global_config, global_config, sizeof(touch_matrix_global_config_t)); - te_object_methods_t matrix_methods = { - .handle = s_te_mat_obj, - .check_channel = matrix_object_check_channel, - .set_threshold = matrix_object_set_threshold, - .process_state = matrix_object_process_state, - .update_state = matrix_object_update_state - }; - te_object_method_register(&matrix_methods, TE_CLS_TYPE_MATRIX); - xSemaphoreGive(s_te_mat_obj->mutex); - return ESP_OK; - -cleanup: - TE_FREE_AND_NULL(s_te_mat_obj->global_config); - if (s_te_mat_obj->mutex != NULL) { - vSemaphoreDelete(s_te_mat_obj->mutex); - } - TE_FREE_AND_NULL(s_te_mat_obj); - return ESP_ERR_NO_MEM; -} - -void touch_matrix_uninstall(void) -{ - xSemaphoreTake(s_te_mat_obj->mutex, portMAX_DELAY); - if (s_te_mat_obj == NULL) { - xSemaphoreGive(s_te_mat_obj->mutex); - return; - } - te_object_method_unregister(TE_CLS_TYPE_MATRIX); - free(s_te_mat_obj->global_config); - s_te_mat_obj->global_config = NULL; - while (!SLIST_EMPTY(&s_te_mat_obj->handle_list)) { - SLIST_FIRST(&s_te_mat_obj->handle_list); - SLIST_REMOVE_HEAD(&s_te_mat_obj->handle_list, next); - } - xSemaphoreGive(s_te_mat_obj->mutex); - vSemaphoreDelete(s_te_mat_obj->mutex); - free(s_te_mat_obj); - s_te_mat_obj = NULL; -} - -esp_err_t touch_matrix_create(const touch_matrix_config_t *matrix_config, touch_matrix_handle_t *matrix_handle) -{ - TE_CHECK(s_te_mat_obj != NULL, ESP_ERR_INVALID_STATE); - TE_CHECK(matrix_handle != NULL && matrix_config != NULL, ESP_ERR_INVALID_ARG); - TE_CHECK(matrix_config->x_channel_array != NULL && - matrix_config->y_channel_array != NULL && - matrix_config->x_sensitivity_array != NULL && - matrix_config->y_sensitivity_array != NULL && - matrix_config->x_channel_num > 1 && - matrix_config->x_channel_num < TOUCH_PAD_MAX && - matrix_config->y_channel_num > 1 && - matrix_config->y_channel_num < TOUCH_PAD_MAX, - ESP_ERR_INVALID_ARG); - TE_CHECK(te_object_check_channel(matrix_config->x_channel_array, matrix_config->x_channel_num) == false && - te_object_check_channel(matrix_config->y_channel_array, matrix_config->y_channel_num) == false, - ESP_ERR_INVALID_ARG); - te_matrix_handle_t te_matrix = (te_matrix_handle_t)calloc(1, sizeof(struct te_slider_s)); - TE_CHECK(te_matrix != NULL, ESP_ERR_NO_MEM); - - esp_err_t ret = ESP_ERR_NO_MEM; - te_matrix->config = (te_matrix_handle_config_t *)calloc(1, sizeof(te_matrix_handle_config_t)); - te_matrix->device = (te_dev_t **)calloc(matrix_config->x_channel_num + matrix_config->y_channel_num, sizeof(te_dev_t *)); - TE_CHECK_GOTO(te_matrix->config != NULL && te_matrix->device != NULL, cleanup); - for (int idx = 0; idx < matrix_config->x_channel_num + matrix_config->y_channel_num; idx++) { - te_matrix->device[idx] = (te_dev_t *)calloc(1, sizeof(te_dev_t)); - if (te_matrix->device[idx] == NULL) { - ret = ESP_ERR_NO_MEM; - goto cleanup; - } - } - /*< Initialize x-axis */ - ret = te_dev_init(&te_matrix->device[0], matrix_config->x_channel_num, TOUCH_ELEM_TYPE_MATRIX, - matrix_config->x_channel_array, matrix_config->x_sensitivity_array, - TE_DEFAULT_THRESHOLD_DIVIDER(s_te_mat_obj)); - TE_CHECK_GOTO(ret == ESP_OK, cleanup); - /*< Initialize y-axis */ - ret = te_dev_init(&te_matrix->device[matrix_config->x_channel_num], matrix_config->y_channel_num, - TOUCH_ELEM_TYPE_MATRIX, matrix_config->y_channel_array, matrix_config->y_sensitivity_array, - TE_DEFAULT_THRESHOLD_DIVIDER(s_te_mat_obj)); - TE_CHECK_GOTO(ret == ESP_OK, cleanup); - - te_matrix->config->event_mask = TOUCH_ELEM_EVENT_NONE; - te_matrix->config->dispatch_method = TOUCH_ELEM_DISP_MAX; - te_matrix->config->callback = NULL; - te_matrix->config->arg = NULL; - te_matrix->current_state = TE_STATE_IDLE; - te_matrix->last_state = TE_STATE_IDLE; - te_matrix->event = TOUCH_MATRIX_EVT_MAX; - te_matrix->x_channel_num = matrix_config->x_channel_num; - te_matrix->y_channel_num = matrix_config->y_channel_num; - te_matrix->trigger_cnt = 0; - te_matrix->trigger_thr = 0xffffffff; - te_matrix->position.x_axis = TE_MAT_POS_MAX; - te_matrix->position.y_axis = TE_MAT_POS_MAX; - te_matrix->position.index = TE_MAT_POS_MAX; - ret = matrix_object_add_instance(te_matrix); - TE_CHECK_GOTO(ret == ESP_OK, cleanup); - *matrix_handle = (touch_elem_handle_t) te_matrix; - return ESP_OK; - -cleanup: - TE_FREE_AND_NULL(te_matrix->config); - if (te_matrix->device != NULL) { - for (int idx = 0; idx < matrix_config->x_channel_num + matrix_config->y_channel_num; idx++) { - TE_FREE_AND_NULL(te_matrix->device[idx]); - } - free(te_matrix->device); - te_matrix->device = NULL; - } - TE_FREE_AND_NULL(te_matrix); - return ret; -} - -esp_err_t touch_matrix_delete(touch_matrix_handle_t matrix_handle) -{ - TE_CHECK(s_te_mat_obj != NULL, ESP_ERR_INVALID_STATE); - TE_CHECK(matrix_handle != NULL, ESP_ERR_INVALID_ARG); - /*< Release touch sensor application resource */ - esp_err_t ret = matrix_object_remove_instance(matrix_handle); - TE_CHECK(ret == ESP_OK, ret); - te_matrix_handle_t te_matrix = (te_matrix_handle_t)matrix_handle; - /*< Release touch sensor device resource */ - te_dev_deinit(te_matrix->device, te_matrix->x_channel_num + te_matrix->y_channel_num); - for (int idx = 0; idx < te_matrix->x_channel_num + te_matrix->y_channel_num; idx++) { - free(te_matrix->device[idx]); - } - free(te_matrix->config); - free(te_matrix->device); - free(te_matrix); - return ESP_OK; -} - -esp_err_t touch_matrix_set_dispatch_method(touch_matrix_handle_t matrix_handle, touch_elem_dispatch_t dispatch_method) -{ - TE_CHECK(s_te_mat_obj != NULL, ESP_ERR_INVALID_STATE); - TE_CHECK(matrix_handle != NULL, ESP_ERR_INVALID_ARG); - TE_CHECK(dispatch_method >= TOUCH_ELEM_DISP_EVENT && dispatch_method <= TOUCH_ELEM_DISP_MAX, ESP_ERR_INVALID_ARG); - xSemaphoreTake(s_te_mat_obj->mutex, portMAX_DELAY); - te_matrix_handle_t te_matrix = (te_matrix_handle_t)matrix_handle; - te_matrix->config->dispatch_method = dispatch_method; - xSemaphoreGive(s_te_mat_obj->mutex); - return ESP_OK; -} - -esp_err_t touch_matrix_subscribe_event(touch_matrix_handle_t matrix_handle, uint32_t event_mask, void *arg) -{ - TE_CHECK(s_te_mat_obj != NULL, ESP_ERR_INVALID_STATE); - TE_CHECK(matrix_handle != NULL, ESP_ERR_INVALID_ARG); - if (!(event_mask & TOUCH_ELEM_EVENT_ON_PRESS) && !(event_mask & TOUCH_ELEM_EVENT_ON_RELEASE) && - !(event_mask & TOUCH_ELEM_EVENT_ON_LONGPRESS) && !(event_mask & TOUCH_ELEM_EVENT_NONE)) { - ESP_LOGE(TE_TAG, "Touch button only support TOUCH_ELEM_EVENT_ON_PRESS, " - "TOUCH_ELEM_EVENT_ON_RELEASE, TOUCH_ELEM_EVENT_ON_LONGPRESS event mask"); - return ESP_ERR_INVALID_ARG; - } - if (event_mask & TOUCH_ELEM_EVENT_ON_LONGPRESS) { - touch_matrix_set_longpress(matrix_handle, TE_DEFAULT_LONGPRESS_TIME(s_te_mat_obj)); //set the default time(1000ms) for long press - } - xSemaphoreTake(s_te_mat_obj->mutex, portMAX_DELAY); - te_matrix_handle_t te_matrix = (te_matrix_handle_t)matrix_handle; - te_matrix->config->event_mask = event_mask; - te_matrix->config->arg = arg; - xSemaphoreGive(s_te_mat_obj->mutex); - return ESP_OK; -} - -esp_err_t touch_matrix_set_callback(touch_matrix_handle_t matrix_handle, touch_matrix_callback_t matrix_callback) -{ - TE_CHECK(s_te_mat_obj != NULL, ESP_ERR_INVALID_STATE); - TE_CHECK(matrix_handle != NULL, ESP_ERR_INVALID_ARG); - TE_CHECK(matrix_callback != NULL, ESP_ERR_INVALID_ARG); - te_matrix_handle_t te_matrix = (te_matrix_handle_t)matrix_handle; - xSemaphoreTake(s_te_mat_obj->mutex, portMAX_DELAY); - te_matrix->config->callback = matrix_callback; - xSemaphoreGive(s_te_mat_obj->mutex); - return ESP_OK; -} - -esp_err_t touch_matrix_set_longpress(touch_matrix_handle_t matrix_handle, uint32_t threshold_time) -{ - TE_CHECK(s_te_mat_obj != NULL, ESP_ERR_INVALID_STATE); - TE_CHECK(matrix_handle != NULL, ESP_ERR_INVALID_ARG); - TE_CHECK(threshold_time > 0, ESP_ERR_INVALID_ARG); - te_matrix_handle_t te_matrix = (te_matrix_handle_t)matrix_handle; - touch_elem_dispatch_t dispatch_method = te_matrix->config->dispatch_method; - if (dispatch_method == TOUCH_ELEM_DISP_EVENT) { - xSemaphoreTake(s_te_mat_obj->mutex, portMAX_DELAY); - } - uint8_t timer_period = te_get_timer_period(); - te_matrix->trigger_thr = threshold_time / timer_period; - if (dispatch_method == TOUCH_ELEM_DISP_EVENT) { - xSemaphoreGive(s_te_mat_obj->mutex); - } - return ESP_OK; -} - -const touch_matrix_message_t* touch_matrix_get_message(const touch_elem_message_t* element_message) -{ - return (touch_matrix_message_t*)&element_message->child_msg; - _Static_assert(sizeof(element_message->child_msg) >= sizeof(touch_matrix_message_t), "Message size overflow"); -} - -static bool matrix_object_check_channel(touch_pad_t channel_num) -{ - te_matrix_handle_list_t *item; - SLIST_FOREACH(item, &s_te_mat_obj->handle_list, next) { - if (matrix_channel_check(item->matrix_handle, channel_num)) { - return true; - } - } - return false; -} - -static esp_err_t matrix_object_set_threshold(void) -{ - esp_err_t ret = ESP_OK; - te_matrix_handle_list_t *item; - SLIST_FOREACH(item, &s_te_mat_obj->handle_list, next) { - ret = matrix_set_threshold(item->matrix_handle); - if (ret != ESP_OK) { - break; - } - } - return ret; -} - -static void matrix_object_process_state(void) -{ - te_matrix_handle_list_t *item; - SLIST_FOREACH(item, &s_te_mat_obj->handle_list, next) { - if (waterproof_check_mask_handle(item->matrix_handle)) { - matrix_reset_state(item->matrix_handle); - continue; - } - matrix_proc_state(item->matrix_handle); - } -} - -static void matrix_object_update_state(touch_pad_t channel_num, te_state_t channel_state) -{ - te_matrix_handle_list_t *item; - SLIST_FOREACH(item, &s_te_mat_obj->handle_list, next) { - if (waterproof_check_mask_handle(item->matrix_handle)) { - continue; - } - matrix_update_state(item->matrix_handle, channel_num, channel_state); - } -} - -static esp_err_t matrix_object_add_instance(te_matrix_handle_t matrix_handle) -{ - te_matrix_handle_list_t *item = (te_matrix_handle_list_t *)calloc(1, sizeof(te_matrix_handle_list_t)); - TE_CHECK(item != NULL, ESP_ERR_NO_MEM); - item->matrix_handle = matrix_handle; - xSemaphoreTake(s_te_mat_obj->mutex, portMAX_DELAY); - SLIST_INSERT_HEAD(&s_te_mat_obj->handle_list, item, next); - xSemaphoreGive(s_te_mat_obj->mutex); - return ESP_OK; -} - -static esp_err_t matrix_object_remove_instance(te_matrix_handle_t matrix_handle) -{ - esp_err_t ret = ESP_ERR_NOT_FOUND; - te_matrix_handle_list_t *item; - SLIST_FOREACH(item, &s_te_mat_obj->handle_list, next) { - if (matrix_handle == item->matrix_handle) { - xSemaphoreTake(s_te_mat_obj->mutex, portMAX_DELAY); - SLIST_REMOVE(&s_te_mat_obj->handle_list, item, te_matrix_handle_list, next); - xSemaphoreGive(s_te_mat_obj->mutex); - free(item); - ret = ESP_OK; - break; - } - } - return ret; -} - -bool is_matrix_object_handle(touch_elem_handle_t element_handle) -{ - te_matrix_handle_list_t *item; - xSemaphoreTake(s_te_mat_obj->mutex, portMAX_DELAY); - SLIST_FOREACH(item, &s_te_mat_obj->handle_list, next) { - if (element_handle == item->matrix_handle) { - xSemaphoreGive(s_te_mat_obj->mutex); - return true; - } - } - xSemaphoreGive(s_te_mat_obj->mutex); - return false; -} - -static bool matrix_channel_check(te_matrix_handle_t matrix_handle, touch_pad_t channel_num) -{ - te_dev_t *device; - for (int idx = 0; idx < matrix_handle->x_channel_num + matrix_handle->y_channel_num; idx++) { - device = matrix_handle->device[idx]; - if (device->channel == channel_num) { - return true; - } - } - return false; -} - -static esp_err_t matrix_set_threshold(te_matrix_handle_t matrix_handle) -{ - esp_err_t ret = ESP_OK; - for (int idx = 0; idx < matrix_handle->x_channel_num + matrix_handle->y_channel_num; idx++) { - ret |= te_dev_set_threshold(matrix_handle->device[idx]); - } - return ret; -} - -static void matrix_update_state(te_matrix_handle_t matrix_handle, touch_pad_t channel_num, te_state_t channel_state) -{ - te_dev_t *device; - for (int idx = 0; idx < matrix_handle->x_channel_num + matrix_handle->y_channel_num; idx++) { - device = matrix_handle->device[idx]; - if (channel_num == device->channel) { - device->state = channel_state; - } - } -} - -static void matrix_reset_state(te_matrix_handle_t matrix_handle) -{ - for (int idx = 0; idx < matrix_handle->x_channel_num + matrix_handle->y_channel_num; idx++) { - matrix_handle->device[idx]->state = TE_STATE_IDLE; - } - matrix_handle->trigger_cnt = 0; - matrix_handle->current_state = TE_STATE_IDLE; -} - -static void matrix_event_give(te_matrix_handle_t matrix_handle) -{ - touch_elem_message_t element_message; - touch_matrix_message_t matrix_message = { - .event = matrix_handle->event, - .position = matrix_handle->position - }; - element_message.handle = (touch_elem_handle_t)matrix_handle; - element_message.element_type = TOUCH_ELEM_TYPE_MATRIX; - element_message.arg = matrix_handle->config->arg; - memcpy(element_message.child_msg, &matrix_message, sizeof(matrix_message)); - te_event_give(element_message); -} - -static inline void matrix_dispatch(te_matrix_handle_t matrix_handle, touch_elem_dispatch_t dispatch_method) -{ - if (dispatch_method == TOUCH_ELEM_DISP_EVENT) { - matrix_event_give(matrix_handle); //Event queue - } else if (dispatch_method == TOUCH_ELEM_DISP_CALLBACK) { - touch_matrix_message_t matrix_info; - matrix_info.event = matrix_handle->event; - matrix_info.position = matrix_handle->position; - void *arg = matrix_handle->config->arg; - matrix_handle->config->callback(matrix_handle, &matrix_info, arg); //Event callback - } -} - -void matrix_enable_wakeup_calibration(te_matrix_handle_t matrix_handle, bool en) -{ - for (int idx = 0; idx < matrix_handle->x_channel_num + matrix_handle->y_channel_num; ++idx) { - matrix_handle->device[idx]->is_use_last_threshold = !en; - } -} - -/** - * @brief Scan the matrix channel - * - * This function will output the press position and release position info - * so as to determine which operation(press/release) is happening, since there - * will get the invalid state if user operates multi-points at the same time. - * - */ -static void matrix_scan_axis(te_matrix_handle_t matrix_handle, touch_matrix_position_t *press_pos, - uint8_t *press_cnt, touch_matrix_position_t *release_pos, uint8_t *release_cnt) -{ - press_pos->x_axis = TE_MAT_POS_MAX; - press_pos->y_axis = TE_MAT_POS_MAX; - release_pos->x_axis = TE_MAT_POS_MAX; - release_pos->y_axis = TE_MAT_POS_MAX; - for (int idx = 0; idx < matrix_handle->x_channel_num + matrix_handle->y_channel_num; idx++) { - te_dev_t *device = matrix_handle->device[idx]; - if (device->state == TE_STATE_PRESS) { - if (idx < matrix_handle->x_channel_num) { - press_pos->x_axis = idx; //Write down the x axis info - } else { - press_pos->y_axis = idx - matrix_handle->x_channel_num; //Write down the y axis info - } - (*press_cnt)++; - } else if (device->state == TE_STATE_RELEASE) { - if (idx < matrix_handle->x_channel_num) { - release_pos->x_axis = idx; - } else { - release_pos->y_axis = idx - matrix_handle->x_channel_num; - } - (*release_cnt)++; - } - } -} - -/** - * @brief Pre-check and fix - * - * This function will pre-check and fix the invalid state, preparing for the - * next detection. - * - */ -static void matrix_pre_fixed(te_matrix_handle_t matrix_handle, touch_matrix_position_t *press_pos, - uint8_t press_cnt, touch_matrix_position_t *release_pos, uint8_t release_cnt) -{ - te_dev_t *device; - te_matrix_state_t last_state = matrix_handle->current_state; - touch_matrix_position_t last_pos = { - .x_axis = matrix_handle->position.x_axis, - .y_axis = matrix_handle->position.y_axis - }; - if (last_state == TE_STATE_IDLE) { - if (release_cnt > 0) { - /*< Release is not allowed while matrix is in IDLE state, */ - /*< if that happened, reset it from Release into IDLE. */ - for (int idx = 0; idx < matrix_handle->x_channel_num + matrix_handle->y_channel_num; idx++) { - device = matrix_handle->device[idx]; - if (device->state != TE_STATE_RELEASE) { - continue; - } - device->state = TE_STATE_IDLE; //Reset to IDLE - } - } - } else if (last_state == TE_STATE_PRESS) { - if (release_cnt > 0) { - /*< Release position must be the same as the last Press position, */ - /*< if it is not, reset it into IDLE. */ - if (release_pos->x_axis != TE_MAT_POS_MAX && release_pos->x_axis != last_pos.x_axis) { - device = matrix_handle->device[release_pos->x_axis]; - device->state = TE_STATE_IDLE; - } - if (release_pos->y_axis != TE_MAT_POS_MAX && release_pos->y_axis != last_pos.y_axis) { - device = matrix_handle->device[release_pos->y_axis + matrix_handle->x_channel_num]; - device->state = TE_STATE_IDLE; - } - } - if (press_cnt > 2) { //TODO: remove or rewrite here - /*< If the last state is Press and current press count more than 2, */ - /*< there must be multi-touch occurred, reset all of the channels */ - /*< into IDLE except the last position channels. */ - if (press_pos->x_axis != TE_MAT_POS_MAX && press_pos->x_axis != last_pos.x_axis) { - device = matrix_handle->device[press_pos->x_axis]; - device->state = TE_STATE_IDLE; - } - if (press_pos->y_axis != TE_MAT_POS_MAX && press_pos->y_axis != last_pos.y_axis) { - device = matrix_handle->device[press_pos->y_axis + matrix_handle->x_channel_num]; - device->state = TE_STATE_IDLE; - } - } - } -} - -//TODO: refactor this ugly implementation -static esp_err_t matrix_get_axis_state(touch_matrix_position_t *press_pos, uint8_t press_cnt, touch_matrix_position_t *release_pos, - uint8_t release_cnt, te_matrix_state_t *x_axis_state, te_matrix_state_t *y_axis_state) -{ - esp_err_t ret; - if (press_cnt >= 2) { - if (press_pos->x_axis != TE_MAT_POS_MAX && press_pos->y_axis != TE_MAT_POS_MAX) { - *x_axis_state = TE_STATE_PRESS; - *y_axis_state = TE_STATE_PRESS; - ret = ESP_OK; - } else { - ret = ESP_ERR_INVALID_STATE; - } - - } else if (release_cnt >= 2) { - if (release_pos->x_axis != TE_MAT_POS_MAX && release_pos->y_axis != TE_MAT_POS_MAX) { - *x_axis_state = TE_STATE_RELEASE; - *y_axis_state = TE_STATE_RELEASE; - ret = ESP_OK; - } else { - ret = ESP_ERR_INVALID_STATE; - } - } else { - ret = ESP_ERR_INVALID_STATE; - } - return ret; -} - -/** - * @brief Matrix button process - * - * This function will process the matrix button state and maintain a matrix FSM: - * IDLE ----> Press ----> Release ----> IDLE - * - * The state transition procedure is as follow: - * (channel state ----> x,y axis state ----> matrix button state) - * - * TODO: add state transition diagram - */ -static void matrix_proc_state(te_matrix_handle_t matrix_handle) -{ - esp_err_t ret; - uint8_t press_cnt = 0; - uint8_t release_cnt = 0; - touch_matrix_position_t press_pos; - touch_matrix_position_t release_pos; - te_matrix_state_t x_axis_state = TE_STATE_IDLE; - te_matrix_state_t y_axis_state = TE_STATE_IDLE; - uint32_t event_mask = matrix_handle->config->event_mask; - touch_elem_dispatch_t dispatch_method = matrix_handle->config->dispatch_method; - - BaseType_t mux_ret = xSemaphoreTake(s_te_mat_obj->mutex, 0); - if (mux_ret != pdPASS) { - return; - } - - //TODO: refactor those functions - /*< Scan the state of all the matrix buttons channel */ - matrix_scan_axis(matrix_handle, &press_pos, &press_cnt, &release_pos, &release_cnt); - - /*< Pre check and fixed the invalid state */ - matrix_pre_fixed(matrix_handle, &press_pos, press_cnt, &release_pos, release_cnt); - - /*< Figure out x,y axis state and take the position */ - ret = matrix_get_axis_state(&press_pos, press_cnt, &release_pos, release_cnt, &x_axis_state, &y_axis_state); - if (ret != ESP_OK) { //TODO: remove return - xSemaphoreGive(s_te_mat_obj->mutex); - return; - } - - matrix_handle->current_state = matrix_get_state(x_axis_state, y_axis_state); - - if (matrix_handle->current_state == TE_STATE_PRESS) { - if (matrix_handle->last_state == TE_STATE_IDLE) { //IDLE ---> Press = On_Press - matrix_update_position(matrix_handle, press_pos); - ESP_LOGD(TE_DEBUG_TAG, "matrix press (%"PRIu8", %"PRIu8")", matrix_handle->position.x_axis, matrix_handle->position.y_axis); - if (event_mask & TOUCH_ELEM_EVENT_ON_PRESS) { - matrix_handle->event = TOUCH_MATRIX_EVT_ON_PRESS; - matrix_dispatch(matrix_handle, dispatch_method); - } - } else if (matrix_handle->last_state == TE_STATE_PRESS) { //Press ---> Press = On_LongPress - if (event_mask & TOUCH_ELEM_EVENT_ON_LONGPRESS) { - if (++matrix_handle->trigger_cnt >= matrix_handle->trigger_thr) { - ESP_LOGD(TE_DEBUG_TAG, "matrix longpress (%"PRIu8", %"PRIu8")", matrix_handle->position.x_axis, matrix_handle->position.y_axis); - matrix_handle->event = TOUCH_MATRIX_EVT_ON_LONGPRESS; - matrix_dispatch(matrix_handle, dispatch_method); - matrix_handle->trigger_cnt = 0; - } - } - } - } else if (matrix_handle->current_state == TE_STATE_RELEASE) { - if (matrix_handle->last_state == TE_STATE_PRESS) { //Press ---> Release = On_Release - ESP_LOGD(TE_DEBUG_TAG, "matrix release (%"PRIu8", %"PRIu8")", matrix_handle->position.x_axis, matrix_handle->position.y_axis); - if (event_mask & TOUCH_ELEM_EVENT_ON_RELEASE) { - matrix_handle->event = TOUCH_MATRIX_EVT_ON_RELEASE; - matrix_dispatch(matrix_handle, dispatch_method); - } - } else if (matrix_handle->last_state == TE_STATE_RELEASE) { // Release ---> Release = On_IDLE (Not dispatch) - matrix_reset_state(matrix_handle); - } - } else if (matrix_handle->current_state == TE_STATE_IDLE) { - if (matrix_handle->last_state == TE_STATE_RELEASE) { //Release ---> IDLE = On_IDLE (Not dispatch) - //Nothing - } else if (matrix_handle->last_state == TE_STATE_IDLE) { //IDLE ---> IDLE = Running IDLE (Not dispatch) - //Move Pre-fix into here - } - } - matrix_handle->last_state = matrix_handle->current_state; - xSemaphoreGive(s_te_mat_obj->mutex); -} - -static inline te_state_t matrix_get_state(te_matrix_state_t x_axis_state, te_matrix_state_t y_axis_state) -{ - te_state_t matrix_state; - if ((x_axis_state == TE_STATE_PRESS) && (y_axis_state == TE_STATE_PRESS)) { - matrix_state = TE_STATE_PRESS; - } else if ((x_axis_state == TE_STATE_RELEASE) && (y_axis_state == TE_STATE_RELEASE)) { - matrix_state = TE_STATE_RELEASE; - } else { - matrix_state = TE_STATE_IDLE; - } - return matrix_state; -} - -static void matrix_update_position(te_matrix_handle_t matrix_handle, touch_matrix_position_t new_pos) { - matrix_handle->position.x_axis = new_pos.x_axis; - matrix_handle->position.y_axis = new_pos.y_axis; - matrix_handle->position.index = matrix_handle->position.x_axis * matrix_handle->y_channel_num + matrix_handle->position.y_axis; -} diff --git a/components/touch_element/touch_slider.c b/components/touch_element/touch_slider.c deleted file mode 100644 index 4d9e5f28e2..0000000000 --- a/components/touch_element/touch_slider.c +++ /dev/null @@ -1,678 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD - * - * SPDX-License-Identifier: Apache-2.0 - */ - -#include -#include -#include "freertos/FreeRTOS.h" -#include "freertos/semphr.h" -#include "esp_log.h" -#include "touch_element/touch_element_private.h" - -#define TE_SLD_DEFAULT_QTF_THR(obj) ((obj)->global_config->quantify_lower_threshold) -#define TE_SLD_DEFAULT_POS_FILTER_FACTOR(obj) ((obj)->global_config->position_filter_factor) -#define TE_SLD_DEFAULT_CALCULATE_CHANNEL(obj) ((obj)->global_config->calculate_channel_count) -#define TE_SLD_DEFAULT_BCM_UPDATE_TIME(obj) ((obj)->global_config->benchmark_update_time) -#define TE_SLD_DEFAULT_FILTER_RESET_TIME(obj) ((obj)->global_config->filter_reset_time) -#define TE_SLD_DEFAULT_POS_FILTER_SIZE(obj) ((obj)->global_config->position_filter_size) - -typedef struct te_slider_handle_list { - te_slider_handle_t slider_handle; //Slider handle - SLIST_ENTRY(te_slider_handle_list) next; //Slider handle list entry -} te_slider_handle_list_t; - -typedef struct { - SLIST_HEAD(te_slider_handle_list_head, te_slider_handle_list) handle_list; //Slider handle (instance) list - touch_slider_global_config_t *global_config; //Slider global configuration - SemaphoreHandle_t mutex; //Slider object mutex -} te_slider_obj_t; - -te_slider_obj_t *s_te_sld_obj = NULL; -/* ---------------------------------------- Slider handle(instance) methods ----------------------------------------- */ -static bool slider_channel_check(te_slider_handle_t slider_handle, touch_pad_t channel_num); -static esp_err_t slider_set_threshold(te_slider_handle_t slider_handle); -static inline te_state_t slider_get_state(te_dev_t **device, int device_num); -static void slider_reset_state(te_slider_handle_t slider_handle); -static void slider_update_position(te_slider_handle_t slider_handle); -static void slider_reset_position(te_slider_handle_t slider_handle); -static void slider_update_benchmark(te_slider_handle_t slider_handle); -static void slider_update_state(te_slider_handle_t slider_handle, touch_pad_t channel_num, te_state_t channel_state); -static void slider_proc_state(te_slider_handle_t slider_handle); -static void slider_event_give(te_slider_handle_t slider_handle); -static inline void slider_dispatch(te_slider_handle_t slider_handle, touch_elem_dispatch_t dispatch_method); -/* ------------------------------------------ Slider object(class) methods ------------------------------------------ */ -static esp_err_t slider_object_add_instance(te_slider_handle_t slider_handle); -static esp_err_t slider_object_remove_instance(te_slider_handle_t slider_handle); -static bool slider_object_check_channel(touch_pad_t channel_num); -static esp_err_t slider_object_set_threshold(void); -static void slider_object_process_state(void); -static void slider_object_update_state(touch_pad_t channel_num, te_state_t channel_state); -/* ------------------------------------------------------------------------------------------------------------------ */ - -esp_err_t touch_slider_install(const touch_slider_global_config_t *global_config) -{ - TE_CHECK(te_system_check_state() == true, ESP_ERR_INVALID_STATE); - TE_CHECK(global_config != NULL, ESP_ERR_INVALID_ARG); - //Fixme: Make it thread-safe - s_te_sld_obj = (te_slider_obj_t *)calloc(1, sizeof(te_slider_obj_t)); - TE_CHECK(s_te_sld_obj != NULL, ESP_ERR_NO_MEM); - s_te_sld_obj->global_config = (touch_slider_global_config_t *)calloc(1, sizeof(touch_slider_global_config_t)); - s_te_sld_obj->mutex = xSemaphoreCreateMutex(); - TE_CHECK_GOTO(s_te_sld_obj->global_config != NULL && s_te_sld_obj->mutex != NULL, cleanup); - xSemaphoreTake(s_te_sld_obj->mutex, portMAX_DELAY); - SLIST_INIT(&s_te_sld_obj->handle_list); - memcpy(s_te_sld_obj->global_config, global_config, sizeof(touch_slider_global_config_t)); - te_object_methods_t slider_methods = { - .handle = s_te_sld_obj, - .check_channel = slider_object_check_channel, - .set_threshold = slider_object_set_threshold, - .process_state = slider_object_process_state, - .update_state = slider_object_update_state - }; - te_object_method_register(&slider_methods, TE_CLS_TYPE_SLIDER); - xSemaphoreGive(s_te_sld_obj->mutex); - return ESP_OK; - -cleanup: - TE_FREE_AND_NULL(s_te_sld_obj->global_config); - if (s_te_sld_obj->mutex != NULL) { - vSemaphoreDelete(s_te_sld_obj->mutex); - } - TE_FREE_AND_NULL(s_te_sld_obj); - return ESP_ERR_NO_MEM; -} - -void touch_slider_uninstall(void) -{ - xSemaphoreTake(s_te_sld_obj->mutex, portMAX_DELAY); - if (s_te_sld_obj == NULL) { - xSemaphoreGive(s_te_sld_obj->mutex); - return; - } - te_object_method_unregister(TE_CLS_TYPE_SLIDER); - free(s_te_sld_obj->global_config); - s_te_sld_obj->global_config = NULL; - while (!SLIST_EMPTY(&s_te_sld_obj->handle_list)) { - SLIST_FIRST(&s_te_sld_obj->handle_list); - SLIST_REMOVE_HEAD(&s_te_sld_obj->handle_list, next); - } - xSemaphoreGive(s_te_sld_obj->mutex); - vSemaphoreDelete(s_te_sld_obj->mutex); - free(s_te_sld_obj); - s_te_sld_obj = NULL; -} - -esp_err_t touch_slider_create(const touch_slider_config_t *slider_config, touch_slider_handle_t *slider_handle) -{ - TE_CHECK(s_te_sld_obj != NULL, ESP_ERR_INVALID_STATE); - TE_CHECK(slider_handle != NULL && slider_config != NULL, ESP_ERR_INVALID_ARG); - TE_CHECK(slider_config->channel_num > 2 && - slider_config->channel_num < TOUCH_PAD_MAX && - slider_config->channel_array != NULL && - slider_config->sensitivity_array != NULL && - slider_config->position_range > slider_config->channel_num, - ESP_ERR_INVALID_ARG); - TE_CHECK(te_object_check_channel(slider_config->channel_array, slider_config->channel_num) == false, - ESP_ERR_INVALID_ARG); - te_slider_handle_t te_slider = (te_slider_handle_t)calloc(1, sizeof(struct te_slider_s)); - TE_CHECK(te_slider != NULL, ESP_ERR_NO_MEM); - - esp_err_t ret = ESP_ERR_NO_MEM; - te_slider->config = (te_slider_handle_config_t *)calloc(1, sizeof(te_slider_handle_config_t)); - te_slider->pos_filter_window = calloc(TE_SLD_DEFAULT_POS_FILTER_SIZE(s_te_sld_obj), sizeof(uint8_t)); - te_slider->device = (te_dev_t **)calloc(slider_config->channel_num, sizeof(te_dev_t *)); - te_slider->channel_bcm = (uint32_t *)calloc(slider_config->channel_num, sizeof(uint32_t)); - te_slider->quantify_signal_array = (float *)calloc(slider_config->channel_num, sizeof(float)); - TE_CHECK_GOTO(te_slider->config != NULL && - te_slider->pos_filter_window != NULL && - te_slider->device != NULL && - te_slider->channel_bcm && - te_slider->quantify_signal_array, - cleanup); - for (int idx = 0; idx < slider_config->channel_num; idx++) { - te_slider->device[idx] = (te_dev_t *)calloc(1, sizeof(te_dev_t)); - if (te_slider->device[idx] == NULL) { - ret = ESP_ERR_NO_MEM; - goto cleanup; - } - } - ret = te_dev_init(te_slider->device, slider_config->channel_num, TOUCH_ELEM_TYPE_SLIDER, - slider_config->channel_array, slider_config->sensitivity_array, - TE_DEFAULT_THRESHOLD_DIVIDER(s_te_sld_obj)); - TE_CHECK_GOTO(ret == ESP_OK, cleanup); - - te_slider->config->event_mask = TOUCH_ELEM_EVENT_NONE; - te_slider->config->dispatch_method = TOUCH_ELEM_DISP_MAX; - te_slider->config->callback = NULL; - te_slider->config->arg = NULL; - te_slider->channel_bcm_update_cnt = TE_SLD_DEFAULT_BCM_UPDATE_TIME(s_te_sld_obj); //update at first time - te_slider->filter_reset_cnt = TE_SLD_DEFAULT_FILTER_RESET_TIME(s_te_sld_obj); //reset at first time - te_slider->channel_sum = slider_config->channel_num; - te_slider->position_range = slider_config->position_range; - te_slider->position_scale = (float)(slider_config->position_range) / (slider_config->channel_num - 1); - te_slider->current_state = TE_STATE_IDLE; - te_slider->last_state = TE_STATE_IDLE; - te_slider->event = TOUCH_SLIDER_EVT_MAX; - te_slider->position = 0; - te_slider->last_position = 0; - te_slider->pos_window_idx = 0; - te_slider->is_first_sample = true; - ret = slider_object_add_instance(te_slider); - TE_CHECK_GOTO(ret == ESP_OK, cleanup); - *slider_handle = (touch_elem_handle_t)te_slider; - return ESP_OK; - -cleanup: - TE_FREE_AND_NULL(te_slider->config); - TE_FREE_AND_NULL(te_slider->pos_filter_window); - TE_FREE_AND_NULL(te_slider->channel_bcm); - TE_FREE_AND_NULL(te_slider->quantify_signal_array); - if (te_slider->device != NULL) { - for (int idx = 0; idx < slider_config->channel_num; idx++) { - TE_FREE_AND_NULL(te_slider->device[idx]); - } - free(te_slider->device); - te_slider->device = NULL; - } - TE_FREE_AND_NULL(te_slider); - return ret; -} - -esp_err_t touch_slider_delete(touch_slider_handle_t slider_handle) -{ - TE_CHECK(s_te_sld_obj != NULL, ESP_ERR_INVALID_STATE); - TE_CHECK(slider_handle != NULL, ESP_ERR_INVALID_ARG); - /*< Release touch sensor application resource */ - esp_err_t ret = slider_object_remove_instance(slider_handle); - TE_CHECK(ret == ESP_OK, ret); - te_slider_handle_t te_slider = (te_slider_handle_t)slider_handle; - /*< Release touch sensor device resource */ - te_dev_deinit(te_slider->device, te_slider->channel_sum); - for (int idx = 0; idx < te_slider->channel_sum; idx++) { - free(te_slider->device[idx]); - } - free(te_slider->config); - free(te_slider->quantify_signal_array); - free(te_slider->pos_filter_window); - free(te_slider->channel_bcm); - free(te_slider->device); - free(te_slider); - return ESP_OK; -} - -esp_err_t touch_slider_set_dispatch_method(touch_slider_handle_t slider_handle, touch_elem_dispatch_t dispatch_method) -{ - TE_CHECK(s_te_sld_obj != NULL, ESP_ERR_INVALID_STATE); - TE_CHECK(slider_handle != NULL, ESP_ERR_INVALID_ARG); - TE_CHECK(dispatch_method >= TOUCH_ELEM_DISP_EVENT && dispatch_method <= TOUCH_ELEM_DISP_MAX, ESP_ERR_INVALID_ARG); - xSemaphoreTake(s_te_sld_obj->mutex, portMAX_DELAY); - te_slider_handle_t te_slider = (te_slider_handle_t)slider_handle; - te_slider->config->dispatch_method = dispatch_method; - xSemaphoreGive(s_te_sld_obj->mutex); - return ESP_OK; -} - -esp_err_t touch_slider_subscribe_event(touch_slider_handle_t slider_handle, uint32_t event_mask, void *arg) -{ - TE_CHECK(s_te_sld_obj != NULL, ESP_ERR_INVALID_STATE); - TE_CHECK(slider_handle != NULL, ESP_ERR_INVALID_ARG); - if (!(event_mask & TOUCH_ELEM_EVENT_ON_PRESS) && !(event_mask & TOUCH_ELEM_EVENT_ON_RELEASE) && - !(event_mask & TOUCH_ELEM_EVENT_NONE) && !(event_mask & TOUCH_ELEM_EVENT_ON_CALCULATION)) { - ESP_LOGE(TE_TAG, "Touch button only support TOUCH_ELEM_EVENT_ON_PRESS, " - "TOUCH_ELEM_EVENT_ON_RELEASE, TOUCH_ELEM_EVENT_ON_CALCULATION event mask"); - return ESP_ERR_INVALID_ARG; - } - xSemaphoreTake(s_te_sld_obj->mutex, portMAX_DELAY); - te_slider_handle_t te_slider = (te_slider_handle_t)slider_handle; - te_slider->config->event_mask = event_mask; - te_slider->config->arg = arg; - xSemaphoreGive(s_te_sld_obj->mutex); - return ESP_OK; -} - -esp_err_t touch_slider_set_callback(touch_slider_handle_t slider_handle, touch_slider_callback_t slider_callback) -{ - TE_CHECK(s_te_sld_obj != NULL, ESP_ERR_INVALID_STATE); - TE_CHECK(slider_handle != NULL, ESP_ERR_INVALID_ARG); - TE_CHECK(slider_callback != NULL, ESP_ERR_INVALID_ARG); - te_slider_handle_t te_slider = (te_slider_handle_t)slider_handle; - xSemaphoreTake(s_te_sld_obj->mutex, portMAX_DELAY); - te_slider->config->callback = slider_callback; - xSemaphoreGive(s_te_sld_obj->mutex); - return ESP_OK; -} - -const touch_slider_message_t* touch_slider_get_message(const touch_elem_message_t* element_message) -{ - return (touch_slider_message_t*)&element_message->child_msg; - _Static_assert(sizeof(element_message->child_msg) >= sizeof(touch_slider_message_t), "Message size overflow"); -} - -static bool slider_object_check_channel(touch_pad_t channel_num) -{ - te_slider_handle_list_t *item; - SLIST_FOREACH(item, &s_te_sld_obj->handle_list, next) { - if (slider_channel_check(item->slider_handle, channel_num)) { - return true; - } - } - return false; -} - -static esp_err_t slider_object_set_threshold(void) -{ - esp_err_t ret = ESP_OK; - te_slider_handle_list_t *item; - SLIST_FOREACH(item, &s_te_sld_obj->handle_list, next) { - ret = slider_set_threshold(item->slider_handle); - if (ret != ESP_OK) { - break; - } - } - return ret; -} - -// workaround for compilation error on xtensa-esp32s3-elf-gcc (crosstool-NG esp-2022r1-RC1) 11.2.0 (IDF-5725) -__attribute__((optimize("-Os"))) -static void slider_object_process_state(void) -{ - te_slider_handle_list_t *item; - SLIST_FOREACH(item, &s_te_sld_obj->handle_list, next) { - if (waterproof_check_mask_handle(item->slider_handle)) { - slider_reset_state(item->slider_handle); - slider_reset_position(item->slider_handle); - continue; - } - slider_proc_state(item->slider_handle); - } -} - -static void slider_object_update_state(touch_pad_t channel_num, te_state_t channel_state) -{ - te_slider_handle_list_t *item; - SLIST_FOREACH(item, &s_te_sld_obj->handle_list, next) { - if (waterproof_check_mask_handle(item->slider_handle)) { - continue; - } - slider_update_state(item->slider_handle, channel_num, channel_state); - } -} - -static esp_err_t slider_object_add_instance(te_slider_handle_t slider_handle) -{ - te_slider_handle_list_t *item = (te_slider_handle_list_t *)calloc(1, sizeof(te_slider_handle_list_t)); - TE_CHECK(item != NULL, ESP_ERR_NO_MEM); - item->slider_handle = slider_handle; - xSemaphoreTake(s_te_sld_obj->mutex, portMAX_DELAY); - SLIST_INSERT_HEAD(&s_te_sld_obj->handle_list, item, next); - xSemaphoreGive(s_te_sld_obj->mutex); - return ESP_OK; -} - -static esp_err_t slider_object_remove_instance(te_slider_handle_t slider_handle) -{ - esp_err_t ret = ESP_ERR_NOT_FOUND; - te_slider_handle_list_t *item; - SLIST_FOREACH(item, &s_te_sld_obj->handle_list, next) { - if (slider_handle == item->slider_handle) { - xSemaphoreTake(s_te_sld_obj->mutex, portMAX_DELAY); - SLIST_REMOVE(&s_te_sld_obj->handle_list, item, te_slider_handle_list, next); - xSemaphoreGive(s_te_sld_obj->mutex); - free(item); - ret = ESP_OK; - break; - } - } - return ret; -} - -bool is_slider_object_handle(touch_elem_handle_t element_handle) -{ - te_slider_handle_list_t *item; - xSemaphoreTake(s_te_sld_obj->mutex, portMAX_DELAY); - SLIST_FOREACH(item, &s_te_sld_obj->handle_list, next) { - if (element_handle == item->slider_handle) { - xSemaphoreGive(s_te_sld_obj->mutex); - return true; - } - } - xSemaphoreGive(s_te_sld_obj->mutex); - return false; -} - -static bool slider_channel_check(te_slider_handle_t slider_handle, touch_pad_t channel_num) -{ - te_dev_t *device; - for (int idx = 0; idx < slider_handle->channel_sum; idx++) { - device = slider_handle->device[idx]; - if (device->channel == channel_num) { - return true; - } - } - return false; -} - -static esp_err_t slider_set_threshold(te_slider_handle_t slider_handle) -{ - esp_err_t ret = ESP_OK; - for (int idx = 0; idx < slider_handle->channel_sum; idx++) { - ret |= te_dev_set_threshold(slider_handle->device[idx]); - } - slider_update_benchmark(slider_handle); //Update benchmark at startup - return ret; -} - -static void slider_update_benchmark(te_slider_handle_t slider_handle) -{ - for (int idx = 0; idx < slider_handle->channel_sum; idx++) { - uint32_t bcm_val; - te_dev_t *device = slider_handle->device[idx]; - bcm_val = te_read_smooth_signal(device->channel); - slider_handle->channel_bcm[idx] = bcm_val; - } -} - -static void slider_update_state(te_slider_handle_t slider_handle, touch_pad_t channel_num, te_state_t channel_state) -{ - te_dev_t *device; - for (int idx = 0; idx < slider_handle->channel_sum; idx++) { - device = slider_handle->device[idx]; - if (channel_num == device->channel) { - device->state = channel_state; - } - } -} - -static void slider_reset_state(te_slider_handle_t slider_handle) -{ - for (int idx = 0; idx < slider_handle->channel_sum; idx++) { - slider_handle->device[idx]->state = TE_STATE_IDLE; - } - slider_handle->current_state = TE_STATE_IDLE; -} - -static void slider_event_give(te_slider_handle_t slider_handle) -{ - touch_elem_message_t element_message; - touch_slider_message_t slider_message = { - .event = slider_handle->event, - .position = slider_handle->position - }; - element_message.handle = (touch_elem_handle_t)slider_handle; - element_message.element_type = TOUCH_ELEM_TYPE_SLIDER; - element_message.arg = slider_handle->config->arg; - memcpy(element_message.child_msg, &slider_message, sizeof(slider_message)); - te_event_give(element_message); -} - -static inline void slider_dispatch(te_slider_handle_t slider_handle, touch_elem_dispatch_t dispatch_method) -{ - if (dispatch_method == TOUCH_ELEM_DISP_EVENT) { - slider_event_give(slider_handle); //Event queue - } else if (dispatch_method == TOUCH_ELEM_DISP_CALLBACK) { - touch_slider_message_t slider_info; - slider_info.event = slider_handle->event; - slider_info.position = slider_handle->position; - void *arg = slider_handle->config->arg; - slider_handle->config->callback(slider_handle, &slider_info, arg); //Event callback - } -} - -void slider_enable_wakeup_calibration(te_slider_handle_t slider_handle, bool en) -{ - for (int idx = 0; idx < slider_handle->channel_sum; ++idx) { - slider_handle->device[idx]->is_use_last_threshold = !en; - } -} - -/** - * @brief Slider process - * - * This function will process the slider state and maintain a slider FSM: - * IDLE ----> Press ----> Release ----> IDLE - * - * The state transition procedure is as follow: - * (channel state ----> slider state) - * - * TODO: add state transition diagram - */ -static void slider_proc_state(te_slider_handle_t slider_handle) -{ - uint32_t event_mask = slider_handle->config->event_mask; - touch_elem_dispatch_t dispatch_method = slider_handle->config->dispatch_method; - BaseType_t mux_ret = xSemaphoreTake(s_te_sld_obj->mutex, 0); - if (mux_ret != pdPASS) { - return; - } - - slider_handle->current_state = slider_get_state(slider_handle->device, slider_handle->channel_sum); - - if (slider_handle->current_state == TE_STATE_PRESS) { - slider_handle->channel_bcm_update_cnt = 0; // Reset benchmark update counter - slider_update_position(slider_handle); - if (slider_handle->last_state == TE_STATE_IDLE) { //IDLE ---> Press = On_Press - ESP_LOGD(TE_DEBUG_TAG, "slider press"); - if (event_mask & TOUCH_ELEM_EVENT_ON_PRESS) { - slider_handle->event = TOUCH_SLIDER_EVT_ON_PRESS; - slider_dispatch(slider_handle, dispatch_method); - } - } else if (slider_handle->last_state == TE_STATE_PRESS) { //Press ---> Press = On_Calculation - ESP_LOGD(TE_DEBUG_TAG, "slider calculation"); - if (event_mask & TOUCH_ELEM_EVENT_ON_CALCULATION) { - slider_handle->event = TOUCH_SLIDER_EVT_ON_CALCULATION; - slider_dispatch(slider_handle, dispatch_method); - } - } - } else if (slider_handle->current_state == TE_STATE_RELEASE) { - if (slider_handle->last_state == TE_STATE_PRESS) { //Press ---> Release = On_Release - ESP_LOGD(TE_DEBUG_TAG, "slider release"); - if (event_mask & TOUCH_ELEM_EVENT_ON_RELEASE) { - slider_handle->event = TOUCH_SLIDER_EVT_ON_RELEASE; - slider_dispatch(slider_handle, dispatch_method); - } - } else if (slider_handle->last_state == TE_STATE_RELEASE) { // Release ---> Release = On_IDLE (Not dispatch) - slider_reset_state(slider_handle);//Reset the slider state for the next time touch action detection - } - } else if (slider_handle->current_state == TE_STATE_IDLE) { - if (slider_handle->last_state == TE_STATE_RELEASE) { //Release ---> IDLE = On_IDLE (Not dispatch) - //Nothing - } else if (slider_handle->last_state == TE_STATE_IDLE) { //IDLE ---> IDLE = Running IDLE (Not dispatch) - if (++slider_handle->channel_bcm_update_cnt >= TE_SLD_DEFAULT_BCM_UPDATE_TIME(s_te_sld_obj)) { //Update channel benchmark - slider_handle->channel_bcm_update_cnt = 0; - slider_update_benchmark(slider_handle); - ESP_LOGD(TE_DEBUG_TAG, "slider bcm update"); - } - if (++slider_handle->filter_reset_cnt >= TE_SLD_DEFAULT_FILTER_RESET_TIME(s_te_sld_obj)) { - slider_reset_position(slider_handle); //Reset slider filter so as to speed up next time position calculation - } - } - } - slider_handle->last_state = slider_handle->current_state; - xSemaphoreGive(s_te_sld_obj->mutex); -} - -static inline te_state_t slider_get_state(te_dev_t **device, int device_num) -{ - /*< Scan the state of all the slider channel and calculate the number of them if the state is Press*/ - uint8_t press_cnt = 0; - uint8_t idle_cnt = 0; - for (int idx = 0; idx < device_num; idx++) { //Calculate how many channel is pressed - if (device[idx]->state == TE_STATE_PRESS) { - press_cnt++; - } else if (device[idx]->state == TE_STATE_IDLE) { - idle_cnt++; - } - } - if (press_cnt > 0) { - return TE_STATE_PRESS; - } else if (idle_cnt == device_num) { - return TE_STATE_IDLE; - } else { - return TE_STATE_RELEASE; - } -} - -/** - * @brief Slider channel difference-rate re-quantization - * - * This function will re-quantifies the touch sensor slider channel difference-rate - * so as to make the different size of touch pad in PCB has the same difference value - * - */ -static inline void slider_quantify_signal(te_slider_handle_t slider_handle) -{ - float weight_sum = 0; - for (int idx = 0; idx < slider_handle->channel_sum; idx++) { - te_dev_t *device = slider_handle->device[idx]; - weight_sum += device->sens; - uint32_t current_signal = te_read_smooth_signal(device->channel); - int ans = current_signal - slider_handle->channel_bcm[idx]; - float diff_rate = (float)ans / slider_handle->channel_bcm[idx]; - slider_handle->quantify_signal_array[idx] = diff_rate / device->sens; - if (slider_handle->quantify_signal_array[idx] < TE_SLD_DEFAULT_QTF_THR(s_te_sld_obj)) { - slider_handle->quantify_signal_array[idx] = 0; - } - } - for (int idx = 0; idx < slider_handle->channel_sum; idx++) { - te_dev_t *device = slider_handle->device[idx]; - slider_handle->quantify_signal_array[idx] = slider_handle->quantify_signal_array[idx] * weight_sum / device->sens; - } -} - -/** - * @brief Calculate max sum subarray - * - * This function will figure out the max sum subarray from the - * input array, return the max sum and max sum start index - * - */ -static inline float slider_search_max_subarray(const float *array, int array_size, int *max_array_idx) -{ - *max_array_idx = 0; - float max_array_sum = 0; - float current_array_sum = 0; - for (int idx = 0; idx <= (array_size - TE_SLD_DEFAULT_CALCULATE_CHANNEL(s_te_sld_obj)); idx++) { - for (int x = idx; x < idx + TE_SLD_DEFAULT_CALCULATE_CHANNEL(s_te_sld_obj); x++) { - current_array_sum += array[x]; - } - if (max_array_sum < current_array_sum) { - max_array_sum = current_array_sum; - *max_array_idx = idx; - } - current_array_sum = 0; - } - return max_array_sum; -} - -/** - * @brief Calculate zero number - * - * This function will figure out the number of non-zero items from - * the subarray - */ -static inline uint8_t slider_get_non_zero_num(const float *array, uint8_t array_idx) -{ - uint8_t zero_cnt = 0; - for (int idx = array_idx; idx < array_idx + TE_SLD_DEFAULT_CALCULATE_CHANNEL(s_te_sld_obj); idx++) { - zero_cnt += (array[idx] > 0) ? 1 : 0; - } - return zero_cnt; -} - -static inline uint32_t slider_calculate_position(te_slider_handle_t slider_handle, int subarray_index, float subarray_sum, int non_zero_num) -{ - int range = slider_handle->position_range; - int array_size = slider_handle->channel_sum; - float scale = slider_handle->position_scale; - const float *array = slider_handle->quantify_signal_array; - uint32_t position = 0; - if (non_zero_num == 0) { - position = slider_handle->position; - } else if (non_zero_num == 1) { - for (int index = subarray_index; index < subarray_index + TE_SLD_DEFAULT_CALCULATE_CHANNEL(s_te_sld_obj); index++) { - if (0 != array[index]) { - if (index == array_size - 1) { - position = range; - } else { - position = (uint32_t)((float)index * scale); - } - break; - } - } - } else { - for (int idx = subarray_index; idx < subarray_index + TE_SLD_DEFAULT_CALCULATE_CHANNEL(s_te_sld_obj); idx++) { - position += ((float)idx * array[idx]); - } - position = position * scale / subarray_sum; - } - return position; -} - -static uint32_t slider_filter_average(te_slider_handle_t slider_handle, uint32_t current_position) -{ - uint32_t position_average = 0; - if (slider_handle->is_first_sample) { - for (int win_idx = 0; win_idx < TE_SLD_DEFAULT_POS_FILTER_SIZE(s_te_sld_obj); win_idx++) { - slider_handle->pos_filter_window[win_idx] = current_position; //Preload filter buffer - } - slider_handle->is_first_sample = false; - } else { - slider_handle->pos_filter_window[slider_handle->pos_window_idx++] = current_position; //Moving average filter - if (slider_handle->pos_window_idx >= TE_SLD_DEFAULT_POS_FILTER_SIZE(s_te_sld_obj)) { - slider_handle->pos_window_idx = 0; - } - } - - for (int win_idx = 0; win_idx < TE_SLD_DEFAULT_POS_FILTER_SIZE(s_te_sld_obj); win_idx++) { //Moving average filter - position_average += slider_handle->pos_filter_window[win_idx]; - } - position_average = (uint32_t)((float)position_average / TE_SLD_DEFAULT_POS_FILTER_SIZE(s_te_sld_obj) + 0.5F); - return position_average; -} - -static inline uint32_t slider_filter_iir(uint32_t in_now, uint32_t out_last, uint32_t k) -{ - if (k == 0) { - return in_now; - } else { - uint32_t out_now = (in_now + (k - 1) * out_last) / k; - return out_now; - } -} - -/** - * @brief touch sensor slider position update - * - * This function is the core algorithm about touch sensor slider - * position update, mainly has several steps: - * 1. Re-quantization - * 2. Figure out changed channel - * 3. Calculate position - * 4. Filter - * - */ -static void slider_update_position(te_slider_handle_t slider_handle) -{ - int max_array_idx = 0; - float max_array_sum; - uint8_t non_zero_num; - uint32_t current_position; - - slider_quantify_signal(slider_handle); - max_array_sum = slider_search_max_subarray(slider_handle->quantify_signal_array, slider_handle->channel_sum, &max_array_idx); - non_zero_num = slider_get_non_zero_num(slider_handle->quantify_signal_array, max_array_idx); - current_position = slider_calculate_position(slider_handle, max_array_idx, max_array_sum, non_zero_num); - uint32_t position_average = slider_filter_average(slider_handle, current_position); - slider_handle->last_position = slider_handle->last_position == 0 ? (position_average << 4) : slider_handle->last_position; - slider_handle->last_position = slider_filter_iir((position_average << 4), slider_handle->last_position, TE_SLD_DEFAULT_POS_FILTER_FACTOR(s_te_sld_obj)); - slider_handle->position = ((slider_handle->last_position + 8) >> 4); //(x + 8) >> 4 ----> (x + 8) / 16 ----> x/16 + 0.5 -} - -static void slider_reset_position(te_slider_handle_t slider_handle) -{ - slider_handle->is_first_sample = true; - slider_handle->last_position = 0; - slider_handle->pos_window_idx = 0; -} diff --git a/docs/_static/touch_element/source/te_architecture.drawio b/docs/_static/touch_element/source/te_architecture.drawio deleted file mode 100644 index ecd17d44ff..0000000000 --- a/docs/_static/touch_element/source/te_architecture.drawio +++ /dev/null @@ -1 +0,0 @@ -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 diff --git a/docs/_static/touch_element/source/te_button.odg b/docs/_static/touch_element/source/te_button.odg deleted file mode 100644 index 322f6d3d152c06fcaf80da772034f1a775ba65b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68160 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 diff --git a/docs/_static/touch_element/source/te_matrix.odg b/docs/_static/touch_element/source/te_matrix.odg deleted file mode 100644 index b1134a16390604701af517050de2569783dca3c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 71440 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 MVPKeU3!3Es0HhYHh5!Hn diff --git a/docs/_static/touch_element/te_architecture.svg b/docs/_static/touch_element/te_architecture.svg deleted file mode 100644 index 93096c5004..0000000000 --- a/docs/_static/touch_element/te_architecture.svg +++ /dev/null @@ -1,3 +0,0 @@ - - -
Touch Element library
Touch Element library
Interrupt message
Interrupt message
queue
queue
Timer routine
Timer routine
Dispatch element event
[Not supported by viewer]
Process channel state
Process channel state
Process channel state
Process channel state
Dispatch element event
[Not supported by viewer]
Process channel state
Process channel state
Dispatch element event
[Not supported by viewer]
......
......
ButtonSliderMatrix
Update channel state
Update channel state
Update channel state
Update channel state
Update channel state
Update channel state
Touch interrupt routine
Touch interrupt routine
Channel number
Channel number
Channel state
[Not supported by viewer]
Application
[Not supported by viewer]
Event handler task
Event handler task
Event handler function
Event handler function
Or
Or
Send event message
Send event message
Invoke Callback
Invoke Callback
Or
Or
Touch application handler
Touch application handler
...
...
Application code
[Not supported by viewer]
Dispatch event
Dispatch event
touch_xxx_set_callback()
[Not supported by viewer]
touch_element_message_receive()
<font style="font-size: 10px">touch_element_message_receive()</font>
Driver
[Not supported by viewer]
touch_pad_xxx()
[Not supported by viewer]
diff --git a/docs/_static/touch_element/te_button.svg b/docs/_static/touch_element/te_button.svg deleted file mode 100644 index aa6b2ff1ed..0000000000 --- a/docs/_static/touch_element/te_button.svg +++ /dev/null @@ -1,244 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Touch button - - - - - - - - diff --git a/docs/_static/touch_element/te_component.svg b/docs/_static/touch_element/te_component.svg deleted file mode 100644 index 20e83bec2f..0000000000 --- a/docs/_static/touch_element/te_component.svg +++ /dev/null @@ -1,669 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Touch Sensor - - - - - - - - Touch channel - - - - - - - - - - - - - - Shield channel - - - - - - - - Guard channel - - - - - - - - Guard ring pad - - - - - - - - Shield grid pad - - - - - - - - Normal touch pad - - - - - - - - Printed circuit board - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - External resistor - - - - - - - - Water drop - - - - - - - - Water stream - - - - - - - - diff --git a/docs/_static/touch_element/te_matrix.svg b/docs/_static/touch_element/te_matrix.svg deleted file mode 100644 index 95fe52b921..0000000000 --- a/docs/_static/touch_element/te_matrix.svg +++ /dev/null @@ -1,393 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Touch Matrix button - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/_static/touch_element/te_signal.png b/docs/_static/touch_element/te_signal.png deleted file mode 100644 index a82c52b8e4b21a81640589ac1179c64cc335c5ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 125226 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

WpkH24_{gWT+TnxQNN7k6E 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