From: R. Steve McKown Date: Sat, 31 Dec 2011 21:49:52 +0000 (-0700) Subject: Verify EEPROM has changed before update X-Git-Tag: 1.1~2 X-Git-Url: https://oss.titaniummirror.com/gitweb?p=rgblamp.git;a=commitdiff_plain;h=624881d8aa35bb0d66e1422d3b36ce456af897ca Verify EEPROM has changed before update --- diff --git a/main.c b/main.c index 37fda90..bfc6b1e 100644 --- a/main.c +++ b/main.c @@ -95,7 +95,7 @@ enum { PARTY_RANGE = 8, /* Party fade/incolor range mask for lfsr_get() */ /* ... see start_fade() */ CFG_ADDR = 0, /* EEPROM address of start of configuration */ - CFG_DELAY = 92, /* 3 seconds in 32.768 msec units */ + CFG_DELAY = 183, /* 6 seconds in 32.768 msec units */ }; typedef struct { @@ -134,10 +134,18 @@ signed char pbHeldCount; void cfg_write() { unsigned char addr = CFG_ADDR; + unsigned char m, c; + signed char b; - eeprom_write(addr++, mode); - eeprom_write(addr++, color); - eeprom_write(addr++, bright); + m = eeprom_read(addr++); + c = eeprom_read(addr++); + b = eeprom_read(addr); + if (mode != m || color != c || bright != b) { + addr = CFG_ADDR; + eeprom_write(addr++, mode); + eeprom_write(addr++, color); + eeprom_write(addr, bright); + } } void cfg_read() @@ -153,7 +161,7 @@ void cfg_read() if (tmp < COLOR_COUNT) color = tmp; - tmp = eeprom_read(addr++); + tmp = eeprom_read(addr); if ((signed char)tmp >= BRIGHT_BOTTOM && (signed char)tmp <= BRIGHT_TOP) bright = tmp; } @@ -248,8 +256,6 @@ void turnOff() void pb_clicked() { if (on) { - unsigned char omode = mode; - if (mode == MODE_SOLID) { if (++color == COLOR_COUNT) { color = 0; @@ -260,16 +266,13 @@ void pb_clicked() mode = 0; color = 0; } - if (mode != omode || mode == MODE_SOLID) - tmr_start(TMR_CFG, CFG_DELAY); + tmr_start(TMR_CFG, CFG_DELAY); start_fade(); } } void pb_held() { - signed char obright = bright; - /* The button has been held. Change the color magnitude. */ if (bright_up) { if (bright == BRIGHT_TOP) @@ -282,8 +285,7 @@ void pb_held() else bright--; } - if (bright != obright) - tmr_start(TMR_CFG, CFG_DELAY); + tmr_start(TMR_CFG, CFG_DELAY); leds_set(); }