; *************************************************************************** ; 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 FILTER_STABILIZE_OFFS_STATUSBYTE = 0 .equ FILTER_STABILIZE_OFFS_TIMER = 1 .equ FILTER_STABILIZE_OFFS_COUNTER = 2 .equ FILTER_STABILIZE_OFFS_STABLECOUNTVAL = 3 .equ FILTER_STABILIZE_DATA_SIZE = 4 .equ FILTER_STABILIZE_STATUS_LASTVALUE_BIT = 0 .equ FILTER_STABILIZE_STATUS_STABLEVALUE_BIT = 1 .equ FILTER_STABILIZE_STATUS_REPORT0_BIT = 4 .equ FILTER_STABILIZE_STATUS_REPORT1_BIT = 5 .equ FILTER_STABILIZE_STATUS_REPEAT0_BIT = 6 .equ FILTER_STABILIZE_STATUS_REPEAT1_BIT = 7 .equ FILTER_STABILIZE_REPORTTIME1 = 1 ; report after 100ms .equ FILTER_STABILIZE_REPORTTIME2 = 11 ; report after 1100ms .equ FILTER_STABILIZE_REPORTTIME3 = 22 ; report after 2200ms .equ FILTER_STABILIZE_REPEATTIME = 200 ; 20s ; *************************************************************************** ; code .cseg ; --------------------------------------------------------------------------- ; @routine FilterStabilize_Init @global ; ; @param Y pointer to filter data FilterStabilize_Init: clr r16 std Y+FILTER_STABILIZE_OFFS_COUNTER, r16 std Y+FILTER_STABILIZE_OFFS_STATUSBYTE, r16 dec r16 std Y+FILTER_STABILIZE_OFFS_TIMER, r16 ; hold timer ret ; @end ; --------------------------------------------------------------------------- ; @routine FilterStabilize_Fini @global ; ; @param Y pointer to filter data FilterStabilize_Fini: ; nothing to do ret ; @end ; --------------------------------------------------------------------------- ; @routine FilterStabilize_GetValue @global ; ; Values are reduced to 1 bit (i.e. either "0" or "1"). ; ; @param Y pointer to filter data ; @return R19:R18 value FilterStabilize_GetValue: ldd r18, Y+FILTER_STABILIZE_OFFS_STATUSBYTE lsr r18, FILTER_STABILIZE_STATUS_STABLEVALUE_BIT andi r18, 1 clr r19 ret ; @end ; --------------------------------------------------------------------------- ; @routine FilterStabilize_SetValue @global ; ; The stored value is reduced to 1 bit (i.e. either "0" or "1"). ; ; @param Y pointer to filter data ; @param R19:R18 value ; @clobbers r16, r17 FilterStabilize_SetValue: mov r16, r18 or r16, r19 breq FilterStabilize_SetValue_set ldi r16, (1<