Topuino_Hardware/src/UserData.cpp

87 lines
1.7 KiB
C++

#include "UserData.h"
#include <EEPROM.h>
#define MAX_USER_DATA_SIZE 0x200
#define WIFI_INFO_VALID_MAGIC 0xaa
#define WIFI_INFO_VALID_OFFSET 0x00
#define WIFI_SSID_VALID 0x20
#define WIFI_PASSWORD_OFFSET 0x40
#define RUN_MODE_OFFSET 0x60
UserData::UserData()
{
EEPROM.begin(MAX_USER_DATA_SIZE);
}
String UserData::ReadEepromString(uint32_t offset)
{
String result;
char readByte;
for (uint32_t addr = offset; (readByte = EEPROM.read(addr)) != '\0'; addr++) {
result += readByte;
}
return result;
}
void UserData::WriteEepromString(String data, uint32_t offset)
{
for (uint32_t i = 0; i < data.length(); i++) {
EEPROM.write(i + offset, data[i]);
}
EEPROM.write(data.length() + offset, 0x00);
}
void UserData::EraseAllData()
{
EEPROM.write(WIFI_INFO_VALID_OFFSET, 0x00);
EEPROM.commit();
}
RunMode UserData::GetRunMode()
{
mode = EEPROM.read(RUN_MODE_OFFSET);
return (RunMode)mode;
}
void UserData::SetRunMode(RunMode mode)
{
EEPROM.write(RUN_MODE_OFFSET, (byte)mode);
EEPROM.commit();
}
bool UserData::WifiInfoValid()
{
byte validation = EEPROM.read(WIFI_INFO_VALID_OFFSET);
return validation == WIFI_INFO_VALID_MAGIC;
}
void UserData::ConfirmWifiData()
{
EEPROM.write(WIFI_INFO_VALID_OFFSET, WIFI_INFO_VALID_MAGIC);
EEPROM.commit();
}
String UserData::GetWifiSsid()
{
return ReadEepromString(WIFI_SSID_VALID);
}
void UserData::SetWifiSsid(String ssid)
{
return WriteEepromString(ssid, WIFI_SSID_VALID);
}
String UserData::GetWifiPasswd()
{
return ReadEepromString(WIFI_PASSWORD_OFFSET);
}
void UserData::SetWifiPasswd(String password)
{
return WriteEepromString(password, WIFI_PASSWORD_OFFSET);
}