71 lines
1.9 KiB
C
71 lines
1.9 KiB
C
/*
|
|
* config.c
|
|
*
|
|
* Created on: Jul 27, 2024
|
|
* Author: true
|
|
*/
|
|
|
|
#include "config.h"
|
|
#include "eeprom.h"
|
|
|
|
|
|
|
|
struct UserConf userconf;
|
|
|
|
|
|
|
|
static uint16_t checksum()
|
|
{
|
|
uint16_t i;
|
|
uint16_t sum = 0;
|
|
|
|
uint8_t *uc = (uint8_t *)&userconf;
|
|
|
|
// calculate checksum
|
|
for (i = 0; i < sizeof(userconf) - 6; i++) {
|
|
sum += *uc++;
|
|
}
|
|
|
|
return sum;
|
|
}
|
|
|
|
void userconf_load()
|
|
{
|
|
uint8_t csum;
|
|
|
|
eeprom_read_bytes(0, 0, (uint8_t *)&userconf, sizeof(userconf));
|
|
csum = checksum();
|
|
|
|
if ((userconf.checkval != CHECKVAL) || (userconf.checksum != csum)) {
|
|
// config is invalid; reset to default
|
|
userconf.cursor_color = CONF_CURSOR_WHITE;
|
|
userconf.cursor_flash = 4; // default flash rate
|
|
userconf.ledprog_ena_mask = 0; // no programs enabled
|
|
|
|
userconf.ledprog_setting[0][0] = 2; // rainbow: angle top left to bottom right
|
|
userconf.ledprog_setting[0][1] = 25; // rainbow: spacing
|
|
|
|
userconf.ledprog_setting[1][0] = 8; // lite then fade: fade rate
|
|
userconf.ledprog_setting[1][1] = 192; // lite then fade: hue
|
|
|
|
userconf.ledprog_setting[2][0] = 255; // twinkle: saturation
|
|
userconf.ledprog_setting[2][1] = 4; // twinkle: intensity
|
|
|
|
userconf.ledprog_setting[3][0] = 5; // alternate: offset in 22.5deg increments
|
|
userconf.ledprog_setting[3][1] = 244; // alternate: hue
|
|
|
|
userconf.checksum = checksum();
|
|
userconf.checkval = CHECKVAL;
|
|
}
|
|
}
|
|
|
|
void userconf_save()
|
|
{
|
|
userconf.checksum = checksum();
|
|
userconf.checkval = CHECKVAL;
|
|
|
|
// this eeprom writes in 16-byte pages only, so split up the data
|
|
eeprom_write_bytes(0, 0x00, (uint8_t *)&userconf + 0x00, 16);
|
|
eeprom_write_bytes(0, 0x10, (uint8_t *)&userconf + 0x10, 16);
|
|
}
|