From cf26a01bb8cf8b9530b93c8f8682a7fc6b69c053 Mon Sep 17 00:00:00 2001 From: Martin Preuss Date: Mon, 4 Nov 2024 23:28:13 +0100 Subject: [PATCH] avr: motionLight module now reads/writes its config from/into EEPROM. --- avr/modules/ma_light/main.asm | 101 +++++++++++++++++++++++++++++++--- 1 file changed, 94 insertions(+), 7 deletions(-) diff --git a/avr/modules/ma_light/main.asm b/avr/modules/ma_light/main.asm index 5de72b7..d398ce6 100644 --- a/avr/modules/ma_light/main.asm +++ b/avr/modules/ma_light/main.asm @@ -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