From f6e852be74545a8bc1cf6f05fc4ee9fa2d73b973 Mon Sep 17 00:00:00 2001 From: Martin Preuss Date: Mon, 17 Nov 2025 23:03:56 +0100 Subject: [PATCH] started working on static gui --- avr/modules/lcd2/staticgui/0BUILD | 16 + avr/modules/lcd2/staticgui/TODO | 13 + avr/modules/lcd2/staticgui/defs.asm | 65 +++ avr/modules/lcd2/staticgui/dialog.asm | 288 ++++++++++++ avr/modules/lcd2/staticgui/main.asm | 27 ++ avr/modules/lcd2/staticgui/style.asm | 24 + avr/modules/lcd2/staticgui/titlewindow.asm | 158 +++++++ avr/modules/lcd2/staticgui/window.asm | 512 +++++++++++++++++++++ 8 files changed, 1103 insertions(+) create mode 100644 avr/modules/lcd2/staticgui/0BUILD create mode 100644 avr/modules/lcd2/staticgui/TODO create mode 100644 avr/modules/lcd2/staticgui/defs.asm create mode 100644 avr/modules/lcd2/staticgui/dialog.asm create mode 100644 avr/modules/lcd2/staticgui/main.asm create mode 100644 avr/modules/lcd2/staticgui/style.asm create mode 100644 avr/modules/lcd2/staticgui/titlewindow.asm create mode 100644 avr/modules/lcd2/staticgui/window.asm diff --git a/avr/modules/lcd2/staticgui/0BUILD b/avr/modules/lcd2/staticgui/0BUILD new file mode 100644 index 0000000..7ad68a8 --- /dev/null +++ b/avr/modules/lcd2/staticgui/0BUILD @@ -0,0 +1,16 @@ + + + + + + defs.asm + dialog.asm + main.asm + style.asm + titlewindow.asm + window.asm + + + + + diff --git a/avr/modules/lcd2/staticgui/TODO b/avr/modules/lcd2/staticgui/TODO new file mode 100644 index 0000000..898a149 --- /dev/null +++ b/avr/modules/lcd2/staticgui/TODO @@ -0,0 +1,13 @@ + + +- Screen + - functions: + - show + - unshow + - touch + - key + - activeAreas: + - x, y, w, h (in FLASH) + - only small variable data in SRAM, no need for heap! + + diff --git a/avr/modules/lcd2/staticgui/defs.asm b/avr/modules/lcd2/staticgui/defs.asm new file mode 100644 index 0000000..0ea9fcd --- /dev/null +++ b/avr/modules/lcd2/staticgui/defs.asm @@ -0,0 +1,65 @@ +; *************************************************************************** +; 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_STATICGUI_DEFS_ASM +#define AQH_AVR_STATICGUI_DEFS_ASM + + +; all offsets in byte size (to be used with LPM) +.equ WIN_F_OFFS_X_LO = 0 +.equ WIN_F_OFFS_X_HI = 1 +.equ WIN_F_OFFS_Y_LO = 2 +.equ WIN_F_OFFS_Y_HI = 3 +.equ WIN_F_OFFS_WIDTH_LO = 4 +.equ WIN_F_OFFS_WIDTH_HI = 5 +.equ WIN_F_OFFS_HEIGHT_LO = 6 +.equ WIN_F_OFFS_HEIGHT_HI = 7 +.equ WIN_F_SIZE = 8 + +.equ COLORWIN_F_OFFS_WIN = WIN_F_SIZE +.equ COLORWIN_F_OFFS_BG_COLOR_LO = WIN_F_SIZE +.equ COLORWIN_F_OFFS_BG_COLOR_HI = WIN_F_SIZE+1 +.equ COLORWIN_F_OFFS_FG_COLOR_LO = WIN_F_SIZE+2 +.equ COLORWIN_F_OFFS_FG_COLOR_HI = WIN_F_SIZE+3 +.equ COLORWIN_F_SIZE = WIN_F_SIZE+4 + +.equ TEXTWIN_F_OFFS_WIN = COLORWIN_F_SIZE +.equ TEXTWIN_F_OFFS_FONT_LO = COLORWIN_F_SIZE +.equ TEXTWIN_F_OFFS_FONT_HI = COLORWIN_F_SIZE+1 +.equ TEXTWIN_F_SIZE = COLORWIN_F_SIZE+2 + + + +.equ WIN_OFFS_X_LO = 0 +.equ WIN_OFFS_X_HI = 1 +.equ WIN_OFFS_Y_LO = 2 +.equ WIN_OFFS_Y_HI = 3 +.equ WIN_OFFS_WIDTH_LO = 4 +.equ WIN_OFFS_WIDTH_HI = 5 +.equ WIN_OFFS_HEIGHT_LO = 6 +.equ WIN_OFFS_HEIGHT_HI = 7 +.equ WIN_OFFS_BG_COL_LO = 8 +.equ WIN_OFFS_BG_COL_HI = 9 +.equ WIN_OFFS_FG_COL_LO = 10 +.equ WIN_OFFS_FG_COL_HI = 11 +.equ WIN_OFFS_FONT_LO = 12 ;byte address! +.equ WIN_OFFS_FONT_HI = 13 +.equ WIN_SIZE = 14 + + + +.equ WIN_EVENT_DESTROY = 1 +.equ WIN_EVENT_SHOW = 2 +.equ WIN_EVENT_HIDE = 3 +.equ WIN_EVENT_DRAW = 4 +.equ WIN_EVENT_TIMER = 5 + + +#endif ; AQH_AVR_STATICGUI_DEFS_ASM + diff --git a/avr/modules/lcd2/staticgui/dialog.asm b/avr/modules/lcd2/staticgui/dialog.asm new file mode 100644 index 0000000..a865699 --- /dev/null +++ b/avr/modules/lcd2/staticgui/dialog.asm @@ -0,0 +1,288 @@ +; *************************************************************************** +; 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 AQHOME_AVR_MODS_STATICGUI_DIALOG_ASM +#define AQHOME_AVR_MODS_STATICGUI_DIALOG_ASM + + + +; *************************************************************************** +; defines + +.equ DIALOG_MAX_ACTIVE = 8 + +.equ DIALOG_OFFS_HANDLER_LO = 0 +.equ DIALOG_OFFS_HANDLER_HI = 1 +.equ DIALOG_OFFS_OPTIONS = 2 +.equ DIALOG_OFFS_COUNTER = 3 +.equ DIALOG_SIZE = 4 + + +.equ DIALOG_OPT_ACTIVE_BIT = 7 + + +.equ DIALOG_FN_INIT = 0 +.equ DIALOG_FN_FINI = 1 +.equ DIALOG_FN_SHOW = 2 +.equ DIALOG_FN_HIDE = 3 +.equ DIALOG_FN_DRAW = 4 +.equ DIALOG_FN_TOUCH = 5 +.equ DIALOG_FN_TIMER = 6 + + + +; *************************************************************************** +; data + +.dseg + +dialogCurrent: .byte 2 +dialogStack: .byte DIALOG_MAX_ACTIVE*2 +dialogStackPos: .byte 1 + +dialogWindow: .byte WIN_SIZE + + + +; *************************************************************************** +; code + +.cseg + + +; --------------------------------------------------------------------------- +; @routine GraphApp_Init @global +; + +DialogMgr_Init: + clr r16 + sts dialogStackPos, r16 + sts dialogCurrent, r16 + sts dialogCurrent+1, r16 + + ldi yl, LOW(dialogWindow) + ldi yh, HIGH(dialogWindow) + bigcall TitleWindow_Init + + ldi zl, LOW(ili9341Font12x20_1*2) + ldi zh, HIGH(ili9341Font12x20_1*2) + std Y+WIN_OFFS_FONT_LO, zl + std Y+WIN_OFFS_FONT_HI, zh + + bigcall TitleWindow_SetFullSize + bigcall TitleWindow_SetStyleColors + + bigcall Window_Clear + ret +; @end + + + +; --------------------------------------------------------------------------- +; @routine DialogMgr_Every100ms @global +; +; Handle display touch events +; Send timer event to every app in the stack (started with last added app). + +DialogMgr_Every100ms: + ; check for touch input changes + rcall Display_InputGetState ; r16=flags, r5:r4=x, r7:r6=y + mov r17, r16 + andi r17, (1<