From 5e3a75a6c0d0d060e58316e213dae19c7b34cc9b Mon Sep 17 00:00:00 2001 From: cschwinne Date: Tue, 28 Nov 2017 00:21:29 +0100 Subject: [PATCH] Added EEPROM support for 25 favorite presets, each 20 bytes Added EEPROM version byte so routine can load defaults instead of EEPROM 0 value after software update --- wled00/wled00.ino | 8 +++++++- wled00/wled01_eeprom.ino | 38 ++++++++++++++++++++++++++++++++++++-- 2 files changed, 43 insertions(+), 3 deletions(-) diff --git a/wled00/wled00.ino b/wled00/wled00.ino index fd364147f..e74dc98a7 100644 --- a/wled00/wled00.ino +++ b/wled00/wled00.ino @@ -20,7 +20,8 @@ #include "CallbackFunction.h" //version in format yymmddb (b = daily build) -#define VERSION 1711201 +#define VERSION 1711271 + //If you have an RGBW strip, uncomment first line in WS2812FX.h! @@ -47,6 +48,11 @@ #define DEBUG_PRINTF(x) #endif +//eeprom Version code, enables default settings instead of 0 init on update +#define EEPVER 1 +//0 -> old version, default +//1 -> 0.4p 1711271 and up + /* * @title WLED project sketch * @version 0.4p diff --git a/wled00/wled01_eeprom.ino b/wled00/wled01_eeprom.ino index 034e4374b..dfbc5fdf4 100644 --- a/wled00/wled01_eeprom.ino +++ b/wled00/wled01_eeprom.ino @@ -18,6 +18,7 @@ void saveSettingsToEEPROM() clearEEPROM(); EEPROM.write(233, 233); } + for (int i = 0; i < 32; ++i) { EEPROM.write(i, clientssid.charAt(i)); @@ -107,6 +108,7 @@ void saveSettingsToEEPROM() EEPROM.write(374, sweepDirection); EEPROM.write(375, apWaitTimeSecs); EEPROM.write(376, recoveryAPDisabled); + EEPROM.write(377, EEPVER); //eeprom was updated to latest EEPROM.commit(); } @@ -117,6 +119,8 @@ void loadSettingsFromEEPROM() saveSettingsToEEPROM(); return; } + int lastEEPROMversion = EEPROM.read(377); //last EEPROM version before update + clientssid = ""; for (int i = 0; i < 32; ++i) { @@ -222,7 +226,37 @@ void loadSettingsFromEEPROM() useRGBW = EEPROM.read(372); sweepTransition = EEPROM.read(373); sweepDirection = EEPROM.read(374); - apWaitTimeSecs = EEPROM.read(375); - recoveryAPDisabled = EEPROM.read(376); + if (lastEEPROMversion > 0) { + apWaitTimeSecs = EEPROM.read(375); + recoveryAPDisabled = EEPROM.read(376); + } + + //favorite setting memory (25 slots/ each 20byte) + //400 - 899 reserved + useHSB = useHSBDefault; } + +//PRESET PROTOCOL 20 bytes +//0: multipurpose byte, bit 0: brightness is valid, 1: col valid, 2: ecol valid, 5: cc valid, 6: ccFromStart, 7: ccFromEnd +//1:a 2:r 3:g 4:b 5:w 6:er 7:eg 8:eb 9:ew 10:fx 11:sx | custom chase 12:numP 13:numS 14:pStart 15-20:undefinded + +void loadPreset(uint8_t index, uint8_t data[]) +{ + if (index > 24) return; + uint8_t temp[20]; + for (int i = 0; i < 20; i++) + { + data[i] = EEPROM.read(400 + index*20 + i); + } +} + +void savePreset(uint8_t index, uint8_t data[]) +{ + if (index > 24) return; + for (int i = 0; i < 20; i++) + { + EEPROM.write(400 + index*20 + i, data[i]); + } +} +