Files
aqhomecontrol/avr/devices/c03/main/dlg_netstats.asm
2025-11-18 23:02:07 +01:00

293 lines
6.7 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. *
; ***************************************************************************
#ifndef AQH_AVR_DEVICE_C03_DLG_NETSTATS_ASM
#define AQH_AVR_DEVICE_C03_DLG_NETSTATS_ASM
.equ DLG_NETSTATS_TIMER_100ms = 50
.equ DLG_NETSTATS_FLAGS_BUTTON_DOWN_BIT = 0
.cseg
DlgNetStats_Init:
ldi yl, LOW(dlgNetstats)
ldi yh, HIGH(dlgNetstats)
bigcall Dialog_Init
; set handler
ldi r16, LOW(DlgNetStats_Handler)
std Y+DIALOG_OFFS_HANDLER_LO, r16
ldi r16, HIGH(DlgNetStats_Handler)
std Y+DIALOG_OFFS_HANDLER_HI, r16
; clear vars
clr r16
sts dlgNetstatsUpdateNum, r16
sts dlgNetstatsUpdateNum+1, r16
sts dlgNetstatsTimer, r16
sts dlgNetstatsFlags, r16
ret
; @end
DlgNetStats_Handler:
cpi r23, (DIALOG_FN_TIMER+1)
brcc DlgNetStats_Handler_ret
ldi zl, LOW(DlgNetStats_Handler_Fns)
ldi zh, HIGH(DlgNetStats_Handler_Fns)
add zl, r23
adc zh, r23
sub zh, r23
ijmp
DlgNetStats_Handler_ret:
ret
; @end
DlgNetStats_Handler_Fns:
rjmp dlgNetStatsOnInit
rjmp dlgNetStatsOnFini
rjmp dlgNetStatsOnShow
rjmp dlgNetStatsOnHide
rjmp dlgNetStatsOnTouch
rjmp dlgNetStatsOnTimer
dlgNetStatsOnInit:
ret
dlgNetStatsOnFini:
ret
dlgNetStatsOnShow:
push yl
push yh
mov yl, xl
mov yh, xh
rcall DlgNetStats_Show
pop yh
pop yl
ret
dlgNetStatsOnHide:
ret
dlgNetStatsOnTouch:
mov r16, r18
mov r17, r18
mov yl, xl
mov yh, xh
; check for press change event
andi r17, (1<<DISPLAY_IFLAGS_CHGPRESS_BIT)
breq dlgNetStatsTouch_ret
; press changed
mov r17, r16
andi r17, (1<<DISPLAY_IFLAGS_PRESSED_BIT)
breq dlgNetStatsTouch_up
; touch came down
ldi zl, LOW(dlgNetstats_CloseBtn*2)
ldi zh, HIGH(dlgNetstats_CloseBtn*2)
bigcall Window_IsPointInRect
brcc dlgNetStatsTouch_ret
lds r16, dlgNetstatsFlags
mov r17, r16
andi r17, (1<<DLG_NETSTATS_FLAGS_BUTTON_DOWN_BIT)
brne dlgNetStatsTouch_ret ; already down, jmp
ori r16, (1<<DLG_NETSTATS_FLAGS_BUTTON_DOWN_BIT)
sts dlgNetstatsFlags, r16
ldi zl, LOW(dlgNetstats_CloseBtn*2)
ldi zh, HIGH(dlgNetstats_CloseBtn*2)
bigcall Button_Draw_Down
rjmp dlgNetStatsTouch_ret
dlgNetStatsTouch_up:
; touch came up
lds r16, dlgNetstatsFlags
mov r17, r16
andi r17, (1<<DLG_NETSTATS_FLAGS_BUTTON_DOWN_BIT)
breq dlgNetStatsTouch_ret ; already up, jmp
cbr r16, (1<<DLG_NETSTATS_FLAGS_BUTTON_DOWN_BIT)
sts dlgNetstatsFlags, r16
ldi zl, LOW(dlgNetstats_CloseBtn*2)
ldi zh, HIGH(dlgNetstats_CloseBtn*2)
bigcall Button_Draw_Up
ldi zl, LOW(dlgNetstats_CloseBtn*2)
ldi zh, HIGH(dlgNetstats_CloseBtn*2)
bigcall Window_IsPointInRect
brcc dlgNetStatsTouch_ret
; touch ended over button, TODO
dlgNetStatsTouch_ret:
ret
dlgNetStatsOnTimer:
ldd r16, Y+DIALOG_OFFS_OPTIONS
andi r16, (1<<DIALOG_OPT_ACTIVE_BIT)
breq dlgNetStatsTimer_ret ; not visible, hold timer
lds r16, dlgNetstatsTimer
inc r16
sts dlgNetstatsTimer, r16
cpi r16, DLG_NETSTATS_TIMER_100ms
brcs dlgNetStatsTimer_ret
push yl
push yh
mov yl, xl
mov yh, xh
rcall DlgNetStats_Update
pop yh
pop yl
clr r16
sts dlgNetstatsTimer, r16
dlgNetStatsTimer_ret:
ret
; @param @0 Y
; @param @1 label addr
.macro DLGNETSTATS_PRINTLABEL
; packets in
ldi zl, LOW(@1 * 2)
ldi zh, HIGH(@1 * 2)
ldi r16, 2 ; X
mov r4, r16
clr r5
ldi r16, LOW(STYLE_WIN_TITLE_HEIGHT+@0) ; Y
mov r6, r16
ldi r16, HIGH(STYLE_WIN_TITLE_HEIGHT+@0)
mov r7, r16
bigcall Window_DrawTextFlash
.endmacro
; @param @0 X
; @param @1 Y
; @param @2 data address
.macro DLGNETSTATS_PRINTDATA
ldi r16, @0 ; X
mov r4, r16
clr r5
ldi r16, LOW(STYLE_WIN_TITLE_HEIGHT+@1) ; Y
mov r6, r16
ldi r16, HIGH(@1)
mov r7, r16
lds r16, @2 ; data
lds r17, @2+1
bigcall Window_WriteHexWordAt
.endmacro
DlgNetStats_Show:
; draw title window basics (with title)
ldi zl, LOW(dlgNetstats_title*2)
ldi zh, HIGH(dlgNetstats_title*2)
bigcall TitleWindow_DrawTitle
bigcall TitleWindow_ClearContentArea
; packets in
DLGNETSTATS_PRINTLABEL 2, dlgNetstats_lPacketsIn
; packets out
DLGNETSTATS_PRINTLABEL 1*(2+STYLE_WIN_FONT_HEIGHT), dlgNetstats_lPacketsOut
; eContent
DLGNETSTATS_PRINTLABEL 2*(2+STYLE_WIN_FONT_HEIGHT), dlgNetstats_lContentErr
; eIO
DLGNETSTATS_PRINTLABEL 3*(2+STYLE_WIN_FONT_HEIGHT), dlgNetstats_lIoErr
; eMsgSize
DLGNETSTATS_PRINTLABEL 4*(2+STYLE_WIN_FONT_HEIGHT), dlgNetstats_lMsgSizeErr
; update num
DLGNETSTATS_PRINTLABEL 5*(2+STYLE_WIN_FONT_HEIGHT), dlgNetstats_lUpdate
ldi zl, LOW(dlgNetstats_CloseBtn*2)
ldi zh, HIGH(dlgNetstats_CloseBtn*2)
bigcall Button_Draw_Up
rcall DlgNetStats_Update
ret
; @end
DlgNetStats_Update:
lds r16, dlgNetstatsUpdateNum
inc r16
sts dlgNetstatsUpdateNum, r16
; packets in
DLGNETSTATS_PRINTDATA (12*STYLE_WIN_FONT_WIDTH), 2, netInterfaceData+NET_IFACE_OFFS_PACKETSIN_LOW
; packets out
DLGNETSTATS_PRINTDATA (12*STYLE_WIN_FONT_WIDTH), 1*(2+STYLE_WIN_FONT_HEIGHT), netInterfaceData+NET_IFACE_OFFS_PACKETSOUT_LOW
; eContent
DLGNETSTATS_PRINTDATA (12*STYLE_WIN_FONT_WIDTH), 2*(2+STYLE_WIN_FONT_HEIGHT), netInterfaceData+NET_IFACE_OFFS_ERR_CONTENT_LOW
; eIO
DLGNETSTATS_PRINTDATA (12*STYLE_WIN_FONT_WIDTH), 3*(2+STYLE_WIN_FONT_HEIGHT), netInterfaceData+NET_IFACE_OFFS_ERR_IO_LOW
; eMsgSize
DLGNETSTATS_PRINTDATA (12*STYLE_WIN_FONT_WIDTH), 4*(2+STYLE_WIN_FONT_HEIGHT), netInterfaceData+NET_IFACE_OFFS_ERR_MSGSIZE_LOW
DLGNETSTATS_PRINTDATA (12*STYLE_WIN_FONT_WIDTH), 5*(2+STYLE_WIN_FONT_HEIGHT), dlgNetstatsUpdateNum
ret
; @end
dlgNetstats_title: .db "Network Statistics", 0, 0
dlgNetstats_lPacketsIn: .db "Pkgs In :", 0
dlgNetstats_lPacketsOut: .db "Pkgs Out:", 0
dlgNetstats_lContentErr: .db "eContent:", 0
dlgNetstats_lIoErr: .db "eIO :", 0
dlgNetstats_lMsgSizeErr: .db "eMsgSize:", 0
dlgNetstats_lUpdate: .db "Update :", 0
dlgNetstats_lClose: .db "Close", 0
dlgNetstats_CloseBtn:
.dw ((DISPLAY_WIDTH-((5*STYLE_WIN_FONT_WIDTH)+4))/2) ; 5 = string length ("close")
.dw ((DISPLAY_HEIGHT-4)-(STYLE_WIN_FONT_HEIGHT+4))
.dw (5*STYLE_WIN_FONT_WIDTH)+4 ; 5 = string length ("close")
.dw (STYLE_WIN_FONT_HEIGHT+4)
.dw (dlgNetstats_lClose*2)
.dseg
dlgNetstats: .byte DIALOG_SIZE
dlgNetstatsUpdateNum: .byte 2
dlgNetstatsTimer: .byte 1
dlgNetstatsFlags: .byte 1
#endif ; AQH_AVR_DEVICE_C03_DLG_NETSTATS_ASM