diff options
Diffstat (limited to 'fw/fe310/eos/eve/eve_touch.c')
-rw-r--r-- | fw/fe310/eos/eve/eve_touch.c | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/fw/fe310/eos/eve/eve_touch.c b/fw/fe310/eos/eve/eve_touch.c index 0dc8b31..d17a509 100644 --- a/fw/fe310/eos/eve/eve_touch.c +++ b/fw/fe310/eos/eve/eve_touch.c @@ -128,10 +128,18 @@ void eve_handle_touch(uint16_t intr_flags) { touch->tracker.tag = 0; } if (touch->tracker.tag && ((dx > EVE_TOUCH_THRESHOLD_X) || (dy > EVE_TOUCH_THRESHOLD_Y))) { - if (dx > EVE_TOUCH_THRESHOLD_X) { - touch->eevt |= touch->x > touch->x0 ? EVE_TOUCH_EETYPE_TRACK_RIGHT : EVE_TOUCH_EETYPE_TRACK_LEFT; + int track_x = 0; + + if ((dx > EVE_TOUCH_THRESHOLD_X) && (dx > EVE_TOUCH_THRESHOLD_Y) && ((touch_tag_opt[touch->tracker.tag] & EVE_TOUCH_OPT_TRACK_XY) == EVE_TOUCH_OPT_TRACK_XY)) { + if (dx > dy) { + track_x = 1; + } + } else if (dx > EVE_TOUCH_THRESHOLD_X) { + track_x = 1; } - if (dy > EVE_TOUCH_THRESHOLD_Y) { + if (track_x) { + touch->eevt |= touch->x > touch->x0 ? EVE_TOUCH_EETYPE_TRACK_RIGHT : EVE_TOUCH_EETYPE_TRACK_LEFT; + } else { touch->eevt |= touch->y > touch->y0 ? EVE_TOUCH_EETYPE_TRACK_DOWN : EVE_TOUCH_EETYPE_TRACK_UP; } touch_evt |= EVE_TOUCH_ETYPE_TRACK_START; @@ -166,14 +174,18 @@ void eve_handle_touch(uint16_t intr_flags) { eve_timer_set_evt(touch, timer_evt & ~EVE_TOUCH_ETYPE_LPRESS); } if (touch->tracker.tag && touch->tracker.track) { + int start = 0; uint8_t opt = touch_tag_opt[touch->tracker.tag]; uint8_t track_ext = ((opt & EVE_TOUCH_OPT_TRACK_EXT_X) && (touch->eevt & EVE_TOUCH_EETYPE_TRACK_X)) || ((opt & EVE_TOUCH_OPT_TRACK_EXT_Y) && (touch->eevt & EVE_TOUCH_EETYPE_TRACK_Y)); + if (!eve_timer_get_evt(NULL) && track_ext) { EVEVTrack *vtrack = eve_vtrack_get(); + if (vtrack->start) start = vtrack->start(touch, vtrack->param); + } + if (start) { eve_timer_set(touch, EVE_TOUCH_ETYPE_TRACK, touch_tag0, EVE_TOUCH_TIMEOUT_TRACK); - if (vtrack->start) vtrack->start(touch, vtrack->param); } else { touch_evt |= EVE_TOUCH_ETYPE_TRACK_STOP; } @@ -372,6 +384,10 @@ void eve_timer_stop(void) { if (touch_timer.touch == NULL) eve_timer_clear(NULL); } +int eve_timer_running(void) { + return (touch_timer.evt == EVE_TOUCH_ETYPE_TIMER); +} + void eve_touch_clear_tag0(void) { touch_tag0 = 0; } |