/* * Config.cpp * * Created on: 04.03.2014 * Author: wn */ #include #include "Config.h" #include "Resources.h" String ConfigInvalidateCmd::exec(String params) { Config::setUInt(Config::MAGIC, 0); return "done"; } bool Config::getBool(int pos) { u_bool u; for (unsigned int i = 0; i < sizeof(bool); i++) { u.e[i] = EEPROM.read(pos + i); } return u.b; } void Config::setBool(int pos, bool value) { u_bool u; u.b = value; for (unsigned int i = 0; i < sizeof(bool); i++) { EEPROM.write(pos + i, u.e[i]); } } float Config::getFloat(int pos) { u_float u; for (unsigned int i = 0; i < sizeof(float); i++) { u.e[i] = EEPROM.read(pos + i); } return u.f; } void Config::setFloat(int pos, float value) { u_float u; u.f = value; for (unsigned int i = 0; i < sizeof(float); i++) { EEPROM.write(pos + i, u.e[i]); } } unsigned int Config::getUInt(int pos) { u_uint u; for (unsigned int i = 0; i < sizeof(unsigned int); i++) { u.e[i] = EEPROM.read(pos + i); } return u.i; } void Config::setUInt(int pos, unsigned int value) { u_uint u; u.i = value; for (unsigned int i = 0; i < sizeof(unsigned int); i++) { EEPROM.write(pos + i, u.e[i]); } } unsigned long Config::getULong(int pos) { u_ulong u; for (unsigned int i = 0; i < sizeof(unsigned long); i++) { u.e[i] = EEPROM.read(pos + i); } return u.l; } void Config::setULong(int pos, unsigned long value) { u_ulong u; u.l = value; for (unsigned int i = 0; i < sizeof(unsigned long); i++) { EEPROM.write(pos + i, u.e[i]); } } unsigned char Config::getUChar(int pos) { u_uchar u; for (unsigned int i = 0; i < sizeof(unsigned char); i++) { u.e[i] = EEPROM.read(pos + i); } return u.c; } void Config::setUChar(int pos, unsigned char value) { u_uchar u; u.c = value; for (unsigned int i = 0; i < sizeof(unsigned char); i++) { EEPROM.write(pos + i, u.e[i]); } } void Config::initialize() { if (! isInitialized()) { Serial.println(getResource(CONFIG_INIT_KEY)); setFloat(THERMOMETER_ALPHA, 1.0); setULong(THERMOMETER_PERIOD, 1000); for (int i = 0; i < 4; i++) { setFloat(THERMOMETER_CAL[i], 1.0); } setBool(THERMOMETER_DEBUG, false); setBool(THERMOMETER_INFO, false); setUChar(METERBUSCLIENT_ADDRESS, 0); setBool(METERBUSCLIENT_DEBUG, false); setBool(METERBUSCLIENT_INFO, false); setMagic(); } } bool Config::isInitialized() { unsigned int magic = getUInt(MAGIC); return magic == MAGIC_TOKEN; } void Config::setMagic() { setUInt(MAGIC, MAGIC_TOKEN); }