diff --git a/avr/devices/c03/README b/avr/devices/c03/README index e6b5828..5caaa38 100644 --- a/avr/devices/c03/README +++ b/avr/devices/c03/README @@ -14,5 +14,5 @@ C03 SetLimits: aqhome-tool setdata -N nodes/xxxxxxxx/CO2_LIMIT_CRIT -v "LOWER:UPPER" aqhome-tool setdata -N nodes/xxxxxxxx/CO2_LIMIT_WARN -v "LOWER:UPPER" - +aqhome-tool setdata -N nodes/80861341/CO2_SOURCE -v "0:0:10:10" diff --git a/avr/devices/c03/test/main.asm b/avr/devices/c03/test/main.asm index f2d9914..4db095c 100644 --- a/avr/devices/c03/test/main.asm +++ b/avr/devices/c03/test/main.asm @@ -199,9 +199,9 @@ onSystemStart: ; Called on every message received onMessageReceived: -; lds yl, guiApp -; lds yh, guiApp+1 -; bigcall GuiApp_MsgReceived + lds yl, guiApp + lds yh, guiApp+1 + bigcall GuiApp_MsgReceived clc ret ; @end diff --git a/avr/devices/c03/test/w_climate.asm b/avr/devices/c03/test/w_climate.asm index 23e91d7..2193681 100644 --- a/avr/devices/c03/test/w_climate.asm +++ b/avr/devices/c03/test/w_climate.asm @@ -92,8 +92,12 @@ climateWinCreateSensorWatches: ; CO2 sensor watch push xl ; HLayout push xh - ldi r16, (1< value? + cpc r21, r23 + brcc sensorWatchCheckAgainstLimit_secRet ; no, upper limit breached + +sensorWatchCheckAgainstLimit_checkLower: + ; check against lower limit (if any) + ld r22, Z+ + ld r23, Z+ + mov r16, r22 + or r16, r23 ; zero? + clc + breq sensorWatchCheckAgainstLimit_ret ; yes, jmp + + cp r20, r22 ; value below lower limit? + cpc r21, r23 + brcs sensorWatchCheckAgainstLimit_secRet ; yes -> lower limit breached + + clc ; limit not breached + rjmp sensorWatchCheckAgainstLimit_ret +sensorWatchCheckAgainstLimit_secRet: + sec +sensorWatchCheckAgainstLimit_ret: + ret +; @end + + + + +; --------------------------------------------------------------------------- +; @routine sensorWatchWriteToEeprom +; +; @param Y pointer to widget +; @return CFLAG set if data found and read, cleared on error +; @clobbers R16, R17, R18, R20, R21, X + +sensorWatchWriteToEeprom: + ldd r16, Y+SENSORWATCH_OFFS_EEPROMID + tst r16 + clc + breq sensorWatchWriteToEeprom_ret + push r16 + bigcall EepromTlv_FindFirst ; (R18) + pop r16 + brcs sensorWatchWriteToEeprom_write + ldi r17, SENSORWATCH_EE_SIZE + bigcall EepromTlv_AddTlv ; X=pointer to EEPROM data (R16, R18, R20, R21) + brcc sensorWatchWriteToEeprom_ret +sensorWatchWriteToEeprom_write: + push yl + push yh + adiw yh:yl, SENSORWATCH_OFFS_NODEADDR + ldi r18, SENSORWATCH_EE_SIZE +sensorWatchWriteToEeprom_loop: + ld r16, Y+ + bigcall Eeprom_WriteByteIfChanged ; (R17) + brcc sensorWatchWriteToEeprom_loopEnd + adiw xh:xl, 1 + dec r18 + brne sensorWatchWriteToEeprom_loop + sec +sensorWatchWriteToEeprom_loopEnd: + pop yh + pop yl +sensorWatchWriteToEeprom_ret: + ret +; @end + + + +; --------------------------------------------------------------------------- +; @routine sensorWatchReadFromEeprom +; +; @param Y pointer to widget +; @return CFLAG set if data found and read, cleared on error +; @clobbers R16, R18, X + +sensorWatchReadFromEeprom: + ldd r16, Y+SENSORWATCH_OFFS_EEPROMID + bigcall EepromTlv_FindFirst ; (R18) + brcc sensorWatchReadFromEeprom_ret + push yl + push yh + adiw yh:yl, SENSORWATCH_OFFS_NODEADDR + ldi r18, SENSORWATCH_EE_SIZE +sensorWatchReadFromEeprom_loop: + bigcall Eeprom_ReadByte ; R16=byte (none) + brcc sensorWatchReadFromEeprom_loopEnd + st Y+, r16 + adiw xh:xl, 1 + dec r18 + brne sensorWatchReadFromEeprom_loop + sec +sensorWatchReadFromEeprom_loopEnd: + pop yh + pop yl +sensorWatchReadFromEeprom_ret: + ret +; @end @@ -301,6 +644,8 @@ SensorWatch_DefaultSignalmap: .dw VLayout_DefaultSignalmap*2 ; next table to use ; entries .db 0, WIDGET_SIGNAL_DRAW, LOW(Widget_OnDraw), HIGH(Widget_OnDraw) + .db NETMSG_CMD_VALUE_REPORT, OBJECT_SIGNAL_RECVMSG, LOW(SensorWatch_OnRecvReport), HIGH(SensorWatch_OnRecvReport) + .db NETMSG_CMD_VALUE_SET, OBJECT_SIGNAL_RECVMSG, LOW(SensorWatch_OnRecvSet), HIGH(SensorWatch_OnRecvSet) .db 0, 0, 0, 0 ; end of table diff --git a/avr/modules/lcd2/gui2/base/guiapp.asm b/avr/modules/lcd2/gui2/base/guiapp.asm index 98a2190..63d73b3 100644 --- a/avr/modules/lcd2/gui2/base/guiapp.asm +++ b/avr/modules/lcd2/gui2/base/guiapp.asm @@ -683,7 +683,9 @@ guiAppSendTouchEvents_done: guiAppSendRootMsgEvents: ldi r16, OBJECT_SIGNAL_RECVMSG - clr r17 + adiw xh:xl, NETMSG_OFFS_CMD + ld r17, X + sbiw xh:xl, NETMSG_OFFS_CMD ldi r20, (1<