avr: added titled windows

This commit is contained in:
Martin Preuss
2025-11-03 21:02:25 +01:00
parent e58e9b846c
commit 5b72686904
9 changed files with 352 additions and 89 deletions

View File

@@ -247,6 +247,7 @@
#ifdef MODULES_ILI9341
.include "modules/lcd2/ili9341/defs.asm"
.include "modules/lcd2/ili9341/colors.asm"
.include "modules/lcd2/ili9341/main.asm"
.include "modules/lcd2/ili9341/io_spi.asm"
.include "modules/lcd2/ili9341/graphops.asm"

View File

@@ -213,6 +213,14 @@ onEveryLoop:
test:
#ifdef MODULES_GUI
bigcall WinNetStats_Init
#endif
ret
; ***************************************************************************
@@ -223,6 +231,7 @@ onEveryLoop:
;.include "common/debug.asm"
.include "modules/lcd2/gui/titledwindow.asm"
;.include "modules/lcd2/font/font2.asm"
;.include "modules/lcd2/font/font3.asm"
;.include "modules/lcd2/font/font16x26.asm"
@@ -234,6 +243,9 @@ onEveryLoop:
;.include "common/tree_t.asm"
;.include "common/divide.asm"
.include "modules/lcd2/gui/style.asm"
.include "win_netstats.asm"
; ---------------------------------------------------------------------------
; defines for network interface
@@ -245,93 +257,9 @@ onEveryLoop:
test:
#ifdef MODULES_GUI
ldi yl, LOW(mainWindow)
ldi yh, HIGH(mainWindow)
ldi zl, LOW(mainWindowInFlash*2);
ldi zh, HIGH(mainWindowInFlash*2);
ldi r17, WIN_SIZE
testCopyWinLoop:
lpm r16, Z+
st Y+, r16
dec r17
brne testCopyWinLoop
ldi yl, LOW(mainWindow)
ldi yh, HIGH(mainWindow)
bigcall Window_Clear
#if 1
ldi zl, LOW(mainWindowTitle*2)
ldi zh, HIGH(mainWindowTitle*2)
; print title at 10/2
ldi r16, 10
mov r4, r16
clr r5
ldi r16, 2
mov r6, r16
clr r7
bigcall Window_DrawTextFlash
#else
ldi zl, LOW(ili9341Font6x8_1*2)
ldi zh, HIGH(ili9341Font6x8_1*2)
ldi r16, LOW(0b0000000000000000)
mov r0, r16
ldi r16, HIGH(0b0000000000000000)
mov r1, r16
ldi r16, LOW(0b1111111111111111)
mov r2, r16
ldi r16, HIGH(0b1111111111111111)
mov r3, r16
ldi r16, 10
mov r4, r16
clr r5
ldi r16, 20
mov r6, r16
clr r7
ldi r16, 'A'
bigcall Display_DrawChar
add r4, r18
adc r5, r19
ldi r16, 'B'
bigcall Display_DrawChar
#endif
ret
testHandler:
ret
#ifdef MODULES_GUI
mainWindowInFlash:
.dw testHandler ; handler
.dw 0 ; X
.dw 0 ; Y
.dw DISPLAY_WIDTH
.dw DISPLAY_HEIGHT
; 0bRRRRRGGGGGGBBBBB
.dw 0b0000000000011111 ; blue
; .dw 0b1111100000000000 ; red
.dw 0b1111111111111111 ; white
.dw (ili9341Font6x8_1*2)
mainWindowTitle: .db "AQHOME", 0, 0
#endif
.dseg
mainWindow: .byte WIN_SIZE
heapStart:

View File

@@ -0,0 +1,67 @@
; ***************************************************************************
; 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_C02_WIN_NETSTATS_ASM
#define AQH_AVR_DEVICE_C02_WIN_NETSTATS_ASM
.cseg
WinNetStats_Init:
; setup
ldi yl, LOW(winNetstats)
ldi yh, HIGH(winNetstats)
rcall TitleWindow_Init
ldi zl, LOW(ili9341Font6x8_1*2)
ldi zh, HIGH(ili9341Font6x8_1*2)
bigcall TitleWindow_SetFont
ldi r16, LOW(winNetstats_title*2)
std Y+TITLEDWINDOW_OFFS_TITLEPTR_LO, r16
ldi r16, HIGH(winNetstats_title*2)
std Y+TITLEDWINDOW_OFFS_TITLEPTR_HI, r16
; setup size and pos
clr r4
clr r5
clr r6
clr r7
ldi r16, LOW(DISPLAY_WIDTH)
mov r8, r16
ldi r16, HIGH(DISPLAY_WIDTH)
mov r9, r16
ldi r16, LOW(DISPLAY_HEIGHT)
mov r10, r16
ldi r16, HIGH(DISPLAY_HEIGHT)
mov r11, r16
bigcall TitleWindow_SetPosAndSize
; setup colors
bigcall TitleWindow_SetStyleColors
bigcall TitleWindow_Draw
ret
; @end
winNetstats_title: .db "Network Statistics", 0, 0
.dseg
winNetstats:
.byte TITLEDWINDOW_SIZE
#endif

View File

@@ -5,6 +5,8 @@
<extradist>
defs.asm
main.asm
style.asm
titledwindow.asm
window.asm
</extradist>

View File

@@ -32,6 +32,12 @@
.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

View File

@@ -0,0 +1,24 @@
; ***************************************************************************
; 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_GUI_STYLE_ASM
#define AQH_AVR_GUI_STYLE_ASM
.equ STYLE_WIN_TITLE_BACKGROUND = DISPLAY_COLOR_NAVY
.equ STYLE_WIN_TITLE_FOREGROUND = DISPLAY_COLOR_WHITE
.equ STYLE_WIN_BACKGROUND = DISPLAY_COLOR_LIGHTGREY
.equ STYLE_WIN_FOREGROUND = DISPLAY_COLOR_BLACK
.equ STYLE_WIN_TITLE_HEIGHT = 20
#endif

View File

@@ -0,0 +1,214 @@
; ***************************************************************************
; 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_GUI_TITLEDWINDOW_ASM
#define AQH_AVR_GUI_TITLEDWINDOW_ASM
.equ TITLEDWINDOW_OFFS_SELF = 0
.equ TITLEDWINDOW_OFFS_TITLEPTR_LO = WIN_SIZE
.equ TITLEDWINDOW_OFFS_TITLEPTR_HI = WIN_SIZE+1
.equ TITLEDWINDOW_OFFS_TITLEWIN = TITLEDWINDOW_OFFS_TITLEPTR_HI+1
.equ TITLEDWINDOW_OFFS_CONTENTWIN = TITLEDWINDOW_OFFS_TITLEWIN+WIN_SIZE
.equ TITLEDWINDOW_SIZE = TITLEDWINDOW_OFFS_CONTENTWIN+WIN_SIZE
.cseg
; ---------------------------------------------------------------------------
; @routine TitleWindow_Init @global
;
; @param Y pointer to titledwindow data (size=TITLEDWINDOW_SIZE)
TitleWindow_Init:
mov xl, yl
mov xh, yh
ldi r17, TITLEDWINDOW_SIZE
clr r16
bigcall Utils_FillSram ; (R17, X)
ldi r16, LOW(TitleWindow_Handler)
std Y+(TITLEDWINDOW_OFFS_SELF+WIN_OFFS_HANDLER_LO), r16
ldi r16, HIGH(TitleWindow_Handler)
std Y+(TITLEDWINDOW_OFFS_SELF+WIN_OFFS_HANDLER_HI), r16
ret
; @end
; ---------------------------------------------------------------------------
; @routine TitleWindow_SetFont @global
;
; @param Y pointer to screen object in SDRAM
; @param Z pointer to font
; @clobbers any, !Y
TitleWindow_SetFont:
std Y+WIN_OFFS_FONT_LO, zl
std Y+WIN_OFFS_FONT_HI, zh
; setup title window
adiw yh:yl, TITLEDWINDOW_OFFS_TITLEWIN
std Y+WIN_OFFS_FONT_LO, zl
std Y+WIN_OFFS_FONT_HI, zh
sbiw yh:yl, TITLEDWINDOW_OFFS_TITLEWIN
; setup content window
adiw yh:yl, TITLEDWINDOW_OFFS_CONTENTWIN
std Y+WIN_OFFS_FONT_LO, zl
std Y+WIN_OFFS_FONT_HI, zh
sbiw yh:yl, TITLEDWINDOW_OFFS_CONTENTWIN
ret
; @end
; ---------------------------------------------------------------------------
; @routine TitleWindow_SetPosAndSize @global
;
; @param Y pointer to screen object in SDRAM
; @param R5:R4 X (abs)
; @param R7:R6 Y (abs)
; @param R9:R8 W
; @param R11:R10 H
; @clobbers any, !Y
TitleWindow_SetPosAndSize:
std Y+WIN_OFFS_X_LO, r4
std Y+WIN_OFFS_X_HI, r5
std Y+WIN_OFFS_Y_LO, r6
std Y+WIN_OFFS_Y_HI, r7
std Y+WIN_OFFS_WIDTH_LO, r8
std Y+WIN_OFFS_WIDTH_HI, r9
std Y+WIN_OFFS_HEIGHT_LO, r10
std Y+WIN_OFFS_HEIGHT_HI, r11
; setup title window
adiw yh:yl, TITLEDWINDOW_OFFS_TITLEWIN
std Y+WIN_OFFS_X_LO, r4
std Y+WIN_OFFS_X_HI, r5
std Y+WIN_OFFS_Y_LO, r6
std Y+WIN_OFFS_Y_HI, r7
std Y+WIN_OFFS_WIDTH_LO, r8
std Y+WIN_OFFS_WIDTH_HI, r9
ldi r16, LOW(STYLE_WIN_TITLE_HEIGHT)
ldi r17, HIGH(STYLE_WIN_TITLE_HEIGHT)
std Y+WIN_OFFS_HEIGHT_LO, r16
std Y+WIN_OFFS_HEIGHT_HI, r17
sbiw yh:yl, TITLEDWINDOW_OFFS_TITLEWIN
; setup content window
adiw yh:yl, TITLEDWINDOW_OFFS_CONTENTWIN
std Y+WIN_OFFS_X_LO, r4
std Y+WIN_OFFS_X_HI, r5
ldi r16, LOW(STYLE_WIN_TITLE_HEIGHT)
ldi r17, HIGH(STYLE_WIN_TITLE_HEIGHT)
add r16, r6
adc r16, r7
std Y+WIN_OFFS_Y_LO, r16
std Y+WIN_OFFS_Y_HI, r17
std Y+WIN_OFFS_WIDTH_LO, r8
std Y+WIN_OFFS_WIDTH_HI, r9
mov r16, r10
mov r17, r11
subi r16, LOW(STYLE_WIN_TITLE_HEIGHT)
sbci r17, HIGH(STYLE_WIN_TITLE_HEIGHT)
std Y+WIN_OFFS_HEIGHT_LO, r16
std Y+WIN_OFFS_HEIGHT_HI, r17
sbiw yh:yl, TITLEDWINDOW_OFFS_CONTENTWIN
ret
; @end
TitleWindow_SetStyleColors:
ldi r16, LOW(STYLE_WIN_BACKGROUND)
ldi r17, HIGH(STYLE_WIN_BACKGROUND)
std Y+WIN_OFFS_BG_COL_LO, r16
std Y+WIN_OFFS_BG_COL_HI, r17
ldi r16, LOW(STYLE_WIN_FOREGROUND)
ldi r17, HIGH(STYLE_WIN_FOREGROUND)
std Y+WIN_OFFS_FG_COL_LO, r16
std Y+WIN_OFFS_FG_COL_HI, r17
; setup title window
adiw yh:yl, TITLEDWINDOW_OFFS_TITLEWIN
ldi r16, LOW(STYLE_WIN_TITLE_BACKGROUND)
ldi r17, HIGH(STYLE_WIN_TITLE_BACKGROUND)
std Y+WIN_OFFS_BG_COL_LO, r16
std Y+WIN_OFFS_BG_COL_HI, r17
ldi r16, LOW(STYLE_WIN_TITLE_FOREGROUND)
ldi r17, HIGH(STYLE_WIN_TITLE_FOREGROUND)
std Y+WIN_OFFS_FG_COL_LO, r16
std Y+WIN_OFFS_FG_COL_HI, r17
sbiw yh:yl, TITLEDWINDOW_OFFS_TITLEWIN
; setup content window
adiw yh:yl, TITLEDWINDOW_OFFS_CONTENTWIN
ldi r16, LOW(STYLE_WIN_BACKGROUND)
ldi r17, HIGH(STYLE_WIN_BACKGROUND)
std Y+WIN_OFFS_BG_COL_LO, r16
std Y+WIN_OFFS_BG_COL_HI, r17
ldi r16, LOW(STYLE_WIN_FOREGROUND)
ldi r17, HIGH(STYLE_WIN_FOREGROUND)
std Y+WIN_OFFS_FG_COL_LO, r16
std Y+WIN_OFFS_FG_COL_HI, r17
sbiw yh:yl, TITLEDWINDOW_OFFS_CONTENTWIN
ret
; @end
; ---------------------------------------------------------------------------
; @routine TitleWindow_Draw @global
;
; @param Y pointer to titledwindow data (size=TITLEDWINDOW_SIZE)
TitleWindow_Draw:
; draw title window
adiw yh:yl, TITLEDWINDOW_OFFS_TITLEWIN
rcall Window_Clear
sbiw yh:yl, TITLEDWINDOW_OFFS_TITLEWIN
; write header
ldd zl, Y+TITLEDWINDOW_OFFS_TITLEPTR_LO
ldd zh, Y+TITLEDWINDOW_OFFS_TITLEPTR_HI
adiw yh:yl, TITLEDWINDOW_OFFS_TITLEWIN
ldi r16, 5
mov r4, r16
clr r5
ldi r16, 5
mov r6, r16
clr r7
rcall Window_DrawTextFlash
sbiw yh:yl, TITLEDWINDOW_OFFS_TITLEWIN
; clear content window
adiw yh:yl, TITLEDWINDOW_OFFS_CONTENTWIN
rcall Window_Clear
sbiw yh:yl, TITLEDWINDOW_OFFS_CONTENTWIN
ret
; @end
TitleWindow_Handler:
ret
#endif

View File

@@ -15,9 +15,30 @@
; FEDCBA9876543210
; 0bRRRRRGGGGGGBBBBB
#define DISPLAY_COLOR_FROM_RGB(r, g, b) ((r<<11) | (g<<5) | (b & 0x1f))
;#define DISPLAY_COLOR_FROM_RGB(r, g, b) ((r<<11) | (g<<5) | (b & 0x1f))
.equ DISPLAY_COLOR_BLACK = 0x0000 ; 0, 0, 0
.equ DISPLAY_COLOR_NAVY = 0x000F ; 0, 0, 128
.equ DISPLAY_COLOR_DARKGREEN = 0x03E0 ; 0, 128, 0
.equ DISPLAY_COLOR_DARKCYAN = 0x03EF ; 0, 128, 128
.equ DISPLAY_COLOR_MAROON = 0x7800 ; 128, 0, 0
.equ DISPLAY_COLOR_PURPLE = 0x780F ; 128, 0, 128
.equ DISPLAY_COLOR_OLIVE = 0x7BE0 ; 128, 128, 0
.equ DISPLAY_COLOR_LIGHTGREY = 0xC618 ; 192, 192, 192
.equ DISPLAY_COLOR_DARKGREY = 0x7BEF ; 128, 128, 128
.equ DISPLAY_COLOR_BLUE = 0x001F ; 0, 0, 255
.equ DISPLAY_COLOR_GREEN = 0x07E0 ; 0, 255, 0
.equ DISPLAY_COLOR_CYAN = 0x07FF ; 0, 255, 255
.equ DISPLAY_COLOR_RED = 0xF800 ; 255, 0, 0
.equ DISPLAY_COLOR_MAGENTA = 0xF81F ; 255, 0, 255
.equ DISPLAY_COLOR_YELLOW = 0xFFE0 ; 255, 255, 0
.equ DISPLAY_COLOR_WHITE = 0xFFFF ; 255, 255, 255
.equ DISPLAY_COLOR_ORANGE = 0xFD20 ; 255, 165, 0
.equ DISPLAY_COLOR_GREENYELLOW = 0xAFE5 ; 173, 255, 47
.equ DISPLAY_COLOR_PINK = 0xF81F
#endif

View File

@@ -47,7 +47,7 @@ ili9341Font12x20MonoHandlerFn:
ili9341Font12x20MonoRenderChar:
push zl
push zh
rcall ili9341Font12x20GetCharPosInFont ; (r17, r24, r25, z)
rcall ili9341Font12x20GetCharPosInFont ; (r24, r25, z)
ldi r25, 20 ; 20 bytes height
ili9341Font12x20MonoRenderChar_loop1:
ldi r24, 12 ; 16 bits
@@ -68,10 +68,10 @@ ili9341Font12x20MonoRenderChar_writeForeground:
mov r18, r2
mov r19, r3
ili9341Font12x20MonoRenderChar_sendToDisplay:
mov r16, r18
rcall SPIHW_MasterTransfer ; (R16)
mov r16, r19
rcall SPIHW_MasterTransfer ; (R16)
mov r16, r18
rcall SPIHW_MasterTransfer ; (R16)
ili9341Font12x20MonoRenderChar_loop2end:
dec r24
brne ili9341Font12x20MonoRenderChar_loop2
@@ -92,7 +92,7 @@ ili9341Font12x20MonoRenderChar_loop2end:
; @param R16 character to write
; @param Z pointer to font
; @return Z pointer to begin of char data
; @clobbers r17, r24, r25, z
; @clobbers r24, r25, z
ili9341Font12x20GetCharPosInFont:
mov r24, r16