avr: motionLight module now reads/writes its config from/into EEPROM.
This commit is contained in:
@@ -8,8 +8,7 @@
|
||||
; ***************************************************************************
|
||||
|
||||
|
||||
;.equ MOTIONLIGHT_DEFAULT_ONTIME = 3000
|
||||
.equ MOTIONLIGHT_DEFAULT_ONTIME = 300
|
||||
.equ MOTIONLIGHT_DEFAULT_ONTIME = 3000 ; 5min
|
||||
|
||||
.equ MOTIONLIGHT_SOURCE_NUM = 2
|
||||
|
||||
@@ -60,12 +59,14 @@ MotionLight_Init:
|
||||
sts motionLightOnTime, r16
|
||||
ldi r16, HIGH(MOTIONLIGHT_DEFAULT_ONTIME)
|
||||
sts motionLightOnTime+1, r16
|
||||
|
||||
|
||||
rcall motionLightReadConfFromEeprom
|
||||
|
||||
; debug
|
||||
ldi r16, 0x01
|
||||
sts motionLightSources+MOTIONLIGHT_SOURCE_OFFS_ADDR, r16
|
||||
ldi r16, 0x07
|
||||
sts motionLightSources+MOTIONLIGHT_SOURCE_OFFS_VALUEID, r16
|
||||
; ldi r16, 0x01
|
||||
; sts motionLightSources+MOTIONLIGHT_SOURCE_OFFS_ADDR, r16
|
||||
; ldi r16, 0x07
|
||||
; sts motionLightSources+MOTIONLIGHT_SOURCE_OFFS_VALUEID, r16
|
||||
|
||||
ret
|
||||
; @end
|
||||
@@ -170,6 +171,11 @@ MotionLight_OnPacketReceived_setSource2:
|
||||
MotionLight_OnPacketReceived_sendAck:
|
||||
ldi r16, CPRO_CMD_VALUE_SET_ACK
|
||||
rcall CPRO_SendSetValueResponse
|
||||
push xl
|
||||
push xh
|
||||
rcall motionLightWriteConfToEeprom
|
||||
pop xh
|
||||
pop xl
|
||||
sec
|
||||
ret
|
||||
; @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:
|
||||
.equ MODULE_SIZE_MOTIONLIGHT = MOTIONLIGHT_END-MOTIONLIGHT_BEGIN
|
||||
|
||||
|
||||
Reference in New Issue
Block a user