avr: added sensor watches for Temp and hunidity.

This commit is contained in:
Martin Preuss
2026-01-18 20:31:17 +01:00
parent ff5c49ad7a
commit 13f682b365
3 changed files with 312 additions and 4 deletions

View File

@@ -253,6 +253,27 @@ test:
ldi xh, HIGH(2000)
bigcall OBJ_HandleSignal
ldi zl, LOW(winSensorWatch2*2)
ldi zh, HIGH(winSensorWatch2*2)
; set source
ldi r16, SENSORWATCH_SIGNAL_SETSOURCE
clr r17
ldi xl, 9 ; node address
ldi xh, 1 ; value 0x01 (SI7021_TEMP)
bigcall OBJ_HandleSignal
ldi zl, LOW(winSensorWatch3*2)
ldi zh, HIGH(winSensorWatch3*2)
; set source
ldi r16, SENSORWATCH_SIGNAL_SETSOURCE
clr r17
ldi xl, 9 ; node address
ldi xh, 2 ; value 0x02 (SI7021_HUM)
bigcall OBJ_HandleSignal
ret

View File

@@ -49,6 +49,31 @@ winSensorWatch1Image_ramdata:
winSensorWatch1Value_ramdata:
.byte VLABEL_SD_SIZE
winSensorWatch2_ramdata:
.byte SENSORWATCH_SD_SIZE
winSensorWatch2Title_ramdata:
.byte WIDGET_SD_SIZE
winSensorWatch2Image_ramdata:
.byte IMGVIEW_SD_SIZE
winSensorWatch2Value_ramdata:
.byte VLABEL_SD_SIZE
winSensorWatch3_ramdata:
.byte SENSORWATCH_SD_SIZE
winSensorWatch3Title_ramdata:
.byte WIDGET_SD_SIZE
winSensorWatch3Image_ramdata:
.byte IMGVIEW_SD_SIZE
winSensorWatch3Value_ramdata:
.byte VLABEL_SD_SIZE
@@ -194,7 +219,7 @@ testWinBody_signalmap:
winSensorWatch1:
; OBJECT
.db 0x55, 0xaa ; magic
.dw 0 ; next
.dw winSensorWatch2*2 ; next
.dw testWinBody_flashdata*2 ; parent
.dw winSensorWatch1Title*2 ; first child
.dw 0 ; target
@@ -317,6 +342,258 @@ winSensorWatch1Value_signalmap:
winSensorWatch2:
; OBJECT
.db 0x55, 0xaa ; magic
.dw winSensorWatch3*2 ; next
.dw testWinBody_flashdata*2 ; parent
.dw winSensorWatch2Title*2 ; first child
.dw 0 ; target
.dw 0 ; selector (ony lower 8 bits used)
.dw winSensorWatch2_signalmap*2 ; signal map
; WIDGET
.db (1<<WIDGET_OPTSLO_MSGRECV_BIT), 0 ; opts lo, hi
.dw 108 ; X
.dw 4 ; Y
.dw 100 ; W (image=96, 2 px borders)
.dw 100 ; H
.dw STYLE_WIN_FOREGROUND ; front color
.dw STYLE_WIN_BACKGROUND ; back color
.dw STYLE_WIN_FONT*2 ; font
.dw winSensorWatch2_ramdata ; ptr to SDRAM
winSensorWatch2_signalmap:
.db 0, OBJECT_SIGNAL_CREATE, LOW(SensorWatch_OnCreate), HIGH(SensorWatch_OnCreate)
.db 0, WIDGET_SIGNAL_DRAW, LOW(Widget_OnDraw), HIGH(Widget_OnDraw)
.db 0, OBJECT_SIGNAL_RECVMSG, LOW(SensorWatch_OnMsgReceived), HIGH(SensorWatch_OnMsgReceived)
.db 0, SENSORWATCH_SIGNAL_SETSOURCE, LOW(SensorWatch_OnSetSource), HIGH(SensorWatch_OnSetSource)
.db 0, SENSORWATCH_SIGNAL_SETLIMWARN, LOW(SensorWatch_OnSetLimitWarn), HIGH(SensorWatch_OnSetLimitWarn)
.db 0, SENSORWATCH_SIGNAL_SETLIMCRIT, LOW(SensorWatch_OnSetLimitCrit), HIGH(SensorWatch_OnSetLimitCrit)
.db 0, 0, 0, 0 ; end of table
winSensorWatch2Title:
; OBJECT
.db 0x55, 0xaa ; magic
.dw winSensorWatch2Image*2 ; next
.dw winSensorWatch2*2 ; parent
.dw 0 ; first child
.dw 0 ; target
.dw 0 ; selector (ony lower 8 bits used)
.dw winSensorWatch2Title_signalmap*2 ; signal map
; WIDGET
.db 0, (1<<WIDGET_OPTSHI_HALIGNCENTER_BIT) ; opts lo, hi
.dw 2 ; X
.dw 1 ; Y
.dw 96 ; W
.dw STYLE_WIN_FONT_HEIGHT+2 ; H
.dw STYLE_WIN_FOREGROUND ; front color
.dw STYLE_WIN_BACKGROUND ; back color
.dw STYLE_WIN_FONT*2 ; font
.dw winSensorWatch2Title_ramdata ; ptr to SDRAM
; LABEL
.dw winSensorWatch2Title_text*2 ; text
winSensorWatch2Title_text:
.db "Temp", 0, 0
winSensorWatch2Title_signalmap:
.db 0, OBJECT_SIGNAL_CREATE, LOW(Widget_OnCreate), HIGH(Widget_OnCreate)
.db 0, WIDGET_SIGNAL_DRAW, LOW(Label_OnDraw), HIGH(Label_OnDraw)
.db 0, 0, 0, 0 ; end of table
winSensorWatch2Image:
; OBJECT
.db 0x55, 0xaa ; magic
.dw winSensorWatch2Value*2 ; next
.dw winSensorWatch2*2 ; parent
.dw 0 ; first child
.dw 0 ; target
.dw 0 ; selector (ony lower 8 bits used)
.dw winSensorWatch2Image_signalmap*2 ; signal map
; WIDGET
.db 0, 0 ; opts lo, hi
.dw 2 ; X
.dw STYLE_WIN_FONT_HEIGHT+2 ; Y
.dw 96 ; W
.dw 96 ; H
.dw STYLE_WIN_FOREGROUND ; front color
.dw STYLE_WIN_BACKGROUND ; back color
.dw STYLE_WIN_FONT*2 ; font
.dw winSensorWatch2Image_ramdata ; ptr to SDRAM
; IMGVIEW
.dw RESSSOURCE_IMG_TEMP96 ; ressource id
winSensorWatch2Image_signalmap:
.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
winSensorWatch2Value:
; OBJECT
.db 0x55, 0xaa ; magic
.dw 0 ; next
.dw winSensorWatch2*2 ; parent
.dw 0 ; first child
.dw 0 ; target
.dw 0 ; selector (ony lower 8 bits used)
.dw winSensorWatch2Value_signalmap*2 ; signal map
; WIDGET
.db 0, (1<<WIDGET_OPTSHI_HALIGNCENTER_BIT) ; opts lo, hi
.dw 2 ; X
.dw STYLE_WIN_FONT_HEIGHT+2+96+2 ; Y
.dw 96 ; W
.dw STYLE_WIN_FONT_HEIGHT+4 ; H
.dw STYLE_WIN_FOREGROUND ; front color
.dw STYLE_WIN_BACKGROUND ; back color
.dw STYLE_WIN_FONT*2 ; font
.dw winSensorWatch2Value_ramdata ; ptr to SDRAM
; VALUELABEL
.db 2, 0 ; num of post-komma digits
winSensorWatch2Value_signalmap:
.db 0, OBJECT_SIGNAL_CREATE, LOW(Widget_OnCreate), HIGH(Widget_OnCreate)
.db 0, WIDGET_SIGNAL_DRAW, LOW(ValueLabel_OnDraw), HIGH(ValueLabel_OnDraw)
.db 0, VLABEL_SIGNAL_SETVALUE, LOW(ValueLabel_OnSetValue), HIGH(ValueLabel_OnSetValue)
.db 0, 0, 0, 0 ; end of table
winSensorWatch3:
; OBJECT
.db 0x55, 0xaa ; magic
.dw 0 ; next
.dw testWinBody_flashdata*2 ; parent
.dw winSensorWatch3Title*2 ; first child
.dw 0 ; target
.dw 0 ; selector (ony lower 8 bits used)
.dw winSensorWatch3_signalmap*2 ; signal map
; WIDGET
.db (1<<WIDGET_OPTSLO_MSGRECV_BIT), 0 ; opts lo, hi
.dw 212 ; X
.dw 4 ; Y
.dw 100 ; W (image=96, 2 px borders)
.dw 100 ; H
.dw STYLE_WIN_FOREGROUND ; front color
.dw STYLE_WIN_BACKGROUND ; back color
.dw STYLE_WIN_FONT*2 ; font
.dw winSensorWatch3_ramdata ; ptr to SDRAM
winSensorWatch3_signalmap:
.db 0, OBJECT_SIGNAL_CREATE, LOW(SensorWatch_OnCreate), HIGH(SensorWatch_OnCreate)
.db 0, WIDGET_SIGNAL_DRAW, LOW(Widget_OnDraw), HIGH(Widget_OnDraw)
.db 0, OBJECT_SIGNAL_RECVMSG, LOW(SensorWatch_OnMsgReceived), HIGH(SensorWatch_OnMsgReceived)
.db 0, SENSORWATCH_SIGNAL_SETSOURCE, LOW(SensorWatch_OnSetSource), HIGH(SensorWatch_OnSetSource)
.db 0, SENSORWATCH_SIGNAL_SETLIMWARN, LOW(SensorWatch_OnSetLimitWarn), HIGH(SensorWatch_OnSetLimitWarn)
.db 0, SENSORWATCH_SIGNAL_SETLIMCRIT, LOW(SensorWatch_OnSetLimitCrit), HIGH(SensorWatch_OnSetLimitCrit)
.db 0, 0, 0, 0 ; end of table
winSensorWatch3Title:
; OBJECT
.db 0x55, 0xaa ; magic
.dw winSensorWatch3Image*2 ; next
.dw winSensorWatch3*2 ; parent
.dw 0 ; first child
.dw 0 ; target
.dw 0 ; selector (ony lower 8 bits used)
.dw winSensorWatch3Title_signalmap*2 ; signal map
; WIDGET
.db 0, (1<<WIDGET_OPTSHI_HALIGNCENTER_BIT) ; opts lo, hi
.dw 2 ; X
.dw 1 ; Y
.dw 96 ; W
.dw STYLE_WIN_FONT_HEIGHT+2 ; H
.dw STYLE_WIN_FOREGROUND ; front color
.dw STYLE_WIN_BACKGROUND ; back color
.dw STYLE_WIN_FONT*2 ; font
.dw winSensorWatch3Title_ramdata ; ptr to SDRAM
; LABEL
.dw winSensorWatch3Title_text*2 ; text
winSensorWatch3Title_text:
.db "Hum", 0
winSensorWatch3Title_signalmap:
.db 0, OBJECT_SIGNAL_CREATE, LOW(Widget_OnCreate), HIGH(Widget_OnCreate)
.db 0, WIDGET_SIGNAL_DRAW, LOW(Label_OnDraw), HIGH(Label_OnDraw)
.db 0, 0, 0, 0 ; end of table
winSensorWatch3Image:
; OBJECT
.db 0x55, 0xaa ; magic
.dw winSensorWatch3Value*2 ; next
.dw winSensorWatch3*2 ; parent
.dw 0 ; first child
.dw 0 ; target
.dw 0 ; selector (ony lower 8 bits used)
.dw winSensorWatch3Image_signalmap*2 ; signal map
; WIDGET
.db 0, 0 ; opts lo, hi
.dw 2 ; X
.dw STYLE_WIN_FONT_HEIGHT+2 ; Y
.dw 96 ; W
.dw 96 ; H
.dw STYLE_WIN_FOREGROUND ; front color
.dw STYLE_WIN_BACKGROUND ; back color
.dw STYLE_WIN_FONT*2 ; font
.dw winSensorWatch3Image_ramdata ; ptr to SDRAM
; IMGVIEW
.dw RESSSOURCE_IMG_HUMIDITY96 ; ressource id
winSensorWatch3Image_signalmap:
.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
winSensorWatch3Value:
; OBJECT
.db 0x55, 0xaa ; magic
.dw 0 ; next
.dw winSensorWatch3*2 ; parent
.dw 0 ; first child
.dw 0 ; target
.dw 0 ; selector (ony lower 8 bits used)
.dw winSensorWatch3Value_signalmap*2 ; signal map
; WIDGET
.db 0, (1<<WIDGET_OPTSHI_HALIGNCENTER_BIT) ; opts lo, hi
.dw 2 ; X
.dw STYLE_WIN_FONT_HEIGHT+2+96+2 ; Y
.dw 96 ; W
.dw STYLE_WIN_FONT_HEIGHT+4 ; H
.dw STYLE_WIN_FOREGROUND ; front color
.dw STYLE_WIN_BACKGROUND ; back color
.dw STYLE_WIN_FONT*2 ; font
.dw winSensorWatch3Value_ramdata ; ptr to SDRAM
; VALUELABEL
.db 0, 0 ; num of post-komma digits
winSensorWatch3Value_signalmap:
.db 0, OBJECT_SIGNAL_CREATE, LOW(Widget_OnCreate), HIGH(Widget_OnCreate)
.db 0, WIDGET_SIGNAL_DRAW, LOW(ValueLabel_OnDraw), HIGH(ValueLabel_OnDraw)
.db 0, VLABEL_SIGNAL_SETVALUE, LOW(ValueLabel_OnSetValue), HIGH(ValueLabel_OnSetValue)
.db 0, 0, 0, 0 ; end of table
#endif

View File

@@ -474,7 +474,17 @@ Widget_Clear:
rcall OBJ_IsObject
brcc Widget_Clear_ret
rcall Widget_LoadDisplayRegs
clr r4
clr r5
clr r6
clr r7
adiw zh:zl, WIDGET_OFFS_WIDTH_LO
lpm r8, Z+ ; WIDTH_LO
lpm r9, Z+
lpm r10, Z+ ; HEIGHT_LO
lpm r11, Z
sbiw zh:zl, WIDGET_OFFS_WIDTH_LO+3
rcall Widget_MakeAbsPos ; (R16, R17)
rcall Widget_GetSdramPtr ; (none)
; adiw zh:zl, WIDGET_OFFS_OPTS_LO ; get OPTS low
@@ -537,8 +547,8 @@ Widget_SelectColors_ret:
; @routine Widget_MakeAbsPos @global
;
; @param Z byte address of widget object (for LPM!)
; @param r5:r4 X0
; @param r7:r6 Y0
; @param r5:r4 X
; @param r7:r6 Y
; @clobbers r16, r17
Widget_MakeAbsPos: