Skip to content

Commit

Permalink
adjust config from serialcmds
Browse files Browse the repository at this point in the history
  • Loading branch information
rennancockles committed Nov 6, 2024
1 parent 96e4988 commit 285571e
Show file tree
Hide file tree
Showing 6 changed files with 157 additions and 86 deletions.
152 changes: 100 additions & 52 deletions src/core/config.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,53 @@
#include "sd_functions.h"


JsonDocument BruceConfig::toJson() const {
JsonDocument jsonDoc;
JsonObject setting = jsonDoc.to<JsonObject>();

setting["priColor"] = priColor;
setting["secColor"] = secColor;
setting["bgColor"] = bgColor;

setting["rot"] = rotation;
setting["dimmerSet"] = dimmerSet;
setting["bright"] = bright;
setting["tmz"] = tmz;
setting["soundEnabled"] = soundEnabled;
setting["wifiAtStartup"] = wifiAtStartup;

JsonObject _webUI = setting.createNestedObject("webUI");
_webUI["user"] = webUI.user;
_webUI["pwd"] = webUI.pwd;

JsonObject _wifiAp = setting.createNestedObject("wifiAp");
_wifiAp["ssid"] = wifiAp.ssid;
_wifiAp["pwd"] = wifiAp.pwd;

JsonObject _wifi = setting.createNestedObject("wifi");
for (const auto& pair : wifi) {
_wifi[pair.first] = pair.second;
}

setting["irTx"] = irTx;
setting["irRx"] = irRx;

setting["rfTx"] = rfTx;
setting["rfRx"] = rfRx;
setting["rfModule"] = rfModule;
setting["rfFreq"] = rfFreq;
setting["rfFxdFreq"] = rfFxdFreq;
setting["rfScanRange"] = rfScanRange;

setting["rfidModule"] = rfidModule;

setting["wigleBasicToken"] = wigleBasicToken;
setting["devMode"] = devMode;

return jsonDoc;
}


void BruceConfig::fromFile() {
FS *fs;
if(!getFsStorage(fs)) return;
Expand Down Expand Up @@ -71,63 +118,14 @@ void BruceConfig::fromFile() {
if(!setting["devMode"].isNull()) { devMode = setting["devMode"].as<int>(); } else { count++; log_e("Fail"); }

validateConfig();
if(count>0) saveFile();
if (count>0) saveFile();

log_i("Using config from file");
}


JsonDocument BruceConfig::toJson() {
JsonDocument jsonDoc;
JsonObject setting = jsonDoc.to<JsonObject>();

setting["priColor"] = priColor;
setting["secColor"] = secColor;
setting["bgColor"] = bgColor;

setting["rot"] = rotation;
setting["dimmerSet"] = dimmerSet;
setting["bright"] = bright;
setting["tmz"] = tmz;
setting["soundEnabled"] = soundEnabled;
setting["wifiAtStartup"] = wifiAtStartup;

JsonObject _webUI = setting.createNestedObject("webUI");
_webUI["user"] = webUI.user;
_webUI["pwd"] = webUI.pwd;

JsonObject _wifiAp = setting.createNestedObject("wifiAp");
_wifiAp["ssid"] = wifiAp.ssid;
_wifiAp["pwd"] = wifiAp.pwd;

JsonObject _wifi = setting.createNestedObject("wifi");
for (const auto& pair : wifi) {
_wifi[pair.first] = pair.second;
}

setting["irTx"] = irTx;
setting["irRx"] = irRx;

setting["rfTx"] = rfTx;
setting["rfRx"] = rfRx;
setting["rfModule"] = rfModule;
setting["rfFreq"] = rfFreq;
setting["rfFxdFreq"] = rfFxdFreq;
setting["rfScanRange"] = rfScanRange;

setting["rfidModule"] = rfidModule;

setting["wigleBasicToken"] = wigleBasicToken;
setting["devMode"] = devMode;

return jsonDoc;
}


void BruceConfig::saveFile() {
FS *fs;
if(!getFsStorage(fs)) return;

FS *fs = &LittleFS;
JsonDocument jsonDoc = toJson();

// Open file for writing
Expand All @@ -143,8 +141,9 @@ void BruceConfig::saveFile() {
if (serializeJsonPretty(jsonDoc, file) < 5) log_e("Failed to write config file");
else log_i("config file written successfully");

// Close the file
file.close();

if (setupSdCard()) copyToFs(LittleFS, SD, filepath);
}


Expand All @@ -156,6 +155,9 @@ void BruceConfig::validateConfig() {
validateSoundEnabledValue();
validateWifiAtStartupValue();
validateRfScanRangeValue();
validateRfModuleValue();
validateRfidModuleValue();
validateDevModeValue();
}


Expand Down Expand Up @@ -227,6 +229,7 @@ void BruceConfig::validateSoundEnabledValue() {
if (soundEnabled > 1) soundEnabled = 1;
}


void BruceConfig::setWifiAtStartup(int value) {
wifiAtStartup = value;
validateWifiAtStartupValue();
Expand All @@ -246,6 +249,13 @@ void BruceConfig::setWebUICreds(const String& usr, const String& pwd) {
}


void BruceConfig::setWifiApCreds(const String& ssid, const String& pwd) {
wifiAp.ssid = ssid;
wifiAp.pwd = pwd;
saveFile();
}


void BruceConfig::addWifiCredential(const String& ssid, const String& pwd) {
wifi[ssid] = pwd;
saveFile();
Expand Down Expand Up @@ -285,10 +295,18 @@ void BruceConfig::setRfRxPin(int value) {

void BruceConfig::setRfModule(RFModules value) {
rfModule = value;
validateRfModuleValue();
saveFile();
}


void BruceConfig::validateRfModuleValue() {
if (rfModule != M5_RF_MODULE && rfModule != CC1101_SPI_MODULE) {
rfModule = M5_RF_MODULE;
}
}


void BruceConfig::setRfFreq(float value, int fxdFreq) {
rfFreq = value;
if (fxdFreq != NULL) rfFxdFreq = fxdFreq;
Expand Down Expand Up @@ -317,5 +335,35 @@ void BruceConfig::validateRfScanRangeValue() {

void BruceConfig::setRfidModule(RFIDModules value) {
rfidModule = value;
validateRfidModuleValue();
saveFile();
}


void BruceConfig::validateRfidModuleValue() {
if (
rfidModule != M5_RFID2_MODULE
&& rfidModule != PN532_I2C_MODULE
&& rfidModule != PN532_SPI_MODULE
) {
rfidModule = M5_RFID2_MODULE;
}
}


void BruceConfig::setWigleBasicToken(String value) {
wigleBasicToken = value;
saveFile();
}


void BruceConfig::setDevMode(int value) {
devMode = value;
validateDevModeValue();
saveFile();
}


void BruceConfig::validateDevModeValue() {
if (devMode > 1) devMode = 1;
}
9 changes: 8 additions & 1 deletion src/core/config.h
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ class BruceConfig {
void saveFile();
void fromFile();
void validateConfig();
JsonDocument toJson();
JsonDocument toJson() const;

void setTheme(uint16_t primary, uint16_t secondary = NULL, uint16_t background = NULL);

Expand All @@ -92,6 +92,7 @@ class BruceConfig {
void validateWifiAtStartupValue();

void setWebUICreds(const String& usr, const String& pwd);
void setWifiApCreds(const String& ssid, const String& pwd);
void addWifiCredential(const String& ssid, const String& pwd);
String getWifiPassword(const String& ssid) const;

Expand All @@ -101,12 +102,18 @@ class BruceConfig {
void setRfTxPin(int value);
void setRfRxPin(int value);
void setRfModule(RFModules value);
void validateRfModuleValue();
void setRfFreq(float value, int fxdFreq = NULL);
void setRfFxdFreq(float value);
void setRfScanRange(int value, int fxdFreq = 0);
void validateRfScanRangeValue();

void setRfidModule(RFIDModules value);
void validateRfidModuleValue();

void setWigleBasicToken(String value);
void setDevMode(int value);
void validateDevModeValue();

private:
const char *filepath = "/bruce.conf";
Expand Down
1 change: 0 additions & 1 deletion src/core/globals.h
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,6 @@ void backToMenu();

void updateTimeStr(struct tm timeInfo);

extern JsonDocument settings;
extern bool dimmer;

void setup_gpio();
Expand Down
76 changes: 47 additions & 29 deletions src/core/serialcmds.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -585,7 +585,7 @@ bool processSerialCommand(String cmd_str) {
uint16_t hexColor = tft.color565(r, g, b); // Use the TFT_eSPI function to convert RGB to 16-bit color
//Serial.print("converted color:");
//SerialPrintHexString(hexColor);
bruceConfig.priColor = hexColor; // change global var, dont save in settings
bruceConfig.priColor = hexColor; // change global var, dont save in config
return true;
}
if(cmd_str == "clock" ) {
Expand Down Expand Up @@ -625,7 +625,7 @@ bool processSerialCommand(String cmd_str) {
// start the webui
if(!wifiConnected) {
Serial.println("wifiConnect");
wifiApConnect(); // TODO: read mode from settings file
wifiApConnect(); // TODO: read mode from config file
}
Serial.println("startWebUi");
startWebUi(true); // MEMO: will quit when checkEscPress
Expand Down Expand Up @@ -741,51 +741,69 @@ bool processSerialCommand(String cmd_str) {
}

if(cmd_str.startsWith("settings")) {
JsonObject setting = settings[0];
JsonDocument jsonDoc = bruceConfig.toJson();
JsonObject setting = jsonDoc.as<JsonObject>();

String args = cmd_str.substring(strlen("settings "));
args.trim();
if(args.length()==0) {
// no args, just prints current settings
serializeJsonPretty(settings, Serial);
// no args, just prints current config
serializeJsonPretty(jsonDoc, Serial);
Serial.println("");
return true;
}
// else
String setting_name = args.substring(0, args.indexOf(" "));
setting_name.trim();
if(!setting.containsKey(setting_name)) {
// if(!setting.containsKey(setting_name)) {
if(setting[setting_name].isNull()) {
Serial.println("invalid field name: " + setting_name);
return false;
}
String setting_value = args.substring(args.indexOf(" "));
setting_value.trim();
if(setting_value.length()==0) {
// just prints current settings
// just prints current config
Serial.println(setting[setting_name].as<String>());
return true;
}
// else change the passed settings
// TODO: check if valid values
if(setting_name=="bright") bruceConfig.bright = setting_value.toInt();
if(setting_name=="dimmerSet") bruceConfig.dimmerSet = setting_value.toInt();
if(setting_name=="rot") bruceConfig.rotation = setting_value.toInt();
if(setting_name=="priColor") bruceConfig.priColor = setting_value.toInt();
if(setting_name=="irTx") bruceConfig.irTx = setting_value.toInt();
if(setting_name=="irRx") bruceConfig.irRx = setting_value.toInt();
if(setting_name=="rfTx") bruceConfig.rfTx = setting_value.toInt();
if(setting_name=="RrfRx") bruceConfig.rfRx = setting_value.toInt();
if(setting_name=="rfModule" && setting_value.toInt() <=1) bruceConfig.rfModule = setting_value.toInt();
if(setting_name=="rfFreq" && setting_value.toFloat()) bruceConfig.rfFreq = setting_value.toFloat();
if(setting_name=="tmz") bruceConfig.tmz = setting_value.toInt();
// if(setting_name=="wuiUsr") bruceConfig.webUI.user = setting_value;
// if(setting_name=="wuiPwd") bruceConfig.webUI.pwd = setting_value;
if(setting_name=="rfidModule") bruceConfig.rfidModule = setting_value.toInt();
if(setting_name=="devMode") bruceConfig.devMode = setting_value.toInt();
if(setting_name=="soundEnabled") bruceConfig.soundEnabled = setting_value.toInt();
if(setting_name=="wigleBasicToken") bruceConfig.wigleBasicToken = setting_value;
bruceConfig.saveFile();
serializeJsonPretty(settings, Serial);
Serial.println("");
// else change the passed config
if(setting_name=="priColor") bruceConfig.setTheme(setting_value.toInt());
if(setting_name=="rot") bruceConfig.setRotation(setting_value.toInt());
if(setting_name=="dimmerSet") bruceConfig.setDimmer(setting_value.toInt());
if(setting_name=="bright") bruceConfig.setBright(setting_value.toInt());
if(setting_name=="tmz") bruceConfig.setTmz(setting_value.toInt());
if(setting_name=="soundEnabled") bruceConfig.setSoundEnabled(setting_value.toInt());
if(setting_name=="wifiAtStartup") bruceConfig.setWifiAtStartup(setting_value.toInt());
if(setting_name=="webUI") {
bruceConfig.setWebUICreds(
setting_value.substring(0, setting_value.indexOf(",")),
setting_value.substring(setting_value.indexOf(",")+1)
);
}
if(setting_name=="wifiAp") {
bruceConfig.setWifiApCreds(
setting_value.substring(0, setting_value.indexOf(",")),
setting_value.substring(setting_value.indexOf(",")+1)
);
}
if(setting_name=="wifi") {
bruceConfig.addWifiCredential(
setting_value.substring(0, setting_value.indexOf(",")),
setting_value.substring(setting_value.indexOf(",")+1)
);
}
if(setting_name=="irTx") bruceConfig.setIrTxPin(setting_value.toInt());
if(setting_name=="irRx") bruceConfig.setIrRxPin(setting_value.toInt());
if(setting_name=="rfTx") bruceConfig.setRfTxPin(setting_value.toInt());
if(setting_name=="rfRx") bruceConfig.setRfRxPin(setting_value.toInt());
if(setting_name=="rfModule") bruceConfig.setRfModule(static_cast<RFModules>(setting_value.toInt()));
if(setting_name=="rfFreq" && setting_value.toFloat()) bruceConfig.setRfFreq(setting_value.toFloat());
if(setting_name=="rfFxdFreq") bruceConfig.setRfFxdFreq(setting_value.toInt());
if(setting_name=="rfScanRange") bruceConfig.setRfScanRange(setting_value.toInt());
if(setting_name=="rfidModule") bruceConfig.setRfidModule(static_cast<RFIDModules>(setting_value.toInt()));
if(setting_name=="wigleBasicToken") bruceConfig.setWigleBasicToken(setting_value);
if(setting_name=="devMode") bruceConfig.setDevMode(setting_value.toInt());
return true;
}

Expand Down
3 changes: 1 addition & 2 deletions src/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,6 @@ struct tm* timeInfo;
ESP32Time rtc;
bool clock_set = false;
#endif
JsonDocument settings;

std::vector<Option> options;
const int bufSize = 1024;
Expand Down Expand Up @@ -411,7 +410,7 @@ void loop() {

if(!wifiConnected) {
Serial.println("wifiConnect");
wifiApConnect(); // TODO: read mode from settings file
wifiApConnect(); // TODO: read mode from config file
}
Serial.println("startWebUi");
startWebUi(true); // MEMO: will quit when checkEscPress
Expand Down
Loading

0 comments on commit 285571e

Please sign in to comment.