From 88cf05f9ae947a99f817c474d7d470f94803a090 Mon Sep 17 00:00:00 2001 From: Amal Abeygunawardana Date: Sun, 6 Dec 2020 17:37:34 +1100 Subject: [PATCH] Add config file read/write logic --- include/Configuration.h | 23 +++++++----- src/Configuration.cpp | 80 +++++++++++++++++++++++++++++++++++++---- 2 files changed, 87 insertions(+), 16 deletions(-) diff --git a/include/Configuration.h b/include/Configuration.h index 10a2d17..2eafd9b 100644 --- a/include/Configuration.h +++ b/include/Configuration.h @@ -1,21 +1,26 @@ #ifndef ARDUINO_H - #define ARDUINO_H - #include +#define ARDUINO_H +#include #endif +#include "FS.h" +#include "SPIFFS.h" struct Settings_t { - char* wifiSsid; - char* wifiPassword; - char* hostName; - char* tenantId; - char* userName; - char* password; - char* clientId; + char *wifiSsid; + char *wifiPassword; + char *hostName; + char *tenantId; + char *userName; + char *password; + char *clientId; }; class Configuration { +private: + Settings_t readFromFileSystem(fs::FS &fs); + void writeToFileSystem(fs::FS &fs, Settings_t settings); public: Settings_t getSettings(); }; diff --git a/src/Configuration.cpp b/src/Configuration.cpp index 09ccfde..820e5eb 100644 --- a/src/Configuration.cpp +++ b/src/Configuration.cpp @@ -2,18 +2,84 @@ #define CONFIGURATION_H #include "Configuration.h" #endif +#include #include "Credentials.h" +const char *CONFIG_FILE_NAME = "settings"; + Settings_t Configuration::getSettings() { Settings_t settings; - settings.wifiSsid = (char*)WIFI_SSID; - settings.wifiPassword = (char*)WIFI_PWD; - settings.hostName = (char*)C8Y_HOST; - settings.tenantId = (char*)C8Y_TENANT; - settings.userName = (char*)C8Y_USERNAME; - settings.password = (char*)C8Y_PASSWORD; - settings.clientId = (char*)C8Y_CLIENTID; + settings.wifiSsid = (char *)WIFI_SSID; + settings.wifiPassword = (char *)WIFI_PWD; + settings.hostName = (char *)C8Y_HOST; + settings.tenantId = (char *)C8Y_TENANT; + settings.userName = (char *)C8Y_USERNAME; + settings.password = (char *)C8Y_PASSWORD; + settings.clientId = (char *)C8Y_CLIENTID; + return settings; +} + +void Configuration::writeToFileSystem(fs::FS &fs, Settings_t settings) +{ + Serial.printf("Writing file: %s\r\n", CONFIG_FILE_NAME); + + File file = fs.open(CONFIG_FILE_NAME, FILE_WRITE); + if(!file){ + Serial.println("- failed to open file for writing"); + return; + } + + String message; + message += settings.wifiSsid + '\n'; + message += settings.wifiPassword + '\n'; + message += settings.hostName + '\n'; + message += settings.tenantId + '\n'; + message += settings.userName + '\n'; + message += settings.password + '\n'; + message += settings.clientId + '\n'; + + if(file.print(message)){ + Serial.println("- file written"); + } else { + Serial.println("- write failed"); + } + file.close(); +} + + +Settings_t Configuration::readFromFileSystem(fs::FS &fs) +{ + Serial.printf("Reading file: %s\r\n", CONFIG_FILE_NAME); + + char buffer[4096]; + + File file = fs.open(CONFIG_FILE_NAME, FILE_READ); + if (!file || file.isDirectory()) + { + Serial.println("- failed to read the file"); + throw(-1); + } + + int length = 0; + while (file.available()) + { + char c = file.read(); + buffer[length++] = c; + } + buffer[length] = '\0'; + + Settings_t settings; + settings.wifiSsid = strtok(buffer, "\n"); + settings.wifiPassword = strtok(NULL, "\n"); + settings.hostName = strtok(NULL, "\n"); + settings.tenantId = strtok(NULL, "\n"); + settings.userName = strtok(NULL, "\n"); + settings.password = strtok(NULL, "\n"); + settings.clientId = strtok(NULL, "\n"); + + file.close(); + return settings; } \ No newline at end of file