avr: started working on xpt2046 module.
This commit is contained in:
@@ -254,6 +254,10 @@
|
|||||||
.include "modules/lcd2/ili9341/text.asm"
|
.include "modules/lcd2/ili9341/text.asm"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef MODULES_XPT2046
|
||||||
|
.include "modules/lcd2/xpt2046/main.asm"
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef MODULES_FONT
|
#ifdef MODULES_FONT
|
||||||
.include "modules/lcd2/font/defs.asm"
|
.include "modules/lcd2/font/defs.asm"
|
||||||
.include "modules/lcd2/font/main.asm"
|
.include "modules/lcd2/font/main.asm"
|
||||||
|
|||||||
@@ -183,6 +183,10 @@ onSystemTimerTick:
|
|||||||
bigcall GUI_Every100ms
|
bigcall GUI_Every100ms
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef MODULES_XPT2046
|
||||||
|
bigcall XPT2046_Every100ms
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#ifdef APPS_NETWORK
|
#ifdef APPS_NETWORK
|
||||||
ldi yl, LOW(netInterfaceData)
|
ldi yl, LOW(netInterfaceData)
|
||||||
|
|||||||
@@ -193,6 +193,10 @@ initModules:
|
|||||||
bigcall ILI9341_Init
|
bigcall ILI9341_Init
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef MODULES_XPT2046
|
||||||
|
bigcall XPT2046_Init
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef MODULES_GUI
|
#ifdef MODULES_GUI
|
||||||
bigcall GUI_Init
|
bigcall GUI_Init
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -151,6 +151,13 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
; XPT2046 module
|
||||||
|
|
||||||
|
.equ XPT2046_DEVICENUM = 1
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
; ---------------------------------------------------------------------------
|
; ---------------------------------------------------------------------------
|
||||||
; ComOnUart module
|
; ComOnUart module
|
||||||
|
|
||||||
|
|||||||
@@ -56,6 +56,7 @@
|
|||||||
#define MODULES_COM2W
|
#define MODULES_COM2W
|
||||||
#define MODULES_SPI_HW
|
#define MODULES_SPI_HW
|
||||||
#define MODULES_ILI9341
|
#define MODULES_ILI9341
|
||||||
|
#define MODULES_XPT2046
|
||||||
#define MODULES_FONT
|
#define MODULES_FONT
|
||||||
#define MODULES_GUI
|
#define MODULES_GUI
|
||||||
;#define MODULES_TWI_MASTER
|
;#define MODULES_TWI_MASTER
|
||||||
@@ -169,6 +170,8 @@ irqNotSet:
|
|||||||
; @routine onSystemStart
|
; @routine onSystemStart
|
||||||
|
|
||||||
onSystemStart:
|
onSystemStart:
|
||||||
|
clr r16
|
||||||
|
sts statsUpdateTimer, r16
|
||||||
bigcall test
|
bigcall test
|
||||||
ret
|
ret
|
||||||
; @end
|
; @end
|
||||||
@@ -193,15 +196,26 @@ onMessageReceived:
|
|||||||
; Called every 100ms. Add your routine calls here. No arguments, no results.
|
; Called every 100ms. Add your routine calls here. No arguments, no results.
|
||||||
|
|
||||||
onEvery100ms:
|
onEvery100ms:
|
||||||
onEverySecond:
|
onEveryMinute:
|
||||||
onEveryHour:
|
onEveryHour:
|
||||||
onEveryDay:
|
onEveryDay:
|
||||||
ret
|
ret
|
||||||
; @end
|
; @end
|
||||||
|
|
||||||
|
|
||||||
onEveryMinute:
|
onEverySecond:
|
||||||
|
#ifdef MODULES_GUI
|
||||||
|
lds r16, statsUpdateTimer
|
||||||
|
inc r16
|
||||||
|
cpi r16, 5
|
||||||
|
brcc onEverySecond_updateStats
|
||||||
|
sts statsUpdateTimer, r16
|
||||||
|
ret
|
||||||
|
onEverySecond_updateStats:
|
||||||
bigcall WinNetStats_Update
|
bigcall WinNetStats_Update
|
||||||
|
clr r16
|
||||||
|
sts statsUpdateTimer, r16
|
||||||
|
#endif
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
|
||||||
@@ -220,7 +234,7 @@ onEveryLoop:
|
|||||||
test:
|
test:
|
||||||
#ifdef MODULES_GUI
|
#ifdef MODULES_GUI
|
||||||
bigcall WinNetStats_Init
|
bigcall WinNetStats_Init
|
||||||
bigcall WinNetStats_Draw
|
bigcall WinNetStats_Show
|
||||||
#endif
|
#endif
|
||||||
ret
|
ret
|
||||||
|
|
||||||
@@ -236,7 +250,7 @@ test:
|
|||||||
|
|
||||||
;.include "common/debug.asm"
|
;.include "common/debug.asm"
|
||||||
|
|
||||||
.include "modules/lcd2/gui/titlewindow.asm"
|
.include "modules/lcd2/gui/titlewindow2.asm"
|
||||||
;.include "modules/lcd2/font/font2.asm"
|
;.include "modules/lcd2/font/font2.asm"
|
||||||
;.include "modules/lcd2/font/font3.asm"
|
;.include "modules/lcd2/font/font3.asm"
|
||||||
;.include "modules/lcd2/font/font16x26.asm"
|
;.include "modules/lcd2/font/font16x26.asm"
|
||||||
@@ -265,6 +279,8 @@ test:
|
|||||||
|
|
||||||
.dseg
|
.dseg
|
||||||
|
|
||||||
|
statsUpdateTimer: .byte 1
|
||||||
|
|
||||||
heapStart:
|
heapStart:
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -15,19 +15,19 @@
|
|||||||
|
|
||||||
|
|
||||||
WinNetStats_Init:
|
WinNetStats_Init:
|
||||||
|
clr r16
|
||||||
|
sts winNetstatsUpdateNum, r16
|
||||||
|
sts winNetstatsUpdateNum+1, r16
|
||||||
|
|
||||||
; setup
|
; setup
|
||||||
ldi yl, LOW(winNetstats)
|
ldi yl, LOW(winNetstats)
|
||||||
ldi yh, HIGH(winNetstats)
|
ldi yh, HIGH(winNetstats)
|
||||||
bigcall TitleWindow_Init
|
bigcall TitleWindow_Init
|
||||||
|
|
||||||
ldi zl, LOW(ili9341Font12x20_1*2)
|
ldi zl, LOW(STYLE_WIN_FONT*2)
|
||||||
ldi zh, HIGH(ili9341Font12x20_1*2)
|
ldi zh, HIGH(STYLE_WIN_FONT*2)
|
||||||
bigcall TitleWindow_SetFont
|
std Y+WIN_OFFS_FONT_LO, zl
|
||||||
|
std Y+WIN_OFFS_FONT_HI, zh
|
||||||
ldi r16, LOW(winNetstats_title*2)
|
|
||||||
std Y+TITLEWINDOW_OFFS_TITLEPTR_LO, r16
|
|
||||||
ldi r16, HIGH(winNetstats_title*2)
|
|
||||||
std Y+TITLEWINDOW_OFFS_TITLEPTR_HI, r16
|
|
||||||
|
|
||||||
bigcall TitleWindow_SetFullSize
|
bigcall TitleWindow_SetFullSize
|
||||||
bigcall TitleWindow_SetStyleColors
|
bigcall TitleWindow_SetStyleColors
|
||||||
@@ -37,64 +37,108 @@ WinNetStats_Init:
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
WinNetStats_Draw:
|
|
||||||
ldi yl, LOW(winNetstats)
|
|
||||||
ldi yh, HIGH(winNetstats)
|
|
||||||
bigcall TitleWindow_Draw
|
|
||||||
rcall WinNetStats_Update
|
|
||||||
ret
|
|
||||||
|
|
||||||
|
|
||||||
; @param @0 Y
|
; @param @0 Y
|
||||||
; @param @1 label addr
|
; @param @1 label addr
|
||||||
; @param @2 data address
|
|
||||||
|
|
||||||
.macro WINNETSTATS_PRINTDATA
|
.macro WINNETSTATS_PRINTLABEL
|
||||||
; packets in
|
; packets in
|
||||||
ldi zl, LOW(@1 * 2)
|
ldi zl, LOW(@1 * 2)
|
||||||
ldi zh, HIGH(@1 * 2)
|
ldi zh, HIGH(@1 * 2)
|
||||||
ldi r16, 2 ; X
|
ldi r16, 2 ; X
|
||||||
mov r4, r16
|
mov r4, r16
|
||||||
clr r5
|
clr r5
|
||||||
ldi r16, LOW(@0) ; Y
|
ldi r16, LOW(STYLE_WIN_TITLE_HEIGHT+@0) ; Y
|
||||||
mov r6, r16
|
mov r6, r16
|
||||||
ldi r16, HIGH(@0)
|
ldi r16, HIGH(STYLE_WIN_TITLE_HEIGHT+@0)
|
||||||
mov r7, r16
|
mov r7, r16
|
||||||
bigcall Window_DrawTextFlash
|
bigcall Window_DrawTextFlash
|
||||||
|
.endmacro
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; @param @0 Y
|
||||||
|
; @param @1 data address
|
||||||
|
|
||||||
|
.macro WINNETSTATS_PRINTDATA
|
||||||
ldi r16, 160 ; X
|
ldi r16, 160 ; X
|
||||||
mov r4, r16
|
mov r4, r16
|
||||||
clr r5
|
clr r5
|
||||||
ldi r16, LOW(@0) ; Y
|
ldi r16, LOW(STYLE_WIN_TITLE_HEIGHT+@0) ; Y
|
||||||
mov r6, r16
|
mov r6, r16
|
||||||
ldi r16, HIGH(@0)
|
ldi r16, HIGH(@0)
|
||||||
mov r7, r16
|
mov r7, r16
|
||||||
lds r16, @2 ; data
|
lds r16, @1 ; data
|
||||||
lds r17, @2+1
|
lds r17, @1+1
|
||||||
bigcall Window_WriteHexWordAt
|
bigcall Window_WriteHexWordAt
|
||||||
.endmacro
|
.endmacro
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
WinNetStats_Show:
|
||||||
|
; draw title window basics (with title)
|
||||||
|
ldi yl, LOW(winNetstats)
|
||||||
|
ldi yh, HIGH(winNetstats)
|
||||||
|
ldi zl, LOW(winNetstats_title*2)
|
||||||
|
ldi zh, HIGH(winNetstats_title*2)
|
||||||
|
bigcall TitleWindow_DrawTitle
|
||||||
|
|
||||||
|
bigcall TitleWindow_ClearContentArea
|
||||||
|
|
||||||
|
; packets in
|
||||||
|
WINNETSTATS_PRINTLABEL 2, winNetstats_lPacketsIn
|
||||||
|
; packets out
|
||||||
|
WINNETSTATS_PRINTLABEL 24, winNetstats_lPacketsOut
|
||||||
|
; eContent
|
||||||
|
WINNETSTATS_PRINTLABEL 46, winNetstats_lContentErr
|
||||||
|
; eIO
|
||||||
|
WINNETSTATS_PRINTLABEL 68, winNetstats_lIoErr
|
||||||
|
; eMsgSize
|
||||||
|
WINNETSTATS_PRINTLABEL 90, winNetstats_lMsgSizeErr
|
||||||
|
|
||||||
|
; X
|
||||||
|
WINNETSTATS_PRINTLABEL 112, winNetstats_lX
|
||||||
|
; Y
|
||||||
|
WINNETSTATS_PRINTLABEL 134, winNetstats_lY
|
||||||
|
; Z
|
||||||
|
WINNETSTATS_PRINTLABEL 156, winNetstats_lZ
|
||||||
|
; update num
|
||||||
|
WINNETSTATS_PRINTLABEL 178, winNetstats_lUpdate
|
||||||
|
|
||||||
|
rcall WinNetStats_Update
|
||||||
|
|
||||||
|
ret
|
||||||
|
; @end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
WinNetStats_Update:
|
WinNetStats_Update:
|
||||||
|
lds r16, winNetstatsUpdateNum
|
||||||
|
inc r16
|
||||||
|
sts winNetstatsUpdateNum, r16
|
||||||
|
|
||||||
ldi yl, LOW(winNetstats)
|
ldi yl, LOW(winNetstats)
|
||||||
ldi yh, HIGH(winNetstats)
|
ldi yh, HIGH(winNetstats)
|
||||||
|
|
||||||
adiw yh:yl, TITLEWINDOW_OFFS_CONTENTWIN
|
|
||||||
bigcall Window_Clear
|
|
||||||
|
|
||||||
; packets in
|
; packets in
|
||||||
WINNETSTATS_PRINTDATA 2, winNetstats_lPacketsIn, netInterfaceData+NET_IFACE_OFFS_PACKETSIN_LOW
|
WINNETSTATS_PRINTDATA 2, netInterfaceData+NET_IFACE_OFFS_PACKETSIN_LOW
|
||||||
; packets out
|
; packets out
|
||||||
WINNETSTATS_PRINTDATA 24, winNetstats_lPacketsOut, netInterfaceData+NET_IFACE_OFFS_PACKETSOUT_LOW
|
WINNETSTATS_PRINTDATA 24, netInterfaceData+NET_IFACE_OFFS_PACKETSOUT_LOW
|
||||||
; eContent
|
; eContent
|
||||||
WINNETSTATS_PRINTDATA 46, winNetstats_lContentErr, netInterfaceData+NET_IFACE_OFFS_ERR_CONTENT_LOW
|
WINNETSTATS_PRINTDATA 46, netInterfaceData+NET_IFACE_OFFS_ERR_CONTENT_LOW
|
||||||
; eIO
|
; eIO
|
||||||
WINNETSTATS_PRINTDATA 68, winNetstats_lIoErr, netInterfaceData+NET_IFACE_OFFS_ERR_IO_LOW
|
WINNETSTATS_PRINTDATA 68, netInterfaceData+NET_IFACE_OFFS_ERR_IO_LOW
|
||||||
; eMsgSize
|
; eMsgSize
|
||||||
WINNETSTATS_PRINTDATA 90, winNetstats_lMsgSizeErr, netInterfaceData+NET_IFACE_OFFS_ERR_MSGSIZE_LOW
|
WINNETSTATS_PRINTDATA 90, netInterfaceData+NET_IFACE_OFFS_ERR_MSGSIZE_LOW
|
||||||
|
|
||||||
|
; X
|
||||||
|
WINNETSTATS_PRINTDATA 112, xpt2046CurrentX
|
||||||
|
; Y
|
||||||
|
WINNETSTATS_PRINTDATA 134, xpt2046CurrentY
|
||||||
|
; Z
|
||||||
|
WINNETSTATS_PRINTDATA 156, xpt2046CurrentZ
|
||||||
|
; update num
|
||||||
|
WINNETSTATS_PRINTDATA 178, winNetstatsUpdateNum
|
||||||
|
|
||||||
sbiw yh:yl, TITLEWINDOW_OFFS_CONTENTWIN
|
|
||||||
ret
|
ret
|
||||||
; @end
|
; @end
|
||||||
|
|
||||||
@@ -107,13 +151,20 @@ winNetstats_lPacketsOut: .db "Pkgs Out:", 0
|
|||||||
winNetstats_lContentErr: .db "eContent:", 0
|
winNetstats_lContentErr: .db "eContent:", 0
|
||||||
winNetstats_lIoErr: .db "eIO :", 0
|
winNetstats_lIoErr: .db "eIO :", 0
|
||||||
winNetstats_lMsgSizeErr: .db "eMsgSize:", 0
|
winNetstats_lMsgSizeErr: .db "eMsgSize:", 0
|
||||||
|
winNetstats_lX: .db "X :", 0
|
||||||
|
winNetstats_lY: .db "Y :", 0
|
||||||
|
winNetstats_lZ: .db "Z :", 0
|
||||||
|
winNetstats_lUpdate: .db "Update :", 0
|
||||||
|
.dseg
|
||||||
|
|
||||||
|
winNetstats:
|
||||||
|
.byte WIN_SIZE
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.dseg
|
.dseg
|
||||||
|
|
||||||
winNetstats:
|
winNetstatsUpdateNum: .byte 2
|
||||||
.byte TITLEWINDOW_SIZE
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -51,8 +51,6 @@
|
|||||||
.equ NET_MSGNUMINBUF_SIZE = 8 ; max buffer nums in ringbuffer (global incoming)
|
.equ NET_MSGNUMINBUF_SIZE = 8 ; max buffer nums in ringbuffer (global incoming)
|
||||||
.equ NET_IFACE_OUTMSGBUF_SIZE = 8 ; max buffer nums in ringbuffer (per interface outbound)
|
.equ NET_IFACE_OUTMSGBUF_SIZE = 8 ; max buffer nums in ringbuffer (per interface outbound)
|
||||||
|
|
||||||
.equ PROGRAM_SENSOR_INTERVAL_SECS = 60
|
|
||||||
.equ PROGRAM_STATS_INTERVAL_MINS = 10
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
|
|
||||||
<extradist>
|
<extradist>
|
||||||
defs.asm
|
defs.asm
|
||||||
|
dialog.asm
|
||||||
main.asm
|
main.asm
|
||||||
style.asm
|
style.asm
|
||||||
titlewindow.asm
|
titlewindow.asm
|
||||||
|
|||||||
@@ -12,23 +12,21 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
.equ WIN_OFFS_HANDLER_LO = 0 ; word address!
|
.equ WIN_OFFS_X_LO = 0
|
||||||
.equ WIN_OFFS_HANDLER_HI = 1
|
.equ WIN_OFFS_X_HI = 1
|
||||||
.equ WIN_OFFS_X_LO = 2
|
.equ WIN_OFFS_Y_LO = 2
|
||||||
.equ WIN_OFFS_X_HI = 3
|
.equ WIN_OFFS_Y_HI = 3
|
||||||
.equ WIN_OFFS_Y_LO = 4
|
.equ WIN_OFFS_WIDTH_LO = 4
|
||||||
.equ WIN_OFFS_Y_HI = 5
|
.equ WIN_OFFS_WIDTH_HI = 5
|
||||||
.equ WIN_OFFS_WIDTH_LO = 6
|
.equ WIN_OFFS_HEIGHT_LO = 6
|
||||||
.equ WIN_OFFS_WIDTH_HI = 7
|
.equ WIN_OFFS_HEIGHT_HI = 7
|
||||||
.equ WIN_OFFS_HEIGHT_LO = 8
|
.equ WIN_OFFS_BG_COL_LO = 8
|
||||||
.equ WIN_OFFS_HEIGHT_HI = 9
|
.equ WIN_OFFS_BG_COL_HI = 9
|
||||||
.equ WIN_OFFS_BG_COL_LO = 10
|
.equ WIN_OFFS_FG_COL_LO = 10
|
||||||
.equ WIN_OFFS_BG_COL_HI = 11
|
.equ WIN_OFFS_FG_COL_HI = 11
|
||||||
.equ WIN_OFFS_FG_COL_LO = 12
|
.equ WIN_OFFS_FONT_LO = 12 ;byte address!
|
||||||
.equ WIN_OFFS_FG_COL_HI = 13
|
.equ WIN_OFFS_FONT_HI = 13
|
||||||
.equ WIN_OFFS_FONT_LO = 14 ;byte address!
|
.equ WIN_SIZE = 14
|
||||||
.equ WIN_OFFS_FONT_HI = 15
|
|
||||||
.equ WIN_SIZE = 16
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
278
avr/modules/lcd2/gui/dialog.asm
Normal file
278
avr/modules/lcd2/gui/dialog.asm
Normal file
@@ -0,0 +1,278 @@
|
|||||||
|
; ***************************************************************************
|
||||||
|
; 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_GUI_DIALOG_ASM
|
||||||
|
#define AQHOME_AVR_MODS_GUI_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
|
||||||
|
;
|
||||||
|
; Send timer event to every app in the stack (started with last added app).
|
||||||
|
|
||||||
|
DialogMgr_Every100ms:
|
||||||
|
ldi xl, LOW(dialogStack)
|
||||||
|
ldi xh, HIGH(dialogStack)
|
||||||
|
|
||||||
|
lds r16, dialogStackPos
|
||||||
|
mov r17, r16
|
||||||
|
add r16, r16
|
||||||
|
add xl, r16
|
||||||
|
adc xh, r16
|
||||||
|
sub xh, r16
|
||||||
|
|
||||||
|
DialogMgr_Every100ms_loop:
|
||||||
|
tst r17
|
||||||
|
breq DialogMgr_Every100ms_ret
|
||||||
|
ld yh, -X
|
||||||
|
ld yl, -X
|
||||||
|
push xl
|
||||||
|
push xh
|
||||||
|
push r17
|
||||||
|
ldi r23, DIALOG_FN_TIMER
|
||||||
|
rcall DialogMgr_CallCurrentHandler
|
||||||
|
pop r17
|
||||||
|
pop xh
|
||||||
|
pop xl
|
||||||
|
dec r17
|
||||||
|
rjmp DialogMgr_Every100ms_loop
|
||||||
|
DialogMgr_Every100ms_ret:
|
||||||
|
ret
|
||||||
|
; @end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
; @routine DialogMgr_CallHandler @global
|
||||||
|
;
|
||||||
|
; @param Y pointer to app data
|
||||||
|
; @param R23 number of function to call
|
||||||
|
; @clobbers R16, R17, R22, X (any)
|
||||||
|
|
||||||
|
DialogMgr_CallHandler:
|
||||||
|
ldi xl, LOW(dialogWindow)
|
||||||
|
ldi xh, HIGH(dialogWindow)
|
||||||
|
ldd r16, Y+DIALOG_OFFS_HANDLER_LO
|
||||||
|
ldd r17, Y+DIALOG_OFFS_HANDLER_HI
|
||||||
|
mov r22, r16
|
||||||
|
and r22, r17
|
||||||
|
breq DialogMgr_CallHandler_ret
|
||||||
|
push r16
|
||||||
|
push r17
|
||||||
|
DialogMgr_CallHandler_ret:
|
||||||
|
ret
|
||||||
|
; @end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
; @routine DialogMgr_CallCurrentHandler @global
|
||||||
|
;
|
||||||
|
; @param X pointer to window
|
||||||
|
; @param R23 number of function to call
|
||||||
|
; @clobbers R22 (any)
|
||||||
|
|
||||||
|
DialogMgr_CallCurrentHandler:
|
||||||
|
lds yl, dialogCurrent
|
||||||
|
lds yh, dialogCurrent+1
|
||||||
|
rjmp DialogMgr_CallHandler
|
||||||
|
; @end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
; @routine DialogMgr_PushDialog @global
|
||||||
|
;
|
||||||
|
; @param Y pointer to app data
|
||||||
|
;
|
||||||
|
DialogMgr_PushDialog:
|
||||||
|
lds r16, dialogStackPos
|
||||||
|
cpi r16, DIALOG_MAX_ACTIVE
|
||||||
|
brcc DialogMgr_PushDialog_ret
|
||||||
|
|
||||||
|
tst r16
|
||||||
|
brne DialogMgr_PushDialog_push
|
||||||
|
; deactivate previous app
|
||||||
|
push yl
|
||||||
|
push yh
|
||||||
|
lds yl, dialogCurrent
|
||||||
|
lds yh, dialogCurrent+1
|
||||||
|
ldi r23, DIALOG_FN_HIDE
|
||||||
|
rcall DialogMgr_CallHandler
|
||||||
|
ldd r17, Y+DIALOG_OFFS_OPTIONS
|
||||||
|
cbr r17, (1<<DIALOG_OPT_ACTIVE_BIT)
|
||||||
|
std Y+DIALOG_OFFS_OPTIONS, r17
|
||||||
|
pop yh
|
||||||
|
pop yl
|
||||||
|
|
||||||
|
DialogMgr_PushDialog_push:
|
||||||
|
lds r16, dialogStackPos
|
||||||
|
add r17, r17 ; *2
|
||||||
|
push xl
|
||||||
|
push xh
|
||||||
|
ldi xl, LOW(dialogStack)
|
||||||
|
ldi xh, HIGH(dialogStack)
|
||||||
|
add xl, r17
|
||||||
|
adc xh, r17
|
||||||
|
sub xh, r17
|
||||||
|
st X+, yl
|
||||||
|
st X, yh
|
||||||
|
pop xh
|
||||||
|
pop xl
|
||||||
|
inc r16
|
||||||
|
sts dialogStackPos, r16
|
||||||
|
; activate new app
|
||||||
|
ldd r17, Y+DIALOG_OFFS_OPTIONS
|
||||||
|
ori r17, (1<<DIALOG_OPT_ACTIVE_BIT)
|
||||||
|
std Y+DIALOG_OFFS_OPTIONS, r17
|
||||||
|
ldi r23, DIALOG_FN_SHOW
|
||||||
|
rcall DialogMgr_CallHandler
|
||||||
|
sec
|
||||||
|
DialogMgr_PushDialog_ret:
|
||||||
|
ret
|
||||||
|
; @end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
; @routine DialogMgr_PopDialog @global
|
||||||
|
;
|
||||||
|
; @return CFLAG set if app popped from stack, cleared otherwise
|
||||||
|
; @return Y app popped from stack (if CFLAG set)
|
||||||
|
|
||||||
|
DialogMgr_PopDialog:
|
||||||
|
lds r16, dialogStackPos
|
||||||
|
tst r16
|
||||||
|
clc
|
||||||
|
brne DialogMgr_PopDialog_ret
|
||||||
|
; deactivate previous app
|
||||||
|
push yl
|
||||||
|
push yh
|
||||||
|
lds yl, dialogCurrent
|
||||||
|
lds yh, dialogCurrent+1
|
||||||
|
ldi r23, DIALOG_FN_HIDE
|
||||||
|
rcall DialogMgr_CallHandler
|
||||||
|
ldd r17, Y+DIALOG_OFFS_OPTIONS
|
||||||
|
cbr r17, (1<<DIALOG_OPT_ACTIVE_BIT)
|
||||||
|
std Y+DIALOG_OFFS_OPTIONS, r17
|
||||||
|
pop yh
|
||||||
|
pop yl
|
||||||
|
|
||||||
|
lds r16, dialogStackPos
|
||||||
|
dec r16
|
||||||
|
sts dialogStackPos, r16
|
||||||
|
brne DialogMgr_PopDialog_pop
|
||||||
|
clr r16
|
||||||
|
sts dialogCurrent, r16
|
||||||
|
sts dialogCurrent+1, r16
|
||||||
|
sec
|
||||||
|
rjmp DialogMgr_PopDialog_ret
|
||||||
|
DialogMgr_PopDialog_pop:
|
||||||
|
push xl
|
||||||
|
push xh
|
||||||
|
ldi xl, LOW(dialogStack)
|
||||||
|
ldi xh, HIGH(dialogStack)
|
||||||
|
add xl, r16
|
||||||
|
adc xh, r16
|
||||||
|
sub xh, r16
|
||||||
|
ld yl, X+
|
||||||
|
ld yh, X
|
||||||
|
sts dialogCurrent, yl
|
||||||
|
sts dialogCurrent+1, yh
|
||||||
|
pop xh
|
||||||
|
pop xl
|
||||||
|
; activate new active app
|
||||||
|
ldd r17, Y+DIALOG_OFFS_OPTIONS
|
||||||
|
ori r17, (1<<DIALOG_OPT_ACTIVE_BIT)
|
||||||
|
std Y+DIALOG_OFFS_OPTIONS, r17
|
||||||
|
ldi r23, DIALOG_FN_SHOW
|
||||||
|
rcall DialogMgr_CallHandler
|
||||||
|
sec
|
||||||
|
DialogMgr_PopDialog_ret:
|
||||||
|
ret
|
||||||
|
; @end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif ; AQHOME_AVR_MODS_GUI_DIALOG_ASM
|
||||||
|
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
.equ STYLE_WIN_TITLE_FOREGROUND = DISPLAY_COLOR_WHITE
|
.equ STYLE_WIN_TITLE_FOREGROUND = DISPLAY_COLOR_WHITE
|
||||||
.equ STYLE_WIN_BACKGROUND = DISPLAY_COLOR_LIGHTGREY
|
.equ STYLE_WIN_BACKGROUND = DISPLAY_COLOR_LIGHTGREY
|
||||||
.equ STYLE_WIN_FOREGROUND = DISPLAY_COLOR_BLACK
|
.equ STYLE_WIN_FOREGROUND = DISPLAY_COLOR_BLACK
|
||||||
|
.equ STYLE_WIN_FONT = ili9341Font12x20_1
|
||||||
|
|
||||||
.equ STYLE_WIN_TITLE_HEIGHT = 24
|
.equ STYLE_WIN_TITLE_HEIGHT = 24
|
||||||
|
|
||||||
|
|||||||
@@ -30,16 +30,7 @@
|
|||||||
; @param Y pointer to titledwindow data (size=TITLEWINDOW_SIZE)
|
; @param Y pointer to titledwindow data (size=TITLEWINDOW_SIZE)
|
||||||
|
|
||||||
TitleWindow_Init:
|
TitleWindow_Init:
|
||||||
mov xl, yl
|
rcall Window_Init
|
||||||
mov xh, yh
|
|
||||||
ldi r17, TITLEWINDOW_SIZE
|
|
||||||
clr r16
|
|
||||||
bigcall Utils_FillSram ; (R17, X)
|
|
||||||
|
|
||||||
ldi r16, LOW(TitleWindow_Handler)
|
|
||||||
std Y+(TITLEWINDOW_OFFS_SELF+WIN_OFFS_HANDLER_LO), r16
|
|
||||||
ldi r16, HIGH(TitleWindow_Handler)
|
|
||||||
std Y+(TITLEWINDOW_OFFS_SELF+WIN_OFFS_HANDLER_HI), r16
|
|
||||||
ret
|
ret
|
||||||
; @end
|
; @end
|
||||||
|
|
||||||
@@ -236,10 +227,5 @@ TitleWindow_Draw:
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
TitleWindow_Handler:
|
|
||||||
ret
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
156
avr/modules/lcd2/gui/titlewindow2.asm
Normal file
156
avr/modules/lcd2/gui/titlewindow2.asm
Normal file
@@ -0,0 +1,156 @@
|
|||||||
|
; ***************************************************************************
|
||||||
|
; 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_TITLEWINDOW2_ASM
|
||||||
|
#define AQH_AVR_GUI_TITLEWINDOW2_ASM
|
||||||
|
|
||||||
|
|
||||||
|
.cseg
|
||||||
|
|
||||||
|
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
; @routine TitleWindow_Init @global
|
||||||
|
;
|
||||||
|
; @param Y pointer to titledwindow data (size=TITLEWINDOW_SIZE)
|
||||||
|
|
||||||
|
TitleWindow_Init:
|
||||||
|
bigcall Window_Init
|
||||||
|
ret
|
||||||
|
; @end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
; @routine TitleWindow_SetFullSize @global
|
||||||
|
;
|
||||||
|
; @param Y pointer to screen object in SDRAM
|
||||||
|
; @clobbers any, !Y
|
||||||
|
|
||||||
|
TitleWindow_SetFullSize:
|
||||||
|
clr r16
|
||||||
|
std Y+WIN_OFFS_X_LO, r16
|
||||||
|
std Y+WIN_OFFS_X_HI, r16
|
||||||
|
std Y+WIN_OFFS_Y_LO, r16
|
||||||
|
std Y+WIN_OFFS_Y_HI, r16
|
||||||
|
|
||||||
|
ldi r16, LOW(DISPLAY_WIDTH)
|
||||||
|
std Y+WIN_OFFS_WIDTH_LO, r16
|
||||||
|
ldi r16, HIGH(DISPLAY_WIDTH)
|
||||||
|
std Y+WIN_OFFS_WIDTH_HI, r16
|
||||||
|
|
||||||
|
ldi r16, LOW(DISPLAY_HEIGHT)
|
||||||
|
std Y+WIN_OFFS_HEIGHT_LO, r16
|
||||||
|
ldi r16, HIGH(DISPLAY_HEIGHT)
|
||||||
|
std Y+WIN_OFFS_HEIGHT_HI, r16
|
||||||
|
|
||||||
|
ret
|
||||||
|
; @enb
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
; @routine TitleWindow_SetStyleColors @global
|
||||||
|
;
|
||||||
|
; @param Y pointer to screen object in SDRAM
|
||||||
|
; @clobbers any, !Y
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
ret
|
||||||
|
; @end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
; @routine TitleWindow_DrawTitle @global
|
||||||
|
;
|
||||||
|
; @param Y pointer to screen object in SDRAM
|
||||||
|
; @param Z pointer to title
|
||||||
|
; @clobbers any, !Y
|
||||||
|
|
||||||
|
TitleWindow_DrawTitle:
|
||||||
|
; fill background of title area
|
||||||
|
clr r4
|
||||||
|
clr r5
|
||||||
|
clr r6
|
||||||
|
clr r7
|
||||||
|
ldd r8, Y+WIN_OFFS_WIDTH_LO
|
||||||
|
ldd r9, Y+WIN_OFFS_WIDTH_HI
|
||||||
|
ldi r16, LOW(STYLE_WIN_TITLE_HEIGHT)
|
||||||
|
ldi r17, HIGH(STYLE_WIN_TITLE_HEIGHT)
|
||||||
|
mov r10, r16
|
||||||
|
mov r11, r17
|
||||||
|
ldi r16, LOW(STYLE_WIN_TITLE_BACKGROUND)
|
||||||
|
mov r2, r16
|
||||||
|
ldi r16, HIGH(STYLE_WIN_TITLE_BACKGROUND)
|
||||||
|
mov r3, r16
|
||||||
|
rcall Window_FillRect
|
||||||
|
|
||||||
|
; draw title
|
||||||
|
ldi r16, 5 ; X
|
||||||
|
mov r4, r16
|
||||||
|
clr r5
|
||||||
|
ldi r16, 2 ; Y
|
||||||
|
mov r6, r16
|
||||||
|
clr r7
|
||||||
|
|
||||||
|
ldi r16, LOW(STYLE_WIN_TITLE_BACKGROUND)
|
||||||
|
mov r0, r16
|
||||||
|
ldi r16, HIGH(STYLE_WIN_TITLE_BACKGROUND)
|
||||||
|
mov r1, r16
|
||||||
|
|
||||||
|
ldi r16, LOW(STYLE_WIN_TITLE_FOREGROUND)
|
||||||
|
mov r2, r16
|
||||||
|
ldi r16, HIGH(STYLE_WIN_TITLE_FOREGROUND)
|
||||||
|
mov r3, r16
|
||||||
|
bigcall Window_DrawColorTextFlash
|
||||||
|
ret
|
||||||
|
; @end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
; @routine TitleWindow_ClearContentArea @global
|
||||||
|
;
|
||||||
|
; @param Y pointer to screen object in SDRAM
|
||||||
|
; @clobbers any, !Y
|
||||||
|
|
||||||
|
TitleWindow_ClearContentArea:
|
||||||
|
clr r4
|
||||||
|
clr r5
|
||||||
|
ldi r16, LOW(STYLE_WIN_TITLE_HEIGHT)
|
||||||
|
mov r6, r16
|
||||||
|
ldi r16, HIGH(STYLE_WIN_TITLE_HEIGHT)
|
||||||
|
mov r7, r16
|
||||||
|
ldd r8, Y+WIN_OFFS_WIDTH_LO
|
||||||
|
ldd r9, Y+WIN_OFFS_WIDTH_HI
|
||||||
|
ldi r16, LOW(STYLE_WIN_TITLE_HEIGHT)
|
||||||
|
ldi r17, HIGH(STYLE_WIN_TITLE_HEIGHT)
|
||||||
|
ldd r10, Y+WIN_OFFS_HEIGHT_LO
|
||||||
|
ldd r11, Y+WIN_OFFS_HEIGHT_HI
|
||||||
|
sub r10, r16
|
||||||
|
sbc r11, r17
|
||||||
|
ldi r16, LOW(STYLE_WIN_BACKGROUND)
|
||||||
|
ldd r2, Y+WIN_OFFS_BG_COL_LO
|
||||||
|
ldd r3, Y+WIN_OFFS_BG_COL_HI
|
||||||
|
rcall Window_FillRect
|
||||||
|
ret
|
||||||
|
; @end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -11,6 +11,24 @@
|
|||||||
#define AQH_AVR_GUI_WINDOW_ASM
|
#define AQH_AVR_GUI_WINDOW_ASM
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
; @routine Window_Init @global
|
||||||
|
;
|
||||||
|
; @param Y pointer to screen object in SDRAM
|
||||||
|
; @clobbers R16, R17, X
|
||||||
|
|
||||||
|
Window_Init:
|
||||||
|
mov xl, yl
|
||||||
|
mov xh, yh
|
||||||
|
ldi r17, WIN_SIZE
|
||||||
|
clr r16
|
||||||
|
bigcall Utils_FillSram ; (R17, X)
|
||||||
|
ret
|
||||||
|
; @end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
; ---------------------------------------------------------------------------
|
; ---------------------------------------------------------------------------
|
||||||
; @routine Window_Clear @global
|
; @routine Window_Clear @global
|
||||||
;
|
;
|
||||||
@@ -34,6 +52,32 @@ Window_Clear:
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
; @routine Window_FillRect @global
|
||||||
|
;
|
||||||
|
; @param Y pointer to screen object in SDRAM
|
||||||
|
; @param r3:r2 color
|
||||||
|
; @param r5:r4 X0
|
||||||
|
; @param r7:r6 Y0
|
||||||
|
; @param r9:r8 X1/W
|
||||||
|
; @param r11:r10 Y1/H
|
||||||
|
; @clobbers any, !Y
|
||||||
|
|
||||||
|
Window_FillRect:
|
||||||
|
ldd r16, Y+WIN_OFFS_X_LO ; make absolute coords
|
||||||
|
ldd r17, Y+WIN_OFFS_X_HI
|
||||||
|
add r4, r16
|
||||||
|
adc r5, r17
|
||||||
|
ldd r16, Y+WIN_OFFS_Y_LO
|
||||||
|
ldd r17, Y+WIN_OFFS_Y_HI
|
||||||
|
add r6, r16
|
||||||
|
adc r7, r17
|
||||||
|
bigcall Display_FillRect ; directly call graphics function
|
||||||
|
ret
|
||||||
|
; @end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
; ---------------------------------------------------------------------------
|
; ---------------------------------------------------------------------------
|
||||||
; @routine Window_DrawTextFlash @global
|
; @routine Window_DrawTextFlash @global
|
||||||
;
|
;
|
||||||
@@ -41,25 +85,43 @@ Window_Clear:
|
|||||||
; @param R5:R4 X (dest)
|
; @param R5:R4 X (dest)
|
||||||
; @param R7:R6 Y (dest)
|
; @param R7:R6 Y (dest)
|
||||||
; @return R5:R4 X pos behind string
|
; @return R5:R4 X pos behind string
|
||||||
|
|
||||||
; @clobbers any, !Y, !R6, !R7
|
; @clobbers any, !Y, !R6, !R7
|
||||||
|
|
||||||
Window_DrawTextFlash:
|
Window_DrawTextFlash:
|
||||||
rcall winCalcAbsPosAndBorders ; (R18, R19)
|
|
||||||
|
|
||||||
ldd r0, Y+WIN_OFFS_BG_COL_LO
|
ldd r0, Y+WIN_OFFS_BG_COL_LO
|
||||||
ldd r1, Y+WIN_OFFS_BG_COL_HI
|
ldd r1, Y+WIN_OFFS_BG_COL_HI
|
||||||
ldd r2, Y+WIN_OFFS_FG_COL_LO
|
ldd r2, Y+WIN_OFFS_FG_COL_LO
|
||||||
ldd r3, Y+WIN_OFFS_FG_COL_HI
|
ldd r3, Y+WIN_OFFS_FG_COL_HI
|
||||||
|
|
||||||
Window_DrawTextFlash_loop:
|
rjmp Window_DrawColorTextFlash
|
||||||
|
; @end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
; @routine Window_DrawColorTextFlash @global
|
||||||
|
;
|
||||||
|
; @param Y pointer to screen object in SDRAM
|
||||||
|
; @param R1:R0 background color
|
||||||
|
; @param R3:R2 foreground color
|
||||||
|
; @param R5:R4 X (dest)
|
||||||
|
; @param R7:R6 Y (dest)
|
||||||
|
; @return R5:R4 X pos behind string
|
||||||
|
|
||||||
|
; @clobbers any, !Y, !R6, !R7
|
||||||
|
|
||||||
|
Window_DrawColorTextFlash:
|
||||||
|
rcall winCalcAbsPosAndBorders ; (R18, R19)
|
||||||
|
Window_DrawColorTextFlash_loop:
|
||||||
lpm r16, Z
|
lpm r16, Z
|
||||||
tst r16
|
tst r16
|
||||||
breq Window_DrawTextFlash_loopEnd
|
breq Window_DrawColorTextFlash_loopEnd
|
||||||
rcall winDrawChar
|
rcall winDrawChar
|
||||||
brcc Window_DrawTextFlash_loopEnd
|
brcc Window_DrawColorTextFlash_loopEnd
|
||||||
adiw zh:zl, 1 ; next char
|
adiw zh:zl, 1 ; next char
|
||||||
rjmp Window_DrawTextFlash_loop
|
rjmp Window_DrawColorTextFlash_loop
|
||||||
Window_DrawTextFlash_loopEnd:
|
Window_DrawColorTextFlash_loopEnd:
|
||||||
ret
|
ret
|
||||||
; @end
|
; @end
|
||||||
|
|
||||||
|
|||||||
@@ -7,5 +7,378 @@
|
|||||||
; * Please see toplevel file COPYING of that project for license details. *
|
; * Please see toplevel file COPYING of that project for license details. *
|
||||||
; ***************************************************************************
|
; ***************************************************************************
|
||||||
|
|
||||||
|
#ifndef AQH_AVR_XPT2046_MAIN_ASM
|
||||||
|
#define AQH_AVR_XPT2046_MAIN_ASM
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; ***************************************************************************
|
||||||
|
; defines
|
||||||
|
|
||||||
|
.equ XPT2046_SPIMODE = (1<<SPIHW_MODE_SPEED0_BIT) | \
|
||||||
|
(1<<SPIHW_MODE_SPEED1_BIT) | \
|
||||||
|
(0<<SPIHW_MODE_DOUBLESPEED_BIT) | \
|
||||||
|
(0<<SPIHW_MODE_DATAORDER_BIT) | \
|
||||||
|
(0<<SPIHW_MODE_CPOL_BIT) | \
|
||||||
|
(0<<SPIHW_MODE_CPHA_BIT)
|
||||||
|
|
||||||
|
|
||||||
|
.equ XPT2046_CMD_READ_X = 0xd1
|
||||||
|
.equ XPT2046_CMD_READ_Y = 0x91
|
||||||
|
.equ XPT2046_CMD_READ_Z1 = 0xb1
|
||||||
|
.equ XPT2046_CMD_READ_Z2 = 0xc1
|
||||||
|
|
||||||
|
.equ XPT2046_AVERAGE = 2
|
||||||
|
.equ XPT2046_Z_THRESHOLD = 500
|
||||||
|
.equ XPT2046_TIMER_VALUE = 3 ; every 300ms
|
||||||
|
|
||||||
|
.equ XPT2046_FLAGS_PRESSED_BIT = 7
|
||||||
|
.equ XPT2046_FLAGS_CHGCOORD_BIT = 6
|
||||||
|
.equ XPT2046_FLAGS_CHGPRESS_BIT = 5
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; ***************************************************************************
|
||||||
|
; data
|
||||||
|
|
||||||
|
.dseg
|
||||||
|
|
||||||
|
xpt2046ValueBuffer: .byte (XPT2046_AVERAGE*2)
|
||||||
|
xpt2046CurrentX: .byte 2
|
||||||
|
xpt2046CurrentY: .byte 2
|
||||||
|
xpt2046CurrentZ: .byte 2
|
||||||
|
xpt2046Flags: .byte 1
|
||||||
|
xpt2046Timer: .byte 1
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; ***************************************************************************
|
||||||
|
; code
|
||||||
|
|
||||||
|
.cseg
|
||||||
|
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
; @routine XPT2046_Init @global
|
||||||
|
|
||||||
|
XPT2046_Init:
|
||||||
|
clr r16
|
||||||
|
sts xpt2046CurrentX, r16
|
||||||
|
sts xpt2046CurrentX+1, r16
|
||||||
|
|
||||||
|
sts xpt2046CurrentY, r16
|
||||||
|
sts xpt2046CurrentY+1, r16
|
||||||
|
|
||||||
|
sts xpt2046CurrentZ, r16
|
||||||
|
sts xpt2046CurrentZ+1, r16
|
||||||
|
|
||||||
|
sts xpt2046Flags, r16
|
||||||
|
|
||||||
|
sts xpt2046Timer, r16
|
||||||
|
|
||||||
|
ret
|
||||||
|
; @end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
; @routine XPT2046_Every100ms @global
|
||||||
|
|
||||||
|
XPT2046_Every100ms:
|
||||||
|
lds r16, xpt2046Timer
|
||||||
|
inc r16
|
||||||
|
cpi r16, XPT2046_TIMER_VALUE
|
||||||
|
brcs XPT2046_Every100ms_store
|
||||||
|
rcall xpt2046UpdateValues
|
||||||
|
clr r16
|
||||||
|
XPT2046_Every100ms_store:
|
||||||
|
sts xpt2046Timer, r16
|
||||||
|
ret
|
||||||
|
; @end
|
||||||
|
|
||||||
|
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
; @routine XPT2046_GetFlagsResetChg @global
|
||||||
|
;
|
||||||
|
; Return flags, clear stored flags XPT2046_FLAGS_CHGCOORD_BIT and
|
||||||
|
; XPT2046_FLAGS_CHGPRESS_BIT.
|
||||||
|
;
|
||||||
|
; @return r16 flags
|
||||||
|
; @clobbers r17
|
||||||
|
|
||||||
|
XPT2046_GetFlagsResetChg:
|
||||||
|
lds r16, xpt2046Flags
|
||||||
|
mov r17, r16
|
||||||
|
cbr r17, (1<<XPT2046_FLAGS_CHGCOORD_BIT) | (1<<XPT2046_FLAGS_CHGPRESS_BIT)
|
||||||
|
sts xpt2046Flags, r17
|
||||||
|
ret
|
||||||
|
; @end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
; @routine xpt2046UpdateValues
|
||||||
|
|
||||||
|
xpt2046UpdateValues:
|
||||||
|
push r15
|
||||||
|
in r15, SREG
|
||||||
|
cli
|
||||||
|
|
||||||
|
lds r23, xpt2046Flags
|
||||||
|
rcall xpt2046BeginSpi ; (R16, R17)
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
ldi r16, XPT2046_CMD_READ_X
|
||||||
|
rcall xpt2046SendCommandRecv12Bit ; (R16)
|
||||||
|
sts xpt2046CurrentX, r18
|
||||||
|
sts xpt2046CurrentX+1, r19
|
||||||
|
lds r24, xpt2046CurrentY
|
||||||
|
lds r25, xpt2046CurrentY+1
|
||||||
|
adiw r25:r24, 1
|
||||||
|
sts xpt2046CurrentY, r24
|
||||||
|
sts xpt2046CurrentY+1, r25
|
||||||
|
#else
|
||||||
|
rcall xpt2046UpdateX
|
||||||
|
rcall xpt2046UpdateY
|
||||||
|
rcall xpt2046UpdateZ
|
||||||
|
#endif
|
||||||
|
|
||||||
|
sts xpt2046Flags, r23
|
||||||
|
rcall xpt2046EndSpi ; (R16, R17)
|
||||||
|
|
||||||
|
out SREG, r15
|
||||||
|
pop r15
|
||||||
|
ret
|
||||||
|
; @end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
; @routine xpt2046UpdateX
|
||||||
|
;
|
||||||
|
; @param r23 current xpt2046Flag (modified by routine)
|
||||||
|
; @clobbers (r16, r18, r19, r20, r21)
|
||||||
|
|
||||||
|
xpt2046UpdateX:
|
||||||
|
; dummy read
|
||||||
|
ldi r16, XPT2046_CMD_READ_X
|
||||||
|
rcall xpt2046SendCommandRecv12Bit ; (R16)
|
||||||
|
|
||||||
|
ldi r16, XPT2046_CMD_READ_X
|
||||||
|
rcall xpt2046ReadAvgValues ; (r16, r18, r19, r20, r21)
|
||||||
|
rcall xpt2046AverageValues ; (r16, r17, r21)
|
||||||
|
lds r16, xpt2046CurrentX
|
||||||
|
lds r17, xpt2046CurrentX+1
|
||||||
|
sts xpt2046CurrentX, r18
|
||||||
|
sts xpt2046CurrentX+1, r19
|
||||||
|
sub r16, r18
|
||||||
|
sbc r17, r19
|
||||||
|
breq xpt2046UpdateX_ret
|
||||||
|
ori r23, (1<<XPT2046_FLAGS_CHGCOORD_BIT)
|
||||||
|
xpt2046UpdateX_ret:
|
||||||
|
ret
|
||||||
|
; @end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
; @routine xpt2046UpdateY
|
||||||
|
;
|
||||||
|
; @param r23 current xpt2046Flag (modified by routine)
|
||||||
|
; @clobbers (r16, r18, r19, r20, r21)
|
||||||
|
|
||||||
|
xpt2046UpdateY:
|
||||||
|
; read Y
|
||||||
|
ldi r16, XPT2046_CMD_READ_Y
|
||||||
|
rcall xpt2046ReadAvgValues ; (r16, r18, r19, r20, r21)
|
||||||
|
rcall xpt2046AverageValues ; (r16, r17, r21)
|
||||||
|
lds r16, xpt2046CurrentY
|
||||||
|
lds r17, xpt2046CurrentY+1
|
||||||
|
sts xpt2046CurrentY, r18
|
||||||
|
sts xpt2046CurrentY+1, r19
|
||||||
|
sub r16, r18
|
||||||
|
sbc r17, r19
|
||||||
|
breq xpt2046UpdateY_ret
|
||||||
|
ori r23, (1<<XPT2046_FLAGS_CHGCOORD_BIT)
|
||||||
|
xpt2046UpdateY_ret:
|
||||||
|
ret
|
||||||
|
; @end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
; @routine xpt2046UpdateZ
|
||||||
|
;
|
||||||
|
; @param r23 current xpt2046Flag (modified by routine)
|
||||||
|
; @clobbers (r16, r18, r19, r20, r21)
|
||||||
|
|
||||||
|
xpt2046UpdateZ:
|
||||||
|
ldi r16, XPT2046_CMD_READ_Z1
|
||||||
|
rcall xpt2046SendCommandRecv12Bit ; (R16)
|
||||||
|
ldi r24, LOW(4095)
|
||||||
|
ldi r25, HIGH(4095)
|
||||||
|
add r24, r18
|
||||||
|
adc r25, r19
|
||||||
|
ldi r16, XPT2046_CMD_READ_Z2
|
||||||
|
rcall xpt2046SendCommandRecv12Bit ; (R16)
|
||||||
|
sub r24, r18
|
||||||
|
sbc r25, r19
|
||||||
|
sts xpt2046CurrentZ, r24
|
||||||
|
sts xpt2046CurrentZ+1, r25
|
||||||
|
|
||||||
|
ldi r16, LOW(XPT2046_Z_THRESHOLD)
|
||||||
|
ldi r17, HIGH(XPT2046_Z_THRESHOLD)
|
||||||
|
sub r24, r16
|
||||||
|
sbc r25, r17
|
||||||
|
mov r16, r23
|
||||||
|
brcs xpt2046UpdateZ_overThreshold
|
||||||
|
cbr r23, (1<<XPT2046_FLAGS_PRESSED_BIT) ; Z below threshold, not pressed
|
||||||
|
rjmp xpt2046UpdateZ_checkPressChg
|
||||||
|
xpt2046UpdateZ_overThreshold:
|
||||||
|
ori r23, (1<<XPT2046_FLAGS_PRESSED_BIT)
|
||||||
|
xpt2046UpdateZ_checkPressChg:
|
||||||
|
eor r16, r23
|
||||||
|
andi r16, (1<<XPT2046_FLAGS_PRESSED_BIT)
|
||||||
|
breq xpt2046UpdateZ_ret
|
||||||
|
ori r23, (1<<XPT2046_FLAGS_CHGPRESS_BIT)
|
||||||
|
xpt2046UpdateZ_ret:
|
||||||
|
ret
|
||||||
|
; @end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
; @routine xpt2046AverageValues
|
||||||
|
;
|
||||||
|
; @return r19:r18 averaged value
|
||||||
|
; @clobbers r16, r17, r21
|
||||||
|
|
||||||
|
xpt2046AverageValues:
|
||||||
|
ldi xl, LOW(xpt2046ValueBuffer)
|
||||||
|
ldi xh, HIGH(xpt2046ValueBuffer)
|
||||||
|
ldi r21, XPT2046_AVERAGE
|
||||||
|
clr r18
|
||||||
|
clr r19
|
||||||
|
xpt2046AverageValues_loop:
|
||||||
|
ld r16, X+
|
||||||
|
ld r17, X+
|
||||||
|
add r18, r16
|
||||||
|
adc r19, r17
|
||||||
|
dec r21
|
||||||
|
brne xpt2046AverageValues_loop
|
||||||
|
|
||||||
|
.if (XPT2046_AVERAGE == 2)
|
||||||
|
lsr r19
|
||||||
|
ror r18
|
||||||
|
.elif (XPT2046_AVERAGE == 4)
|
||||||
|
lsr r19
|
||||||
|
ror r18
|
||||||
|
lsr r19
|
||||||
|
ror r18
|
||||||
|
.else
|
||||||
|
.error "XPT2046_AVERAGE is not 4"
|
||||||
|
.endif
|
||||||
|
|
||||||
|
ret
|
||||||
|
; @end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
; @routine xpt2046ReadAvgValues
|
||||||
|
;
|
||||||
|
; @param r16 command
|
||||||
|
; @clobbers r16, r18, r19, r20, r21
|
||||||
|
|
||||||
|
xpt2046ReadAvgValues:
|
||||||
|
ldi xl, LOW(xpt2046ValueBuffer)
|
||||||
|
ldi xh, HIGH(xpt2046ValueBuffer)
|
||||||
|
mov r20, r16
|
||||||
|
ldi r21, XPT2046_AVERAGE
|
||||||
|
xpt2046ReadAvgValues_loop:
|
||||||
|
mov r16, r20
|
||||||
|
rcall xpt2046SendCommandRecv12Bit ; (R16)
|
||||||
|
st X+, r18
|
||||||
|
st X+, r19
|
||||||
|
dec r21
|
||||||
|
brne xpt2046ReadAvgValues_loop
|
||||||
|
ret
|
||||||
|
; @end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
; @routine xpt2046BeginSpi
|
||||||
|
;
|
||||||
|
; @clobbers r16, r17
|
||||||
|
|
||||||
|
xpt2046BeginSpi:
|
||||||
|
ldi r16, XPT2046_SPIMODE
|
||||||
|
ldi r17, XPT2046_DEVICENUM
|
||||||
|
rjmp SPIHW_MasterStart ; (R17)
|
||||||
|
; @end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
; @routine xpt2046EndSpi
|
||||||
|
;
|
||||||
|
; @clobbers r16
|
||||||
|
|
||||||
|
xpt2046EndSpi:
|
||||||
|
rjmp SPIHW_MasterStop ; (R16)
|
||||||
|
; @end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
; @routine xpt2046SendCommandRecv12Bit
|
||||||
|
;
|
||||||
|
; @param r16 command
|
||||||
|
; @return r19:18 data
|
||||||
|
; @clobbers r16
|
||||||
|
|
||||||
|
xpt2046SendCommandRecv12Bit:
|
||||||
|
rcall xpt2046SendCommandRecv16Bit
|
||||||
|
lsr r19 ; >>1
|
||||||
|
ror r18
|
||||||
|
lsr r19 ; >>2
|
||||||
|
ror r18
|
||||||
|
lsr r19 ; >>3
|
||||||
|
ror r18
|
||||||
|
lsr r19 ; >>4
|
||||||
|
ror r18
|
||||||
|
ret
|
||||||
|
; @end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
; @routine xpt2046SendCommandRecv16Bit
|
||||||
|
;
|
||||||
|
; @param r16 command
|
||||||
|
; @return r19:18 data
|
||||||
|
; @clobbers r16
|
||||||
|
|
||||||
|
xpt2046SendCommandRecv16Bit:
|
||||||
|
cbi SPIHW_SS_OUTPUT, SPIHW_SS_PIN ; SS low
|
||||||
|
rcall SPIHW_MasterTransfer ; (R16)
|
||||||
|
|
||||||
|
clr r16
|
||||||
|
rcall SPIHW_MasterTransfer ; (R16)
|
||||||
|
mov r19, r16
|
||||||
|
clr r16
|
||||||
|
rcall SPIHW_MasterTransfer ; (R16)
|
||||||
|
mov r18, r16
|
||||||
|
sbi SPIHW_SS_OUTPUT, SPIHW_SS_PIN ; SS low
|
||||||
|
ret
|
||||||
|
; @end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif ; AQH_AVR_XPT2046_MAIN_ASM
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user