mirror of
				https://github.com/esphome/esphome.git
				synced 2025-11-04 09:01:49 +00: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:
		@@ -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)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user