Files
aqhomecontrol/avr/apps/stats/main.asm
2026-08-07 00:42:45 +02:00

160 lines
3.4 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. *
; ***************************************************************************
; ***************************************************************************
; defines
;.equ APP_STATS_INTERVAL_MINS = 30
.equ APP_STATS_INTERVAL_MINS = 10
; ***************************************************************************
; code
.cseg
; ---------------------------------------------------------------------------
; @routine AppStats_Init @global
;
; @clobbers r16
AppStats_Init:
clr r16
sts appStatsTimer, r16
sec
ret
; @end
; ---------------------------------------------------------------------------
; @routine AppStats_Fini @global
;
AppStats_Fini:
; nothing to do
ret
; @end
; ---------------------------------------------------------------------------
; @routine AppStats_OnEveryMinute @global
;
AppStats_OnEveryMinute:
push r15
in r15, SREG
cli
rcall AppStats_OnEveryMinute_noIrq
out SREG, r15
pop r15
ret
AppStats_OnEveryMinute_noIrq:
lds r16, appStatsTimer
inc r16
cpi r16, APP_STATS_INTERVAL_MINS
brcs AppStats_OnEveryMinute_store
clr r16
AppStats_OnEveryMinute_store:
sts appStatsTimer, r16
rcall appStatsWalkTable
; add more here
ret
; @end
; ---------------------------------------------------------------------------
; @routine appStatsTable
;
; @clobbers r16, r18, r19, r22, Z, (any)
appStatsWalkTable:
ldi zl, LOW(appStatsTable*2)
ldi zh, HIGH(appStatsTable*2)
lds r16, appStatsTimer
bigcall WalkTable
ret
; @end
AppStats_OnEveryMinute_sendDeviceDev1:
ldi yl, LOW(netInterfaceData)
ldi yh, HIGH(netInterfaceData)
rjmp AppNetwork_SendDevice
AppStats_OnEveryMinute_sendMemStats:
ldi yl, LOW(netInterfaceData)
ldi yh, HIGH(netInterfaceData)
rjmp AppNetwork_SendMemStats
AppStats_OnEveryMinute_sendRecvStats1:
ldi yl, LOW(netInterfaceData)
ldi yh, HIGH(netInterfaceData)
rjmp AppNetwork_SendRxdStats
AppStats_OnEveryMinute_sendSendStats1:
ldi yl, LOW(netInterfaceData)
ldi yh, HIGH(netInterfaceData)
rjmp AppNetwork_SendTxdStats
#ifdef APP_STATS_NETDEV2
AppStats_OnEveryMinute_sendDeviceDev2:
ldi yl, LOW(netInterfaceData2)
ldi yh, HIGH(netInterfaceData2)
rjmp AppNetwork_SendDevice
AppStats_OnEveryMinute_sendRecvStats2:
ldi yl, LOW(netInterfaceData2)
ldi yh, HIGH(netInterfaceData2)
rjmp AppNetwork_SendRxdStats
AppStats_OnEveryMinute_sendSendStats2:
ldi yl, LOW(netInterfaceData2)
ldi yh, HIGH(netInterfaceData2)
rjmp AppNetwork_SendTxdStats
#endif
; @end
; ---------------------------------------------------------------------------
; table
; time routine (word address)
appStatsTable:
.dw 1, AppStats_OnEveryMinute_sendMemStats
.dw 2, AppStats_OnEveryMinute_sendDeviceDev1
.dw 3, AppStats_OnEveryMinute_sendRecvStats1
.dw 4, AppStats_OnEveryMinute_sendSendStats1
.dw 5, AppStats_OnEveryMinute_sendDeviceDev1
#ifdef APP_STATS_NETDEV2
.dw 6, AppStats_OnEveryMinute_sendDeviceDev2
.dw 7, AppStats_OnEveryMinute_sendRecvStats2
.dw 8, AppStats_OnEveryMinute_sendSendStats2
#endif
; end of table
.dw 0, 0