]> oss.titaniummirror.com Git - rgblamp.git/commitdiff
Verify EEPROM has changed before update
authorR. Steve McKown <rsmckown@gmail.com>
Sat, 31 Dec 2011 21:49:52 +0000 (14:49 -0700)
committerR. Steve McKown <rsmckown@gmail.com>
Sat, 31 Dec 2011 21:53:33 +0000 (14:53 -0700)
main.c

diff --git a/main.c b/main.c
index 37fda9036ac1083a474eca0d02a1cd18a47932c8..bfc6b1e6d367348390eec8bd17575e71a1d3617c 100644 (file)
--- 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();
 }