avr: make climate page the main page, added eeprom browser.

This commit is contained in:
Martin Preuss
2026-01-23 20:48:48 +01:00
parent b4969019b2
commit b95c09ad82
6 changed files with 619 additions and 23 deletions

View File

@@ -17,6 +17,7 @@
.equ APPC03_SEL_BUTTON_CLIMATE = 1 .equ APPC03_SEL_BUTTON_CLIMATE = 1
.equ APPC03_SEL_BUTTON_NETWORK = 2 .equ APPC03_SEL_BUTTON_NETWORK = 2
.equ APPC03_SEL_BUTTON_EEDUMP = 3
@@ -61,6 +62,7 @@ appC03_signalmap:
.db 0, OBJECT_SIGNAL_CREATE, LOW(GuiApp_OnCreate), HIGH(GuiApp_OnCreate) .db 0, OBJECT_SIGNAL_CREATE, LOW(GuiApp_OnCreate), HIGH(GuiApp_OnCreate)
.db APPC03_SEL_BUTTON_NETWORK, WIDGET_SIGNAL_CLICKED, LOW(AppC03_OnClickedNetwork), HIGH(AppC03_OnClickedNetwork) .db APPC03_SEL_BUTTON_NETWORK, WIDGET_SIGNAL_CLICKED, LOW(AppC03_OnClickedNetwork), HIGH(AppC03_OnClickedNetwork)
.db APPC03_SEL_BUTTON_CLIMATE, WIDGET_SIGNAL_CLICKED, LOW(AppC03_OnClickedClimate), HIGH(AppC03_OnClickedClimate) .db APPC03_SEL_BUTTON_CLIMATE, WIDGET_SIGNAL_CLICKED, LOW(AppC03_OnClickedClimate), HIGH(AppC03_OnClickedClimate)
.db APPC03_SEL_BUTTON_EEDUMP, WIDGET_SIGNAL_CLICKED, LOW(AppC03_OnClickedEeDump), HIGH(AppC03_OnClickedEeDump)
.db 0, 0, 0, 0 ; end of table .db 0, 0, 0, 0 ; end of table
@@ -114,6 +116,14 @@ AppC03_OnClickedClimate:
AppC03_OnClickedEeDump:
ldi xl, LOW(winEepromDump*2)
ldi xh, HIGH(winEepromDump*2)
bigcall GuiApp_ShowView
sec
ret
#endif #endif

View File

@@ -66,6 +66,9 @@ winClimateSensor3Value_ramdata:
buttonClimateNetwork_ramdata: buttonClimateNetwork_ramdata:
.byte IMGVIEW_SD_SIZE .byte IMGVIEW_SD_SIZE
buttonEepromDump_ramdata:
.byte IMGVIEW_SD_SIZE
debugValue1_ramdata: debugValue1_ramdata:
.byte VLABEL_SD_SIZE .byte VLABEL_SD_SIZE
@@ -458,16 +461,15 @@ winClimate_signalmap:
buttonClimateNetwork: buttonClimateNetwork:
; OBJECT ; OBJECT
.db 0x55, 0xaa ; magic .db 0x55, 0xaa ; magic
; .dw debugValue1*2 ; next .dw buttonEepromDump*2 ; next
.dw 0 ; next
.dw winClimateBody*2 ; parent .dw winClimateBody*2 ; parent
.dw 0 ; first child .dw 0 ; first child
.dw appC03*2 ; target .dw appC03*2 ; target
.dw APPC03_SEL_BUTTON_NETWORK ; selector (ony lower 8 bits used) .dw APPC03_SEL_BUTTON_NETWORK ; selector (ony lower 8 bits used)
.dw buttonNetwork_signalmap*2 ; signal map .dw Button_DefaultSignalmap*2 ; signal map
; WIDGET ; WIDGET
.db (1<<WIDGET_OPTSLO_INPUT_BIT) | (1<<WIDGET_OPTSLO_BORDER_BIT), 0 ; opts lo, hi .db (1<<WIDGET_OPTSLO_INPUT_BIT) | (1<<WIDGET_OPTSLO_BORDER_BIT), 0 ; opts lo, hi
.dw DISPLAY_WIDTH-56 ; X .dw 2 ; X
.dw DISPLAY_HEIGHT-STYLE_WIN_TITLE_HEIGHT-56 ; Y .dw DISPLAY_HEIGHT-STYLE_WIN_TITLE_HEIGHT-56 ; Y
.dw 52 ; W .dw 52 ; W
.dw 52 ; H .dw 52 ; H
@@ -478,12 +480,29 @@ winClimate_signalmap:
; IMGVIEW ; IMGVIEW
.dw RESSSOURCE_IMG_NETWORK ; ressource id .dw RESSSOURCE_IMG_NETWORK ; ressource id
buttonNetwork_signalmap:
.db 0, WIDGET_SIGNAL_TOUCH, LOW(Button_OnTouch), HIGH(Button_OnTouch)
.db 0, WIDGET_SIGNAL_DRAW, LOW(ImageView_OnDraw), HIGH(ImageView_OnDraw) buttonEepromDump:
.db 0, IMGVIEW_SIGNAL_SETBGCOL, LOW(ImageView_OnSetBgCol), HIGH(ImageView_OnSetBgCol) ; OBJECT
.db 0, OBJECT_SIGNAL_CREATE, LOW(ImageView_OnCreate), HIGH(ImageView_OnCreate) .db 0x55, 0xaa ; magic
.db 0, 0, 0, 0 ; end of table .dw 0 ; next
.dw winClimateBody*2 ; parent
.dw 0 ; first child
.dw appC03*2 ; target
.dw APPC03_SEL_BUTTON_EEDUMP ; selector (ony lower 8 bits used)
.dw Button_DefaultSignalmap*2 ; signal map
; WIDGET
.db (1<<WIDGET_OPTSLO_INPUT_BIT) | (1<<WIDGET_OPTSLO_BORDER_BIT), 0 ; opts lo, hi
.dw 2+(1*54) ; X
.dw DISPLAY_HEIGHT-STYLE_WIN_TITLE_HEIGHT-56 ; Y
.dw 52 ; W
.dw 52 ; H
.dw STYLE_BUTTON_COL_FG_NORM ; front color
.dw STYLE_BUTTON_COL_BG_NORM ; back color
.dw STYLE_WIN_FONT*2 ; font
.dw buttonEepromDump_ramdata ; ptr to SDRAM
; IMGVIEW
.dw RESSSOURCE_IMG_WINOPEN ; ressource id
#if 0 #if 0

View File

@@ -0,0 +1,252 @@
; ***************************************************************************
; 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_DEVICE_C03_WIN_EEPROMDUMP_ASM
#define AQH_AVR_DEVICE_C03_WIN_EEPROMDUMP_ASM
; ***************************************************************************
; defines
; SDRAM data for WINEEPROMDUMP
.equ WINEEPROMDUMP_SD_OFFS_BEGIN = WIDGET_SD_SIZE
.equ WINEEPROMDUMP_SD_SIZE = WINEEPROMDUMP_SD_OFFS_BEGIN+0
.equ WINEEPROMDUMP_SEL_UP = 1
.equ WINEEPROMDUMP_SEL_DOWN = 2
; ***************************************************************************
; data
.dseg
winEepromDump_ramdata:
.byte WINEEPROMDUMP_SD_SIZE
winEepromDumpHeader_ramdata:
.byte WIDGET_SD_SIZE
winEepromDumpBody_ramdata:
.byte WIDGET_SD_SIZE
winEepromDumpView_ramdata:
.byte EEPROMDUMP_SD_SIZE
buttonEepromDumpBack_ramdata:
.byte IMGVIEW_SD_SIZE
buttonEepromDumpUp_ramdata:
.byte IMGVIEW_SD_SIZE
buttonEepromDumpDown_ramdata:
.byte IMGVIEW_SD_SIZE
; ***************************************************************************
; code
.cseg
winEepromDump:
; OBJECT
.db 0x55, 0xaa ; magic
.dw 0 ; next
.dw winRoot*2 ; parent
.dw winEepromDumpHeader*2 ; first child
.dw 0 ; target
.dw 0 ; selector (ony lower 8 bits used)
.dw winEepromDump_signalmap*2 ; signal map
; WIDGET
.db (1<<WIDGET_OPTSLO_TIMER_BIT), 0 ; opts lo, hi
.dw 0 ; X
.dw 0 ; Y
.dw DISPLAY_WIDTH ; W
.dw DISPLAY_HEIGHT ; H
.dw STYLE_WIN_FOREGROUND ; front color
.dw STYLE_WIN_BACKGROUND ; back color
.dw STYLE_WIN_FONT*2 ; font
.dw winEepromDump_ramdata ; ptr to SDRAM
winEepromDump_signalmap:
.db 0, OBJECT_SIGNAL_CREATE, LOW(Widget_OnCreate), HIGH(Widget_OnCreate)
.db 0, WIDGET_SIGNAL_DRAW, LOW(Widget_OnDrawNop), HIGH(Widget_OnDrawNop)
.db 0, 0, 0, 0 ; end of table
winEepromDumpHeader:
; OBJECT
.db 0x55, 0xaa ; magic
.dw winEepromDumpBody*2 ; next
.dw winEepromDump*2 ; parent
.dw 0 ; first child
.dw 0 ; target
.dw 0 ; selector (ony lower 8 bits used)
.dw Label_DefaultSignalmap*2 ; signal map
; WIDGET
.db 0, 0 ; opts lo, hi
.dw 0 ; X
.dw 0 ; Y
.dw DISPLAY_WIDTH ; W
.dw STYLE_WIN_TITLE_HEIGHT ; H
.dw STYLE_WIN_TITLE_FOREGROUND ; front color
.dw STYLE_WIN_TITLE_BACKGROUND ; back color
.dw STYLE_WIN_FONT*2 ; font
.dw winEepromDumpHeader_ramdata ; ptr to SDRAM
; LABEL
.dw winEepromDumpHeader_text*2 ; text
winEepromDumpHeader_text:
.db "EEPROM", 0, 0
winEepromDumpBody:
; OBJECT
.db 0x55, 0xaa ; magic
.dw 0 ; next
.dw winEepromDump*2 ; parent
.dw winEepromDumpView*2 ; first child
.dw 0 ; target
.dw 0 ; selector (ony lower 8 bits used)
.dw winEepromDumpBody_signalmap*2 ; signal map
; WIDGET
.db 0, 0 ; opts lo, hi
.dw 0 ; X
.dw STYLE_WIN_TITLE_HEIGHT ; Y
.dw DISPLAY_WIDTH ; W
.dw DISPLAY_HEIGHT-STYLE_WIN_TITLE_HEIGHT ; H
.dw STYLE_WIN_FOREGROUND ; front color
.dw STYLE_WIN_BACKGROUND ; back color
.dw STYLE_WIN_FONT*2 ; font
.dw winEepromDumpBody_ramdata ; ptr to SDRAM
winEepromDumpBody_signalmap:
.db 0, OBJECT_SIGNAL_CREATE, LOW(Widget_OnCreate), HIGH(Widget_OnCreate)
.db 0, WIDGET_SIGNAL_DRAW, LOW(Widget_OnDraw), HIGH(Widget_OnDraw)
.db 0, 0, 0, 0 ; end of table
winEepromDumpView:
; OBJECT
.db 0x55, 0xaa ; magic
.dw buttonEepromDumpUp*2 ; next
.dw winEepromDumpBody*2 ; parent
.dw 0 ; first child
.dw 0 ; target
.dw 0 ; selector (ony lower 8 bits used)
.dw winEepromDumpView_signalmap*2 ; signal map
; WIDGET
.db 0, 0 ; opts lo, hi
.dw 0 ; X
.dw 0 ; Y
.dw DISPLAY_WIDTH ; W
.dw DISPLAY_HEIGHT-STYLE_WIN_TITLE_HEIGHT-58 ; H
.dw STYLE_WIN_FOREGROUND ; front color
.dw STYLE_WIN_BACKGROUND ; back color
; .dw STYLE_WIN_FONT*2 ; font
.dw ili9341Font6x8_1*2
.dw winEepromDumpView_ramdata ; ptr to SDRAM
winEepromDumpView_signalmap:
.db 0, OBJECT_SIGNAL_CREATE, LOW(EepromDump_OnCreate), HIGH(EepromDump_OnCreate)
.db 0, WIDGET_SIGNAL_DRAW, LOW(EepromDump_OnDraw), HIGH(EepromDump_OnDraw)
.db WINEEPROMDUMP_SEL_UP, WIDGET_SIGNAL_CLICKED, LOW(EepromDump_OnUp), HIGH(EepromDump_OnUp)
.db WINEEPROMDUMP_SEL_DOWN, WIDGET_SIGNAL_CLICKED, LOW(EepromDump_OnDown), HIGH(EepromDump_OnDown)
.db 0, 0, 0, 0 ; end of table
buttonEepromDumpUp:
; OBJECT
.db 0x55, 0xaa ; magic
.dw buttonEepromDumpDown*2 ; next
.dw winEepromDumpBody*2 ; parent
.dw 0 ; first child
.dw winEepromDumpView*2 ; target
.dw WINEEPROMDUMP_SEL_UP ; selector (ony lower 8 bits used)
.dw Button_DefaultSignalmap*2 ; signal map
; WIDGET
.db (1<<WIDGET_OPTSLO_INPUT_BIT) | (1<<WIDGET_OPTSLO_BORDER_BIT), 0 ; opts lo, hi
.dw 2 ; X
.dw DISPLAY_HEIGHT-STYLE_WIN_TITLE_HEIGHT-56 ; Y
.dw 52 ; W
.dw 52 ; H
.dw STYLE_BUTTON_COL_FG_NORM ; front color
.dw STYLE_BUTTON_COL_BG_NORM ; back color
.dw STYLE_WIN_FONT*2 ; font
.dw buttonEepromDumpUp_ramdata ; ptr to SDRAM
; IMGVIEW
.dw RESSSOURCE_IMG_ARROWUP ; ressource id
buttonEepromDumpDown:
; OBJECT
.db 0x55, 0xaa ; magic
.dw buttonEepromDumpBack*2 ; next
.dw winEepromDumpBody*2 ; parent
.dw 0 ; first child
.dw winEepromDumpView*2 ; target
.dw WINEEPROMDUMP_SEL_DOWN ; selector (ony lower 8 bits used)
.dw Button_DefaultSignalmap*2 ; signal map
; WIDGET
.db (1<<WIDGET_OPTSLO_INPUT_BIT) | (1<<WIDGET_OPTSLO_BORDER_BIT), 0 ; opts lo, hi
.dw 2+(1*58) ; X
.dw DISPLAY_HEIGHT-STYLE_WIN_TITLE_HEIGHT-56 ; Y
.dw 52 ; W
.dw 52 ; H
.dw STYLE_BUTTON_COL_FG_NORM ; front color
.dw STYLE_BUTTON_COL_BG_NORM ; back color
.dw STYLE_WIN_FONT*2 ; font
.dw buttonEepromDumpDown_ramdata ; ptr to SDRAM
; IMGVIEW
.dw RESSSOURCE_IMG_ARROWDOWN ; ressource id
buttonEepromDumpBack:
; OBJECT
.db 0x55, 0xaa ; magic
.dw 0 ; next
.dw winEepromDumpBody*2 ; parent
.dw 0 ; first child
.dw appC03*2 ; target
.dw APPC03_SEL_BUTTON_CLIMATE ; selector (ony lower 8 bits used)
.dw Button_DefaultSignalmap*2 ; signal map
; WIDGET
.db (1<<WIDGET_OPTSLO_INPUT_BIT) | (1<<WIDGET_OPTSLO_BORDER_BIT), 0 ; opts lo, hi
.dw DISPLAY_WIDTH-56 ; X
.dw DISPLAY_HEIGHT-STYLE_WIN_TITLE_HEIGHT-56 ; Y
.dw 52 ; W
.dw 52 ; H
.dw STYLE_BUTTON_COL_FG_NORM ; front color
.dw STYLE_BUTTON_COL_BG_NORM ; back color
.dw STYLE_WIN_FONT*2 ; font
.dw buttonEepromDumpBack_ramdata ; ptr to SDRAM
; IMGVIEW
.dw RESSSOURCE_IMG_ARROWBACK ; ressource id
#endif

View File

@@ -70,7 +70,7 @@ winNetworkValue4_ramdata:
winNetworkValue5_ramdata: winNetworkValue5_ramdata:
.byte VLABEL_SD_SIZE .byte VLABEL_SD_SIZE
buttonNetworkClimate_ramdata: buttonNetworkBack_ramdata:
.byte IMGVIEW_SD_SIZE .byte IMGVIEW_SD_SIZE
@@ -84,7 +84,7 @@ buttonNetworkClimate_ramdata:
winNetwork: winNetwork:
; OBJECT ; OBJECT
.db 0x55, 0xaa ; magic .db 0x55, 0xaa ; magic
.dw 0 ; next .dw winEepromDump*2 ; next
.dw winRoot*2 ; parent .dw winRoot*2 ; parent
.dw winNetworkHeader*2 ; first child .dw winNetworkHeader*2 ; first child
.dw 0 ; target .dw 0 ; target
@@ -397,7 +397,7 @@ winNetwork_signalmap:
winNetworkValue5: winNetworkValue5:
; OBJECT ; OBJECT
.db 0x55, 0xaa ; magic .db 0x55, 0xaa ; magic
.dw buttonNetworkClimate*2 ; next .dw buttonNetworkBack*2 ; next
.dw winNetworkBody*2 ; parent .dw winNetworkBody*2 ; parent
.dw 0 ; first child .dw 0 ; first child
.dw 0 ; target .dw 0 ; target
@@ -419,7 +419,7 @@ winNetwork_signalmap:
buttonNetworkClimate: buttonNetworkBack:
; OBJECT ; OBJECT
.db 0x55, 0xaa ; magic .db 0x55, 0xaa ; magic
.dw 0 ; next .dw 0 ; next
@@ -427,7 +427,7 @@ winNetwork_signalmap:
.dw 0 ; first child .dw 0 ; first child
.dw appC03*2 ; target .dw appC03*2 ; target
.dw APPC03_SEL_BUTTON_CLIMATE ; selector (ony lower 8 bits used) .dw APPC03_SEL_BUTTON_CLIMATE ; selector (ony lower 8 bits used)
.dw buttonNetworkClimate_signalmap*2 ; signal map .dw Button_DefaultSignalmap*2 ; signal map
; WIDGET ; WIDGET
.db (1<<WIDGET_OPTSLO_INPUT_BIT) | (1<<WIDGET_OPTSLO_BORDER_BIT), 0 ; opts lo, hi .db (1<<WIDGET_OPTSLO_INPUT_BIT) | (1<<WIDGET_OPTSLO_BORDER_BIT), 0 ; opts lo, hi
.dw DISPLAY_WIDTH-56 ; X .dw DISPLAY_WIDTH-56 ; X
@@ -439,14 +439,8 @@ winNetwork_signalmap:
.dw STYLE_WIN_FONT*2 ; font .dw STYLE_WIN_FONT*2 ; font
.dw buttonClimateNetwork_ramdata ; ptr to SDRAM .dw buttonClimateNetwork_ramdata ; ptr to SDRAM
; IMGVIEW ; IMGVIEW
.dw RESSSOURCE_IMG_TEMP ; ressource id .dw RESSSOURCE_IMG_ARROWBACK ; ressource id
buttonNetworkClimate_signalmap:
.db 0, WIDGET_SIGNAL_TOUCH, LOW(Button_OnTouch), HIGH(Button_OnTouch)
.db 0, WIDGET_SIGNAL_DRAW, LOW(ImageView_OnDraw), HIGH(ImageView_OnDraw)
.db 0, IMGVIEW_SIGNAL_SETBGCOL, LOW(ImageView_OnSetBgCol), HIGH(ImageView_OnSetBgCol)
.db 0, OBJECT_SIGNAL_CREATE, LOW(ImageView_OnCreate), HIGH(ImageView_OnCreate)
.db 0, 0, 0, 0 ; end of table

View File

@@ -324,6 +324,9 @@ eeloop_end:
.include "modules/lcd2/ili9341/font12x16.asm" .include "modules/lcd2/ili9341/font12x16.asm"
.include "modules/lcd2/ili9341/font12x16_1.asm" .include "modules/lcd2/ili9341/font12x16_1.asm"
.include "modules/lcd2/ili9341/font6x8.asm"
.include "modules/lcd2/ili9341/font6x8_1.asm"
;.include "modules/lcd2/ili9341/font12x20.asm" ;.include "modules/lcd2/ili9341/font12x20.asm"
;.include "modules/lcd2/ili9341/font12x20_1.asm" ;.include "modules/lcd2/ili9341/font12x20_1.asm"
;.include "common/list_t.asm" ;.include "common/list_t.asm"
@@ -347,10 +350,12 @@ eeloop_end:
.include "modules/lcd2/gui2/generic/valuelabel.asm" .include "modules/lcd2/gui2/generic/valuelabel.asm"
.include "modules/lcd2/gui2/generic/guiapp.asm" .include "modules/lcd2/gui2/generic/guiapp.asm"
.include "modules/lcd2/gui2/sensorwatch.asm" .include "modules/lcd2/gui2/sensorwatch.asm"
.include "modules/lcd2/gui2/eepromdump.asm"
.include "g_app.asm" .include "g_app.asm"
.include "g_win_climate.asm" .include "g_win_climate.asm"
.include "g_win_network.asm" .include "g_win_network.asm"
.include "g_win_eepromdump.asm"
.include "ressources.inc" .include "ressources.inc"

View File

@@ -0,0 +1,316 @@
; ***************************************************************************
; 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_EEPROMDUMP_ASM
#define AQH_AVR_GUI2_EEPROMDUMP_ASM
; ***************************************************************************
; defines
.equ EEPROMDUMP_FONT = ili9341Font6x8_1
.equ EEPROMDUMP_FONT_WIDTH = 6
.equ EEPROMDUMP_FONT_HEIGHT = 8
.equ EEPROMDUMP_BYTESPERLINE = 8
.equ EEPROMDUMP_LINESPERPAGE = 14
; SDRAM data for EepromDump
.equ EEPROMDUMP_SD_OFFS_BEGIN = WIDGET_SD_SIZE
.equ EEPROMDUMP_SD_OFFS_STARTADDR_LO = EEPROMDUMP_SD_OFFS_BEGIN+0
.equ EEPROMDUMP_SD_OFFS_STARTADDR_HI = EEPROMDUMP_SD_OFFS_BEGIN+1
.equ EEPROMDUMP_SD_SIZE = EEPROMDUMP_SD_OFFS_BEGIN+2
; ***************************************************************************
; code
.cseg
; ---------------------------------------------------------------------------
; @routine SensorWatch_OnCreate @global
;
; @param Z byte address of widget object (for LPM!)
; @param XL node addr
; @param XH value id
; @return CFLAG set if signal handled
; @clobbers any, !Z
EepromDump_OnCreate:
bigcall OBJ_IsObject ; (none)
brcc EepromDump_OnCreate_ret
; preset SDRAM
bigcall Widget_GetSdramPtr ; (none)
clr r16
ldi r17, EEPROMDUMP_SD_SIZE
push yl
push yh
EepromDump_OnCreate_loop:
st Y+, r16
dec r17
brne EepromDump_OnCreate_loop
pop yh
pop yl
bigcall Widget_OnCreate
EepromDump_OnCreate_ret:
sec
ret
; @end
; ---------------------------------------------------------------------------
; @routine EepromDump_OnUp @global
;
; @param Z byte address of object (for LPM!)
EepromDump_OnUp:
bigcall Widget_GetSdramPtr ; (none)
ldd xl, Y+EEPROMDUMP_SD_OFFS_STARTADDR_LO
ldd xh, Y+EEPROMDUMP_SD_OFFS_STARTADDR_HI
ldi r16, LOW(EEPROMDUMP_BYTESPERLINE*EEPROMDUMP_LINESPERPAGE)
ldi r17, HIGH(EEPROMDUMP_BYTESPERLINE*EEPROMDUMP_LINESPERPAGE)
sub xl, r16
sbc xh, r17
brcc EepromDump_OnUp_set
clr xl
clr xh
EepromDump_OnUp_set:
std Y+EEPROMDUMP_SD_OFFS_STARTADDR_LO, xl
std Y+EEPROMDUMP_SD_OFFS_STARTADDR_HI, xh
ldd r17, Y+WIDGET_SD_OFFS_FLAGS
ori r17, (1<<WIDGET_FLAGS_DIRTY_BIT)
std Y+WIDGET_SD_OFFS_FLAGS, r17
sec
ret
; @end
EepromDump_OnDown:
bigcall Widget_GetSdramPtr ; (none)
ldd xl, Y+EEPROMDUMP_SD_OFFS_STARTADDR_LO
ldd xh, Y+EEPROMDUMP_SD_OFFS_STARTADDR_HI
ldi r16, LOW(EEPROMDUMP_BYTESPERLINE*EEPROMDUMP_LINESPERPAGE)
ldi r17, HIGH(EEPROMDUMP_BYTESPERLINE*EEPROMDUMP_LINESPERPAGE)
add xl, r16
adc xh, r17
brcs EepromDump_OnDown_tooHigh
ldi r16, LOW(EEPROMEND)
ldi r17, HIGH(EEPROMEND)
cp xl, r16
cpc xh, r17
brcs EepromDump_OnDown_set
EepromDump_OnDown_tooHigh:
ldi xl, LOW(EEPROMEND-EEPROMDUMP_BYTESPERLINE)
ldi xh, HIGH(EEPROMEND-EEPROMDUMP_BYTESPERLINE)
EepromDump_OnDown_set:
std Y+EEPROMDUMP_SD_OFFS_STARTADDR_LO, xl
std Y+EEPROMDUMP_SD_OFFS_STARTADDR_HI, xh
ldd r17, Y+WIDGET_SD_OFFS_FLAGS
ori r17, (1<<WIDGET_FLAGS_DIRTY_BIT)
std Y+WIDGET_SD_OFFS_FLAGS, r17
sec
ret
; @end
; ---------------------------------------------------------------------------
; @routine EepromDump_OnDraw @global
;
; @param Z byte address of object (for LPM!)
; @param xl param1
; @param xh param2
; @clobbers any, !Z
EepromDump_OnDraw:
bigcall Widget_GetSdramPtr ; (none)
ldd r16, Y+WIDGET_SD_OFFS_FLAGS
andi r16, (1<<WIDGET_FLAGS_DIRTY_BIT)
breq EepromDump_OnDraw_ret
rcall Widget_Clear
bigcall Widget_GetSdramPtr ; (none)
ldd xl, Y+EEPROMDUMP_SD_OFFS_STARTADDR_LO
ldd xh, Y+EEPROMDUMP_SD_OFFS_STARTADDR_HI
ldi r16, 2
mov r4, r16
clr r5
mov r6, r16
clr r7
rcall eepromDumpDrawBlock
bigcall Widget_GetSdramPtr ; (none)
ldd r16, Y+WIDGET_SD_OFFS_FLAGS
cbr r16, (1<<WIDGET_FLAGS_DIRTY_BIT)
std Y+WIDGET_SD_OFFS_FLAGS, r16
EepromDump_OnDraw_ret:
sec
ret
; @end
; ---------------------------------------------------------------------------
; @routine eepromDumpDrawBlock
;
; @param Z byte address of widget object (for LPM!)
; @param R5:R4 X relative to widget
; @param R7:R6 Y relative to widget
; @param X current start address
; @param R18 number of bytes to print as hex bytes
eepromDumpDrawBlock:
ldi r18, EEPROMDUMP_LINESPERPAGE
eepromDumpDrawBlock_loop:
push r18
push r4
push r5
rcall eepromDumpDrawLine
pop r5
pop r4
ldi r16, LOW(EEPROMDUMP_FONT_HEIGHT)
ldi r17, HIGH(EEPROMDUMP_FONT_HEIGHT)
add r6, r16
adc r7, r17
pop r18
dec r18
brne eepromDumpDrawBlock_loop
ret
; @end
; ---------------------------------------------------------------------------
; @routine eepromDumpDrawLine
;
; @param Z byte address of widget object (for LPM!)
; @param R5:R4 X relative to widget
; @param R7:R6 Y relative to widget
; @param X current start address
; @param R18 number of bytes to print as hex bytes
; @return X pointer to next byte to write
; @clobbers any, !Z, !R6, !R7
eepromDumpDrawLine:
push xl
push xh
mov r20, xl
mov r21, xh
bigcall HexWordToAscii ; X=ptr to addr (R16, R17)
rcall eepromDumpDrawText
ldi r16, LOW(EEPROMDUMP_FONT_WIDTH*4)
ldi r17, HIGH(EEPROMDUMP_FONT_WIDTH*4)
add r4, r16
adc r5, r17
ldi r16, ':'
rcall eepromDumpDrawChar
ldi r16, ' '
rcall eepromDumpDrawChar
pop xh
pop xl
ldi r18, EEPROMDUMP_BYTESPERLINE
eepromDumpDrawLine_loop:
push r18
bigcall Eeprom_ReadByte ; R16=byte read
brcc eepromDumpDrawLine_ret
adiw xh:xl, 1
push xl
push xh
bigcall HexByteToAscii ; X=ptr to addr (R16, R17)
rcall eepromDumpDrawText
ldi r16, LOW(EEPROMDUMP_FONT_WIDTH*2)
ldi r17, HIGH(EEPROMDUMP_FONT_WIDTH*2)
add r4, r16
adc r5, r17
ldi r16, ' '
rcall eepromDumpDrawChar
pop xh
pop xl
pop r18
dec r18
brne eepromDumpDrawLine_loop
eepromDumpDrawLine_ret:
ret
; @end
; ---------------------------------------------------------------------------
; @routine eepromDumpDrawLine
;
; @param Z byte address of widget object (for LPM!)
; @param R5:R4 X relative to widget
; @param R7:R6 Y relative to widget
; @param X address of text to write
; @clobbers any, !Z, !(r4-r7)
eepromDumpDrawText:
push r4
push r5
push r6
push r7
bigcall Widget_DrawTextSDRAM ; (any, !Z)
pop r7
pop r6
pop r5
pop r4
ret
; @end
; ---------------------------------------------------------------------------
; @routine eepromDumpDrawChar
;
; @param Z byte address of widget object (for LPM!)
; @param R5:R4 X relative to widget
; @param R7:R6 Y relative to widget
; @param R16 byte to write
; @clobbers any, !Z, !(r4-r7)
eepromDumpDrawChar:
push r4
push r5
push r6
push r7
bigcall Widget_DrawCharAt ; (any, !Z)
pop r7
pop r6
pop r5
pop r4
ldi r16, LOW(EEPROMDUMP_FONT_WIDTH)
ldi r17, HIGH(EEPROMDUMP_FONT_WIDTH)
add r4, r16
adc r5, r17
ret
; @end
#endif