show restart needed after changing board profile. also no need to restart sensors.

This commit is contained in:
proddy
2025-11-20 14:24:40 +01:00
parent 8c61735579
commit b9d96620a4
2 changed files with 27 additions and 20 deletions

View File

@@ -196,24 +196,26 @@ StateUpdateResult WebSettings::update(JsonObject root, WebSettings & settings) {
System::load_board_profile(data, settings.board_profile.c_str());
}
int prev;
reset_flags();
// check if board profile has changed
if (org_board_profile != settings.board_profile) {
if (org_board_profile.isEmpty()) {
EMSESP::logger().info("Setting board profile to %s", settings.board_profile.c_str());
} else {
EMSESP::logger().info("Setting board profile to %s (was %s)", settings.board_profile.c_str(), org_board_profile.c_str());
}
add_flags(ChangeFlags::RESTART);
}
int prev;
reset_flags();
// pins
prev = settings.led_gpio;
settings.led_gpio = data[0];
check_flag(prev, settings.led_gpio, ChangeFlags::LED);
prev = settings.dallas_gpio;
settings.dallas_gpio = data[1];
check_flag(prev, settings.dallas_gpio, ChangeFlags::SENSOR);
check_flag(prev, settings.dallas_gpio, ChangeFlags::TEMPERATURE_SENSOR);
prev = settings.rx_gpio;
settings.rx_gpio = data[2];
check_flag(prev, settings.rx_gpio, ChangeFlags::RESTART);
@@ -269,7 +271,7 @@ StateUpdateResult WebSettings::update(JsonObject root, WebSettings & settings) {
// temperature sensor
prev = settings.dallas_parasite;
settings.dallas_parasite = root["dallas_parasite"] | EMSESP_DEFAULT_DALLAS_PARASITE;
check_flag(prev, settings.dallas_parasite, ChangeFlags::SENSOR);
check_flag(prev, settings.dallas_parasite, ChangeFlags::TEMPERATURE_SENSOR);
// shower
prev = settings.shower_timer;
@@ -296,7 +298,7 @@ StateUpdateResult WebSettings::update(JsonObject root, WebSettings & settings) {
// adc
prev = settings.analog_enabled;
settings.analog_enabled = root["analog_enabled"] | EMSESP_DEFAULT_ANALOG_ENABLED;
check_flag(prev, settings.analog_enabled, ChangeFlags::ADC);
check_flag(prev, settings.analog_enabled, ChangeFlags::ANALOG_SENSOR);
//
// these need system restarts first before settings are activated...
@@ -400,11 +402,17 @@ StateUpdateResult WebSettings::update(JsonObject root, WebSettings & settings) {
// this is called after any of the settings have been persisted to the filesystem
// either via the Web UI or via the Console
void WebSettingsService::onUpdate() {
// skip if we're restarting anyway
if (WebSettings::has_flags(WebSettings::ChangeFlags::RESTART)) {
return;
}
if (WebSettings::has_flags(WebSettings::ChangeFlags::SHOWER)) {
EMSESP::shower_.start();
}
if (WebSettings::has_flags(WebSettings::ChangeFlags::SENSOR)) {
if (WebSettings::has_flags(WebSettings::ChangeFlags::TEMPERATURE_SENSOR)) {
EMSESP::temperaturesensor_.start();
}
@@ -416,7 +424,7 @@ void WebSettingsService::onUpdate() {
EMSESP::system_.syslog_init(); // re-start (or stop)
}
if (WebSettings::has_flags(WebSettings::ChangeFlags::ADC)) {
if (WebSettings::has_flags(WebSettings::ChangeFlags::ANALOG_SENSOR)) {
EMSESP::analogsensor_.start();
}
@@ -453,7 +461,7 @@ void WebSettingsService::board_profile(AsyncWebServerRequest * request) {
auto * response = new AsyncJsonResponse(false);
JsonObject root = response->getRoot();
std::vector<int8_t> data; // led, dallas, rx, tx, button, phy_type, eth_power, eth_phy_addr, eth_clock_mode
std::vector<int8_t> data; // led, dallas, rx, tx, button, phy_type, eth_power, eth_phy_addr, eth_clock_mode, led_type
(void)System::load_board_profile(data, board_profile);
root["board_profile"] = board_profile;
root["led_gpio"] = data[0];

View File

@@ -90,17 +90,16 @@ class WebSettings {
enum ChangeFlags : uint8_t {
NONE = 0,
UART = (1 << 0), // 1
SYSLOG = (1 << 1), // 2
ADC = (1 << 2), // 4 - analog
SENSOR = (1 << 3), // 8
SHOWER = (1 << 4), // 16
LED = (1 << 5), // 32
BUTTON = (1 << 6), // 64
MQTT = (1 << 7), // 128
RESTART = 0xFF
NONE = 0,
UART = (1 << 0), // 1 - uart
SYSLOG = (1 << 1), // 2 - syslog
ANALOG_SENSOR = (1 << 2), // 4 - analog
TEMPERATURE_SENSOR = (1 << 3), // 8 - dallas sensor
SHOWER = (1 << 4), // 16 - shower timer and alert
LED = (1 << 5), // 32 - led
BUTTON = (1 << 6), // 64 - button
MQTT = (1 << 7), // 128 - mqtt
RESTART = 0xFF // 255 - restart request (all changes)
};
static void check_flag(int prev_v, int new_v, uint8_t flag) {