From 2d2c25a6fe8529a9527224c19947a893e851cae4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?King=20K=C3=A9vin?= Date: Thu, 17 Oct 2013 16:35:58 +0200 Subject: [PATCH] can now save and read setting from EEPROM --- firmware/main.c | 20 ++++++++++- firmware/settings.c | 88 ++++++++++++++++++++++++++++++++++++++++----- firmware/settings.h | 7 ++-- 3 files changed, 104 insertions(+), 11 deletions(-) diff --git a/firmware/main.c b/firmware/main.c index 0039e8a..d0f0ef4 100644 --- a/firmware/main.c +++ b/firmware/main.c @@ -32,6 +32,8 @@ #include "ir_nec.h" #include "settings.h" +#include /* EEPROM handling */ + /* global variables */ #define INPUT_MAX 255 /* max length for user input string */ char input[INPUT_MAX+2]; /* user input from USART */ @@ -221,7 +223,23 @@ int main(void) channel_flag = true; /* calculate above values later */ puts("LED dimmer up & running"); - verify_settings(); + uint8_t p = 0; + eeprom_update_byte((uint8_t*)&p,0x42); + printf("eeprom: %02x\n",eeprom_read_byte((uint8_t*)&p)); + if (verify_settings()) { + puts("settings ok"); + } else { + puts("settings corrupted"); + puts("initializing settings"); + initialize_settings(); + puts("saving settings"); + save_settings(); + if (verify_settings()) { + puts("settings saved"); + } else { + puts("settings not saved"); + } + } return 0; while (true) { /* calculated PWM values */ diff --git a/firmware/settings.c b/firmware/settings.c index dd76b23..eb7eb0e 100644 --- a/firmware/settings.c +++ b/firmware/settings.c @@ -1,22 +1,94 @@ #include /* Standard Integer Types */ -#include /* Standard IO facilities */ #include /* General utilities */ #include /* Boolean */ +#include /* EEPROM handling */ #include "settings.h" -#include /* Strings */ -#include "uart.h" - /* initialize variable */ volatile uint8_t* PORTS[CHANNELS_1+CHANNELS_2] = {&PORTC,&PORTC,&PORTC,&PORTC,&PORTC,&PORTD,&PORTD,&PORTD,&PORTD,&PORTD}; const uint8_t BITS[CHANNELS_1+CHANNELS_2] = {PC0,PC1,PC2,PC3,PC4}; -uint8_t mode = 0; uint8_t brightness[MODES][CHANNELS_1+CHANNELS_2]; +uint8_t mode; +uint8_t ir_keys[IR_ACTION_END][2]; -void verify_settings(void) +const uint8_t MAGIC = 0x42; // magic header + +bool verify_settings(void) { + bool to_return; uint8_t checksum = 0; - printf("brightness: %u\n",sizeof(brightness)); - printf("checksum: %u\n",checksum); + uint8_t byte; + uint16_t settings_size = 1+sizeof(mode)+sizeof(brightness)+sizeof(ir_keys)+1; // the byte used for the checksum (magic header and checksum included) + for (uint16_t i=0; i