174 lines
3.7 KiB
C++
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 "";
|
|
} |