; *************************************************************************** ; 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_VALUELABEL_ASM #define AQH_AVR_GUI2_VALUELABEL_ASM ; *************************************************************************** ; defines .equ VLABEL_OFFS_BEGIN = WIDGET_SIZE .equ VLABEL_OFFS_VALUE_LO = VLABEL_OFFS_BEGIN+0 .equ VLABEL_OFFS_VALUE_HI = VLABEL_OFFS_BEGIN+1 .equ VLABEL_OFFS_POSTKOMMADIGITS = VLABEL_OFFS_BEGIN+2 .equ VLABEL_SIZE = VLABEL_OFFS_BEGIN+3 .equ VLABEL_VALUE = WIDGET_VALUE_NEXTFREE+0 .equ VLABEL_VALUE_NEXTFREE = WIDGET_VALUE_NEXTFREE+1 ; *************************************************************************** ; code .cseg ; --------------------------------------------------------------------------- ; @routine ValueLabel_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 number of postkomma digits ; @clobbers any ValueLabel_new: push r20 ldi r24, LOW(VLABEL_SIZE) ldi r25, HIGH(VLABEL_SIZE) bigcall Object_Alloc ; (!r16, !r17, !X) pop r20 brcc ValueLabel_new_ret rcall ValueLabel_Init ; (r16, r17, X) sec ValueLabel_new_ret: ret ; @end ; --------------------------------------------------------------------------- ; @routine ValueLabel_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 number of postkomma digits ; @clobbers r16, r17, X ValueLabel_Init: push r20 ; call base class bigcall Widget_Init ; (r16, r17, X) pop r20 ; setup valueLabel data std Y+VLABEL_OFFS_POSTKOMMADIGITS, r20 ; set default signal map ldi r16, LOW(ValueLabel_DefaultSignalmap*2) std Y+OBJECT_OFFS_SIGNALMAP_LO, r16 ldi r16, HIGH(ValueLabel_DefaultSignalmap*2) std Y+OBJECT_OFFS_SIGNALMAP_HI, r16 ret ; @end ; --------------------------------------------------------------------------- ; @routine ValueLabel_OnSetValue @global ; ; @param Y address of widget ; @param X new value ; @return CFLAG set if signal handled ; @clobbers r17 ValueLabel_OnSetValue: std Y+VLABEL_OFFS_VALUE_LO, xl std Y+VLABEL_OFFS_VALUE_HI, xh ldd r17, Y+OBJECT_OFFS_FLAGS ori r17, (1<