valnet-arduino/Settings.h

81 lines
1.9 KiB
C
Raw Normal View History

2021-04-16 17:48:20 -04:00
#ifndef SETTINGS_H
#define SETTINGS_H
#include "Memory.h"
#include "StrUtil.h"
#define EEPROM_SIZE 512
#define SSID_WIDTH 32
#define PASSWD_WIDTH 32
#define RSA_KEY_WIDTH 64
#define FLAGS_WIDTH 16
struct WiFiNetworkSettings {
char ssid[SSID_WIDTH];
char passwd[PASSWD_WIDTH];
};
const struct WiFiNetworkSettings NULL_WIFI_SETTINGS = {"", ""};
bool operator==(const WiFiNetworkSettings& lhs, const WiFiNetworkSettings& rhs)
{
return lhs.ssid == rhs.ssid && lhs.passwd == rhs.passwd;
}
const struct DataChunk SSID_CHUNK = {0x000, SSID_WIDTH};
const struct DataChunk PASSWD_CHUNK = {0x020, PASSWD_WIDTH};
const struct DataChunk PUBLIC_KEY_CHUNK = {0x040, RSA_KEY_WIDTH};
const struct DataChunk PRIVATE_KEY_CHUNK = {0x080, RSA_KEY_WIDTH};
const struct DataChunk FLAGS_CHUNK = {0x0C0, FLAGS_WIDTH}; //ends at 0x0D0
// EEPROM ENDS AT 0x200
class SettingsClass {
public:
void begin();
void writeWifi(const char* ssid, const char* passwd);
void clearWifi();
struct WiFiNetworkSettings readWifi();
};
void SettingsClass::begin() {
Memory.begin(EEPROM_SIZE);
if(Memory.readByte(0) == 255) {
Memory.clearAll();
}
}
void SettingsClass::writeWifi(const char* ssid, const char* passwd) {
Memory.writeString(SSID_CHUNK, ssid);
Memory.writeString(PASSWD_CHUNK, passwd);
}
void SettingsClass::clearWifi() {
Memory.writeString(SSID_CHUNK, "");
Memory.writeString(PASSWD_CHUNK, "");
}
struct WiFiNetworkSettings SettingsClass::readWifi() {
if(Memory.readByte(SSID_CHUNK.offset) == 0) return NULL_WIFI_SETTINGS;
// char ssid = *(Memory.readString(SSID_CHUNK));
// char passwd = *(Memory.readString(PASSWD_CHUNK));
WiFiNetworkSettings net;
char ssid[SSID_WIDTH];
char passwd[PASSWD_WIDTH];
Memory.readString(SSID_CHUNK, ssid);
Memory.readString(PASSWD_CHUNK, passwd);
strcpy(net.ssid, ssid);
strcpy(net.passwd, passwd);
return net;
}
SettingsClass Settings;
#endif