avr: motionLight module now reads/writes its config from/into EEPROM.

This commit is contained in:
Martin Preuss
2024-11-04 23:28:13 +01:00
parent 2e3705946e
commit cf26a01bb8

View File

@@ -8,8 +8,7 @@
; *************************************************************************** ; ***************************************************************************
;.equ MOTIONLIGHT_DEFAULT_ONTIME = 3000 .equ MOTIONLIGHT_DEFAULT_ONTIME = 3000 ; 5min
.equ MOTIONLIGHT_DEFAULT_ONTIME = 300
.equ MOTIONLIGHT_SOURCE_NUM = 2 .equ MOTIONLIGHT_SOURCE_NUM = 2
@@ -60,12 +59,14 @@ MotionLight_Init:
sts motionLightOnTime, r16 sts motionLightOnTime, r16
ldi r16, HIGH(MOTIONLIGHT_DEFAULT_ONTIME) ldi r16, HIGH(MOTIONLIGHT_DEFAULT_ONTIME)
sts motionLightOnTime+1, r16 sts motionLightOnTime+1, r16
rcall motionLightReadConfFromEeprom
; debug ; debug
ldi r16, 0x01 ; ldi r16, 0x01
sts motionLightSources+MOTIONLIGHT_SOURCE_OFFS_ADDR, r16 ; sts motionLightSources+MOTIONLIGHT_SOURCE_OFFS_ADDR, r16
ldi r16, 0x07 ; ldi r16, 0x07
sts motionLightSources+MOTIONLIGHT_SOURCE_OFFS_VALUEID, r16 ; sts motionLightSources+MOTIONLIGHT_SOURCE_OFFS_VALUEID, r16
ret ret
; @end ; @end
@@ -170,6 +171,11 @@ MotionLight_OnPacketReceived_setSource2:
MotionLight_OnPacketReceived_sendAck: MotionLight_OnPacketReceived_sendAck:
ldi r16, CPRO_CMD_VALUE_SET_ACK ldi r16, CPRO_CMD_VALUE_SET_ACK
rcall CPRO_SendSetValueResponse rcall CPRO_SendSetValueResponse
push xl
push xh
rcall motionLightWriteConfToEeprom
pop xh
pop xl
sec sec
ret ret
; @end ; @end
@@ -252,6 +258,87 @@ motionLightTurnOff:
; ---------------------------------------------------------------------------
; @routine motionLightReadConfFromEeprom
;
; @clobbers
motionLightReadConfFromEeprom:
push r15
in r15, SREG
cli
ldi xl, LOW(EEPROM_OFFS_MAL_CONF_ONTIME)
ldi xh, HIGH(EEPROM_OFFS_MAL_CONF_ONTIME)
rcall Utils_ReadEepromIncr ; (R16)
mov r18, r16
rcall Utils_ReadEepromIncr ; (R16)
mov r19, r16
and r16, r18
cpi r16, 0xff
breq motionLightReadConfFromEeprom_end
sts motionLightOnTime, r18
sts motionLightOnTime+1, r19
; read source 1
rcall Utils_ReadEepromIncr ; (R16)
mov r18, r16
rcall Utils_ReadEepromIncr ; (R16)
mov r19, r16
sts motionLightSources+MOTIONLIGHT_SOURCE_OFFS_ADDR, r18
sts motionLightSources+MOTIONLIGHT_SOURCE_OFFS_VALUEID, r19
; read source 2
rcall Utils_ReadEepromIncr ; (R16)
mov r18, r16
rcall Utils_ReadEepromIncr ; (R16)
mov r19, r16
sts motionLightSources+MOTIONLIGHT_SOURCE_SIZE+MOTIONLIGHT_SOURCE_OFFS_ADDR, r18
sts motionLightSources+MOTIONLIGHT_SOURCE_SIZE+MOTIONLIGHT_SOURCE_OFFS_VALUEID, r19
motionLightReadConfFromEeprom_end:
out SREG, r15
pop r15
ret
; @end
; ---------------------------------------------------------------------------
; @routine motionLightWriteConfToEeprom
;
; @clobbers r15, r16, r17, X
motionLightWriteConfToEeprom:
push r15
in r15, SREG
cli
ldi xl, LOW(EEPROM_OFFS_MAL_CONF_ONTIME)
ldi xh, HIGH(EEPROM_OFFS_MAL_CONF_ONTIME)
lds r16, motionLightOnTime
rcall Utils_WriteEepromIncr ; (R17)
lds r16, motionLightOnTime+1
rcall Utils_WriteEepromIncr ; (R17)
; write source 1
lds r16, motionLightSources+MOTIONLIGHT_SOURCE_OFFS_ADDR
rcall Utils_WriteEepromIncr ; (R16)
lds r16, motionLightSources+MOTIONLIGHT_SOURCE_OFFS_VALUEID
rcall Utils_WriteEepromIncr ; (R16)
; write source 2
lds r16, motionLightSources+MOTIONLIGHT_SOURCE_SIZE+MOTIONLIGHT_SOURCE_OFFS_ADDR
rcall Utils_WriteEepromIncr ; (R16)
lds r16, motionLightSources+MOTIONLIGHT_SOURCE_SIZE+MOTIONLIGHT_SOURCE_OFFS_VALUEID
rcall Utils_WriteEepromIncr ; (R16)
out SREG, r15
pop r15
ret
; @end
MOTIONLIGHT_END: MOTIONLIGHT_END:
.equ MODULE_SIZE_MOTIONLIGHT = MOTIONLIGHT_END-MOTIONLIGHT_BEGIN .equ MODULE_SIZE_MOTIONLIGHT = MOTIONLIGHT_END-MOTIONLIGHT_BEGIN