Skip to content

Added TOUCH test sketch + test script #7413

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 8 commits into from
Nov 2, 2022
Merged
Show file tree
Hide file tree
Changes from 7 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions tests/touch/test_touch.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
def test_touch(dut):
dut.expect_unity_test_output(timeout=240)
196 changes: 196 additions & 0 deletions tests/touch/touch.ino
Original file line number Diff line number Diff line change
@@ -0,0 +1,196 @@
#include <unity.h>
#include "soc/soc_caps.h"

#if SOC_TOUCH_SENSOR_NUM > 0

#include "driver/touch_pad.h"

#if CONFIG_IDF_TARGET_ESP32

#define TEST_TOUCH_CHANNEL (9)
static touch_pad_t touch_list[TEST_TOUCH_CHANNEL] = {
TOUCH_PAD_NUM0,
//TOUCH_PAD_NUM1 is GPIO0, for download.
TOUCH_PAD_NUM2,
TOUCH_PAD_NUM3,
TOUCH_PAD_NUM4,
TOUCH_PAD_NUM5,
TOUCH_PAD_NUM6,
TOUCH_PAD_NUM7,
TOUCH_PAD_NUM8,
TOUCH_PAD_NUM9
};

uint8_t TOUCH_GPIOS[] = {4,2,15,13,12,14,27,33,32};

#define NO_TOUCH_GPIO 25

#define RELEASED_VALUE 80 //80+ read value to pass test
#define PRESSED_VALUE 20 //20- read value to pass test
#define INTERRUPT_THRESHOLD 40

#else //ESP32S2 and ESP32S3

#define TEST_TOUCH_CHANNEL (12) //14
static touch_pad_t touch_list[TEST_TOUCH_CHANNEL] = {
TOUCH_PAD_NUM1,
TOUCH_PAD_NUM2,
TOUCH_PAD_NUM3,
TOUCH_PAD_NUM4,
TOUCH_PAD_NUM5,
TOUCH_PAD_NUM6,
TOUCH_PAD_NUM7,
TOUCH_PAD_NUM8,
TOUCH_PAD_NUM9,
TOUCH_PAD_NUM10,
TOUCH_PAD_NUM11,
TOUCH_PAD_NUM12
//TOUCH_PAD_NUM13, //Wrong reading
//TOUCH_PAD_NUM14
};

uint8_t TOUCH_GPIOS[] = {1,2,3,4,5,6,7,8,9,10,11,12/*,13,14*/};

#define NO_TOUCH_GPIO 17

#if CONFIG_IDF_TARGET_ESP32S2
#define RELEASED_VALUE 10000 //10000- read value to pass test
#define PRESSED_VALUE 42000 //40000+ read value to pass test
#define INTERRUPT_THRESHOLD 30000
#elif CONFIG_IDF_TARGET_ESP32S3
#define RELEASED_VALUE 25000 //25000- read value to pass test
#define PRESSED_VALUE 100000 //150000+ read value to pass test
#define INTERRUPT_THRESHOLD 80000
#endif

#endif

bool touch1detected = false;
bool touch2detected = false;

void gotTouch1() {
touch1detected = true;
}

void gotTouch2() {
touch2detected = true;
}

/*
* Change the slope to get larger value from touch sensor.
*/
static void test_press_fake(touch_pad_t pad_num) {
touch_pad_set_cnt_mode(pad_num, TOUCH_PAD_SLOPE_1, TOUCH_PAD_TIE_OPT_DEFAULT);
}

/*
* Change the slope to get smaller value from touch sensor.
*/
static void test_release_fake(touch_pad_t pad_num) {
touch_pad_set_cnt_mode(pad_num, TOUCH_PAD_SLOPE_7, TOUCH_PAD_TIE_OPT_DEFAULT);
}


/* These functions are intended to be called before and after each test. */
void setUp(void) {

}

void tearDown(void) {
for (int i = 0; i < TEST_TOUCH_CHANNEL; i++) {
test_release_fake(touch_list[i]);
}
delay(100);
}

/*
* Test Touch read on all available channels - compare values if reading is right
*/
void test_touch_read(void) {

//TEST RELEASE STATE
for (int i = 0; i < sizeof(TOUCH_GPIOS); i++) {
#ifdef CONFIG_IDF_TARGET_ESP32
TEST_ASSERT_GREATER_THAN(RELEASED_VALUE, touchRead(TOUCH_GPIOS[i]));
#else
TEST_ASSERT_LESS_THAN(RELEASED_VALUE, touchRead(TOUCH_GPIOS[i]));
#endif
}

// TEST PRESS STATE
for (int j = 0; j < TEST_TOUCH_CHANNEL; j++) {
test_press_fake(touch_list[j]);
}
delay(100);

for (int k = 0; k < sizeof(TOUCH_GPIOS); k++) {
#ifdef CONFIG_IDF_TARGET_ESP32
TEST_ASSERT_LESS_THAN(PRESSED_VALUE,touchRead(TOUCH_GPIOS[k]));
#else
TEST_ASSERT_GREATER_THAN(PRESSED_VALUE, touchRead(TOUCH_GPIOS[k]));
#endif
}
}

void test_touch_interrtupt(void) {

touchAttachInterrupt(TOUCH_GPIOS[0], gotTouch1, INTERRUPT_THRESHOLD);
touchAttachInterrupt(TOUCH_GPIOS[1], gotTouch2, INTERRUPT_THRESHOLD);

test_press_fake(touch_list[0]);
test_press_fake(touch_list[1]);

delay(300);

touchDetachInterrupt(TOUCH_GPIOS[0]);
touchDetachInterrupt(TOUCH_GPIOS[1]);

TEST_ASSERT_TRUE(touch1detected);
TEST_ASSERT_TRUE(touch2detected);
}

void test_touch_errors(void) {

TEST_ASSERT_FALSE(touchRead(NO_TOUCH_GPIO));
}

void setup() {
Serial.begin(115200);
while (!Serial) {
;
}

UNITY_BEGIN();
RUN_TEST(test_touch_read);
RUN_TEST(test_touch_interrtupt);
RUN_TEST(test_touch_errors);
UNITY_END();
}

void loop() {

}

#else
//PASS TEST for UNSUPPORTED CHIPS

void test_pass(void){
TEST_ASSERT_EQUAL(1, 1);
}

void setup() {
Serial.begin(115200);
while (!Serial) {
;
}

UNITY_BEGIN();
RUN_TEST(test_pass);
UNITY_END();
}

void loop() {

}

#endif