summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ports/esp32s2/common-hal/touchio/TouchIn.c26
-rw-r--r--ports/esp32s2/supervisor/port.c5
2 files changed, 23 insertions, 8 deletions
diff --git a/ports/esp32s2/common-hal/touchio/TouchIn.c b/ports/esp32s2/common-hal/touchio/TouchIn.c
index b44234775..b27cbcf86 100644
--- a/ports/esp32s2/common-hal/touchio/TouchIn.c
+++ b/ports/esp32s2/common-hal/touchio/TouchIn.c
@@ -25,10 +25,19 @@
*/
#include "shared-bindings/touchio/TouchIn.h"
-#include "py/runtime.h"
+#include "py/runtime.h"
#include "driver/touch_pad.h"
+bool touch_inited = false;
+
+void touchin_reset(void) {
+ if (touch_inited) {
+ touch_pad_deinit();
+ touch_inited = false;
+ }
+}
+
static uint16_t get_raw_reading(touchio_touchin_obj_t *self) {
uint32_t touch_value;
touch_pad_read_raw_data((touch_pad_t)self->pin->touch_channel, &touch_value);
@@ -45,11 +54,14 @@ void common_hal_touchio_touchin_construct(touchio_touchin_obj_t* self,
}
claim_pin(pin);
- touch_pad_init();
- touch_pad_config((touch_pad_t)pin->touch_channel);
+ if (!touch_inited) {
+ touch_pad_init();
+ touch_pad_set_fsm_mode(TOUCH_FSM_MODE_TIMER);
+ touch_pad_fsm_start();
+ touch_inited = true;
+ }
- touch_pad_set_fsm_mode(TOUCH_FSM_MODE_TIMER);
- touch_pad_fsm_start();
+ touch_pad_config((touch_pad_t)pin->touch_channel);
// wait for "raw data" to reset
mp_hal_delay_ms(10);
@@ -73,14 +85,12 @@ void common_hal_touchio_touchin_deinit(touchio_touchin_obj_t* self) {
if (common_hal_touchio_touchin_deinited(self)) {
return;
}
- touch_pad_deinit();
reset_pin_number(self->pin->touch_channel);
self->pin = NULL;
}
bool common_hal_touchio_touchin_get_value(touchio_touchin_obj_t *self) {
- uint16_t reading = get_raw_reading(self);
- return reading > self->threshold;
+ return get_raw_reading(self) > self->threshold;
}
uint16_t common_hal_touchio_touchin_get_raw_value(touchio_touchin_obj_t *self) {
diff --git a/ports/esp32s2/supervisor/port.c b/ports/esp32s2/supervisor/port.c
index 264bdee97..0841081de 100644
--- a/ports/esp32s2/supervisor/port.c
+++ b/ports/esp32s2/supervisor/port.c
@@ -44,6 +44,7 @@
#include "common-hal/ps2io/Ps2.h"
#include "common-hal/pulseio/PulseIn.h"
#include "common-hal/pwmio/PWMOut.h"
+#include "common-hal/touchio/TouchIn.h"
#include "common-hal/watchdog/WatchDogTimer.h"
#include "common-hal/wifi/__init__.h"
#include "supervisor/memory.h"
@@ -146,6 +147,10 @@ void reset_port(void) {
rtc_reset();
#endif
+#if CIRCUITPY_TOUCHIO_USE_NATIVE
+ touchin_reset();
+#endif
+
#if CIRCUITPY_WATCHDOG
watchdog_reset();
#endif