diff --git a/avr/modules/lcd2/gui/base/button.asm b/avr/modules/lcd2/gui/base/button.asm index a36bd6e..8ef8c03 100644 --- a/avr/modules/lcd2/gui/base/button.asm +++ b/avr/modules/lcd2/gui/base/button.asm @@ -27,6 +27,7 @@ ; button modes .equ BUTTON_MODE_NORMAL = 0 .equ BUTTON_MODE_REPEATED = 1 +.equ BUTTON_MODE_LONG = 2 ; button states .equ BUTTON_STATE_INACTIVE = 0 @@ -35,6 +36,8 @@ .equ BUTTON_STATE_REPEATING = 3 +.equ BUTTON_LONGPRESS_TIME100MS = 50 + ; *************************************************************************** ; code @@ -145,10 +148,15 @@ Button_OnTouchBegin: ldd r16, Y+BUTTON_OFFS_MODE cpi r16, BUTTON_MODE_REPEATED breq Button_OnTouchBegin_repeated + cpi r16, BUTTON_MODE_LONG + breq Button_OnTouchBegin_setActiveResetTimer + cpi r16, BUTTON_MODE_NORMAL + brne Button_OnTouchBegin_done +Button_OnTouchBegin_setActiveResetTimer: ldi r16, BUTTON_STATE_ACTIVE std Y+BUTTON_OFFS_STATE, r16 clr r16 - std Y+BUTTON_OFFS_TIMER, r16 + std Y+BUTTON_OFFS_TIMER, r16 ; reset timer rjmp Button_OnTouchBegin_done Button_OnTouchBegin_repeated: ldi r16, BUTTON_STATE_WAITREPEAT @@ -176,14 +184,32 @@ Button_OnTouchEnd: bigcall OBJ_SubFlagsDown ; (r17, r18, r19) ldi r16, (1<