diff --git a/avr/devices/c03/test/a_c03.asm b/avr/devices/c03/test/a_c03.asm index 44ac0b3..8375cdc 100644 --- a/avr/devices/c03/test/a_c03.asm +++ b/avr/devices/c03/test/a_c03.asm @@ -14,27 +14,30 @@ ; *************************************************************************** ; defines -.equ C03APP_OFFS_BEGIN = GUIAPP_SIZE -.equ C03APP_OFFS_WMENU_LO = C03APP_OFFS_BEGIN+0 -.equ C03APP_OFFS_WMENU_HI = C03APP_OFFS_BEGIN+1 -.equ C03APP_OFFS_WCLIMATE_LO = C03APP_OFFS_BEGIN+2 -.equ C03APP_OFFS_WCLIMATE_HI = C03APP_OFFS_BEGIN+3 -.equ C03APP_OFFS_WLIGHT_LO = C03APP_OFFS_BEGIN+4 -.equ C03APP_OFFS_WLIGHT_HI = C03APP_OFFS_BEGIN+5 -.equ C03APP_OFFS_WWINDOWS_LO = C03APP_OFFS_BEGIN+6 -.equ C03APP_OFFS_WWINDOWS_HI = C03APP_OFFS_BEGIN+7 -.equ C03APP_OFFS_WDEBUG_LO = C03APP_OFFS_BEGIN+8 -.equ C03APP_OFFS_WDEBUG_HI = C03APP_OFFS_BEGIN+9 -.equ C03APP_SIZE = C03APP_OFFS_BEGIN+10 +.equ C03APP_OFFS_BEGIN = GUIAPP_SIZE +.equ C03APP_OFFS_WMENU_LO = C03APP_OFFS_BEGIN+0 +.equ C03APP_OFFS_WMENU_HI = C03APP_OFFS_BEGIN+1 +.equ C03APP_OFFS_WCLIMATE_LO = C03APP_OFFS_BEGIN+2 +.equ C03APP_OFFS_WCLIMATE_HI = C03APP_OFFS_BEGIN+3 +.equ C03APP_OFFS_WLIGHT_LO = C03APP_OFFS_BEGIN+4 +.equ C03APP_OFFS_WLIGHT_HI = C03APP_OFFS_BEGIN+5 +.equ C03APP_OFFS_WWINDOWS_LO = C03APP_OFFS_BEGIN+6 +.equ C03APP_OFFS_WWINDOWS_HI = C03APP_OFFS_BEGIN+7 +.equ C03APP_OFFS_WDEBUG_LO = C03APP_OFFS_BEGIN+8 +.equ C03APP_OFFS_WDEBUG_HI = C03APP_OFFS_BEGIN+9 +.equ C03APP_OFFS_WNETSTATS_LO = C03APP_OFFS_BEGIN+10 +.equ C03APP_OFFS_WNETSTATS_HI = C03APP_OFFS_BEGIN+11 +.equ C03APP_SIZE = C03APP_OFFS_BEGIN+12 ; selectors for main windows -.equ C03APP_SEL_BACK = 1 -.equ C03APP_SEL_MENU = 2 -.equ C03APP_SEL_CLIMATE = 3 -.equ C03APP_SEL_LIGHT = 4 -.equ C03APP_SEL_WINDOWS = 5 -.equ C03APP_SEL_DEBUG = 6 +.equ C03APP_SEL_BACK = 1 +.equ C03APP_SEL_MENU = 2 +.equ C03APP_SEL_CLIMATE = 3 +.equ C03APP_SEL_LIGHT = 4 +.equ C03APP_SEL_WINDOWS = 5 +.equ C03APP_SEL_DEBUG = 6 +.equ C03APP_SEL_NETSTATS = 7 @@ -91,8 +94,9 @@ C03App_Init: std Y+OBJECT_OFFS_SIGNALMAP_HI, r16 ; create main windows - rcall c03AppCreateWinMenu ; (!Y) - rcall c03AppCreateWinClimate ; (!Y) + rcall c03AppCreateWinMenu ; (any, !Y) + rcall c03AppCreateWinClimate ; (any, !Y) + rcall c03AppCreateWinNetStats ; (any, !Y) ; enter menu window rcall C03App_EnterMenuWin @@ -152,6 +156,31 @@ c03AppCreateWinClimate_ret: +; --------------------------------------------------------------------------- +; @routine c03AppCreateWinNetStats +; +; @clobbers !X + +c03AppCreateWinNetStats: + push yl + push yh + bigcall NetStatWin_new + mov xl, yl + mov xh, yh + pop yh + pop yl + brcc c03AppCreateWinNetStats_ret + std Y+C03APP_OFFS_WNETSTATS_LO, xl + std Y+C03APP_OFFS_WNETSTATS_HI, xh + ldi r16, C03APP_SEL_NETSTATS + rcall c03AppSetTargetAndSelector + sec +c03AppCreateWinNetStats_ret: + ret +; @end + + + ; --------------------------------------------------------------------------- ; @routine c03AppSetTargetAndSelector ; @@ -268,6 +297,25 @@ C03App_OnCmdDebug_ret: +; --------------------------------------------------------------------------- +; @routine C03App_OnCmdNetStats +; +; @param Y ptr to this guiapp + +C03App_OnCmdNetStats: + ldd xl, Y+C03APP_OFFS_WNETSTATS_LO + ldd xh, Y+C03APP_OFFS_WNETSTATS_HI + mov r16, xl ; was window created? + or r16, xh + breq C03App_OnCmdNetStats_ret ; nope, ignore this signal + bigcall GuiApp_EnterWindow +C03App_OnCmdNetStats_ret: + sec + ret +; @end + + + ; --------------------------------------------------------------------------- ; @routine C03App_OnCmdBack ; @@ -370,11 +418,13 @@ C03App_DefaultSignalmap: ; header .dw GuiApp_DefaultSignalmap*2 ; next table to use ; entries - .db C03APP_SEL_BACK, WIDGET_SIGNAL_COMMAND, LOW(C03App_OnCmdBack), HIGH(C03App_OnCmdBack) - .db C03APP_SEL_MENU, MENUWIN_SIGNAL_CLIMATE, LOW(C03App_OnCmdClimate), HIGH(C03App_OnCmdClimate) - .db C03APP_SEL_MENU, MENUWIN_SIGNAL_LIGHT, LOW(C03App_OnCmdLight), HIGH(C03App_OnCmdLight) - .db C03APP_SEL_MENU, MENUWIN_SIGNAL_WINDOWS, LOW(C03App_OnCmdWindows), HIGH(C03App_OnCmdWindows) - .db C03APP_SEL_MENU, MENUWIN_SIGNAL_DEBUG, LOW(C03App_OnCmdDebug), HIGH(C03App_OnCmdDebug) + .db C03APP_SEL_BACK, WIDGET_SIGNAL_COMMAND, LOW(C03App_OnCmdBack), HIGH(C03App_OnCmdBack) + .db C03APP_SEL_MENU, MENUWIN_SIGNAL_CLIMATE, LOW(C03App_OnCmdClimate), HIGH(C03App_OnCmdClimate) + .db C03APP_SEL_MENU, MENUWIN_SIGNAL_LIGHT, LOW(C03App_OnCmdLight), HIGH(C03App_OnCmdLight) + .db C03APP_SEL_MENU, MENUWIN_SIGNAL_WINDOWS, LOW(C03App_OnCmdWindows), HIGH(C03App_OnCmdWindows) + .db C03APP_SEL_MENU, MENUWIN_SIGNAL_DEBUG, LOW(C03App_OnCmdDebug), HIGH(C03App_OnCmdDebug) + .db C03APP_SEL_MENU, MENUWIN_SIGNAL_NETSTATS, LOW(C03App_OnCmdNetStats), HIGH(C03App_OnCmdNetStats) + .db 0, 0, 0, 0 ; end of table diff --git a/avr/devices/c03/test/main.asm b/avr/devices/c03/test/main.asm index 541b539..5d5e249 100644 --- a/avr/devices/c03/test/main.asm +++ b/avr/devices/c03/test/main.asm @@ -338,6 +338,7 @@ GUI2_MODULE_END: .include "a_c03.asm" .include "w_menu.asm" .include "w_climate.asm" +.include "w_netstats.asm" .include "ressources.inc" diff --git a/avr/devices/c03/test/ressources.asm b/avr/devices/c03/test/ressources.asm index b4680ef..865729a 100644 --- a/avr/devices/c03/test/ressources.asm +++ b/avr/devices/c03/test/ressources.asm @@ -24,7 +24,7 @@ .org RESSOURCE_ADDR RessourceTable: - .dw 35 ; num of ressources + .dw 41 ; num of ressources .dw (resImageNetwork*2) ; 0: RESSSOURCE_IMG_NETWORK .dw (resImageCloud*2) ; 1: RESSSOURCE_IMG_CLOUD .dw (resImageTemp*2) ; 2: RESSSOURCE_IMG_TEMP @@ -61,6 +61,14 @@ RessourceTable: .dw (resTextRoomClimate*2) ; 33: RESSSOURCE_TXT_ROOMCLIMATE .dw (resTextAqHome*2) ; 34: RESSSOURCE_TXT_AQHOME + .dw (resTextPacketsIn*2) ; 35: RESSSOURCE_TXT_PACKETSIN + .dw (resTextPacketsOut*2) ; 36: RESSSOURCE_TXT_PACKETSOUT + .dw (resTextEContent*2) ; 37: RESSSOURCE_TXT_ECONTENT + .dw (resTextEMsgSize*2) ; 38: RESSSOURCE_TXT_EMSGSIZE + .dw (resTextEIO*2) ; 39: RESSSOURCE_TXT_EIO + .dw (resTextNetStats*2) ; 40: RESSSOURCE_TXT_NETSTATS + + resImageNetwork: .dw DISPLAY_IMAGETYPE_IDX2RLE @@ -1048,6 +1056,24 @@ resTextRoomClimate: resTextAqHome: .db "AqHome", 0, 0 +resTextPacketsIn: + .db "Eingehende Pakete:", 0 + +resTextPacketsOut: + .db "Ausgehende Pakete:", 0 + +resTextEContent: + .db "CRC Fehler:", 0 + +resTextEMsgSize: + .db "MsgSize Fehler:", 0 + +resTextEIO: + .db "IO Fehler:", 0, 0 + +resTextNetStats: + .db "Netzwerk Statistik", 0, 0 + #endif diff --git a/avr/devices/c03/test/ressources.inc b/avr/devices/c03/test/ressources.inc index e318806..ca23e06 100644 --- a/avr/devices/c03/test/ressources.inc +++ b/avr/devices/c03/test/ressources.inc @@ -46,7 +46,12 @@ .equ RESSSOURCE_TXT_UNKNOWN_S = 32 .equ RESSSOURCE_TXT_ROOMCLIMATE = 33 .equ RESSSOURCE_TXT_AQHOME = 34 - +.equ RESSSOURCE_TXT_PACKETSIN = 35 +.equ RESSSOURCE_TXT_PACKETSOUT = 36 +.equ RESSSOURCE_TXT_ECONTENT = 37 +.equ RESSSOURCE_TXT_EMSGSIZE = 38 +.equ RESSSOURCE_TXT_EIO = 39 +.equ RESSSOURCE_TXT_NETSTATS = 40 diff --git a/avr/devices/c03/test/w_menu.asm b/avr/devices/c03/test/w_menu.asm index e9914e7..3588d3e 100644 --- a/avr/devices/c03/test/w_menu.asm +++ b/avr/devices/c03/test/w_menu.asm @@ -22,13 +22,15 @@ .equ MENUWIN_SIGNAL_LIGHT = WIDGET_SIGNAL_NEXTFREE+1 .equ MENUWIN_SIGNAL_WINDOWS = WIDGET_SIGNAL_NEXTFREE+2 .equ MENUWIN_SIGNAL_DEBUG = WIDGET_SIGNAL_NEXTFREE+3 -.equ MENUWIN_SIGNAL_NEXTFREE = WIDGET_SIGNAL_NEXTFREE+4 +.equ MENUWIN_SIGNAL_NETSTATS = WIDGET_SIGNAL_NEXTFREE+4 +.equ MENUWIN_SIGNAL_NEXTFREE = WIDGET_SIGNAL_NEXTFREE+5 .equ MENUWIN_SEL_CLIMATE = 1 .equ MENUWIN_SEL_LIGHT = 2 .equ MENUWIN_SEL_WINDOWS = 3 .equ MENUWIN_SEL_DEBUG = 4 +.equ MENUWIN_SEL_NETSTATS = 5 @@ -129,6 +131,12 @@ menuWinCreateContent: rcall menuWinCreateButton brcc menuWinCreateContent_ret + ldi r20, LOW(RESSSOURCE_IMG_NETWORK) + ldi r21, HIGH(RESSSOURCE_IMG_NETWORK) + ldi r22, MENUWIN_SEL_NETSTATS + rcall menuWinCreateButton + brcc menuWinCreateContent_ret + ldi r20, LOW(RESSSOURCE_IMG_DEBUGEEPROM) ldi r21, HIGH(RESSSOURCE_IMG_DEBUGEEPROM) ldi r22, MENUWIN_SEL_DEBUG @@ -214,6 +222,17 @@ MenuWin_OnCmdWindows: +; --------------------------------------------------------------------------- +; @routine MenuWin_OnCmdNetStats + +MenuWin_OnCmdNetStats: + ldi r16, MENUWIN_SIGNAL_NETSTATS + bigcall OBJ_EmitSignal + ret +; @end + + + ; --------------------------------------------------------------------------- ; @routine MenuWin_OnCmdDebug @@ -238,6 +257,7 @@ MenuWin_DefaultSignalmap: .db MENUWIN_SEL_CLIMATE, WIDGET_SIGNAL_COMMAND, LOW(MenuWin_OnCmdClimate), HIGH(MenuWin_OnCmdClimate) .db MENUWIN_SEL_LIGHT, WIDGET_SIGNAL_COMMAND, LOW(MenuWin_OnCmdLight), HIGH(MenuWin_OnCmdLight) .db MENUWIN_SEL_WINDOWS, WIDGET_SIGNAL_COMMAND, LOW(MenuWin_OnCmdWindows), HIGH(MenuWin_OnCmdWindows) + .db MENUWIN_SEL_NETSTATS, WIDGET_SIGNAL_COMMAND, LOW(MenuWin_OnCmdNetStats), HIGH(MenuWin_OnCmdNetStats) .db MENUWIN_SEL_DEBUG, WIDGET_SIGNAL_COMMAND, LOW(MenuWin_OnCmdDebug), HIGH(MenuWin_OnCmdDebug) .db 0, 0, 0, 0 ; end of table diff --git a/avr/devices/c03/test/w_netstats.asm b/avr/devices/c03/test/w_netstats.asm new file mode 100644 index 0000000..5061088 --- /dev/null +++ b/avr/devices/c03/test/w_netstats.asm @@ -0,0 +1,352 @@ +; *************************************************************************** +; copyright : (C) 2026 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_GUI2_NETSTATS_ASM +#define AQH_AVR_GUI2_NETSTATS_ASM + +; *************************************************************************** +; defines + + +.equ NETSTATWIN_OFFS_BEGIN = MAINWINDOW_SIZE +.equ NETSTATWIN_OFFS_TIMER = NETSTATWIN_OFFS_BEGIN+0 +.equ NETSTATWIN_SIZE = NETSTATWIN_OFFS_BEGIN+1 + + +.equ NETSTATWIN_TIMERVAL = 50 ; update every 5 secs + + + +; *************************************************************************** +; code + +.cseg + + +; --------------------------------------------------------------------------- +; @routine NetStatWin_new @global +; +; @param Y pointer to GUIAPP +; @return CFLAG set of okay, cleared otherwise +; @return Y address of newly created object + +NetStatWin_new: + bigcall GuiApp_GetRootWindow + brcc NetStatWin_new_ret + mov xl, r18 ; use root window as parent for main window + mov xh, r19 + ldi r24, LOW(NETSTATWIN_SIZE) + ldi r25, HIGH(NETSTATWIN_SIZE) + bigcall Object_Alloc ; Y=space (!r16, !r17, !X) + brcc NetStatWin_new_ret + rcall NetStatWin_Init +NetStatWin_new_ret: + ret +; @end + + + +; --------------------------------------------------------------------------- +; @routine NetStatWin_new @global +; +; @param Y pointer to newly allocated widget data +; @param X pointer to root window +; @return CFLAG set of okay, cleared otherwise +; @clobbers any, !Y + +NetStatWin_Init: + ldi r16, (1<