|
|
|
|
@@ -35,27 +35,35 @@
|
|
|
|
|
; defines
|
|
|
|
|
|
|
|
|
|
; SensorWatch in flash
|
|
|
|
|
.equ SENSORWATCH_OFFS_SENSORWATCH = WIDGET_SIZE
|
|
|
|
|
.equ SENSORWATCH_SIZE = SENSORWATCH_OFFS_SENSORWATCH+0
|
|
|
|
|
.equ SENSORWATCH_OFFS_BEGIN = WIDGET_SIZE
|
|
|
|
|
.equ SENSORWATCH_OFFS_BASEVALUEID = SENSORWATCH_OFFS_BEGIN+0
|
|
|
|
|
.equ SENSORWATCH_OFFS_EEPROMID = SENSORWATCH_OFFS_BEGIN+1
|
|
|
|
|
.equ SENSORWATCH_SIZE = SENSORWATCH_OFFS_BEGIN+2
|
|
|
|
|
|
|
|
|
|
; SDRAM data for SensorWatch
|
|
|
|
|
.equ SENSORWATCH_SD_OFFS_SENSORWATCH = WIDGET_SD_SIZE
|
|
|
|
|
.equ SENSORWATCH_SD_OFFS_NODEADDR = SENSORWATCH_SD_OFFS_SENSORWATCH+0
|
|
|
|
|
.equ SENSORWATCH_SD_OFFS_VALUEID = SENSORWATCH_SD_OFFS_SENSORWATCH+1
|
|
|
|
|
.equ SENSORWATCH_SD_OFFS_LIMIT_WARN_LO = SENSORWATCH_SD_OFFS_SENSORWATCH+2
|
|
|
|
|
.equ SENSORWATCH_SD_OFFS_LIMIT_WARN_HI = SENSORWATCH_SD_OFFS_SENSORWATCH+3
|
|
|
|
|
.equ SENSORWATCH_SD_OFFS_LIMIT_CRIT_LO = SENSORWATCH_SD_OFFS_SENSORWATCH+4
|
|
|
|
|
.equ SENSORWATCH_SD_OFFS_LIMIT_CRIT_HI = SENSORWATCH_SD_OFFS_SENSORWATCH+5
|
|
|
|
|
.equ SENSORWATCH_SD_OFFS_VALUE_LO = SENSORWATCH_SD_OFFS_SENSORWATCH+6
|
|
|
|
|
.equ SENSORWATCH_SD_OFFS_VALUE_HI = SENSORWATCH_SD_OFFS_SENSORWATCH+7
|
|
|
|
|
.equ SENSORWATCH_SD_SIZE = SENSORWATCH_SD_OFFS_SENSORWATCH+8
|
|
|
|
|
.equ SENSORWATCH_SD_OFFS_SENSORWATCH = WIDGET_SD_SIZE
|
|
|
|
|
.equ SENSORWATCH_SD_OFFS_NODEADDR = SENSORWATCH_SD_OFFS_SENSORWATCH+0
|
|
|
|
|
.equ SENSORWATCH_SD_OFFS_VALUEID = SENSORWATCH_SD_OFFS_SENSORWATCH+1
|
|
|
|
|
.equ SENSORWATCH_SD_OFFS_UPPER_LIMIT_WARN_LO = SENSORWATCH_SD_OFFS_SENSORWATCH+2
|
|
|
|
|
.equ SENSORWATCH_SD_OFFS_UPPER_LIMIT_WARN_HI = SENSORWATCH_SD_OFFS_SENSORWATCH+3
|
|
|
|
|
.equ SENSORWATCH_SD_OFFS_LOWER_LIMIT_WARN_LO = SENSORWATCH_SD_OFFS_SENSORWATCH+4
|
|
|
|
|
.equ SENSORWATCH_SD_OFFS_LOWER_LIMIT_WARN_HI = SENSORWATCH_SD_OFFS_SENSORWATCH+5
|
|
|
|
|
.equ SENSORWATCH_SD_OFFS_UPPER_LIMIT_CRIT_LO = SENSORWATCH_SD_OFFS_SENSORWATCH+6
|
|
|
|
|
.equ SENSORWATCH_SD_OFFS_UPPER_LIMIT_CRIT_HI = SENSORWATCH_SD_OFFS_SENSORWATCH+7
|
|
|
|
|
.equ SENSORWATCH_SD_OFFS_LOWER_LIMIT_CRIT_LO = SENSORWATCH_SD_OFFS_SENSORWATCH+8
|
|
|
|
|
.equ SENSORWATCH_SD_OFFS_LOWER_LIMIT_CRIT_HI = SENSORWATCH_SD_OFFS_SENSORWATCH+9
|
|
|
|
|
.equ SENSORWATCH_SD_OFFS_VALUE_LO = SENSORWATCH_SD_OFFS_SENSORWATCH+10
|
|
|
|
|
.equ SENSORWATCH_SD_OFFS_VALUE_HI = SENSORWATCH_SD_OFFS_SENSORWATCH+11
|
|
|
|
|
.equ SENSORWATCH_SD_SIZE = SENSORWATCH_SD_OFFS_SENSORWATCH+12
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
; signals
|
|
|
|
|
.equ SENSORWATCH_SIGNAL_SETSOURCE = WIDGET_SIGNAL_NEXTFREE+0
|
|
|
|
|
.equ SENSORWATCH_SIGNAL_SETLIMWARN = WIDGET_SIGNAL_NEXTFREE+1
|
|
|
|
|
.equ SENSORWATCH_SIGNAL_SETLIMCRIT = WIDGET_SIGNAL_NEXTFREE+2
|
|
|
|
|
.equ SENSORWATCH_SIGNAL_NEXTFREE = WIDGET_SIGNAL_NEXTFREE+3
|
|
|
|
|
.equ SENSORWATCH_SIGNAL_SETSOURCE = WIDGET_SIGNAL_NEXTFREE+0
|
|
|
|
|
.equ SENSORWATCH_SIGNAL_SETUPPERLIMWARN = WIDGET_SIGNAL_NEXTFREE+1
|
|
|
|
|
.equ SENSORWATCH_SIGNAL_SETLOWERLIMWARN = WIDGET_SIGNAL_NEXTFREE+2
|
|
|
|
|
.equ SENSORWATCH_SIGNAL_SETUPPERLIMCRIT = WIDGET_SIGNAL_NEXTFREE+3
|
|
|
|
|
.equ SENSORWATCH_SIGNAL_SETLOWERLIMCRIT = WIDGET_SIGNAL_NEXTFREE+4
|
|
|
|
|
.equ SENSORWATCH_SIGNAL_NEXTFREE = WIDGET_SIGNAL_NEXTFREE+5
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -128,21 +136,43 @@ SensorWatch_OnSetSource_ret:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
; ---------------------------------------------------------------------------
|
|
|
|
|
; @routine SensorWatch_OnSetLimitWarn @global
|
|
|
|
|
; @routine SensorWatch_OnSetLowerLimitWarn @global
|
|
|
|
|
;
|
|
|
|
|
; @param Z byte address of widget object (for LPM!)
|
|
|
|
|
; @param X value
|
|
|
|
|
; @return CFLAG set if signal handled
|
|
|
|
|
; @clobbers any, !Z
|
|
|
|
|
|
|
|
|
|
SensorWatch_OnSetLimitWarn:
|
|
|
|
|
SensorWatch_OnSetLowerLimitWarn:
|
|
|
|
|
bigcall OBJ_IsObject ; (none)
|
|
|
|
|
brcc SensorWatch_OnSetLimitWarn_ret
|
|
|
|
|
brcc SensorWatch_OnSetLowerLimitWarn_ret
|
|
|
|
|
bigcall Widget_GetSdramPtr ; (none)
|
|
|
|
|
std Y+SENSORWATCH_SD_OFFS_LIMIT_WARN_LO, xl
|
|
|
|
|
std Y+SENSORWATCH_SD_OFFS_LIMIT_WARN_HI, xh
|
|
|
|
|
std Y+SENSORWATCH_SD_OFFS_LOWER_LIMIT_WARN_LO, xl
|
|
|
|
|
std Y+SENSORWATCH_SD_OFFS_LOWER_LIMIT_WARN_HI, xh
|
|
|
|
|
rcall sensorWatchSetColor
|
|
|
|
|
SensorWatch_OnSetLimitWarn_ret:
|
|
|
|
|
SensorWatch_OnSetLowerLimitWarn_ret:
|
|
|
|
|
sec
|
|
|
|
|
ret
|
|
|
|
|
; @end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
; ---------------------------------------------------------------------------
|
|
|
|
|
; @routine SensorWatch_OnSetUpperLimitWarn @global
|
|
|
|
|
;
|
|
|
|
|
; @param Z byte address of widget object (for LPM!)
|
|
|
|
|
; @param X value
|
|
|
|
|
; @return CFLAG set if signal handled
|
|
|
|
|
; @clobbers any, !Z
|
|
|
|
|
|
|
|
|
|
SensorWatch_OnSetUpperLimitWarn:
|
|
|
|
|
bigcall OBJ_IsObject ; (none)
|
|
|
|
|
brcc SensorWatch_OnSetUpperLimitWarn_ret
|
|
|
|
|
bigcall Widget_GetSdramPtr ; (none)
|
|
|
|
|
std Y+SENSORWATCH_SD_OFFS_UPPER_LIMIT_WARN_LO, xl
|
|
|
|
|
std Y+SENSORWATCH_SD_OFFS_UPPER_LIMIT_WARN_HI, xh
|
|
|
|
|
rcall sensorWatchSetColor
|
|
|
|
|
SensorWatch_OnSetUpperLimitWarn_ret:
|
|
|
|
|
sec
|
|
|
|
|
ret
|
|
|
|
|
; @end
|
|
|
|
|
@@ -157,14 +187,36 @@ SensorWatch_OnSetLimitWarn_ret:
|
|
|
|
|
; @return CFLAG set if signal handled
|
|
|
|
|
; @clobbers any, !Z
|
|
|
|
|
|
|
|
|
|
SensorWatch_OnSetLimitCrit:
|
|
|
|
|
SensorWatch_OnSetLowerLimitCrit:
|
|
|
|
|
bigcall OBJ_IsObject ; (none)
|
|
|
|
|
brcc SensorWatch_OnSetLimitCrit_ret
|
|
|
|
|
brcc SensorWatch_OnSetLowerLimitCrit_ret
|
|
|
|
|
rcall Widget_GetSdramPtr ; (none)
|
|
|
|
|
std Y+SENSORWATCH_SD_OFFS_LIMIT_CRIT_LO, xl
|
|
|
|
|
std Y+SENSORWATCH_SD_OFFS_LIMIT_CRIT_HI, xh
|
|
|
|
|
std Y+SENSORWATCH_SD_OFFS_LOWER_LIMIT_CRIT_LO, xl
|
|
|
|
|
std Y+SENSORWATCH_SD_OFFS_LOWER_LIMIT_CRIT_HI, xh
|
|
|
|
|
rcall sensorWatchSetColor
|
|
|
|
|
SensorWatch_OnSetLimitCrit_ret:
|
|
|
|
|
SensorWatch_OnSetLowerLimitCrit_ret:
|
|
|
|
|
sec
|
|
|
|
|
ret
|
|
|
|
|
; @end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
; ---------------------------------------------------------------------------
|
|
|
|
|
; @routine SensorWatch_OnSetUpperLimitCrit @global
|
|
|
|
|
;
|
|
|
|
|
; @param Z byte address of widget object (for LPM!)
|
|
|
|
|
; @param X value
|
|
|
|
|
; @return CFLAG set if signal handled
|
|
|
|
|
; @clobbers any, !Z
|
|
|
|
|
|
|
|
|
|
SensorWatch_OnSetUpperLimitCrit:
|
|
|
|
|
bigcall OBJ_IsObject ; (none)
|
|
|
|
|
brcc SensorWatch_OnSetUpperLimitCrit_ret
|
|
|
|
|
rcall Widget_GetSdramPtr ; (none)
|
|
|
|
|
std Y+SENSORWATCH_SD_OFFS_UPPER_LIMIT_CRIT_LO, xl
|
|
|
|
|
std Y+SENSORWATCH_SD_OFFS_UPPER_LIMIT_CRIT_HI, xh
|
|
|
|
|
rcall sensorWatchSetColor
|
|
|
|
|
SensorWatch_OnSetUpperLimitCrit_ret:
|
|
|
|
|
sec
|
|
|
|
|
ret
|
|
|
|
|
; @end
|
|
|
|
|
@@ -187,6 +239,8 @@ SensorWatch_OnMsgReceived:
|
|
|
|
|
sbiw xh:xl, 2
|
|
|
|
|
cpi r16, NETMSG_CMD_VALUE_REPORT
|
|
|
|
|
breq SensorWatch_OnMsgReceived_report
|
|
|
|
|
cpi r16, NETMSG_CMD_VALUE_SET
|
|
|
|
|
breq SensorWatch_OnMsgReceived_set
|
|
|
|
|
rjmp SensorWatch_OnMsgReceived_ret
|
|
|
|
|
SensorWatch_OnMsgReceived_report:
|
|
|
|
|
bigcall Widget_GetSdramPtr ; (none)
|
|
|
|
|
@@ -205,6 +259,12 @@ SensorWatch_OnMsgReceived_report:
|
|
|
|
|
; setup background color
|
|
|
|
|
rcall sensorWatchSetColor ; (any, !Y, !Z)
|
|
|
|
|
rcall sensorWatchSetValueLabel ; (any, !Y, !Z)
|
|
|
|
|
rjmp SensorWatch_OnMsgReceived_ret
|
|
|
|
|
|
|
|
|
|
SensorWatch_OnMsgReceived_set:
|
|
|
|
|
bigcall Widget_GetSdramPtr ; (none)
|
|
|
|
|
bigcall NETMSG_ValueRead ; R17=valueId, R22=nodeAddr R19:R18=value R21:R20=denom (none)
|
|
|
|
|
; TODO: check valueid, read and set value
|
|
|
|
|
SensorWatch_OnMsgReceived_ret:
|
|
|
|
|
sec
|
|
|
|
|
ret
|
|
|
|
|
@@ -288,34 +348,30 @@ sensorWatchSetColor:
|
|
|
|
|
or r16, r21
|
|
|
|
|
breq sensorWatchSetColor_ret ; do nothing
|
|
|
|
|
|
|
|
|
|
; check against critical limit
|
|
|
|
|
ldd r22, Y+SENSORWATCH_SD_OFFS_LIMIT_CRIT_LO
|
|
|
|
|
ldd r23, Y+SENSORWATCH_SD_OFFS_LIMIT_CRIT_HI
|
|
|
|
|
mov r16, r22
|
|
|
|
|
or r16, r23
|
|
|
|
|
breq sensorWatchSetColor_checkWarn
|
|
|
|
|
cp r20, r22
|
|
|
|
|
cpc r21, r23
|
|
|
|
|
brcc sensorWatchSetColor_setRed
|
|
|
|
|
sensorWatchSetColor_checkWarn:
|
|
|
|
|
; check against warning limit
|
|
|
|
|
ldd r22, Y+SENSORWATCH_SD_OFFS_LIMIT_WARN_LO
|
|
|
|
|
ldd r23, Y+SENSORWATCH_SD_OFFS_LIMIT_WARN_HI
|
|
|
|
|
mov r16, r22
|
|
|
|
|
or r16, r23
|
|
|
|
|
breq sensorWatchSetColor_ret ; do nothing
|
|
|
|
|
cp r20, r22
|
|
|
|
|
cpc r21, r23
|
|
|
|
|
brcc sensorWatchSetColor_setYellow
|
|
|
|
|
; check against critical limits
|
|
|
|
|
adiw yh:yl, SENSORWATCH_SD_OFFS_UPPER_LIMIT_CRIT_LO
|
|
|
|
|
rcall sensorWatchCheckAgainstLimit ; (r16, r17, r22, r23)
|
|
|
|
|
sbiw yh:yl, SENSORWATCH_SD_OFFS_UPPER_LIMIT_CRIT_LO
|
|
|
|
|
brcs sensorWatchSetColor_setRed
|
|
|
|
|
|
|
|
|
|
; check against warning limits
|
|
|
|
|
adiw yh:yl, SENSORWATCH_SD_OFFS_UPPER_LIMIT_WARN_LO
|
|
|
|
|
rcall sensorWatchCheckAgainstLimit ; (r16, r17, r22, r23)
|
|
|
|
|
sbiw yh:yl, SENSORWATCH_SD_OFFS_UPPER_LIMIT_WARN_LO
|
|
|
|
|
brcs sensorWatchSetColor_setYellow
|
|
|
|
|
|
|
|
|
|
; set green background
|
|
|
|
|
rjmp sensorWatchSetColor_setColor
|
|
|
|
|
|
|
|
|
|
sensorWatchSetColor_setRed:
|
|
|
|
|
ldi xl, LOW(DISPLAY_COLOR_RED)
|
|
|
|
|
ldi xh, HIGH(DISPLAY_COLOR_RED)
|
|
|
|
|
rjmp sensorWatchSetColor_setColor
|
|
|
|
|
|
|
|
|
|
sensorWatchSetColor_setYellow:
|
|
|
|
|
ldi xl, LOW(DISPLAY_COLOR_YELLOW)
|
|
|
|
|
ldi xh, HIGH(DISPLAY_COLOR_YELLOW)
|
|
|
|
|
|
|
|
|
|
sensorWatchSetColor_setColor:
|
|
|
|
|
rcall SensorWatch_GetImageView ; (none)
|
|
|
|
|
brcc sensorWatchSetColor_ret
|
|
|
|
|
@@ -334,6 +390,47 @@ sensorWatchSetColor_ret:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
; ---------------------------------------------------------------------------
|
|
|
|
|
; @routine sensorWatchCheckAgainstLimit
|
|
|
|
|
;
|
|
|
|
|
; @param R21:R20 value to check against limit
|
|
|
|
|
; @param Y points to upper limit (lo/hi), followed by lower limit (lo/hi)
|
|
|
|
|
; @return CFLAG set if limit triggered, cleared if between upper and lower limit
|
|
|
|
|
; @clobbers r16, r17, r22, r23
|
|
|
|
|
|
|
|
|
|
sensorWatchCheckAgainstLimit:
|
|
|
|
|
; check against upper limit (if any)
|
|
|
|
|
ldd r22, Y+0
|
|
|
|
|
ldd r23, Y+1
|
|
|
|
|
mov r16, r22
|
|
|
|
|
or r16, r23 ; zero?
|
|
|
|
|
clc
|
|
|
|
|
breq sensorWatchCheckAgainstLimit_ret ; yes, jmp
|
|
|
|
|
cp r20, r22
|
|
|
|
|
cpc r21, r23
|
|
|
|
|
brcc sensorWatchCheckAgainstLimit_secRet
|
|
|
|
|
|
|
|
|
|
; check against lower limit (if any)
|
|
|
|
|
ldd r22, Y+2
|
|
|
|
|
ldd r23, Y+3
|
|
|
|
|
mov r16, r22
|
|
|
|
|
or r16, r23 ; zero?
|
|
|
|
|
clc
|
|
|
|
|
breq sensorWatchCheckAgainstLimit_ret ; yes, jmp
|
|
|
|
|
|
|
|
|
|
cp r22, r20
|
|
|
|
|
cpc r23, r21
|
|
|
|
|
brcc sensorWatchCheckAgainstLimit_secRet
|
|
|
|
|
clc
|
|
|
|
|
rjmp sensorWatchCheckAgainstLimit_ret
|
|
|
|
|
sensorWatchCheckAgainstLimit_secRet:
|
|
|
|
|
sec
|
|
|
|
|
sensorWatchCheckAgainstLimit_ret:
|
|
|
|
|
ret
|
|
|
|
|
; @end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
; ---------------------------------------------------------------------------
|
|
|
|
|
; @routine sensorWatchSetValueLabel
|
|
|
|
|
;
|
|
|
|
|
@@ -364,12 +461,14 @@ sensorWatchSetValueLabel_ret:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SensorWatch_DefaultSignalmap:
|
|
|
|
|
.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, 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_SETUPPERLIMWARN, LOW(SensorWatch_OnSetUpperLimitWarn), HIGH(SensorWatch_OnSetUpperLimitWarn)
|
|
|
|
|
.db 0, SENSORWATCH_SIGNAL_SETLOWERLIMWARN, LOW(SensorWatch_OnSetLowerLimitWarn), HIGH(SensorWatch_OnSetLowerLimitWarn)
|
|
|
|
|
.db 0, SENSORWATCH_SIGNAL_SETUPPERLIMCRIT, LOW(SensorWatch_OnSetUpperLimitCrit), HIGH(SensorWatch_OnSetUpperLimitCrit)
|
|
|
|
|
.db 0, SENSORWATCH_SIGNAL_SETLOWERLIMCRIT, LOW(SensorWatch_OnSetLowerLimitCrit), HIGH(SensorWatch_OnSetLowerLimitCrit)
|
|
|
|
|
.db 0, 0, 0, 0 ; end of table
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|