298 lines
10 KiB
C++
298 lines
10 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 "wiflash_configure.h"
|
|
#include "wiflash_pins.h"
|
|
#include <Preferences.h>
|
|
|
|
// ESP logging module
|
|
#include <esp_log.h>
|
|
static const char* TAG = "WiFlash_Configure";
|
|
|
|
|
|
namespace config {
|
|
|
|
/*
|
|
NVM preferances
|
|
*/
|
|
Preferences prefs_;
|
|
|
|
/*
|
|
settings struct
|
|
*/
|
|
settings_t settings;
|
|
|
|
|
|
/*
|
|
Load device configuration from NVM
|
|
*/
|
|
bool loadConfig() {
|
|
prefs_.begin("wiflash", false); // open RW;
|
|
ESP_LOGI(TAG, "Jump pin# %u to GROUND to reset settings.", pin_reset_button);
|
|
|
|
pinMode(pin_reset_button, INPUT_PULLUP);
|
|
if (prefs_.getBool("reset_on_reboot") ||
|
|
!digitalRead(pin_reset_button)) {
|
|
ESP_LOGI(TAG, "**Reset to default configuration**");
|
|
prefs_.clear();
|
|
}
|
|
|
|
ESP_LOGI(TAG, "It is safe to ignore errors from nvm_get_*");
|
|
|
|
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",
|
|
pin_default_strobe);
|
|
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",
|
|
pin_default_strip);
|
|
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) {
|
|
ESP_LOGD(TAG, "changing config: %s = $s", key, value);
|
|
size_t ret = 0;
|
|
if (key == "RESET_ON_REBOOT")
|
|
return prefs_.putBool("reset_on_reboot", (bool)value.toInt());
|
|
|
|
if (key == "CONFIG_WIFI_MODE") {
|
|
ret = prefs_.putUChar("wifi_mode", value.toInt());
|
|
if (ret > 0)
|
|
settings.mode = (wifi_mode_t)value.toInt();
|
|
return ret;
|
|
}
|
|
if (key == "CONFIG_WIFI_SSID") {
|
|
ret = prefs_.putString("ssid", value);
|
|
if (ret > 0)
|
|
settings.ssid = value;
|
|
return ret;
|
|
}
|
|
if (key == "CONFIG_WIFI_PASSWORD") {
|
|
ret = prefs_.putString("pwd", value);
|
|
if (ret > 0)
|
|
settings.pwd = value;
|
|
return ret;
|
|
}
|
|
if (key == "CONFIG_NETWORK_HOSTNAME") {
|
|
ret = prefs_.putString("hostname", value);
|
|
if (ret > 0)
|
|
settings.hostname = value;
|
|
return ret;
|
|
}
|
|
if (key == "CONFIG_NETWORK_DHCP") {
|
|
ret = prefs_.putBool("dhcp", value == "1");
|
|
if (ret > 0)
|
|
settings.dhcp = (bool)value.toInt();
|
|
return ret;
|
|
}
|
|
if (key == "CONFIG_NETWORK_IPV4") {
|
|
ret = prefs_.putString("ip", value);
|
|
if (ret > 0)
|
|
settings.ip = value;
|
|
return ret;
|
|
}
|
|
if (key == "CONFIG_NETWORK_MASK") {
|
|
ret = prefs_.putString("subnet", value);
|
|
if (ret > 0)
|
|
settings.subnet = value;
|
|
return ret;
|
|
}
|
|
if (key == "CONFIG_NETWORK_GATEWAY") {
|
|
ret = prefs_.putString("gateway", value);
|
|
if (ret > 0)
|
|
settings.gateway = value;
|
|
return ret;
|
|
}
|
|
if (key == "CONFIG_BUTTON_ENABLE") {
|
|
ret = prefs_.putBool("button_enable", value == "1");
|
|
if (ret > 0)
|
|
settings.button_enable = (bool)value.toInt();
|
|
return ret;
|
|
}
|
|
if (key == "CONFIG_BUTTON_PIN") {
|
|
ret = prefs_.putUChar("button_pin", value.toInt());
|
|
if (ret > 0)
|
|
settings.button_pin = value.toInt();
|
|
return ret;
|
|
}
|
|
if (key == "CONFIG_BUTTON_OSC_HOST") {
|
|
ret = prefs_.putString("osc_host", value);
|
|
if (ret > 0)
|
|
settings.osc_host = value;
|
|
return ret;
|
|
}
|
|
if (key == "CONFIG_BUTTON_OSC_PORT") {
|
|
ret = prefs_.putUShort("osc_port", value.toInt());
|
|
if (ret > 0)
|
|
settings.osc_port = value.toInt();
|
|
return ret;
|
|
}
|
|
if (key == "CONFIG_BUTTON_OSC_PRESSED_ADDR") {
|
|
ret = prefs_.putString("osc_pressed_addr", value);
|
|
if (ret > 0)
|
|
settings.osc_pressed_addr = value;
|
|
return ret;
|
|
}
|
|
if (key == "CONFIG_BUTTON_OSC_PRESSED_VALUE") {
|
|
ret = prefs_.putString("osc_pressed_value", value);
|
|
if (ret > 0)
|
|
settings.osc_pressed_value = value;
|
|
return ret;
|
|
}
|
|
if (key == "CONFIG_BUTTON_OSC_RELEASED_ADDR") {
|
|
ret = prefs_.putString("osc_released_addr", value);
|
|
if (ret > 0)
|
|
settings.osc_released_addr = value;
|
|
return ret;
|
|
}
|
|
if (key == "CONFIG_BUTTON_OSC_RELEASED_VALUE") {
|
|
ret = prefs_.putString("osc_released_value", value);
|
|
if (ret > 0)
|
|
settings.osc_released_value = value;
|
|
return ret;
|
|
}
|
|
if (key == "CONFIG_STROBE_ENABLE") {
|
|
ret = prefs_.putBool("strobe_enable", value == "1");
|
|
if (ret > 0)
|
|
settings.strobe_enable = (bool)value.toInt();
|
|
return ret;
|
|
}
|
|
if (key == "CONFIG_STROBE_PIN") {
|
|
ret = prefs_.putUChar("strobe_led_pin", value.toInt());
|
|
if (ret > 0)
|
|
settings.strobe_led_pin = value.toInt();
|
|
return ret;
|
|
}
|
|
if (key == "CONFIG_STROBE_UNIVERSE") {
|
|
ret = prefs_.putUShort("strobe_universe", value.toInt());
|
|
if (ret > 0)
|
|
settings.strobe_universe = value.toInt();
|
|
return ret;
|
|
}
|
|
if (key == "CONFIG_STROBE_ADDRESS") {
|
|
ret = prefs_.putUShort("strobe_address", value.toInt());
|
|
if (ret > 0)
|
|
settings.strobe_address = value.toInt();
|
|
return ret;
|
|
}
|
|
if (key == "CONFIG_STRIP_ENABLE") {
|
|
ret = prefs_.putBool("strip_enable", value == "1");
|
|
if (ret > 0)
|
|
settings.strip_enable = (bool)value.toInt();
|
|
return ret;
|
|
}
|
|
if (key == "CONFIG_STRIP_PIN") {
|
|
ret = prefs_.putUChar("strip_data_pin", value.toInt());
|
|
if (ret > 0)
|
|
settings.strip_data_pin = value.toInt();
|
|
return ret;
|
|
}
|
|
if (key == "CONFIG_STRIP_COUNT") {
|
|
ret = prefs_.putUShort("strip_led_count", value.toInt());
|
|
if (ret > 0)
|
|
settings.strip_led_count = value.toInt();
|
|
return ret;
|
|
}
|
|
if (key == "CONFIG_STRIP_UNIVERSE") {
|
|
ret = prefs_.putUShort("strip_universe", value.toInt());
|
|
if (ret > 0)
|
|
settings.strip_universe = value.toInt();
|
|
return ret;
|
|
}
|
|
if (key == "CONFIG_STRIP_ADDRESS") {
|
|
ret = prefs_.putUShort("strip_address", value.toInt());
|
|
if (ret > 0)
|
|
settings.strip_address = value.toInt();
|
|
return ret;
|
|
}
|
|
if (Serial)
|
|
ESP_LOGW(TAG, "Unable to change setting for %s", key);
|
|
return ret;
|
|
}
|
|
|
|
} // namespace config
|