Files
aqhomecontrol/avr/apps/ma_light/main.asm
2026-04-26 15:18:38 +02:00

160 lines
4.2 KiB
NASM

; ***************************************************************************
; copyright : (C) 2025 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. *
; ***************************************************************************
; ***************************************************************************
; code
.cseg
; ---------------------------------------------------------------------------
; @routine AppMotionLight_Init @global
;
AppMotionLight_Init:
; preset SRAM data area
ldi xh, HIGH(appMotionLightDataBegin)
ldi xl, LOW(appMotionLightDataBegin)
clr r16
ldi r17, (appMotionLightDataEnd-appMotionLightDataBegin)
rcall Utils_FillSram
rcall appMotionLightReadConfFromEeprom ; (r16, r17, X, Y)
ret
; @end
; ---------------------------------------------------------------------------
; @routine AppMotionLight_Fini @global
;
AppMotionLight_Fini:
ret
; @end
; ---------------------------------------------------------------------------
; @routine appMotionLightHasSource
;
; @return CFLAGS set if we have a matching source entry, cleared otherwise
; @param r17 value id
; @param r22 source address
; @clobbers r16, r24, Y
appMotionLightHasSource:
ldi yl, LOW(appMotionLightMSources)
ldi yh, HIGH(appMotionLightMSources)
ldi r24, APP_MOTIONLIGHT_SOURCE_NUM
appMotionLightHasSource_loop:
rcall appMotionLightCheckMsgSrc
brcs appMotionLightHasSource_ret
adiw yh:yl, APP_MOTIONLIGHT_SOURCE_SIZE
dec r24
brne appMotionLightHasSource_loop
clc
appMotionLightHasSource_ret:
ret
; @end
; ---------------------------------------------------------------------------
; @routine appMotionLightIsBrightnessSource
;
; @return CFLAGS set if we have a matching source entry, cleared otherwise
; @param r17 value id
; @param r22 source address
; @clobbers R16, Y
appMotionLightIsBrightnessSource:
ldi yl, LOW(appMotionLightLSource)
ldi yh, HIGH(appMotionLightLSource)
rjmp appMotionLightCheckMsgSrc
; @end
; ---------------------------------------------------------------------------
; @routine appMotionLightCheckMsgSrc
;
; @return CFLAGS set if we have a matching source entry, cleared otherwise
; @param r17 value id
; @param r22 source address
; @param Y pointer to addr/valueid pair to investigate
; @clobbers R16
appMotionLightCheckMsgSrc:
ldd r16, Y+APP_MOTIONLIGHT_SOURCE_OFFS_ADDR
cp r16, r22 ; check node addr
brne appMotionLightCheckMsgSrc_no
ldd r16, Y+APP_MOTIONLIGHT_SOURCE_OFFS_VALUEID
cp r16, r17 ; check value id
brne appMotionLightCheckMsgSrc_no
sec
rjmp appMotionLightCheckMsgSrc_ret
appMotionLightCheckMsgSrc_no:
clc
appMotionLightCheckMsgSrc_ret:
ret
; @end
; ---------------------------------------------------------------------------
; @routine appMotionLightReadConfFromEeprom
;
; @clobbers r16, r17, X, Y
appMotionLightReadConfFromEeprom:
ldi xl, LOW(EEPROM_OFFS_MAL_CONF)
ldi xh, HIGH(EEPROM_OFFS_MAL_CONF)
ldi yl, LOW(appMotionLightSettings)
ldi yh, HIGH(appMotionLightSettings)
ldi r17, APP_MOTIONLIGHT_EE_SIZE
bigcall Eeprom_ReadBytes ; (r16, r17, X, Y)
brcc appMotionLightReadConfFromEeprom_ret
lds r18, appMotionLightOnTime
lds r19, appMotionLightOnTime+1
mov r16, r18
and r16, r19
inc r16
brne appMotionLightReadConfFromEeprom_reload
ldi r18, LOW(APP_MOTIONLIGHT_DEFAULT_ONTIME)
ldi r19, HIGH(APP_MOTIONLIGHT_DEFAULT_ONTIME)
appMotionLightReadConfFromEeprom_reload:
bigcall SK6812_SetAutoTimerReload ; (none)
appMotionLightReadConfFromEeprom_ret:
ret
; @end
; ---------------------------------------------------------------------------
; @routine appMotionLightWriteConfToEeprom
;
; @clobbers r16, r17, X, Y
appMotionLightWriteConfToEeprom:
ldi xl, LOW(EEPROM_OFFS_MAL_CONF)
ldi xh, HIGH(EEPROM_OFFS_MAL_CONF)
ldi yl, LOW(appMotionLightSettings)
ldi yh, HIGH(appMotionLightSettings)
ldi r17, APP_MOTIONLIGHT_EE_SIZE
bigjmp Eeprom_WriteBytes ; (r16, r17, r18, X, Y)
; @end