mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
touch: move unit tests to test_app
This commit is contained in:
parent
e51845d04c
commit
9892fb760b
@ -43,3 +43,11 @@ components/driver/test_apps/sdm:
|
||||
components/driver/test_apps/temperature_sensor:
|
||||
disable:
|
||||
- if: SOC_TEMP_SENSOR_SUPPORTED != 1
|
||||
|
||||
components/driver/test_apps/touch_sensor_v1:
|
||||
disable:
|
||||
- if: SOC_TOUCH_VERSION_1 != 1
|
||||
|
||||
components/driver/test_apps/touch_sensor_v2:
|
||||
disable:
|
||||
- if: SOC_TOUCH_VERSION_2 != 1
|
||||
|
@ -1,5 +1,5 @@
|
||||
idf_component_register(SRC_DIRS . param_test touch_sensor_test dac_dma_test
|
||||
PRIV_INCLUDE_DIRS include param_test/include touch_sensor_test/include
|
||||
idf_component_register(SRC_DIRS . param_test dac_dma_test
|
||||
PRIV_INCLUDE_DIRS include param_test/include
|
||||
PRIV_REQUIRES cmock test_utils driver nvs_flash
|
||||
esp_timer esp_adc esp_event esp_wifi spi_flash)
|
||||
target_compile_options(${COMPONENT_LIB} PRIVATE "-Wno-format")
|
||||
|
@ -0,0 +1,5 @@
|
||||
# This is the project CMakeLists.txt file for the test subproject
|
||||
cmake_minimum_required(VERSION 3.16)
|
||||
|
||||
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
|
||||
project(touch_sensor_v1_test)
|
2
components/driver/test_apps/touch_sensor_v1/README.md
Normal file
2
components/driver/test_apps/touch_sensor_v1/README.md
Normal file
@ -0,0 +1,2 @@
|
||||
| Supported Targets | ESP32 |
|
||||
| ----------------- | ----- |
|
@ -0,0 +1,3 @@
|
||||
idf_component_register(SRCS "test_app_main.c" "test_touch_v1.c"
|
||||
WHOLE_ARCHIVE
|
||||
)
|
@ -0,0 +1,40 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
#include "unity.h"
|
||||
#include "unity_test_runner.h"
|
||||
#include "esp_heap_caps.h"
|
||||
|
||||
#define TEST_MEMORY_LEAK_THRESHOLD (-200)
|
||||
|
||||
static size_t before_free_8bit;
|
||||
static size_t before_free_32bit;
|
||||
|
||||
static void check_leak(size_t before_free, size_t after_free, const char *type)
|
||||
{
|
||||
ssize_t delta = after_free - before_free;
|
||||
printf("MALLOC_CAP_%s: Before %u bytes free, After %u bytes free (delta %d)\n", type, before_free, after_free, delta);
|
||||
TEST_ASSERT_MESSAGE(delta >= TEST_MEMORY_LEAK_THRESHOLD, "memory leak");
|
||||
}
|
||||
|
||||
void setUp(void)
|
||||
{
|
||||
before_free_8bit = heap_caps_get_free_size(MALLOC_CAP_8BIT);
|
||||
before_free_32bit = heap_caps_get_free_size(MALLOC_CAP_32BIT);
|
||||
}
|
||||
|
||||
void tearDown(void)
|
||||
{
|
||||
size_t after_free_8bit = heap_caps_get_free_size(MALLOC_CAP_8BIT);
|
||||
size_t after_free_32bit = heap_caps_get_free_size(MALLOC_CAP_32BIT);
|
||||
check_leak(before_free_8bit, after_free_8bit, "8BIT");
|
||||
check_leak(before_free_32bit, after_free_32bit, "32BIT");
|
||||
}
|
||||
|
||||
void app_main(void)
|
||||
{
|
||||
unity_run_menu();
|
||||
}
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2015-2021 Espressif Systems (Shanghai) CO LTD
|
||||
* SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
@ -8,7 +8,6 @@
|
||||
Tests for the touch sensor device driver for ESP32
|
||||
*/
|
||||
#include "sdkconfig.h"
|
||||
#if CONFIG_IDF_TARGET_ESP32
|
||||
|
||||
#include "esp_system.h"
|
||||
#include "driver/touch_pad.h"
|
||||
@ -17,8 +16,6 @@
|
||||
#include "freertos/FreeRTOS.h"
|
||||
#include "freertos/task.h"
|
||||
#include "esp_log.h"
|
||||
#include "nvs_flash.h"
|
||||
#include "test_utils.h"
|
||||
#include "soc/rtc_cntl_reg.h"
|
||||
#include "soc/rtc_cntl_struct.h"
|
||||
#include "soc/sens_reg.h"
|
||||
@ -28,6 +25,9 @@
|
||||
#include "soc/rtc_io_reg.h"
|
||||
#include "soc/rtc_io_struct.h"
|
||||
#include "esp_rom_sys.h"
|
||||
#if CONFIG_PM_ENABLE
|
||||
#include "esp_pm.h"
|
||||
#endif
|
||||
|
||||
static const char *TAG = "test_touch";
|
||||
|
||||
@ -40,9 +40,9 @@ static const char *TAG = "test_touch";
|
||||
TEST_ASSERT_EQUAL_UINT32(REG_GET_FIELD(RTC_IO_DATE_REG, RTC_IO_IO_DATE), RTCIO.date.date); \
|
||||
})
|
||||
|
||||
#define TOUCH_READ_ERROR (100)
|
||||
#define TEST_TOUCH_COUNT_NUM (10)
|
||||
#define TEST_TOUCH_CHANNEL (3)
|
||||
#define TOUCH_READ_ERROR_THRESH (0.1) // 10% error
|
||||
#define TEST_TOUCH_COUNT_NUM (10)
|
||||
#define TEST_TOUCH_CHANNEL (3)
|
||||
static touch_pad_t touch_list[TEST_TOUCH_CHANNEL] = {
|
||||
// TOUCH_PAD_NUM0,
|
||||
// TOUCH_PAD_NUM1 is GPIO0, for download.
|
||||
@ -158,7 +158,7 @@ static esp_err_t test_touch_timer_read(void)
|
||||
for (int i = 0; i < TEST_TOUCH_CHANNEL; i++) {
|
||||
TEST_ESP_OK( touch_pad_read(touch_list[i], &touch_temp[i]) );
|
||||
TEST_ASSERT_NOT_EQUAL(TOUCH_READ_INVALID_VAL, touch_temp[i]);
|
||||
TEST_ASSERT_UINT32_WITHIN(TOUCH_READ_ERROR, touch_temp[i], touch_value[i]);
|
||||
TEST_ASSERT_UINT32_WITHIN((uint32_t)((float)touch_temp[i]*TOUCH_READ_ERROR_THRESH), touch_temp[i], touch_value[i]);
|
||||
}
|
||||
vTaskDelay(50 / portTICK_PERIOD_MS);
|
||||
}
|
||||
@ -192,7 +192,7 @@ static esp_err_t test_touch_filtered_read(void)
|
||||
TEST_ASSERT_NOT_EQUAL(TOUCH_READ_INVALID_VAL, touch_value);
|
||||
TEST_ESP_OK( touch_pad_read_filtered(touch_list[i], &touch_temp) );
|
||||
TEST_ASSERT_NOT_EQUAL(TOUCH_READ_INVALID_VAL, touch_temp);
|
||||
TEST_ASSERT_UINT32_WITHIN(TOUCH_READ_ERROR, touch_temp, touch_value);
|
||||
TEST_ASSERT_UINT32_WITHIN((uint32_t)((float)touch_temp*TOUCH_READ_ERROR_THRESH), touch_temp, touch_value);
|
||||
printf("T%d:[%4d] ", touch_list[i], touch_value);
|
||||
}
|
||||
vTaskDelay(50 / portTICK_PERIOD_MS);
|
||||
@ -207,11 +207,20 @@ static esp_err_t test_touch_filtered_read(void)
|
||||
// test the basic configuration function with right parameters and error parameters
|
||||
TEST_CASE("Touch Sensor all channel read test", "[touch]")
|
||||
{
|
||||
#if CONFIG_PM_ENABLE
|
||||
esp_pm_lock_handle_t pm_lock;
|
||||
esp_pm_lock_create(ESP_PM_NO_LIGHT_SLEEP, 0, "test_touch", &pm_lock);
|
||||
esp_pm_lock_acquire(pm_lock);
|
||||
#endif
|
||||
TOUCH_REG_BASE_TEST();
|
||||
test_touch_sw_read_test_runner();
|
||||
TEST_ESP_OK( test_touch_sw_read() );
|
||||
TEST_ESP_OK( test_touch_timer_read() );
|
||||
TEST_ESP_OK( test_touch_filtered_read() );
|
||||
#if CONFIG_PM_ENABLE
|
||||
esp_pm_lock_release(pm_lock);
|
||||
esp_pm_lock_delete(pm_lock);
|
||||
#endif
|
||||
}
|
||||
|
||||
static int test_touch_parameter(touch_pad_t pad_num, int meas_time, int slp_time, int vol_h, int vol_l, int vol_a, int slope)
|
||||
@ -366,5 +375,3 @@ TEST_CASE("Touch Sensor interrupt test", "[touch]")
|
||||
{
|
||||
TEST_ESP_OK( test_touch_interrupt() );
|
||||
}
|
||||
|
||||
#endif // CONFIG_IDF_TARGET_ESP32
|
@ -0,0 +1,12 @@
|
||||
# SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD
|
||||
# SPDX-License-Identifier: Unlicense OR CC0-1.0
|
||||
import pytest
|
||||
from pytest_embedded import Dut
|
||||
|
||||
|
||||
@pytest.mark.esp32
|
||||
@pytest.mark.generic
|
||||
def test_touch_sensor_v1(dut: Dut) -> None:
|
||||
dut.expect_exact('Press ENTER to see the list of tests')
|
||||
dut.write('*')
|
||||
dut.expect_unity_test_output(timeout=60)
|
@ -0,0 +1,2 @@
|
||||
CONFIG_FREERTOS_HZ=1000
|
||||
CONFIG_ESP_TASK_WDT=n
|
@ -0,0 +1,5 @@
|
||||
# This is the project CMakeLists.txt file for the test subproject
|
||||
cmake_minimum_required(VERSION 3.16)
|
||||
|
||||
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
|
||||
project(touch_sensor_v2_test)
|
2
components/driver/test_apps/touch_sensor_v2/README.md
Normal file
2
components/driver/test_apps/touch_sensor_v2/README.md
Normal file
@ -0,0 +1,2 @@
|
||||
| Supported Targets | ESP32-S2 | ESP32-S3 |
|
||||
| ----------------- | -------- | -------- |
|
@ -0,0 +1,3 @@
|
||||
idf_component_register(SRCS "test_app_main.c" "test_touch_v2.c" "touch_scope.c"
|
||||
WHOLE_ARCHIVE
|
||||
)
|
@ -0,0 +1,41 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
#include "unity.h"
|
||||
#include "unity_test_runner.h"
|
||||
#include "esp_heap_caps.h"
|
||||
|
||||
// que_touch may be created in any case and reused among all cases so we can't free it, the threshold is left for that
|
||||
#define TEST_MEMORY_LEAK_THRESHOLD (-500)
|
||||
|
||||
static size_t before_free_8bit;
|
||||
static size_t before_free_32bit;
|
||||
|
||||
static void check_leak(size_t before_free, size_t after_free, const char *type)
|
||||
{
|
||||
ssize_t delta = after_free - before_free;
|
||||
printf("MALLOC_CAP_%s: Before %u bytes free, After %u bytes free (delta %d)\n", type, before_free, after_free, delta);
|
||||
TEST_ASSERT_MESSAGE(delta >= TEST_MEMORY_LEAK_THRESHOLD, "memory leak");
|
||||
}
|
||||
|
||||
void setUp(void)
|
||||
{
|
||||
before_free_8bit = heap_caps_get_free_size(MALLOC_CAP_8BIT);
|
||||
before_free_32bit = heap_caps_get_free_size(MALLOC_CAP_32BIT);
|
||||
}
|
||||
|
||||
void tearDown(void)
|
||||
{
|
||||
size_t after_free_8bit = heap_caps_get_free_size(MALLOC_CAP_8BIT);
|
||||
size_t after_free_32bit = heap_caps_get_free_size(MALLOC_CAP_32BIT);
|
||||
check_leak(before_free_8bit, after_free_8bit, "8BIT");
|
||||
check_leak(before_free_32bit, after_free_32bit, "32BIT");
|
||||
}
|
||||
|
||||
void app_main(void)
|
||||
{
|
||||
unity_run_menu();
|
||||
}
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2015-2022 Espressif Systems (Shanghai) CO LTD
|
||||
* SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
@ -8,7 +8,6 @@
|
||||
Tests for the touch sensor device driver for ESP32-S2 & ESP32-S3
|
||||
*/
|
||||
#include "sdkconfig.h"
|
||||
#if CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3
|
||||
|
||||
#include <string.h>
|
||||
#include <inttypes.h>
|
||||
@ -21,7 +20,6 @@
|
||||
#include "freertos/semphr.h"
|
||||
#include "freertos/queue.h"
|
||||
#include "esp_log.h"
|
||||
#include "test_utils.h"
|
||||
#include "soc/rtc_cntl_reg.h"
|
||||
#include "soc/rtc_cntl_struct.h"
|
||||
#include "soc/sens_reg.h"
|
||||
@ -60,7 +58,7 @@ void test_pxp_deinit_io(void)
|
||||
#endif
|
||||
|
||||
#define TOUCH_READ_INVALID_VAL (SOC_TOUCH_PAD_THRESHOLD_MAX)
|
||||
#define TOUCH_READ_ERROR (100)
|
||||
#define TOUCH_READ_ERROR_THRESH (0.1) // 10% error
|
||||
#define TOUCH_INTR_THRESHOLD (0.1)
|
||||
#define TOUCH_EXCEED_TIME_MS (1000)
|
||||
|
||||
@ -235,7 +233,7 @@ esp_err_t test_touch_sw_read(void)
|
||||
/* Check the stable of reading. */
|
||||
for (int i = 0; i < TEST_TOUCH_CHANNEL; i++) {
|
||||
if (touch_temp[i]) {
|
||||
TEST_ASSERT_UINT32_WITHIN(TOUCH_READ_ERROR, touch_temp[i], touch_value[i]);
|
||||
TEST_ASSERT_UINT32_WITHIN((uint32_t)((float)touch_temp[i]*TOUCH_READ_ERROR_THRESH), touch_temp[i], touch_value[i]);
|
||||
}
|
||||
touch_temp[i] = touch_value[i];
|
||||
}
|
||||
@ -304,7 +302,7 @@ esp_err_t test_touch_timer_read(void)
|
||||
printf("\n");
|
||||
for (int i = 0; i < TEST_TOUCH_CHANNEL; i++) {
|
||||
if (touch_temp[i]) {
|
||||
TEST_ASSERT_UINT32_WITHIN(TOUCH_READ_ERROR, touch_temp[i], touch_value[i]);
|
||||
TEST_ASSERT_UINT32_WITHIN((uint32_t)((float)touch_temp[i]*TOUCH_READ_ERROR_THRESH), touch_temp[i], touch_value[i]);
|
||||
}
|
||||
touch_temp[i] = touch_value[i];
|
||||
}
|
||||
@ -369,10 +367,10 @@ esp_err_t test_touch_filtered_read(void)
|
||||
TEST_ASSERT_NOT_EQUAL(TOUCH_READ_INVALID_VAL, touch_value[i]);
|
||||
TEST_ESP_OK( touch_pad_read_raw_data(touch_list[i], &touch_temp[i]) );
|
||||
TEST_ASSERT_NOT_EQUAL(TOUCH_READ_INVALID_VAL, touch_temp[i]);
|
||||
TEST_ASSERT_UINT32_WITHIN(TOUCH_READ_ERROR, touch_temp[i], touch_value[i]);
|
||||
TEST_ASSERT_UINT32_WITHIN((uint32_t)((float)touch_temp[i]*TOUCH_READ_ERROR_THRESH), touch_temp[i], touch_value[i]);
|
||||
TEST_ESP_OK( touch_pad_filter_read_smooth(touch_list[i], &touch_temp[i]) );
|
||||
TEST_ASSERT_NOT_EQUAL(TOUCH_READ_INVALID_VAL, touch_temp[i]);
|
||||
TEST_ASSERT_UINT32_WITHIN(TOUCH_READ_ERROR, touch_temp[i], touch_value[i]);
|
||||
TEST_ASSERT_UINT32_WITHIN((uint32_t)((float)touch_temp[i]*TOUCH_READ_ERROR_THRESH), touch_temp[i], touch_value[i]);
|
||||
}
|
||||
printf("touch filter init value:\n");
|
||||
printf_touch_hw_read("raw ");
|
||||
@ -386,13 +384,13 @@ esp_err_t test_touch_filtered_read(void)
|
||||
for (int i = 0; i < TEST_TOUCH_CHANNEL; i++) {
|
||||
TEST_ESP_OK( touch_pad_read_raw_data(touch_list[i], &touch_value[i]) );
|
||||
TEST_ESP_OK( touch_pad_read_benchmark(touch_list[i], &touch_temp[i]) );
|
||||
TEST_ASSERT_UINT32_WITHIN(TOUCH_READ_ERROR, touch_temp[i], touch_value[i]);
|
||||
TEST_ASSERT_UINT32_WITHIN((uint32_t)((float)touch_temp[i]*TOUCH_READ_ERROR_THRESH), touch_temp[i], touch_value[i]);
|
||||
TEST_ESP_OK( touch_pad_filter_read_smooth(touch_list[i], &touch_temp[i]) );
|
||||
TEST_ASSERT_UINT32_WITHIN(TOUCH_READ_ERROR, touch_temp[i], touch_value[i]);
|
||||
TEST_ASSERT_UINT32_WITHIN((uint32_t)((float)touch_temp[i]*TOUCH_READ_ERROR_THRESH), touch_temp[i], touch_value[i]);
|
||||
}
|
||||
for (int i = 0; i < TEST_TOUCH_CHANNEL; i++) {
|
||||
if (touch_temp[i]) {
|
||||
TEST_ASSERT_UINT32_WITHIN(TOUCH_READ_ERROR, touch_temp[i], touch_value[i]);
|
||||
TEST_ASSERT_UINT32_WITHIN((uint32_t)((float)touch_temp[i]*TOUCH_READ_ERROR_THRESH), touch_temp[i], touch_value[i]);
|
||||
}
|
||||
touch_temp[i] = touch_value[i];
|
||||
}
|
||||
@ -461,15 +459,15 @@ int test_touch_base_parameter(touch_pad_t pad_num, int meas_time, int slp_time,
|
||||
/* Correctness of reading. Ideal: benchmark == raw data == smooth data. */
|
||||
TEST_ESP_OK( touch_pad_read_raw_data(pad_num, &touch_value) );
|
||||
TEST_ESP_OK( touch_pad_read_benchmark(pad_num, &touch_filter) );
|
||||
TEST_ASSERT_UINT32_WITHIN(TOUCH_READ_ERROR, touch_filter, touch_value);
|
||||
TEST_ASSERT_UINT32_WITHIN((uint32_t)((float)touch_filter*TOUCH_READ_ERROR_THRESH), touch_filter, touch_value);
|
||||
TEST_ESP_OK( touch_pad_filter_read_smooth(pad_num, &touch_filter) );
|
||||
TEST_ASSERT_UINT32_WITHIN(TOUCH_READ_ERROR, touch_filter, touch_value);
|
||||
TEST_ASSERT_UINT32_WITHIN((uint32_t)((float)touch_filter*TOUCH_READ_ERROR_THRESH), touch_filter, touch_value);
|
||||
|
||||
/* Stable of reading */
|
||||
TEST_ESP_OK( touch_pad_read_raw_data(pad_num, &touch_value) );
|
||||
TEST_ASSERT_NOT_EQUAL(TOUCH_READ_INVALID_VAL, touch_value);
|
||||
if (touch_temp) {
|
||||
TEST_ASSERT_UINT32_WITHIN(TOUCH_READ_ERROR, touch_temp, touch_value);
|
||||
TEST_ASSERT_UINT32_WITHIN((uint32_t)((float)touch_temp*TOUCH_READ_ERROR_THRESH), touch_temp, touch_value);
|
||||
}
|
||||
touch_temp = touch_value;
|
||||
|
||||
@ -764,7 +762,6 @@ static void test_touch_intr_cb(void *arg)
|
||||
evt.pad_num = touch_pad_get_current_meas_channel();
|
||||
|
||||
if (!evt.intr_mask) {
|
||||
esp_rom_printf(".");
|
||||
return;
|
||||
}
|
||||
if (evt.intr_mask & TOUCH_PAD_INTR_MASK_SCAN_DONE) {
|
||||
@ -778,7 +775,6 @@ static void test_touch_intr_cb(void *arg)
|
||||
}
|
||||
if (evt.intr_mask & TOUCH_PAD_INTR_MASK_TIMEOUT) {
|
||||
s_touch_timeout_mask |= (BIT(evt.pad_num));
|
||||
esp_rom_printf("-%dtout-", SENS.sar_touch_status0.touch_scan_curr);
|
||||
}
|
||||
|
||||
xQueueSendFromISR(que_touch, &evt, &task_awoken);
|
||||
@ -1668,13 +1664,13 @@ esp_err_t test_touch_sleep_reading_stable(touch_pad_t sleep_pad)
|
||||
for (int i = 0; i < TEST_TOUCH_CHANNEL; i++) {
|
||||
TEST_ESP_OK( touch_pad_sleep_channel_read_data(sleep_pad, &touch_value) );
|
||||
TEST_ESP_OK( touch_pad_sleep_channel_read_benchmark(sleep_pad, &touch_temp) );
|
||||
TEST_ASSERT_UINT32_WITHIN(TOUCH_READ_ERROR, touch_temp, touch_value);
|
||||
TEST_ASSERT_UINT32_WITHIN((uint32_t)((float)touch_temp*TOUCH_READ_ERROR_THRESH), touch_temp, touch_value);
|
||||
TEST_ESP_OK( touch_pad_sleep_channel_read_smooth(sleep_pad, &touch_temp) );
|
||||
TEST_ASSERT_UINT32_WITHIN(TOUCH_READ_ERROR, touch_temp, touch_value);
|
||||
TEST_ASSERT_UINT32_WITHIN((uint32_t)((float)touch_temp*TOUCH_READ_ERROR_THRESH), touch_temp, touch_value);
|
||||
}
|
||||
for (int i = 0; i < TEST_TOUCH_CHANNEL; i++) {
|
||||
if (touch_temp) {
|
||||
TEST_ASSERT_UINT32_WITHIN(TOUCH_READ_ERROR, touch_temp, touch_value);
|
||||
TEST_ASSERT_UINT32_WITHIN((uint32_t)((float)touch_temp*TOUCH_READ_ERROR_THRESH), touch_temp, touch_value);
|
||||
}
|
||||
touch_temp = touch_value;
|
||||
}
|
||||
@ -1929,6 +1925,8 @@ esp_err_t test_touch_sleep_pad_interrupt_wakeup_deep_sleep(touch_pad_t sleep_pad
|
||||
return ESP_OK;
|
||||
}
|
||||
|
||||
#if !TEMPORARY_DISABLED_FOR_TARGETS(ESP32S2, ESP32S3) //TODO: IDF-5218
|
||||
|
||||
#include <sys/time.h>
|
||||
#include "esp_sleep.h"
|
||||
|
||||
@ -1979,10 +1977,6 @@ static void test_deep_sleep_init(void)
|
||||
|
||||
TEST_CASE("Touch Sensor sleep pad wakeup deep sleep test", "[touch][ignore]")
|
||||
{
|
||||
//TODO: IDF-5218
|
||||
#if TEMPORARY_DISABLED_FOR_TARGETS(ESP32S2)
|
||||
abort();
|
||||
#endif //TEMPORARY_DISABLED_FOR_TARGETS(..)
|
||||
test_deep_sleep_init();
|
||||
|
||||
/* Change the work duty of touch sensor to reduce current. */
|
||||
@ -1997,6 +1991,7 @@ TEST_CASE("Touch Sensor sleep pad wakeup deep sleep test", "[touch][ignore]")
|
||||
|
||||
esp_deep_sleep_start();
|
||||
}
|
||||
#endif //TEMPORARY_DISABLED_FOR_TARGETS(..)
|
||||
|
||||
#include "touch_scope.h"
|
||||
/*
|
||||
@ -2140,5 +2135,3 @@ void test_touch_slope_debug(int pad_num)
|
||||
#endif
|
||||
TEST_ESP_OK( touch_pad_deinit() );
|
||||
}
|
||||
|
||||
#endif // CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2015-2021 Espressif Systems (Shanghai) CO LTD
|
||||
* SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2015-2021 Espressif Systems (Shanghai) CO LTD
|
||||
* SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
@ -0,0 +1,13 @@
|
||||
# SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD
|
||||
# SPDX-License-Identifier: Unlicense OR CC0-1.0
|
||||
import pytest
|
||||
from pytest_embedded import Dut
|
||||
|
||||
|
||||
@pytest.mark.esp32s2
|
||||
@pytest.mark.esp32s3
|
||||
@pytest.mark.generic
|
||||
def test_touch_sensor_v2(dut: Dut) -> None:
|
||||
dut.expect_exact('Press ENTER to see the list of tests')
|
||||
dut.write('*')
|
||||
dut.expect_unity_test_output(timeout=120)
|
@ -0,0 +1,2 @@
|
||||
CONFIG_FREERTOS_HZ=1000
|
||||
CONFIG_ESP_TASK_WDT=n
|
6
components/touch_element/.build-test-rules.yml
Normal file
6
components/touch_element/.build-test-rules.yml
Normal file
@ -0,0 +1,6 @@
|
||||
# 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
|
@ -1,17 +1,8 @@
|
||||
// Copyright 2016-2020 Espressif Systems (Shanghai) PTE LTD
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2016-2022 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include "touch_element/touch_element.h"
|
||||
|
@ -1,16 +1,8 @@
|
||||
// Copyright 2016-2020 Espressif Systems (Shanghai) PTE LTD
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2016-2022 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
|
@ -1,10 +0,0 @@
|
||||
set(TOUCH_ELEMENT_COMPATIBLE_TARGETS "esp32s2" "esp32s3")
|
||||
|
||||
if(IDF_TARGET IN_LIST TOUCH_ELEMENT_COMPATIBLE_TARGETS)
|
||||
idf_component_register(SRCS "test_touch_element.c"
|
||||
"test_touch_button.c"
|
||||
"test_touch_slider.c"
|
||||
"test_touch_matrix.c"
|
||||
PRIV_REQUIRES unity touch_element)
|
||||
target_compile_options(${COMPONENT_LIB} PRIVATE "-Wno-format")
|
||||
endif()
|
5
components/touch_element/test_apps/CMakeLists.txt
Normal file
5
components/touch_element/test_apps/CMakeLists.txt
Normal file
@ -0,0 +1,5 @@
|
||||
# This is the project CMakeLists.txt file for the test subproject
|
||||
cmake_minimum_required(VERSION 3.16)
|
||||
|
||||
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
|
||||
project(touch_element_test)
|
2
components/touch_element/test_apps/README.md
Normal file
2
components/touch_element/test_apps/README.md
Normal file
@ -0,0 +1,2 @@
|
||||
| Supported Targets | ESP32-S2 | ESP32-S3 |
|
||||
| ----------------- | -------- | -------- |
|
4
components/touch_element/test_apps/main/CMakeLists.txt
Normal file
4
components/touch_element/test_apps/main/CMakeLists.txt
Normal file
@ -0,0 +1,4 @@
|
||||
idf_component_register(SRCS "test_app_main.c" "test_touch_element.c" "test_touch_button.c"
|
||||
"test_touch_slider.c" "test_touch_matrix.c"
|
||||
WHOLE_ARCHIVE
|
||||
)
|
43
components/touch_element/test_apps/main/test_app_main.c
Normal file
43
components/touch_element/test_apps/main/test_app_main.c
Normal file
@ -0,0 +1,43 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
#include "unity.h"
|
||||
#include "unity_test_runner.h"
|
||||
#include "esp_heap_caps.h"
|
||||
#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;
|
||||
static size_t before_free_32bit;
|
||||
|
||||
static void check_leak(size_t before_free, size_t after_free, const char *type)
|
||||
{
|
||||
ssize_t delta = after_free - before_free;
|
||||
printf("MALLOC_CAP_%s: Before %u bytes free, After %u bytes free (delta %d)\n", type, before_free, after_free, delta);
|
||||
TEST_ASSERT_MESSAGE(delta >= TEST_MEMORY_LEAK_THRESHOLD, "memory leak");
|
||||
}
|
||||
|
||||
void setUp(void)
|
||||
{
|
||||
before_free_8bit = heap_caps_get_free_size(MALLOC_CAP_8BIT);
|
||||
before_free_32bit = heap_caps_get_free_size(MALLOC_CAP_32BIT);
|
||||
}
|
||||
|
||||
void tearDown(void)
|
||||
{
|
||||
size_t after_free_8bit = heap_caps_get_free_size(MALLOC_CAP_8BIT);
|
||||
size_t after_free_32bit = heap_caps_get_free_size(MALLOC_CAP_32BIT);
|
||||
check_leak(before_free_8bit, after_free_8bit, "8BIT");
|
||||
check_leak(before_free_32bit, after_free_32bit, "32BIT");
|
||||
}
|
||||
|
||||
void app_main(void)
|
||||
{
|
||||
unity_run_menu();
|
||||
}
|
@ -1,3 +1,8 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: Unlicense OR CC0-1.0
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
@ -1,3 +1,8 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: Unlicense OR CC0-1.0
|
||||
*/
|
||||
/* ---------------------------------------------------------- README ------------------------------------------------
|
||||
* This doc is aimed at explain some important code block and do some records for the test result, if developer or
|
||||
* test-owner has some question in reading this code implementation, please read it first.
|
||||
@ -312,22 +317,22 @@ static void test_integrat_btn_sld_mat(void)
|
||||
for (int i = 0; i < 30; i++) {
|
||||
printf("Integration test... (%d/30)\n", i + 1);
|
||||
touch_elem_message_t valid_message;
|
||||
touch_button_message_t button_message;
|
||||
touch_slider_message_t slider_message;
|
||||
touch_matrix_message_t matrix_message;
|
||||
|
||||
valid_message.element_type = (random() % (TOUCH_ELEM_TYPE_MATRIX + 1));
|
||||
if (valid_message.element_type == TOUCH_ELEM_TYPE_BUTTON) {
|
||||
uint32_t button_index = random() % BUTTON_CHANNEL_NUM;
|
||||
valid_message.handle = button_handle[button_index];
|
||||
touch_button_message_t button_message = {
|
||||
.event = TOUCH_BUTTON_EVT_ON_PRESS
|
||||
};
|
||||
button_message.event = TOUCH_BUTTON_EVT_ON_PRESS;
|
||||
memcpy(valid_message.child_msg, &button_message, sizeof(button_message)); //Construct child message
|
||||
xQueueSend(monitor.valid_msg_handle, &valid_message, portMAX_DELAY);
|
||||
test_button_event_simulator(valid_message.handle, button_message.event);
|
||||
} else if (valid_message.element_type == TOUCH_ELEM_TYPE_SLIDER) {
|
||||
valid_message.handle = slider_handle;
|
||||
touch_slider_message_t slider_message = {
|
||||
.event = TOUCH_SLIDER_EVT_ON_PRESS,
|
||||
.position = 0 //No check
|
||||
};
|
||||
slider_message.event = TOUCH_SLIDER_EVT_ON_PRESS;
|
||||
slider_message.position = 0; //No check
|
||||
memcpy(valid_message.child_msg, &slider_message, sizeof(slider_message)); //Construct child message
|
||||
xQueueSend(monitor.valid_msg_handle, &valid_message, portMAX_DELAY);
|
||||
test_slider_event_simulator(valid_message.handle, slider_message.event, 1);
|
||||
@ -335,33 +340,30 @@ static void test_integrat_btn_sld_mat(void)
|
||||
uint32_t matrix_x_axis_index = random() % MATRIX_CHANNEL_NUM_X;
|
||||
uint32_t matrix_y_axis_index = random() % MATRIX_CHANNEL_NUM_Y;
|
||||
valid_message.handle = matrix_handle;
|
||||
touch_matrix_message_t matrix_message = {
|
||||
.event = TOUCH_MATRIX_EVT_ON_PRESS,
|
||||
.position.x_axis = matrix_x_axis_index,
|
||||
.position.y_axis = matrix_y_axis_index,
|
||||
.position.index = matrix_x_axis_index * MATRIX_CHANNEL_NUM_Y + matrix_y_axis_index
|
||||
};
|
||||
matrix_message.event = TOUCH_MATRIX_EVT_ON_PRESS;
|
||||
matrix_message.position.x_axis = matrix_x_axis_index;
|
||||
matrix_message.position.y_axis = matrix_y_axis_index;
|
||||
matrix_message.position.index = matrix_x_axis_index * MATRIX_CHANNEL_NUM_Y + matrix_y_axis_index;
|
||||
memcpy(valid_message.child_msg, &matrix_message, sizeof(matrix_message)); //Construct child message
|
||||
xQueueSend(monitor.valid_msg_handle, &valid_message, portMAX_DELAY);
|
||||
test_matrix_event_simulator(valid_message.handle, matrix_message.event, matrix_message.position.index);
|
||||
} else {
|
||||
TEST_ABORT();
|
||||
}
|
||||
os_ret = xSemaphoreTake(monitor.response_sig_handle, pdMS_TO_TICKS(500));
|
||||
TEST_ASSERT_MESSAGE(os_ret == pdPASS, "response queue timeout (500ms)");
|
||||
|
||||
if (valid_message.element_type == TOUCH_ELEM_TYPE_BUTTON) {
|
||||
touch_button_message_t button_message;
|
||||
button_message.event = TOUCH_BUTTON_EVT_ON_RELEASE;
|
||||
memcpy(valid_message.child_msg, &button_message, sizeof(button_message));
|
||||
xQueueSend(monitor.valid_msg_handle, &valid_message, portMAX_DELAY);
|
||||
test_button_event_simulator(valid_message.handle, button_message.event);
|
||||
} else if (valid_message.element_type == TOUCH_ELEM_TYPE_SLIDER) {
|
||||
touch_slider_message_t slider_message;
|
||||
slider_message.event = TOUCH_SLIDER_EVT_ON_RELEASE;
|
||||
memcpy(valid_message.child_msg, &slider_message, sizeof(slider_message));
|
||||
xQueueSend(monitor.valid_msg_handle, &valid_message, portMAX_DELAY);
|
||||
test_slider_event_simulator(valid_message.handle, slider_message.event, 1);
|
||||
} else if (valid_message.element_type == TOUCH_ELEM_TYPE_MATRIX) {
|
||||
touch_matrix_message_t matrix_message;
|
||||
matrix_message.event = TOUCH_MATRIX_EVT_ON_RELEASE;
|
||||
memcpy(valid_message.child_msg, &matrix_message, sizeof(matrix_message));
|
||||
xQueueSend(monitor.valid_msg_handle, &valid_message, portMAX_DELAY);
|
@ -1,3 +1,8 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: Unlicense OR CC0-1.0
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
@ -1,3 +1,8 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: Unlicense OR CC0-1.0
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
21
components/touch_element/test_apps/pytest_touch_element.py
Normal file
21
components/touch_element/test_apps/pytest_touch_element.py
Normal file
@ -0,0 +1,21 @@
|
||||
# SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD
|
||||
# SPDX-License-Identifier: Unlicense OR CC0-1.0
|
||||
import pytest
|
||||
from pytest_embedded import Dut
|
||||
|
||||
|
||||
@pytest.mark.esp32s2
|
||||
@pytest.mark.esp32s3
|
||||
@pytest.mark.generic
|
||||
@pytest.mark.parametrize(
|
||||
'config',
|
||||
[
|
||||
'opt_o0',
|
||||
'opt_o2'
|
||||
],
|
||||
indirect=True,
|
||||
)
|
||||
def test_touch_element(dut: Dut) -> None:
|
||||
dut.expect_exact('Press ENTER to see the list of tests')
|
||||
dut.write('*')
|
||||
dut.expect_unity_test_output(timeout=120)
|
1
components/touch_element/test_apps/sdkconfig.ci.opt_o0
Normal file
1
components/touch_element/test_apps/sdkconfig.ci.opt_o0
Normal file
@ -0,0 +1 @@
|
||||
CONFIG_COMPILER_OPTIMIZATION_NONE=y
|
1
components/touch_element/test_apps/sdkconfig.ci.opt_o2
Normal file
1
components/touch_element/test_apps/sdkconfig.ci.opt_o2
Normal file
@ -0,0 +1 @@
|
||||
CONFIG_COMPILER_OPTIMIZATION_PERF=y
|
3
components/touch_element/test_apps/sdkconfig.defaults
Normal file
3
components/touch_element/test_apps/sdkconfig.defaults
Normal file
@ -0,0 +1,3 @@
|
||||
CONFIG_FREERTOS_HZ=1000
|
||||
CONFIG_ESP_TASK_WDT=n
|
||||
CONFIG_ESP_MAIN_TASK_STACK_SIZE=8192
|
@ -1,14 +1,8 @@
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2016-2022 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
#include <sys/queue.h>
|
||||
|
@ -1,14 +1,8 @@
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2016-2022 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
#include <sys/queue.h>
|
||||
|
@ -1,14 +1,8 @@
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2016-2022 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
#include <sys/queue.h>
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2021 Espressif Systems (Shanghai) CO LTD
|
||||
* SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: CC0-1.0
|
||||
*/
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2021 Espressif Systems (Shanghai) CO LTD
|
||||
* SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: CC0-1.0
|
||||
*/
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2021 Espressif Systems (Shanghai) CO LTD
|
||||
* SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: CC0-1.0
|
||||
*/
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2021 Espressif Systems (Shanghai) CO LTD
|
||||
* SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: CC0-1.0
|
||||
*/
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2021 Espressif Systems (Shanghai) CO LTD
|
||||
* SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: CC0-1.0
|
||||
*/
|
||||
|
@ -1267,15 +1267,6 @@ components/tcp_transport/test/test_transport_basic.c
|
||||
components/tcp_transport/test/test_transport_connect.c
|
||||
components/tcp_transport/test/test_transport_fixtures.c
|
||||
components/tcp_transport/transport_utils.c
|
||||
components/touch_element/include/touch_element/touch_button.h
|
||||
components/touch_element/include/touch_element/touch_element_private.h
|
||||
components/touch_element/test/test_touch_button.c
|
||||
components/touch_element/test/test_touch_element.c
|
||||
components/touch_element/test/test_touch_matrix.c
|
||||
components/touch_element/test/test_touch_slider.c
|
||||
components/touch_element/touch_button.c
|
||||
components/touch_element/touch_matrix.c
|
||||
components/touch_element/touch_slider.c
|
||||
components/ulp/esp32ulp_mapgen.py
|
||||
components/ulp/test/esp32/test_ulp_as.c
|
||||
components/unity/include/priv/setjmp.h
|
||||
@ -1695,15 +1686,6 @@ examples/peripherals/spi_slave_hd/append_mode/master/main/app_main.c
|
||||
examples/peripherals/spi_slave_hd/append_mode/slave/main/app_main.c
|
||||
examples/peripherals/spi_slave_hd/segment_mode/seg_master/main/app_main.c
|
||||
examples/peripherals/spi_slave_hd/segment_mode/seg_slave/main/app_main.c
|
||||
examples/peripherals/touch_element/touch_button/main/touch_button_example_main.c
|
||||
examples/peripherals/touch_element/touch_element_waterproof/main/waterproof_example_main.c
|
||||
examples/peripherals/touch_element/touch_elements_combination/main/touch_elements_example_main.c
|
||||
examples/peripherals/touch_element/touch_matrix/main/touch_matrix_example_main.c
|
||||
examples/peripherals/touch_element/touch_slider/main/touch_slider_example_main.c
|
||||
examples/peripherals/touch_pad_interrupt/main/esp32/tp_interrupt_main.c
|
||||
examples/peripherals/touch_pad_interrupt/main/esp32s2/tp_interrupt_main.c
|
||||
examples/peripherals/touch_pad_read/main/esp32/tp_read_main.c
|
||||
examples/peripherals/touch_pad_read/main/esp32s2/tp_read_main.c
|
||||
examples/peripherals/twai/twai_alert_and_recovery/example_test.py
|
||||
examples/peripherals/twai/twai_alert_and_recovery/main/twai_alert_and_recovery_example_main.c
|
||||
examples/peripherals/twai/twai_network/example_test.py
|
||||
|
Loading…
Reference in New Issue
Block a user