Remove stuff that came from a different app when this was derived.
Prepare to add DNSServer for captive portal.
This commit is contained in:
@@ -1,156 +1,162 @@
|
||||
//
|
||||
// This file hosts all the non-volatile configuration options for this node
|
||||
//
|
||||
#include "WiFiConfiguration.h"
|
||||
#include <EEPROM.h>
|
||||
|
||||
#define EEROM_SIZE 512
|
||||
#include "WiFiConfiguration.h"
|
||||
#include "Utility.h"
|
||||
|
||||
// Change this when it is required to force a reinitialization
|
||||
//
|
||||
#define EXPECTED_FMT 0x03
|
||||
|
||||
typedef struct {
|
||||
uint8_t format[2]; // Format of this data structure, and ~format
|
||||
struct info {
|
||||
char name[CFG_NAMESIZE]; // Network Discoverable Name of this node
|
||||
char ssid[CFG_SSIDSIZE]; // SSID of the saved network [max length defined by standard]
|
||||
char pass[CFG_PASSSIZE]; // PASScode of the saved network
|
||||
char updateURL[CFG_UURLSIZE]; // URL of the trusted server with code updates
|
||||
uint16_t onRef; // A/D reference above which the output is considered 'On'
|
||||
uint16_t offRef; // A/D reference below which the output is considered 'Off'
|
||||
uint16_t autoOff; // When non-zero, this is the # minutes until auto-turn off
|
||||
//char NTPIP[64]; // Name or IP of the NTP Server
|
||||
char Padding[10];
|
||||
} info;
|
||||
} Config_t;
|
||||
#define OFS_FORMAT (0)
|
||||
#define OFS_NAME (OFS_FORMAT + 2)
|
||||
#define OFS_SSID (OFS_NAME + CFG_NAMESIZE)
|
||||
#define OFS_PASS (OFS_SSID + CFG_SSIDSIZE)
|
||||
#define OFS_URL (OFS_PASS + CFG_PASSSIZE)
|
||||
#define OFS_ONREF (OFS_URL + CFG_UURLSIZE)
|
||||
#define OFS_OFFREF (OFS_ONREF + sizeof(uint16_t))
|
||||
#define OFS_AUTOOFF (OFS_OFFREF + sizeof(uint16_t))
|
||||
//#define OFS_NTPIP (OFS_OFFREF + 2)
|
||||
|
||||
Config_t Configuration;
|
||||
|
||||
ConfigManager::ConfigManager() {
|
||||
|
||||
ConfigManager::ConfigManager(const ConfigDefaults_t * _defaults) {
|
||||
(void)_defaults;
|
||||
// defaults = _defaults;
|
||||
COMPILER_ASSERT(sizeof(NVConfig_04_t) <= EEROM_SIZE);
|
||||
EEPROM.begin(EEROM_SIZE); // Set for the max expected size
|
||||
// Here we could perform a 'load()' followed by a format check,
|
||||
// and it could then do a graceful update from one version to another,
|
||||
// and then commit it back to the rest of the program doesn't notice.
|
||||
int ret = load();
|
||||
switch (ret) {
|
||||
case MATCHING:
|
||||
// life is good, continue.
|
||||
break;
|
||||
case IS_OLDER:
|
||||
//if (getFormatVersion() == 3) {
|
||||
// Upgrade();
|
||||
// save();
|
||||
//} else {
|
||||
// factoryReset();
|
||||
// save();
|
||||
//}
|
||||
break;
|
||||
case IS_NEWER:
|
||||
// can't politely downgrade, so factory reset it.
|
||||
case IS_BROKEN:
|
||||
default:
|
||||
// factoryReset(); // Can't fix it, so factory reset it.
|
||||
// save();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Quite likely that this never runs...
|
||||
ConfigManager::~ConfigManager() {
|
||||
EEPROM.end();
|
||||
}
|
||||
|
||||
|
||||
uint8_t ConfigManager::getFormatVersion() {
|
||||
return Configuration.format[0];
|
||||
}
|
||||
|
||||
uint8_t * ConfigManager::getUserDataHandle() {
|
||||
return Configuration.userData;
|
||||
}
|
||||
|
||||
int ConfigManager::getUserDataSize() {
|
||||
return USERSIZE;
|
||||
}
|
||||
|
||||
|
||||
void ConfigManager::factoryReset() {
|
||||
Configuration.format[0] = EXPECTED_FMT;
|
||||
Configuration.format[1] = ~EXPECTED_FMT;
|
||||
strcpy(Configuration.info.name, "3-Way Switch");
|
||||
Configuration.info.ssid[0] = '\0';
|
||||
Configuration.info.pass[0] = '\0';
|
||||
//Configuration.info.updateURL[0] = '\0';
|
||||
strcpy(Configuration.info.updateURL, "https://192.168.1.201/mbed/ESP.php");
|
||||
Configuration.info.onRef = 150;
|
||||
Configuration.info.offRef = 100;
|
||||
Configuration.info.autoOff = 0;
|
||||
//Configuration.info.NTPIP[0] = '\0';
|
||||
memset(&Configuration, 0, sizeof(NVConfig_04_t)); // Wipe them to be more secure
|
||||
Configuration.format[0] = EXPECTED_FMT; // put back the minimal
|
||||
Configuration.format[1] = ~EXPECTED_FMT;
|
||||
if (defaults) {
|
||||
strcpy(Configuration.info.name, defaults->name);
|
||||
strcpy(Configuration.info.UPDURL, defaults->UPDURL);
|
||||
strcpy(Configuration.info.NTPURL, defaults->NTPURL);
|
||||
}
|
||||
HexDump("factoryReset", (uint8_t *)&Configuration, sizeof(Configuration));
|
||||
}
|
||||
|
||||
void ConfigManager::load() {
|
||||
EEPROM.begin(512);
|
||||
uint8_t * ptr = (uint8_t *) &Configuration;
|
||||
uint8_t i = 0;
|
||||
do {
|
||||
*ptr++ = EEPROM.read(OFS_FORMAT + i++);
|
||||
} while (i < sizeof(Configuration));
|
||||
if ((Configuration.format[0] & 0xFF) != (~Configuration.format[1] & 0xFF)) {
|
||||
// Factory default
|
||||
Serial.printf("Bad Configuration - reset to factory defaults\n");
|
||||
factoryReset();
|
||||
return;
|
||||
}
|
||||
Serial.printf("Loading from EEROM\n");
|
||||
Serial.printf("Node Name: %s\n", Configuration.info.name);
|
||||
Serial.printf("SSID: %s\n", Configuration.info.ssid);
|
||||
Serial.printf("PASS: %s\n", Configuration.info.pass);
|
||||
Serial.printf("URL : %s\n", Configuration.info.updateURL);
|
||||
Serial.printf("On Ref: %d\n", Configuration.info.onRef);
|
||||
Serial.printf("Off Ref: %d\n", Configuration.info.offRef);
|
||||
Serial.printf("Auto Off: %d\n", Configuration.info.autoOff);
|
||||
//Serial.printf("NTP Svr: %s\n", Configuration.info.NTPIP);
|
||||
delay(500);
|
||||
|
||||
ConfigManager::FirmwareCheck_t ConfigManager::load() {
|
||||
uint8_t * ptr = (uint8_t *)&Configuration;
|
||||
size_t i = 0;
|
||||
do {
|
||||
*ptr++ = EEPROM.read(i++);
|
||||
} while (i < sizeof(Configuration));
|
||||
// if ((Configuration.format[0] & 0xFF) != (~Configuration.format[1] & 0xFF)) {
|
||||
// // Factory default
|
||||
// Serial.printf("Bad Configuration\n");
|
||||
// return IS_BROKEN; // Fatal and restored to factory default.
|
||||
// } else if (Configuration.format[0] < EXPECTED_FMT) {
|
||||
// Serial.printf("Old Configuration. It needs an update!\n");
|
||||
// return IS_OLDER;
|
||||
// } else if (Configuration.format[0] > EXPECTED_FMT) {
|
||||
// Serial.printf("Too new a configuration.\n");
|
||||
// return IS_NEWER;
|
||||
// }
|
||||
Serial.printf("Loading from EEROM\n");
|
||||
Serial.printf("Node Name: %s\n", Configuration.info.name);
|
||||
Serial.printf("SSID: %s\n", Configuration.info.ssid);
|
||||
Serial.printf("PASS: %s\n", Configuration.info.pass);
|
||||
Serial.printf("URL : %s\n", Configuration.info.UPDURL);
|
||||
Serial.printf("NTP : %s\n", Configuration.info.NTPURL);
|
||||
HexDump("After Load", (uint8_t *)&Configuration, sizeof(Configuration));
|
||||
// //delay(500);
|
||||
return MATCHING; // no error
|
||||
}
|
||||
|
||||
|
||||
void ConfigManager::save(void) {
|
||||
EEPROM.begin(512);
|
||||
uint8_t * ptr = (uint8_t *) &Configuration;
|
||||
uint8_t i = 0;
|
||||
do {
|
||||
EEPROM.write(OFS_FORMAT + i++, *ptr++);
|
||||
} while (i < sizeof(Configuration));
|
||||
EEPROM.commit();
|
||||
delay(500);
|
||||
uint8_t * ptr = (uint8_t *)&Configuration;
|
||||
size_t i = 0;
|
||||
do {
|
||||
EEPROM.write(i++, *ptr++);
|
||||
} while (i < sizeof(Configuration));
|
||||
if (EEPROM.commit()) {
|
||||
Serial.printf("EEPROM.commit() success.\n");
|
||||
} else {
|
||||
Serial.printf("EEPROM.commit() FAILED !!!!!!!! FAILED !!!!!!!! FAILED !!!!!!!!\n");
|
||||
}
|
||||
HexDump("After Save", (uint8_t *)&Configuration, sizeof(Configuration));
|
||||
//delay(500);
|
||||
}
|
||||
|
||||
#if 0
|
||||
|
||||
String ConfigManager::getNTPServerName() {
|
||||
return String(Configuration.info.NTPIP);
|
||||
return String(Configuration.info.NTPURL);
|
||||
}
|
||||
void ConfigManager::setNTPServerName(String _name) {
|
||||
strncpy(Configuration.info.NTPIP, _name.c_str(), sizeof(Configuration.info.NTPIP));
|
||||
Serial.printf("setNTPServerName(%s)\n", Configuration.info.NTPIP);
|
||||
strncpy(Configuration.info.NTPURL, _name.c_str(), sizeof(Configuration.info.NTPURL));
|
||||
Serial.printf("setNTPServerName(%s)\n", Configuration.info.NTPURL);
|
||||
}
|
||||
#endif
|
||||
|
||||
String ConfigManager::getName() {
|
||||
return String(Configuration.info.name);
|
||||
return String(Configuration.info.name);
|
||||
}
|
||||
|
||||
void ConfigManager::setName(String _name) {
|
||||
strncpy(Configuration.info.name, _name.c_str(), sizeof(Configuration.info.name));
|
||||
Serial.printf("setName(%s)\n", Configuration.info.name);
|
||||
strncpy(Configuration.info.name, _name.c_str(), sizeof(Configuration.info.name));
|
||||
Serial.printf("setName(%s)\n", Configuration.info.name);
|
||||
}
|
||||
|
||||
String ConfigManager::getSSID() {
|
||||
return String(Configuration.info.ssid);
|
||||
return String(Configuration.info.ssid);
|
||||
}
|
||||
|
||||
void ConfigManager::setSSID(String _ssid) {
|
||||
strncpy(Configuration.info.ssid, _ssid.c_str(), sizeof(Configuration.info.ssid));
|
||||
Serial.printf("setSSID(%s)\n", Configuration.info.ssid);
|
||||
strncpy(Configuration.info.ssid, _ssid.c_str(), sizeof(Configuration.info.ssid));
|
||||
Serial.printf("setSSID(%s)\n", Configuration.info.ssid);
|
||||
}
|
||||
|
||||
String ConfigManager::getPassword() {
|
||||
return String(Configuration.info.pass);
|
||||
return String(Configuration.info.pass);
|
||||
}
|
||||
|
||||
void ConfigManager::setPassword(String _password) {
|
||||
strncpy(Configuration.info.pass, _password.c_str(), sizeof(Configuration.info.pass));
|
||||
Serial.printf("setPass(%s)\n", Configuration.info.pass);
|
||||
strncpy(Configuration.info.pass, _password.c_str(), sizeof(Configuration.info.pass));
|
||||
Serial.printf("setPass(%s)\n", Configuration.info.pass);
|
||||
}
|
||||
|
||||
String ConfigManager::getURL() {
|
||||
return String(Configuration.info.updateURL);
|
||||
return String(Configuration.info.UPDURL);
|
||||
}
|
||||
|
||||
void ConfigManager::setURL(String _url) {
|
||||
strncpy(Configuration.info.updateURL, _url.c_str(), sizeof(Configuration.info.updateURL));
|
||||
Serial.printf("setURL (%s)\n", Configuration.info.updateURL);
|
||||
strncpy(Configuration.info.UPDURL, _url.c_str(), sizeof(Configuration.info.UPDURL));
|
||||
Serial.printf("setURL (%s)\n", Configuration.info.UPDURL);
|
||||
}
|
||||
|
||||
uint16_t ConfigManager::getOnRef() {
|
||||
return Configuration.info.onRef;
|
||||
}
|
||||
void ConfigManager::setOnRef(uint16 onR) {
|
||||
Configuration.info.onRef = onR;
|
||||
}
|
||||
uint16_t ConfigManager::getOffRef() {
|
||||
return Configuration.info.offRef;
|
||||
}
|
||||
void ConfigManager::setOffRef(uint16 offR) {
|
||||
Configuration.info.offRef = offR;
|
||||
}
|
||||
uint16_t ConfigManager::getAutoOff() {
|
||||
return Configuration.info.autoOff;
|
||||
}
|
||||
void ConfigManager::setAutoOff(uint16 autoOff) {
|
||||
Configuration.info.autoOff = autoOff;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user