; *************************************************************************** ; 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. * ; *************************************************************************** ; *************************************************************************** ; defines .equ VALSCHED_OFFS_TIMER = 0 .equ VALSCHED_OFFS_FLAGS = 1 .equ VALSCHED_DATA_SIZE = 2 .equ VALSCHED_FLAGS_VALUE_BIT = 0 .equ VALSCHED_FLAGS_TOSEND_BIT = 1 .equ VALSCHED_FLAGS_REPEAT_BIT = 2 .equ VALSCHED_FLAGS_FIRSTLOOP_BIT = 3 .equ VALSCHED_FLAGS_REPEAT0_BIT = 6 .equ VALSCHED_FLAGS_REPEAT1_BIT = 7 .equ VALSCHED_REPORTTIME1 = 1 ; report after 100ms .equ VALSCHED_REPORTTIME2 = 11 ; report after 1100ms .equ VALSCHED_REPORTTIME3 = 22 ; report after 2200ms .equ VALSCHED_INTERVAL = 200 ; 20s interval ; *************************************************************************** ; code .cseg ; --------------------------------------------------------------------------- ; @routine ValueScheduler_Init @global ; ; @param Y pointer to instance data ValueScheduler_Init: clr r16 std Y+VALSCHED_OFFS_FLAGS, r16 dec r16 std Y+VALSCHED_OFFS_TIMER, r16 ; init timer in hold state ret ; @end ; --------------------------------------------------------------------------- ; @routine ValueScheduler_Fini @global ; ; @param Y pointer to instance data ValueScheduler_Fini: ldi r16, 0xff std Y+VALSCHED_OFFS_TIMER, r16 ret ; @end ; --------------------------------------------------------------------------- ; @routine ValueScheduler_Every100ms @global ; ; @param Y pointer to instance data ; @clobbers r16, r17 ValueScheduler_Every100ms: ldd r17, Y+VALSCHED_OFFS_FLAGS ldd r16, Y+VALSCHED_OFFS_TIMER inc r16 breq ValueScheduler_Every100ms_end ; timer on hold std Y+VALSCHED_OFFS_TIMER, r16 cpi r16, VALSCHED_REPORTTIME1 breq ValueScheduler_Every100ms_setSendFlag sbrs r17, VALSCHED_FLAGS_FIRSTLOOP_BIT rjmp ValueScheduler_Every100ms_checkInterval ; jump if not first round cpi r16, VALSCHED_REPORTTIME2 breq ValueScheduler_Every100ms_setSendFlag cpi r16, VALSCHED_REPORTTIME3 breq ValueScheduler_Every100ms_setSendFlag ValueScheduler_Every100ms_checkInterval: cpi r16, VALSCHED_INTERVAL brcs ValueScheduler_Every100ms_end ; interval finished, check for repeat ldd r17, Y+VALSCHED_OFFS_FLAGS cbr r17, (1<