; *************************************************************************** ; 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 = 31 ; *************************************************************************** ; 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: ; ldi yl, LOW(netInterfaceData) ; ldi yh, HIGH(netInterfaceData) ; rcall AppNetwork_SendRxdStats ; debug lds r16, appStatsTimer inc r16 cpi r16, APP_STATS_INTERVAL_MINS brcs AppStats_OnEveryMinute_store clr r16 AppStats_OnEveryMinute_store: sts appStatsTimer, r16 ldi yl, LOW(netInterfaceData) ldi yh, HIGH(netInterfaceData) ldi r17, AQHOME_VALUEID_STATS_PACKETS_IN ldi xl, LOW(netInterfaceData) ldi xh, HIGH(netInterfaceData) cpi r16, 1 breq AppStats_OnEveryMinute_sendDevice cpi r16, 3 breq AppStats_OnEveryMinute_sendPacketsIn cpi r16, 5 breq AppStats_OnEveryMinute_sendPacketsOut cpi r16, 6 breq AppStats_OnEveryMinute_sendDevice cpi r16, 7 breq AppStats_OnEveryMinute_sendContentErrs cpi r16, 9 breq AppStats_OnEveryMinute_sendIoErrs cpi r16, 10 breq AppStats_OnEveryMinute_sendDevice cpi r16, 11 breq AppStats_OnEveryMinute_sendNoBufErrs cpi r16, 13 breq AppStats_OnEveryMinute_sendCollisionErrs cpi r16, 14 breq AppStats_OnEveryMinute_sendDevice cpi r16, 15 breq AppStats_OnEveryMinute_sendBusyErrs #ifdef APP_STATS_NETDEV2 ldi r17, AQHOME_VALUEID_STATS_PACKETS_IN2 ldi xl, LOW(netInterfaceData2) ldi xh, HIGH(netInterfaceData2) cpi r16, 16 breq AppStats_OnEveryMinute_sendPacketsIn cpi r16, 17 breq AppStats_OnEveryMinute_sendPacketsOut cpi r16, 18 breq AppStats_OnEveryMinute_sendDevice cpi r16, 19 breq AppStats_OnEveryMinute_sendContentErrs cpi r16, 20 breq AppStats_OnEveryMinute_sendIoErrs cpi r16, 21 breq AppStats_OnEveryMinute_sendDevice cpi r16, 22 breq AppStats_OnEveryMinute_sendNoBufErrs cpi r16, 23 breq AppStats_OnEveryMinute_sendDevice cpi r16, 24 breq AppStats_OnEveryMinute_sendCollisionErrs cpi r16, 25 breq AppStats_OnEveryMinute_sendBusyErrs #endif #ifdef MODULES_HEAP cpi r16, 26 breq AppStats_OnEveryMinute_sendHeapUsed cpi r16, 27 breq AppStats_OnEveryMinute_sendHeapfree #endif cpi r16, 28 breq AppStats_OnEveryMinute_sendDevice ret AppStats_OnEveryMinute_sendDevice: push yl push yh ldi yl, LOW(netInterfaceData) ldi yh, HIGH(netInterfaceData) rcall AppNetwork_SendDevice #ifdef APP_STATS_NETDEV2 ldi yl, LOW(netInterfaceData2) ldi yh, HIGH(netInterfaceData2) rcall AppNetwork_SendDevice #endif pop yh pop yl ret AppStats_OnEveryMinute_sendPacketsIn: ldi r16, 0 rjmp appStatsSendDeviceStat AppStats_OnEveryMinute_sendPacketsOut: ldi r16, 1 rjmp appStatsSendDeviceStat AppStats_OnEveryMinute_sendContentErrs: ldi r16, 2 rjmp appStatsSendDeviceStat AppStats_OnEveryMinute_sendIoErrs: ldi r16, 3 rjmp appStatsSendDeviceStat AppStats_OnEveryMinute_sendNoBufErrs: ldi r16, 4 rjmp appStatsSendDeviceStat AppStats_OnEveryMinute_sendCollisionErrs: ldi r16, 5 rjmp appStatsSendDeviceStat AppStats_OnEveryMinute_sendBusyErrs: ldi r16, 6 rjmp appStatsSendDeviceStat #ifdef MODULES_HEAP AppStats_OnEveryMinute_sendHeapUsed: ldi r17, AQHOME_VALUEID_STATS_HEAP_USED lds r18, heapUsed lds r19, heapUsed+1 rjmp appStatsSend16BitValue AppStats_OnEveryMinute_sendHeapfree: ldi r17, AQHOME_VALUEID_STATS_HEAP_FREE lds r18, heapFree lds r19, heapFree+1 rjmp appStatsSend16BitValue #endif ; @end ; --------------------------------------------------------------------------- ; @routine AppStats_OnEveryMinute @global ; ; @param r16 index into device table (e.g. 0 for NET_IFACE_OFFS_PACKETSIN_LOW) ; @param r17 offset to first value id (e.g. AQHOME_VALUEID_STATS_PACKETS_IN for device 0, ; AQHOME_VALUEID_STATS_PACKETS_IN2 for device 1) ; @param Y pointer to device to send data to ; @param X pointer to device to inspect appStatsSendDeviceStat: add r17, r16 lsl r16 adiw xh:xl, NET_IFACE_OFFS_PACKETSIN_LOW add xl, r16 adc xh, r16 sub xh, r16 ld r18, X+ ld r19, X rjmp appStatsSend16BitValue ; @end ; --------------------------------------------------------------------------- ; @routine AppStats_OnEveryMinute @global ; ; @param R17 value id ; @param R19:R18 value appStatsSend16BitValue: ldi r20, 1 clr r21 ldi r22, AQHOME_VALUETYPE_STATS bigjmp Main_SendValueReport ; @end