mirror of
https://github.com/esphome/esphome.git
synced 2024-11-25 16:38:16 +01:00
Fix safe mode ota flashing under certain configurations (#1534)
* Fix safe mode ota flashing under certain configurations by allowing the arduino loop to run instead of while(true) * rename to should_enter_safe_mode * Fix line length
This commit is contained in:
parent
acc1af0f51
commit
6c8ace0ce8
3 changed files with 8 additions and 6 deletions
|
@ -1,3 +1,4 @@
|
||||||
|
from esphome.cpp_generator import RawExpression
|
||||||
import esphome.codegen as cg
|
import esphome.codegen as cg
|
||||||
import esphome.config_validation as cv
|
import esphome.config_validation as cv
|
||||||
from esphome.const import (
|
from esphome.const import (
|
||||||
|
@ -31,7 +32,9 @@ def to_code(config):
|
||||||
yield cg.register_component(var, config)
|
yield cg.register_component(var, config)
|
||||||
|
|
||||||
if config[CONF_SAFE_MODE]:
|
if config[CONF_SAFE_MODE]:
|
||||||
cg.add(var.start_safe_mode(config[CONF_NUM_ATTEMPTS], config[CONF_REBOOT_TIMEOUT]))
|
condition = var.should_enter_safe_mode(config[CONF_NUM_ATTEMPTS],
|
||||||
|
config[CONF_REBOOT_TIMEOUT])
|
||||||
|
cg.add(RawExpression(f"if ({condition}) return"))
|
||||||
|
|
||||||
if CORE.is_esp8266:
|
if CORE.is_esp8266:
|
||||||
cg.add_library('Update', None)
|
cg.add_library('Update', None)
|
||||||
|
|
|
@ -355,7 +355,7 @@ void OTAComponent::set_auth_password(const std::string &password) { this->passwo
|
||||||
float OTAComponent::get_setup_priority() const { return setup_priority::AFTER_WIFI; }
|
float OTAComponent::get_setup_priority() const { return setup_priority::AFTER_WIFI; }
|
||||||
uint16_t OTAComponent::get_port() const { return this->port_; }
|
uint16_t OTAComponent::get_port() const { return this->port_; }
|
||||||
void OTAComponent::set_port(uint16_t port) { this->port_ = port; }
|
void OTAComponent::set_port(uint16_t port) { this->port_ = port; }
|
||||||
void OTAComponent::start_safe_mode(uint8_t num_attempts, uint32_t enable_time) {
|
bool OTAComponent::should_enter_safe_mode(uint8_t num_attempts, uint32_t enable_time) {
|
||||||
this->has_safe_mode_ = true;
|
this->has_safe_mode_ = true;
|
||||||
this->safe_mode_start_time_ = millis();
|
this->safe_mode_start_time_ = millis();
|
||||||
this->safe_mode_enable_time_ = enable_time;
|
this->safe_mode_enable_time_ = enable_time;
|
||||||
|
@ -380,12 +380,11 @@ void OTAComponent::start_safe_mode(uint8_t num_attempts, uint32_t enable_time) {
|
||||||
|
|
||||||
ESP_LOGI(TAG, "Waiting for OTA attempt.");
|
ESP_LOGI(TAG, "Waiting for OTA attempt.");
|
||||||
|
|
||||||
while (true) {
|
return true;
|
||||||
App.loop();
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
// increment counter
|
// increment counter
|
||||||
this->write_rtc_(this->safe_mode_rtc_value_ + 1);
|
this->write_rtc_(this->safe_mode_rtc_value_ + 1);
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void OTAComponent::write_rtc_(uint32_t val) { this->rtc_.save(&val); }
|
void OTAComponent::write_rtc_(uint32_t val) { this->rtc_.save(&val); }
|
||||||
|
|
|
@ -47,7 +47,7 @@ class OTAComponent : public Component {
|
||||||
/// Manually set the port OTA should listen on.
|
/// Manually set the port OTA should listen on.
|
||||||
void set_port(uint16_t port);
|
void set_port(uint16_t port);
|
||||||
|
|
||||||
void start_safe_mode(uint8_t num_attempts, uint32_t enable_time);
|
bool should_enter_safe_mode(uint8_t num_attempts, uint32_t enable_time);
|
||||||
|
|
||||||
// ========== INTERNAL METHODS ==========
|
// ========== INTERNAL METHODS ==========
|
||||||
// (In most use cases you won't need these)
|
// (In most use cases you won't need these)
|
||||||
|
|
Loading…
Reference in a new issue