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 {
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()
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;
}
void pb_clicked()
{
if (on) {
- unsigned char omode = mode;
-
if (mode == MODE_SOLID) {
if (++color == COLOR_COUNT) {
color = 0;
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)
else
bright--;
}
- if (bright != obright)
- tmr_start(TMR_CFG, CFG_DELAY);
+ tmr_start(TMR_CFG, CFG_DELAY);
leds_set();
}