ESPHome 2025.9.0-dev
Loading...
Searching...
No Matches
ota_backend.h
Go to the documentation of this file.
1#pragma once
2
6
7#ifdef USE_OTA_STATE_CALLBACK
9#endif
10
11namespace esphome {
12namespace ota {
13
42
50
52 public:
53 virtual ~OTABackend() = default;
54 virtual OTAResponseTypes begin(size_t image_size) = 0;
55 virtual void set_update_md5(const char *md5) = 0;
56 virtual OTAResponseTypes write(uint8_t *data, size_t len) = 0;
57 virtual OTAResponseTypes end() = 0;
58 virtual void abort() = 0;
59 virtual bool supports_compression() = 0;
60};
61
62class OTAComponent : public Component {
63#ifdef USE_OTA_STATE_CALLBACK
64 public:
65 void add_on_state_callback(std::function<void(ota::OTAState, float, uint8_t)> &&callback) {
66 this->state_callback_.add(std::move(callback));
67 }
68
69 protected:
74 class StateCallbackManager : public CallbackManager<void(OTAState, float, uint8_t)> {
75 public:
76 StateCallbackManager(OTAComponent *component) : component_(component) {}
77
83 void call_deferred(ota::OTAState state, float progress, uint8_t error) {
84 component_->defer([this, state, progress, error]() { this->call(state, progress, error); });
85 }
86
87 private:
88 OTAComponent *component_;
89 };
90
92#endif
93};
94
95#ifdef USE_OTA_STATE_CALLBACK
97 public:
98 void register_ota(OTAComponent *ota_caller) {
99 ota_caller->add_on_state_callback([this, ota_caller](OTAState state, float progress, uint8_t error) {
100 this->state_callback_.call(state, progress, error, ota_caller);
101 });
102 }
103 void add_on_state_callback(std::function<void(OTAState, float, uint8_t, OTAComponent *)> &&callback) {
104 this->state_callback_.add(std::move(callback));
105 }
106
107 protected:
109};
110
111OTAGlobalCallback *get_global_ota_callback();
112void register_ota_platform(OTAComponent *ota_caller);
113
114// OTA implementations should use:
115// - state_callback_.call() when already in main loop (e.g., esphome OTA)
116// - state_callback_.call_deferred() when in separate task (e.g., web_server OTA)
117// This ensures proper callback execution in all contexts.
118#endif
119std::unique_ptr<ota::OTABackend> make_ota_backend();
120
121} // namespace ota
122} // namespace esphome
void defer(const std::string &name, std::function< void()> &&f)
Defer a callback to the next loop() call.
virtual OTAResponseTypes end()=0
virtual OTAResponseTypes begin(size_t image_size)=0
virtual ~OTABackend()=default
virtual void abort()=0
virtual bool supports_compression()=0
virtual OTAResponseTypes write(uint8_t *data, size_t len)=0
virtual void set_update_md5(const char *md5)=0
Extended callback manager with deferred call support.
Definition ota_backend.h:74
void call_deferred(ota::OTAState state, float progress, uint8_t error)
Call callbacks with deferral to main loop (for thread safety).
Definition ota_backend.h:83
void add_on_state_callback(std::function< void(ota::OTAState, float, uint8_t)> &&callback)
Definition ota_backend.h:65
StateCallbackManager state_callback_
Definition ota_backend.h:91
void register_ota(OTAComponent *ota_caller)
Definition ota_backend.h:98
void add_on_state_callback(std::function< void(OTAState, float, uint8_t, OTAComponent *)> &&callback)
CallbackManager< void(OTAState, float, uint8_t, OTAComponent *)> state_callback_
bool state
Definition fan.h:0
void register_ota_platform(OTAComponent *ota_caller)
OTAGlobalCallback * get_global_ota_callback()
std::unique_ptr< ota::OTABackend > make_ota_backend()
@ OTA_RESPONSE_ERROR_MD5_MISMATCH
Definition ota_backend.h:38
@ OTA_RESPONSE_ERROR_ESP32_NOT_ENOUGH_SPACE
Definition ota_backend.h:36
@ OTA_RESPONSE_UPDATE_PREPARE_OK
Definition ota_backend.h:20
@ OTA_RESPONSE_ERROR_WRONG_NEW_FLASH_CONFIG
Definition ota_backend.h:34
@ OTA_RESPONSE_SUPPORTS_COMPRESSION
Definition ota_backend.h:24
@ OTA_RESPONSE_ERROR_WRONG_CURRENT_FLASH_CONFIG
Definition ota_backend.h:33
@ OTA_RESPONSE_BIN_MD5_OK
Definition ota_backend.h:21
@ OTA_RESPONSE_UPDATE_END_OK
Definition ota_backend.h:23
@ OTA_RESPONSE_RECEIVE_OK
Definition ota_backend.h:22
@ OTA_RESPONSE_CHUNK_OK
Definition ota_backend.h:25
@ OTA_RESPONSE_ERROR_WRITING_FLASH
Definition ota_backend.h:30
@ OTA_RESPONSE_ERROR_ESP8266_NOT_ENOUGH_SPACE
Definition ota_backend.h:35
@ OTA_RESPONSE_ERROR_UPDATE_END
Definition ota_backend.h:31
@ OTA_RESPONSE_ERROR_AUTH_INVALID
Definition ota_backend.h:29
@ OTA_RESPONSE_ERROR_RP2040_NOT_ENOUGH_SPACE
Definition ota_backend.h:39
@ OTA_RESPONSE_ERROR_UNKNOWN
Definition ota_backend.h:40
@ OTA_RESPONSE_ERROR_NO_UPDATE_PARTITION
Definition ota_backend.h:37
@ OTA_RESPONSE_ERROR_MAGIC
Definition ota_backend.h:27
@ OTA_RESPONSE_ERROR_UPDATE_PREPARE
Definition ota_backend.h:28
@ OTA_RESPONSE_HEADER_OK
Definition ota_backend.h:18
@ OTA_RESPONSE_REQUEST_AUTH
Definition ota_backend.h:16
@ OTA_RESPONSE_ERROR_INVALID_BOOTSTRAPPING
Definition ota_backend.h:32
Providing packet encoding functions for exchanging data with a remote host.
Definition a01nyub.cpp:7
std::string size_t len
Definition helpers.h:279