Files
aqhomecontrol/avr/modules/lcd2/gui/aqhome/lightsettings.asm
2026-04-25 20:01:51 +02:00

128 lines
3.8 KiB
NASM

; ***************************************************************************
; 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_AQHOME_LIGHTSETTINGS_ASM
#define AQH_AVR_GUI2_AQHOME_LIGHTSETTINGS_ASM
; ***************************************************************************
; defines
.equ LIGHTSETTINGS_OFFS_BEGIN = LIST_SIZE
.equ LIGHTSETTINGS_OFFS_ID = LIGHTSETTINGSWIN_OFFS_BEGIN+0
.equ LIGHTSETTINGS_OFFS_TYPE = LIGHTSETTINGSWIN_OFFS_BEGIN+1
.equ LIGHTSETTINGS_OFFS_TEXTRES_LO = LIGHTSETTINGSWIN_OFFS_BEGIN+2
.equ LIGHTSETTINGS_OFFS_TEXTRES_HI = LIGHTSETTINGSWIN_OFFS_BEGIN+3
.equ LIGHTSETTINGS_OFFS_NODEADDR = LIGHTSETTINGSWIN_OFFS_BEGIN+4
.equ LIGHTSETTINGS_OFFS_ROOM = LIGHTSETTINGSWIN_OFFS_BEGIN+5
.equ LIGHTSETTINGS_OFFS_LEDNUM_LO = LIGHTSETTINGSWIN_OFFS_BEGIN+6
.equ LIGHTSETTINGS_OFFS_LEDNUM_HI = LIGHTSETTINGSWIN_OFFS_BEGIN+7
.equ LIGHTSETTINGS_OFFS_ONTIME_LO = LIGHTSETTINGSWIN_OFFS_BEGIN+8
.equ LIGHTSETTINGS_OFFS_ONTIME_HI = LIGHTSETTINGSWIN_OFFS_BEGIN+9
.equ LIGHTSETTINGS_OFFS_SOURCE1_NODEADDR = LIGHTSETTINGSWIN_OFFS_BEGIN+10
.equ LIGHTSETTINGS_OFFS_SOURCE1_VALUEID = LIGHTSETTINGSWIN_OFFS_BEGIN+11
.equ LIGHTSETTINGS_OFFS_SOURCE2_NODEADDR = LIGHTSETTINGSWIN_OFFS_BEGIN+12
.equ LIGHTSETTINGS_OFFS_SOURCE2_VALUEID = LIGHTSETTINGSWIN_OFFS_BEGIN+13
.equ LIGHTSETTINGS_OFFS_BSOURCE_NODEADDR = LIGHTSETTINGSWIN_OFFS_BEGIN+14
.equ LIGHTSETTINGS_OFFS_BSOURCE_VALUEID = LIGHTSETTINGSWIN_OFFS_BEGIN+15
.equ LIGHTSETTINGS_SIZE = LIGHTSETTINGSWIN_OFFS_BEGIN+16
; ***************************************************************************
; code
.cseg
; ---------------------------------------------------------------------------
; @routine LightSettings_new @global
;
; @return Y pointer to newly allocated LightSettings data
; @clobbers r16, r17, r18, r19, r24, r25, X
LightSettings_new:
ldi r24, LOW(LIGHTSETTINGS_SIZE)
ldi r25, HIGH(LIGHTSETTINGS_SIZE)
bigcall Heap_AllocAndZero ; (r16, r17, r18, r19, r24, r25, X)
brcc LightSettings_new_ret
mov yl, xl
mov yh, xh
bigcall List_InitObject ; (r16)
sec
LightSettings_new_ret:
ret
; @end
; ---------------------------------------------------------------------------
; @routine LightSettings_free @global
;
; @param Y pointer to LightSettings data
; @clobbers r16, r17, r24, r25, X
LightSettings_free:
bigcall List_FiniObject
mov xl, yl
mov xh, yh
bigjmp Heap_Free ; (r16, r17, r24, r25, X)
; @end
; ---------------------------------------------------------------------------
; @routine LightSettings_ReadFromEeprom @global
;
; @param Y pointer to LightSettings data
; @param r17 length of TLV data in EEPROM
; @param X points to begin of TLV data in EEPROM
; @clobbers r16, r17, X
LightSettings_ReadFromEeprom:
push yl
push yh
adiw yh:yl, LIGHTSETTINGS_OFFS_BEGIN
bigcall Eeprom_ReadBytes ; (r16, r17, X, Y)
pop yh
pop yl
ret
; @end
; ---------------------------------------------------------------------------
; @routine LightSettings_WriteToEeprom @global
;
; @param Y pointer to LightSettings data
; @param r17 length of TLV data in EEPROM
; @param X points to begin of TLV data in EEPROM
; @clobbers r16, r17, r18, X
LightSettings_WriteToEeprom:
push yl
push yh
adiw yh:yl, LIGHTSETTINGS_OFFS_BEGIN
bigcall Eeprom_WriteBytes ; (r16, r17, r18, X, Y)
pop yh
pop yl
ret
; @end
#endif