diff --git a/.clang-format b/.clang-format index 3ff2e02..ee25571 100644 --- a/.clang-format +++ b/.clang-format @@ -13,6 +13,7 @@ BreakBeforeBraces: Custom BraceWrapping: BeforeCatch: true BeforeElse: true +PointerAlignment: Left AlwaysBreakAfterReturnType: None PenaltyReturnTypeOnItsOwnLine: 1000000 diff --git a/.gitignore b/.gitignore index 89cc49c..9c8339a 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ .vscode/c_cpp_properties.json .vscode/launch.json .vscode/ipch +include/settings.h \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index 8509a12..ebed8bc 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -18,6 +18,31 @@ "ostream": "cpp", "sstream": "cpp", "streambuf": "cpp", - "utility": "cpp" + "utility": "cpp", + "cctype": "cpp", + "clocale": "cpp", + "cmath": "cpp", + "cstdarg": "cpp", + "cstddef": "cpp", + "cstdint": "cpp", + "cstdio": "cpp", + "cstdlib": "cpp", + "cstring": "cpp", + "ctime": "cpp", + "cwchar": "cpp", + "cwctype": "cpp", + "list": "cpp", + "exception": "cpp", + "functional": "cpp", + "system_error": "cpp", + "tuple": "cpp", + "type_traits": "cpp", + "iomanip": "cpp", + "limits": "cpp", + "new": "cpp", + "numeric": "cpp", + "stdexcept": "cpp", + "cinttypes": "cpp", + "typeinfo": "cpp" } } \ No newline at end of file diff --git a/include/config.h b/include/config.h index b394442..722dce1 100644 --- a/include/config.h +++ b/include/config.h @@ -1,13 +1,17 @@ #include #include +#include + #define EEPROM_SIZE 64 class Config { public: - typedef struct { - char wifiSSID[16]; - char wifiPass[16]; + typedef struct Data { + std::array wifiSSID; + std::array wifiPass; + + Data &operator=(const Data &); } Data; Config(){}; @@ -24,6 +28,11 @@ public: const Data &data(); + void printConfig(); + private: Data _data; -}; \ No newline at end of file +}; + +bool operator==(const Config::Data &a, const Config::Data &b); +bool operator!=(const Config::Data &a, const Config::Data &b); diff --git a/include/settings.h b/include/settings.h new file mode 100644 index 0000000..75a2c95 --- /dev/null +++ b/include/settings.h @@ -0,0 +1,12 @@ +/***************************************************** + * Configurations: * + * * + * Copy or renamed this file to "settings.h" * + * and edit it to your needs * + * * + * The settings will be stored to the controller if * + * different from the previous/current configuration * + ****************************************************/ + +const char* wifiSSID = "mySSID"; +const char* wifiPass = "myPass"; \ No newline at end of file diff --git a/include/settings.h.orig b/include/settings.h.orig new file mode 100644 index 0000000..75a2c95 --- /dev/null +++ b/include/settings.h.orig @@ -0,0 +1,12 @@ +/***************************************************** + * Configurations: * + * * + * Copy or renamed this file to "settings.h" * + * and edit it to your needs * + * * + * The settings will be stored to the controller if * + * different from the previous/current configuration * + ****************************************************/ + +const char* wifiSSID = "mySSID"; +const char* wifiPass = "myPass"; \ No newline at end of file diff --git a/src/config.cpp b/src/config.cpp index a167859..da7e4d6 100644 --- a/src/config.cpp +++ b/src/config.cpp @@ -5,11 +5,11 @@ void Config::init() { } void Config::setSSID(String ssid) { - strcpy(_data.wifiSSID, ssid.c_str()); + strcpy(_data.wifiSSID.data(), ssid.c_str()); }; void Config::setWifiPass(String pass) { - strcpy(_data.wifiPass, pass.c_str()); + strcpy(_data.wifiPass.data(), pass.c_str()); }; void Config::load() { @@ -36,4 +36,22 @@ void Config::save(Config::Data &data) { const Config::Data &Config::data() { return _data; +} + +void Config::printConfig() { + Serial.printf("wifiSSID: %s\n", _data.wifiSSID.data()); + Serial.printf("wifiPass: %s\n", _data.wifiPass.data()); +} + +Config::Data &Config::Data::operator=(const Config::Data &other) { + this->wifiSSID = other.wifiSSID; + this->wifiPass = other.wifiPass; + return *this; +} + +bool operator==(const Config::Data &a, const Config::Data &b) { + return (a.wifiSSID == b.wifiSSID && a.wifiPass == b.wifiPass); +} +bool operator!=(const Config::Data &a, const Config::Data &b) { + return !(a == b); } \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index f2dea51..19516d6 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,10 +1,12 @@ #include #include +// Project includes #include "OSCRemote.h" #include "Vbat.h" #include "body.h" #include "config.h" +#include "settings.h" #include @@ -25,8 +27,8 @@ void servoTest() { } void connectWiFi() { - Serial.printf("Connecting to %s\n", config.data().wifiSSID); - WiFi.begin(config.data().wifiSSID, config.data().wifiPass); + Serial.printf("Connecting to %s\n", config.data().wifiSSID.data()); + WiFi.begin(config.data().wifiSSID.data(), config.data().wifiPass.data()); WiFi.setHostname(hostname); while (WiFi.status() != WL_CONNECTED) { delay(500); @@ -59,6 +61,18 @@ void sweepLeg() { d++; } +void checkConfig() { + Config::Data compData; + strncpy(compData.wifiSSID.data(), wifiSSID, sizeof(compData.wifiSSID)); + strncpy(compData.wifiPass.data(), wifiPass, sizeof(compData.wifiPass)); + + if (config.data() != compData) { + Serial.println("New configuration loaded"); + config.save(compData); + config.printConfig(); + } +} + void setup() { Serial.begin(9600); @@ -69,19 +83,15 @@ void setup() { servoTest(); config.load(); - Serial.printf("SSID: %s\n", config.data().wifiSSID); - Serial.printf("pass: %s\n", config.data().wifiPass); + Serial.println("Current Flash Config:"); + Serial.printf("- WiFi SSID: %s\n", config.data().wifiSSID.data()); + Serial.printf("- WiFi pass: %s\n", config.data().wifiPass.data()); + checkConfig(); connectWiFi(); remote.reset(new OSCRemote(vbat)); remote->registerCallback(testRemoteCallback); // remote->init(); - // Only to save as a test - /* - config.setSSID("testSSID"); - config.setWifiPass("testPass"); - config.save(); - */ sweepLeg(); }