172 lines
7.8 KiB
C++
172 lines
7.8 KiB
C++
/*
|
|
configure.cpp
|
|
|
|
Copyright (c) 2020 Kevin Matz (kevin.matz@gmail.com)
|
|
|
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
of this software and associated documentation files (the "Software"), to deal
|
|
in the Software without restriction, including without limitation the rights
|
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
copies of the Software, and to permit persons to whom the Software is
|
|
furnished to do so, subject to the following conditions:
|
|
|
|
The above copyright notice and this permission notice shall be included in all
|
|
copies or substantial portions of the Software.
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
SOFTWARE.
|
|
*/
|
|
|
|
#include "configure.h"
|
|
#include <Preferences.h>
|
|
|
|
|
|
namespace config {
|
|
|
|
/*
|
|
NVM preferances
|
|
*/
|
|
Preferences prefs_;
|
|
|
|
/*
|
|
settings struct
|
|
*/
|
|
settings_t settings_;
|
|
|
|
|
|
/*
|
|
Load device configuration from NVM
|
|
*/
|
|
bool loadConfig() {
|
|
prefs_.begin("wiflash", false); // open RW;
|
|
|
|
Serial.print("Jump pin ");
|
|
Serial.print(reset_button);
|
|
Serial.println(" to GROUND to reset settings.");
|
|
|
|
pinMode(reset_button, INPUT_PULLUP);
|
|
if (prefs_.getBool("reset_on_reboot") ||
|
|
!digitalRead(reset_button)) {
|
|
prefs_.clear();
|
|
}
|
|
|
|
settings_.ssid = prefs_.getString("ssid", "WiFlash");
|
|
settings_.pwd = prefs_.getString("pwd", "technologyismagic");
|
|
settings_.mode = (wifi_mode_t)prefs_.getUChar("wifi_mode", WIFI_AP);
|
|
settings_.hostname = prefs_.getString("hostname", "WiFlash");
|
|
|
|
settings_.dhcp = prefs_.getBool("dhcp", true);
|
|
settings_.ip = prefs_.getString("ip", "192.168.1.1");
|
|
settings_.subnet = prefs_.getString("subnet", "255.255.255.0");
|
|
settings_.gateway = prefs_.getString("gateway", "");
|
|
|
|
settings_.button_enable = prefs_.getBool("button_enable", true);
|
|
settings_.button_pin = prefs_.getUChar("butto_pin", A0); // A0, use 100nF to ground
|
|
|
|
settings_.osc_host = prefs_.getString("osc_host", "192.168.1.1");
|
|
settings_.osc_port = prefs_.getUShort("osc_port", 7001);
|
|
settings_.osc_pressed_addr = prefs_.getString("osc_pressed_addr", "/hog/playback/go/0");
|
|
settings_.osc_pressed_value = prefs_.getString("osc_pressed_value", "99.1");
|
|
settings_.osc_released_addr = prefs_.getString("osc_released_addr", "/hog/playback/go/0");
|
|
settings_.osc_released_value = prefs_.getString("osc_released_value", "99.2");
|
|
|
|
settings_.strobe_enable = prefs_.getBool("strobe_enable", true);
|
|
settings_.strobe_led_pin = prefs_.getUChar("strobe_led_pin", LED_BUILTIN); // IO13
|
|
settings_.strobe_universe = prefs_.getUShort("strobe_universe", 1);
|
|
settings_.strobe_address = prefs_.getUShort("strobe_address", 001);
|
|
|
|
settings_.strip_enable = prefs_.getBool("strip_enable", false);
|
|
settings_.strip_led_count = prefs_.getUShort("strip_led_count", 8); // not less than 4
|
|
settings_.strip_data_pin = prefs_.getUChar("strip_data_pin", 21);
|
|
settings_.strip_universe = prefs_.getUShort("strip_universe", 1);
|
|
settings_.strip_address = prefs_.getUShort("strip_address", 001);
|
|
|
|
return true;
|
|
}
|
|
|
|
/*
|
|
setting as a String
|
|
*/
|
|
String getString(const String& key) {
|
|
if (key == "CONFIG_WIFI_MODE") return String(settings_.mode);
|
|
if (key == "CONFIG_WIFI_SSID") return settings_.ssid;
|
|
if (key == "CONFIG_WIFI_PASSWORD") return settings_.pwd;
|
|
if (key == "CONFIG_NETWORK_HOSTNAME") return settings_.hostname;
|
|
if (key == "CONFIG_NETWORK_DHCP") return String(settings_.dhcp);
|
|
if (key == "CONFIG_NETWORK_IPV4") return settings_.ip;
|
|
if (key == "CONFIG_NETWORK_MASK") return settings_.subnet;
|
|
if (key == "CONFIG_NETWORK_GATEWAY") return settings_.gateway;
|
|
if (key == "CONFIG_BUTTON_ENABLE") return String(settings_.button_enable);
|
|
if (key == "CONFIG_BUTTON_PIN") return String(settings_.button_pin);
|
|
if (key == "CONFIG_BUTTON_OSC_HOST") return settings_.osc_host;
|
|
if (key == "CONFIG_BUTTON_OSC_PORT") return String(settings_.osc_port);
|
|
if (key == "CONFIG_BUTTON_OSC_PRESSED_ADDR") return settings_.osc_pressed_addr;
|
|
if (key == "CONFIG_BUTTON_OSC_PRESSED_VALUE") return settings_.osc_pressed_value;
|
|
if (key == "CONFIG_BUTTON_OSC_RELEASED_ADDR") return settings_.osc_released_addr;
|
|
if (key == "CONFIG_BUTTON_OSC_RELEASED_VALUE") return settings_.osc_released_value;
|
|
if (key == "CONFIG_STROBE_ENABLE") return String(settings_.strobe_enable);
|
|
if (key == "CONFIG_STROBE_PIN") return String(settings_.strobe_led_pin);
|
|
if (key == "CONFIG_STROBE_UNIVERSE") return String(settings_.strobe_universe);
|
|
if (key == "CONFIG_STROBE_ADDRESS") return String(settings_.strobe_address);
|
|
if (key == "CONFIG_STRIP_ENABLE") return String(settings_.strip_enable);
|
|
if (key == "CONFIG_STRIP_PIN") return String(settings_.strip_data_pin);
|
|
if (key == "CONFIG_STRIP_COUNT") return String(settings_.strip_led_count);
|
|
if (key == "CONFIG_STRIP_UNIVERSE") return String(settings_.strip_universe);
|
|
if (key == "CONFIG_STRIP_ADDRESS") return String(settings_.strip_address);
|
|
|
|
return String();
|
|
}
|
|
|
|
|
|
/*
|
|
change a setting in NVM
|
|
*/
|
|
size_t set (const String& key, const String& value) {
|
|
Serial.print("changing config: ");
|
|
Serial.print(key);
|
|
Serial.print(" = ");
|
|
Serial.println(value);
|
|
if (key == "CONFIG_WIFI_MODE") return prefs_.putUChar("mode", value.toInt());
|
|
if (key == "CONFIG_WIFI_SSID") return prefs_.putString("ssid", value);
|
|
if (key == "CONFIG_WIFI_PASSWORD") return prefs_.putString("pwd", value);
|
|
if (key == "CONFIG_NETWORK_HOSTNAME") return prefs_.putString("hostname", value);
|
|
if (key == "CONFIG_NETWORK_DHCP") return prefs_.putBool("dhcp", value == "1");
|
|
if (key == "CONFIG_NETWORK_IPV4") return prefs_.putString("ip", value);
|
|
if (key == "CONFIG_NETWORK_MASK") return prefs_.putString("subnet", value);
|
|
if (key == "CONFIG_NETWORK_GATEWAY") return prefs_.putString("gateway", value);
|
|
if (key == "CONFIG_BUTTON_ENABLE") return prefs_.putBool("button_enable", value == "1");
|
|
if (key == "CONFIG_BUTTON_PIN") return prefs_.putUChar("button_pin", value.toInt());
|
|
if (key == "CONFIG_BUTTON_OSC_HOST") return prefs_.putString("osc_host", value);
|
|
if (key == "CONFIG_BUTTON_OSC_PORT") return prefs_.putUShort("osc_port", value.toInt());
|
|
if (key == "CONFIG_BUTTON_OSC_PRESSED_ADDR") return prefs_.putString("osc_pressed_addr", value);
|
|
if (key == "CONFIG_BUTTON_OSC_PRESSED_VALUE") return prefs_.putString("osc_pressed_value", value);
|
|
if (key == "CONFIG_BUTTON_OSC_RELEASED_ADDR") return prefs_.putString("osc_released_addr", value);
|
|
if (key == "CONFIG_BUTTON_OSC_RELEASED_VALUE") return prefs_.putString("osc_released_value", value);
|
|
if (key == "CONFIG_STROBE_ENABLE") return prefs_.putBool("strobe_enable", value == "1");
|
|
if (key == "CONFIG_STROBE_PIN") return prefs_.putUChar("strobe_led_pin", value.toInt());
|
|
if (key == "CONFIG_STROBE_UNIVERSE") return prefs_.putUShort("strobe_universe", value.toInt());
|
|
if (key == "CONFIG_STROBE_ADDRESS") return prefs_.putUShort("strobe_address", value.toInt());
|
|
if (key == "CONFIG_STRIP_ENABLE") return prefs_.putBool("strip_enable", value == "1");
|
|
if (key == "CONFIG_STRIP_PIN") return prefs_.putUChar("strip_data_pin", value.toInt());
|
|
if (key == "CONFIG_STRIP_COUNT") return prefs_.putUShort("strip_led_count", value.toInt());
|
|
if (key == "CONFIG_STRIP_UNIVERSE") return prefs_.putUShort("strip_universe", value.toInt());
|
|
if (key == "CONFIG_STRIP_ADDRESS") return prefs_.putUShort("strip_address", value.toInt());
|
|
return 0;
|
|
}
|
|
|
|
|
|
/*
|
|
access settings struct
|
|
*/
|
|
const settings_t settings() {
|
|
return settings_;
|
|
}
|
|
|
|
|
|
} // namespace config
|