Files
muziekdoos/FW/leo_muziekdoos_esp32/src/config.cpp
2023-04-16 21:21:05 +02:00

174 lines
3.7 KiB
C++

#include "config.h"
#include <vector>
#include "FS.h"
#include "LITTLEFS.h"
#include "ArduinoJson.h"
const char *tagConfigfile = "/settings.json";
DynamicJsonDocument settingsDoc(1024);
bool configInitOK = false;
struct tagConfig
{
char filename[64];
char tagID[64];
};
std::vector<tagConfig> tags;
bool checkTagConfig(void)
{
JsonArray array = settingsDoc["tags"].as<JsonArray>();
log_i("JsonArray size = %d", array.size());
bool hasError = checkTagConfig();
return hasError;
}
String GetWifiPassword(String ssid)
{
log_i("Get wifi password for ssid=%s", ssid);
if(ssid == "") return "";
JsonArray array = settingsDoc["WiFi"].as<JsonArray>();
for (JsonVariant v : array)
{
String netname((const char*)v["ssid"]);
uint16_t result = ssid.compareTo(netname);
log_v("compare %s(config) with %s(read) = %d",netname.c_str(), ssid.c_str(), result);
if (!result)
{
String password((const char*)v["psk"]);
log_i("ssid found in config", password.c_str());
return password;
}
}
log_e("password for %s not found",ssid.c_str() );
return "";
}
int GetIntparam(String param, int def)
{
log_i("Get param %s",param );
if(param == "")
{
log_e("No param(%s) given", param);
return def;
}
if(!settingsDoc.containsKey(param))
{
log_e("param(%s) not found",param);
return def;
}
return settingsDoc[param];
}
float getFloatParam(String param, int def)
{
log_i("Get param %s",param );
if( param == "")
{
log_e("No param(%s) given",param);
return def;
}
if(!settingsDoc.containsKey(param))
{
log_e("param(%s)",param);
return def;
}
return settingsDoc[param];
}
void loadConfig(const char *fname)
{
log_i("config: load");
File file = LITTLEFS.open(fname);
DeserializationError error = deserializeJson(settingsDoc, file);
if (error)
{
log_e("Failed to deserialize err=%s", error.c_str());
}
else
{
serializeJsonPretty(settingsDoc, Serial);
JsonArray array = settingsDoc["tags"].as<JsonArray>();
log_i("JsonArray size = %d", array.size());
bool hasError = false;
for (JsonVariant v : array)
{
if (!v.containsKey("TagUID"))
{
log_e("key TAGUID not found");
hasError = true;
}
if (!v.containsKey("audiofile"))
{
log_e("Key: audiofile not found");
hasError = true;
}
}
configInitOK = !hasError;
}
//test values
int test = GetIntparam("ScanTimeout");
log_i("retval(%i)",test);
log_i("config: load done");
}
void initConfig(void)
{
log_i("config: init start");
loadConfig(tagConfigfile);
log_i("config: init done");
}
void handleConfig(void)
{
}
bool getUIDvalid(String uid)
{
JsonArray array = settingsDoc["tags"].as<JsonArray>();
for (JsonVariant v : array)
{
String taguid((const char*)v["TagUID"]);
uint16_t result = uid.compareTo(taguid);
log_v("compare %s(config) with %s(read) = %d",taguid.c_str(), uid.c_str(), result);
if (!result)
{
String filename((const char*)v["audiofile"]);
log_i("Tag found in config");
return true;
}
}
log_e("taguid %s not found",uid.c_str() );
return false;
}
String getConfigSong(String uid)
{
JsonArray array = settingsDoc["tags"].as<JsonArray>();
for (JsonVariant v : array)
{
String taguid((const char*)v["TagUID"]);
uint16_t result = uid.compareTo(taguid);
log_v("compare %s(config) with %s(read) = %d",taguid.c_str(), uid.c_str(), result);
if (!result)
{
String filename((const char*)v["audiofile"]);
log_i("Tag found in config, filename = %s", filename.c_str());
return filename;
}
}
log_e("taguid %s not found",uid.c_str() );
return "";
}