mirror of
https://github.com/esphome/esphome.git
synced 2024-11-24 16:08:10 +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
eacac78099
commit
c519c02de8
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.config_validation as cv
|
||||
from esphome.const import (
|
||||
|
@ -31,7 +32,9 @@ def to_code(config):
|
|||
yield cg.register_component(var, config)
|
||||
|
||||
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:
|
||||
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; }
|
||||
uint16_t OTAComponent::get_port() const { return this->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->safe_mode_start_time_ = millis();
|
||||
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.");
|
||||
|
||||
while (true) {
|
||||
App.loop();
|
||||
}
|
||||
return true;
|
||||
} else {
|
||||
// increment counter
|
||||
this->write_rtc_(this->safe_mode_rtc_value_ + 1);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
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.
|
||||
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 ==========
|
||||
// (In most use cases you won't need these)
|
||||
|
|
Loading…
Reference in a new issue