From: R. Steve McKown Date: Sat, 31 Dec 2011 20:21:53 +0000 (-0700) Subject: Save brightness to eeprom X-Git-Tag: 1.1~3 X-Git-Url: https://oss.titaniummirror.com/gitweb?p=rgblamp.git;a=commitdiff_plain;h=8c7b4fef50432ef0775b00b3fe7737a1b924b1af Save brightness to eeprom Also promote cfg_read() and cfg_write() to functions from macros --- diff --git a/main.c b/main.c index dc14185..37fda90 100644 --- a/main.c +++ b/main.c @@ -65,19 +65,6 @@ #define dbgpin_low() (RA2 = 0) #define dbgpin_toggle() (RA2 = (LATA2 == 0) ? 1 : 0) -#define cfg_write(mode, color) do { \ - eeprom_write(CFG_MODE_ADDR, (mode)); \ - eeprom_write(CFG_COLOR_ADDR, (color)); \ - } while (0) - -#define cfg_read(mode, color) do { \ - unsigned char tmp; \ - tmp = eeprom_read(CFG_MODE_ADDR); \ - mode = (tmp < MODE_COUNT) ? tmp : MODE_SOLID; \ - tmp = eeprom_read(CFG_COLOR_ADDR); \ - color = (tmp < COLOR_COUNT) ? tmp : 0; \ - } while (0) - enum { /* Operating modes */ MODE_SOLID = 0, /* Cycle through colors[][] before next mode */ @@ -107,8 +94,7 @@ enum { PARTY_MIN = 8, /* Min party fade and incolor units */ PARTY_RANGE = 8, /* Party fade/incolor range mask for lfsr_get() */ /* ... see start_fade() */ - CFG_MODE_ADDR = 0, /* EEPROM address of mode variable */ - CFG_COLOR_ADDR, /* EEPROM address of color variable */ + CFG_ADDR = 0, /* EEPROM address of start of configuration */ CFG_DELAY = 92, /* 3 seconds in 32.768 msec units */ }; @@ -135,16 +121,43 @@ const unsigned char colors[COLOR_COUNT][LED_COUNT] = { unsigned char mode = MODE_SOLID; unsigned char color = COLOR_WHITE; +signed char bright = BRIGHT_INIT; +bit bright_up; led_t red; led_t grn; led_t blu; led_t wht; bit on; int fade_steps; -signed char bright = BRIGHT_INIT; -bit bright_up; signed char pbHeldCount; +void cfg_write() +{ + unsigned char addr = CFG_ADDR; + + eeprom_write(addr++, mode); + eeprom_write(addr++, color); + eeprom_write(addr++, bright); +} + +void cfg_read() +{ + unsigned char addr = CFG_ADDR; + unsigned char tmp; + + tmp = eeprom_read(addr++); + if (tmp < MODE_COUNT) + mode = tmp; + + tmp = eeprom_read(addr++); + if (tmp < COLOR_COUNT) + color = tmp; + + tmp = eeprom_read(addr++); + if ((signed char)tmp >= BRIGHT_BOTTOM && (signed char)tmp <= BRIGHT_TOP) + bright = tmp; +} + /* Combine LED color value and brightness level to generate an RGB value. * bright will be BRIGHT_MIN...BRIGHT_MAX * @@ -255,6 +268,8 @@ void pb_clicked() void pb_held() { + signed char obright = bright; + /* The button has been held. Change the color magnitude. */ if (bright_up) { if (bright == BRIGHT_TOP) @@ -267,6 +282,8 @@ void pb_held() else bright--; } + if (bright != obright) + tmr_start(TMR_CFG, CFG_DELAY); leds_set(); } @@ -360,7 +377,7 @@ void user_boot() { dbgpin_high(); lfsr_init((adc_random() << 8) + adc_random()); - cfg_read(mode, color); + cfg_read(); rs_task(); } @@ -389,7 +406,7 @@ void user_tasks(unsigned char block) auto_offon_task(); break; case TASK_CFG: /* Save config to EEPROM event */ - cfg_write(mode, color); + cfg_write(); break; } }