Configuration (Settings) file

This commit is contained in:
Philip Johansson 2020-04-05 19:39:49 +02:00
parent 8bc7a5242f
commit 7ad64c2e51
8 changed files with 105 additions and 17 deletions

View File

@ -13,6 +13,7 @@ BreakBeforeBraces: Custom
BraceWrapping:
BeforeCatch: true
BeforeElse: true
PointerAlignment: Left
AlwaysBreakAfterReturnType: None
PenaltyReturnTypeOnItsOwnLine: 1000000

1
.gitignore vendored
View File

@ -3,3 +3,4 @@
.vscode/c_cpp_properties.json
.vscode/launch.json
.vscode/ipch
include/settings.h

27
.vscode/settings.json vendored
View File

@ -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"
}
}

View File

@ -1,13 +1,17 @@
#include <Arduino.h>
#include <EEPROM.h>
#include <array>
#define EEPROM_SIZE 64
class Config {
public:
typedef struct {
char wifiSSID[16];
char wifiPass[16];
typedef struct Data {
std::array<char, 16> wifiSSID;
std::array<char, 16> wifiPass;
Data &operator=(const Data &);
} Data;
Config(){};
@ -24,6 +28,11 @@ public:
const Data &data();
void printConfig();
private:
Data _data;
};
};
bool operator==(const Config::Data &a, const Config::Data &b);
bool operator!=(const Config::Data &a, const Config::Data &b);

12
include/settings.h Normal file
View File

@ -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";

12
include/settings.h.orig Normal file
View File

@ -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";

View File

@ -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);
}

View File

@ -1,10 +1,12 @@
#include <Arduino.h>
#include <WiFi.h>
// Project includes
#include "OSCRemote.h"
#include "Vbat.h"
#include "body.h"
#include "config.h"
#include "settings.h"
#include <memory>
@ -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();
}