avr: add touch handler routine to button module.

This commit is contained in:
Martin Preuss
2025-11-22 14:10:06 +01:00
parent d8058dc711
commit dbba5617c7
2 changed files with 128 additions and 40 deletions

View File

@@ -11,6 +11,11 @@
#define AQH_AVR_GUI_BUTTON_ASM
.equ BUTTON_STATE_DOWN_BIT = 0
.equ BUTTON_STATE_ACTIVATED_BIT = 1
.cseg
@@ -47,6 +52,74 @@ Button_Draw_Down:
; ---------------------------------------------------------------------------
; @routine Button_HandleTouch @global
;
; @param r18 flags
; @param r19 current state of button (bit 0: pressed, bit 1: activated)
; @param r5:r4 x
; @param r7:r6 Y
; @param Z pointer to button data in FLASH
; @return r19 new state of button (0=normal, 1=pressed)
Button_HandleTouch:
cbr r19, (1<<BUTTON_STATE_ACTIVATED_BIT) ; clear activated bit
; check for press change event
mov r17, r18
andi r17, (1<<DISPLAY_IFLAGS_CHGPRESS_BIT)
breq Button_HandleTouch_ret
; press changed
mov r17, r18
andi r17, (1<<DISPLAY_IFLAGS_PRESSED_BIT)
breq Button_HandleTouch_up
; touch came down
push zl
push zh
push r19
bigcall Window_IsPointInRect
pop r19
pop zh
pop zl
brcc Button_HandleTouch_ret
tst r19
brne Button_HandleTouch_ret ; already down, jmp
sbr r19, (1<<BUTTON_STATE_DOWN_BIT) ; button now down
push zl
push zh
push r19
rcall Button_Draw_Down
pop r19
pop zh
pop zl
rjmp Button_HandleTouch_ret
Button_HandleTouch_up:
; touch came up
tst r19
breq Button_HandleTouch_ret ; already up, jmp
cbr r19, (1<<BUTTON_STATE_DOWN_BIT)
push zl
push zh
push r19
rcall Button_Draw_Up
pop r19
pop zh
pop zl
push zl
push zh
push r19
bigcall Window_IsPointInRect
pop r19
pop zh
pop zl
brcc Button_HandleTouch_ret
; touch ended over button
sbr r19, (1<<BUTTON_STATE_ACTIVATED_BIT) ; set activated bit
Button_HandleTouch_ret:
ret
; @end
; ---------------------------------------------------------------------------
; @routine buttonDraw
;