147 lines
3.7 KiB
C++
147 lines
3.7 KiB
C++
/*
|
|
* Stairs
|
|
* Copyright 2017 (c) Mark van Renswoude
|
|
*
|
|
* https://git.x2software.net/pub/Stairs
|
|
*/
|
|
#include "system.h"
|
|
#include <ArduinoJson.h>
|
|
#include <FS.h>
|
|
#include "../debug.h"
|
|
#include "../global.h"
|
|
#include "../config.h"
|
|
|
|
|
|
|
|
void SystemSettings::read()
|
|
{
|
|
_dln("SystemSettings :: opening file");
|
|
File settingsFile = SPIFFS.open(SystemSettingsFile, "r");
|
|
if (!settingsFile)
|
|
{
|
|
_dln("SystemSettings :: failed to open file");
|
|
return;
|
|
}
|
|
|
|
size_t size = settingsFile.size();
|
|
if (size > 1024)
|
|
{
|
|
_dln("SystemSettings :: file size is too large");
|
|
return;
|
|
}
|
|
|
|
if (size == 0)
|
|
{
|
|
_dln("SystemSettings :: zero size file");
|
|
return;
|
|
}
|
|
|
|
std::unique_ptr<char[]> buf(new char[size]);
|
|
settingsFile.readBytes(buf.get(), size);
|
|
|
|
_dln(buf.get());
|
|
|
|
if (fromJson(buf.get()))
|
|
_dln("SystemSettings :: read from file");
|
|
else
|
|
_dln("SystemSettings :: failed to parse file");
|
|
}
|
|
|
|
|
|
void SystemSettings::write()
|
|
{
|
|
_dln("SystemSettings :: opening file for writing");
|
|
File settingsFile = SPIFFS.open(SystemSettingsFile, "w");
|
|
if (!settingsFile)
|
|
{
|
|
_dln("SystemSettings:: failed to open file for writing");
|
|
return;
|
|
}
|
|
|
|
toJson(settingsFile);
|
|
_dln("SystemSettings:: written to file");
|
|
}
|
|
|
|
|
|
void SystemSettings::toJson(Print &print)
|
|
{
|
|
DynamicJsonBuffer jsonBuffer(JSON_OBJECT_SIZE(4) + JSON_OBJECT_SIZE(5));
|
|
|
|
JsonObject& root = jsonBuffer.createObject();
|
|
|
|
JsonObject& pins = root.createNestedObject("Pins");
|
|
pins["LEDAP"] = pinLEDAP();
|
|
pins["LEDSTA"] = pinLEDSTA();
|
|
pins["APButton"] = pinAPButton();
|
|
pins["PWMSDA"] = pinPWMDriverSDA();
|
|
pins["PWMSCL"] = pinPWMDriverSCL();
|
|
|
|
root["PWMAddress"] = pwmDriverAddress();
|
|
root["PWMFrequency"] = pwmDriverFrequency();
|
|
root["MapsAPIKey"] = mapsAPIKey();
|
|
|
|
root.printTo(print);
|
|
}
|
|
|
|
|
|
bool SystemSettings::fromJson(char* data)
|
|
{
|
|
return fromJson(data, nullptr);
|
|
}
|
|
|
|
bool SystemSettings::fromJson(char* data, bool* changed)
|
|
{
|
|
if (changed != nullptr)
|
|
*changed = false;
|
|
|
|
DynamicJsonBuffer jsonBuffer(JSON_OBJECT_SIZE(4) + JSON_OBJECT_SIZE(5) + 160);
|
|
JsonObject& root = jsonBuffer.parseObject(data);
|
|
|
|
if (!root.success())
|
|
return false;
|
|
|
|
JsonObject& pins = root["Pins"];
|
|
uint8_t jsonPinLEDAP = pins["LEDAP"];
|
|
uint8_t jsonPinLEDSTA = pins["LEDSTA"];
|
|
uint8_t jsonPinAPButton = pins["APButton"];
|
|
uint8_t jsonPinPWMDriverSDA = pins["PWMSDA"];
|
|
uint8_t jsonPinPWMDriverSCL = pins["PWMSCL"];
|
|
|
|
uint8_t jsonPWMDriverAddress = root["PWMAddress"];
|
|
uint16_t jsonPWMDriverFrequency = root["PWMFrequency"];
|
|
const char* jsonMapAPIKey = root["MapsAPIKey"];
|
|
|
|
if (jsonPinLEDAP == 0) jsonPinLEDAP = pinLEDAP();
|
|
if (jsonPinLEDSTA == 0) jsonPinLEDSTA = pinLEDSTA();
|
|
if (jsonPinAPButton == 0) jsonPinAPButton = pinAPButton();
|
|
if (jsonPinPWMDriverSDA == 0) jsonPinPWMDriverSDA = pinPWMDriverSDA();
|
|
if (jsonPinPWMDriverSCL == 0) jsonPinPWMDriverSCL = pinPWMDriverSCL();
|
|
|
|
if (jsonPWMDriverAddress == 0) jsonPWMDriverAddress = pwmDriverAddress();
|
|
if (jsonPWMDriverFrequency == 0) jsonPWMDriverFrequency = pwmDriverFrequency();
|
|
|
|
|
|
if ((jsonPinLEDAP != pinLEDAP()) ||
|
|
(jsonPinLEDSTA != pinLEDSTA()) ||
|
|
(jsonPinAPButton != pinAPButton()) ||
|
|
(jsonPinPWMDriverSDA != pinPWMDriverSDA()) ||
|
|
(jsonPinPWMDriverSCL != pinPWMDriverSCL()) ||
|
|
(jsonPWMDriverAddress != pwmDriverAddress()) ||
|
|
(jsonPWMDriverFrequency != pwmDriverFrequency()) ||
|
|
(jsonMapAPIKey != mapsAPIKey()))
|
|
{
|
|
pinLEDAP(jsonPinLEDAP);
|
|
pinLEDSTA(jsonPinLEDSTA);
|
|
pinAPButton(jsonPinAPButton);
|
|
pinPWMDriverSDA(jsonPinPWMDriverSDA);
|
|
pinPWMDriverSCL(jsonPinPWMDriverSCL);
|
|
pwmDriverAddress(jsonPWMDriverAddress);
|
|
pwmDriverFrequency(jsonPWMDriverFrequency);
|
|
mapsAPIKey(jsonMapAPIKey);
|
|
|
|
if (changed != nullptr)
|
|
*changed = true;
|
|
}
|
|
|
|
return true;
|
|
} |