75 lines
2.0 KiB
C++
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();
|
|
} |