TKK_E32232028/esp32_serial_backend/wifi_config.cpp

75 lines
2.0 KiB
C++

#include "wifi_config.h"
#include <EEPROM.h>
#define EEPROM_SIZE 768
#define EEPROM_FIELD_MAX 120
// Layout: SSID@0(121B) | PASS@128(121B) | URL@256(121B)
static constexpr int EEPROM_ADDR_SSID = 0;
static constexpr int EEPROM_ADDR_PASS = 128;
static constexpr int EEPROM_ADDR_URL = 256;
// ---- DEFAULT LOCAL SERVER URL ----
static const char* DEFAULT_SERVER_URL = "http://192.168.100.16:8000";
// ----------------------------------
Config config;
void writeString(int addr, const String &data)
{
int len = data.length();
if (len > EEPROM_FIELD_MAX) len = EEPROM_FIELD_MAX;
EEPROM.write(addr, (uint8_t)len);
for (int i = 0; i < len; i++)
EEPROM.write(addr + 1 + i, (uint8_t)data[i]);
}
String readString(int addr)
{
int len = (int)EEPROM.read(addr);
if (len <= 0 || len > EEPROM_FIELD_MAX)
return "";
char buf[EEPROM_FIELD_MAX + 1] = {0};
for (int i = 0; i < len; i++)
buf[i] = (char)EEPROM.read(addr + 1 + i);
buf[len] = '\0';
return String(buf);
}
void loadConfig()
{
EEPROM.begin(EEPROM_SIZE);
config.ssid = readString(EEPROM_ADDR_SSID);
config.password = readString(EEPROM_ADDR_PASS);
// Gunakan serverURL dari EEPROM jika ada, fallback ke DEFAULT_SERVER_URL jika kosong.
String savedURL = readString(EEPROM_ADDR_URL);
if (savedURL.length() > 0)
{
config.serverURL = savedURL;
}
else if (strlen(DEFAULT_SERVER_URL) > 0)
{
config.serverURL = String(DEFAULT_SERVER_URL);
}
else
{
config.serverURL = "http://192.168.100.16:8000";
}
config.serverURL.trim();
while (config.serverURL.endsWith("/"))
config.serverURL = config.serverURL.substring(0, config.serverURL.length() - 1);
Serial.printf("[CONFIG] SSID=%s URL=%s\n",
config.ssid.c_str(), config.serverURL.c_str());
}
void saveConfig()
{
writeString(EEPROM_ADDR_SSID, config.ssid);
writeString(EEPROM_ADDR_PASS, config.password);
writeString(EEPROM_ADDR_URL, config.serverURL);
EEPROM.commit();
}