; *************************************************************************** ; copyright : (C) 2026 by Martin Preuss ; email : martin@libchipcard.de ; ; *************************************************************************** ; * This file is part of the project "AqHome". * ; * Please see toplevel file COPYING of that project for license details. * ; *************************************************************************** #ifndef AQH_AVR_GUI2_BUTTON_ASM #define AQH_AVR_GUI2_BUTTON_ASM ; *************************************************************************** ; defines .equ BUTTON_OFFS_BEGIN = WIDGET_SIZE .equ BUTTON_OFFS_MODE = BUTTON_OFFS_BEGIN+0 .equ BUTTON_OFFS_STATE = BUTTON_OFFS_BEGIN+1 .equ BUTTON_OFFS_TIMER = BUTTON_OFFS_BEGIN+2 .equ BUTTON_SIZE = BUTTON_OFFS_BEGIN+3 .equ BUTTON_REPEAT_TIMER_WAITREPEAT = 10 .equ BUTTON_REPEAT_TIMER_REPEAT = 7 ; button modes .equ BUTTON_MODE_NORMAL = 0 .equ BUTTON_MODE_REPEATED = 1 ; button states .equ BUTTON_STATE_INACTIVE = 0 .equ BUTTON_STATE_ACTIVE = 1 .equ BUTTON_STATE_WAITREPEAT = 2 .equ BUTTON_STATE_REPEATING = 3 ; *************************************************************************** ; code .cseg ; --------------------------------------------------------------------------- ; @routine Button_new @global ; ; @return CFLAG set of okay, cleared otherwise ; @return Y address of newly created object ; @param X parent widget ; @param r16 value for OBJECT_OFFS_OPTS ; @param r17 value for WIDGET_OFFS_PACK ; @param r20 mode ; @clobbers any Button_new: push r20 ldi r24, LOW(BUTTON_SIZE) ldi r25, HIGH(BUTTON_SIZE) bigcall Object_Alloc ; (!r16, !r17, !X) pop r20 brcc Button_new_ret rcall Button_Init ; (r16, r17, X) sec Button_new_ret: ret ; @end ; --------------------------------------------------------------------------- ; @routine Button_Init @global ; ; @param Y address of widget ; @param X parent widget (if any) ; @param r16 value for OBJECT_OFFS_OPTS ; @param r17 value for WIDGET_OFFS_PACK ; @param r20 mode ; @clobbers r16, r17, X Button_Init: push r20 ; call base class bigcall Widget_Init ; (r16, r17, X) pop r20 ; setup button data std Y+BUTTON_OFFS_MODE, r20 ; set input opts ldd r16, Y+OBJECT_OFFS_OPTS sbr r16, (1<