From 0ea965d07ef6b4c76c11201b0cb0b01018fe19db Mon Sep 17 00:00:00 2001 From: cepetr Date: Fri, 21 Jun 2024 12:48:31 +0200 Subject: [PATCH] fix(core/embed): fix touch driver on dev kits [no changelog] --- core/Makefile | 1 + core/embed/trezorhal/stm32f4/touch/stmpe811.c | 7 +++++-- core/embed/trezorhal/stm32u5/touch/sitronix.c | 19 ++++++++++++++----- 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/core/Makefile b/core/Makefile index daf553def..22c933b69 100644 --- a/core/Makefile +++ b/core/Makefile @@ -66,6 +66,7 @@ MODEL_FEATURE = model_mercury else ifeq ($(TREZOR_MODEL),$(filter $(TREZOR_MODEL),DISC1)) MCU = STM32F4 LAYOUT_FILE = embed/models/D001/model_D001.h +OPENOCD_TARGET = target/stm32f4x.cfg else ifeq ($(TREZOR_MODEL),$(filter $(TREZOR_MODEL),DISC2)) MCU = STM32U5 LAYOUT_FILE = embed/models/D002/model_D002.h diff --git a/core/embed/trezorhal/stm32f4/touch/stmpe811.c b/core/embed/trezorhal/stm32f4/touch/stmpe811.c index 1d198513e..05a6f5572 100644 --- a/core/embed/trezorhal/stm32f4/touch/stmpe811.c +++ b/core/embed/trezorhal/stm32f4/touch/stmpe811.c @@ -633,8 +633,11 @@ uint32_t touch_get_event(void) { uint32_t xy = touch_pack_xy(driver->prev_state.X, driver->prev_state.Y); event = TOUCH_END | xy; } else if (new_state.TouchDetected) { - uint32_t xy = touch_pack_xy(new_state.X, new_state.Y); - event = TOUCH_MOVE | xy; + if ((new_state.X != driver->prev_state.X) || + (new_state.Y != driver->prev_state.Y)) { + uint32_t xy = touch_pack_xy(new_state.X, new_state.Y); + event = TOUCH_MOVE | xy; + } } driver->prev_state = new_state; diff --git a/core/embed/trezorhal/stm32u5/touch/sitronix.c b/core/embed/trezorhal/stm32u5/touch/sitronix.c index 91301376b..b3f2c70e1 100644 --- a/core/embed/trezorhal/stm32u5/touch/sitronix.c +++ b/core/embed/trezorhal/stm32u5/touch/sitronix.c @@ -1193,11 +1193,16 @@ uint8_t touch_get_version(void) { } secbool touch_activity(void) { - if (sitronix_touching) { - return sectrue; - } else { + touch_driver_t *driver = &g_touch_driver; + + if (sectrue != driver->initialized) { return secfalse; } + + TS_State_t new_state = {0}; + BSP_TS_GetState(0, &new_state); + + return sitronix_touching ? sectrue : secfalse; } uint32_t touch_get_event(void) { @@ -1210,6 +1215,7 @@ uint32_t touch_get_event(void) { TS_State_t new_state = {0}; BSP_TS_GetState(0, &new_state); + new_state.TouchDetected = (sitronix_touching != 0); new_state.TouchX = new_state.TouchX > 120 ? new_state.TouchX - 120 : 0; new_state.TouchY = new_state.TouchY > 120 ? new_state.TouchY - 120 : 0; @@ -1223,8 +1229,11 @@ uint32_t touch_get_event(void) { touch_pack_xy(driver->prev_state.TouchX, driver->prev_state.TouchY); event = TOUCH_END | xy; } else if (new_state.TouchDetected) { - uint32_t xy = touch_pack_xy(new_state.TouchX, new_state.TouchY); - event = TOUCH_MOVE | xy; + if ((new_state.TouchX != driver->prev_state.TouchX) || + (new_state.TouchY != driver->prev_state.TouchY)) { + uint32_t xy = touch_pack_xy(new_state.TouchX, new_state.TouchY); + event = TOUCH_MOVE | xy; + } } driver->prev_state = new_state;