ESPHome 2026.3.0-dev
Loading...
Searching...
No Matches
openthread.h
Go to the documentation of this file.
1#pragma once
3#ifdef USE_OPENTHREAD
4
8
9#include <openthread/srp_client.h>
10#include <openthread/srp_client_buffers.h>
11#include <openthread/thread.h>
12
13#include <optional>
14#include <vector>
15
16namespace esphome::openthread {
17
18class InstanceLock;
19
21 public:
24 void dump_config() override;
25 void setup() override;
26 bool teardown() override;
27 float get_setup_priority() const override { return setup_priority::WIFI; }
28
29 bool is_connected();
31 std::optional<otIp6Address> get_omr_address();
32 void ot_main();
33 void on_factory_reset(std::function<void()> callback);
35
36 const char *get_use_address() const;
37 void set_use_address(const char *use_address);
38#if CONFIG_OPENTHREAD_MTD
39 void set_poll_period(uint32_t poll_period) { this->poll_period_ = poll_period; }
40#endif
41 void set_output_power(int8_t output_power) { this->output_power_ = output_power; }
42
43 protected:
44 std::optional<otIp6Address> get_omr_address_(InstanceLock &lock);
45 std::function<void()> factory_reset_external_callback_;
46#if CONFIG_OPENTHREAD_MTD
47 uint32_t poll_period_{0};
48#endif
49 std::optional<int8_t> output_power_{};
50 bool teardown_started_{false};
51 bool teardown_complete_{false};
52
53 private:
54 // Stores a pointer to a string literal (static storage duration).
55 // ONLY set from Python-generated code with string literals - never dynamic strings.
56 const char *use_address_{""};
57};
58
59extern OpenThreadComponent *global_openthread_component; // NOLINT(cppcoreguidelines-avoid-non-const-global-variables)
60
62 public:
64 // This has to run after the mdns component or else no services are available to advertise
65 float get_setup_priority() const override { return this->mdns_->get_setup_priority() - 1.0; }
66 void setup() override;
67 static void srp_callback(otError err, const otSrpClientHostInfo *host_info, const otSrpClientService *services,
68 const otSrpClientService *removed_services, void *context);
69 static void srp_start_callback(const otSockAddr *server_socket_address, void *context);
70 static void srp_factory_reset_callback(otError err, const otSrpClientHostInfo *host_info,
71 const otSrpClientService *services, const otSrpClientService *removed_services,
72 void *context);
73
74 protected:
76 std::vector<std::unique_ptr<uint8_t[]>> memory_pool_;
77 void *pool_alloc_(size_t size);
78};
79
81 public:
82 static std::optional<InstanceLock> try_acquire(int delay);
83 static InstanceLock acquire();
85
86 // Returns the global openthread instance guarded by this lock
87 otInstance *get_instance();
88
89 private:
90 // Use a private constructor in order to force thehandling
91 // of acquisition failure
92 InstanceLock() {}
93};
94
95} // namespace esphome::openthread
96#endif
float get_setup_priority() const override
static std::optional< InstanceLock > try_acquire(int delay)
void set_poll_period(uint32_t poll_period)
Definition openthread.h:39
void set_use_address(const char *use_address)
std::optional< otIp6Address > get_omr_address_(InstanceLock &lock)
std::optional< int8_t > output_power_
Definition openthread.h:49
std::function< void()> factory_reset_external_callback_
Definition openthread.h:45
void set_output_power(int8_t output_power)
Definition openthread.h:41
std::optional< otIp6Address > get_omr_address()
float get_setup_priority() const override
Definition openthread.h:27
void on_factory_reset(std::function< void()> callback)
std::vector< std::unique_ptr< uint8_t[]> > memory_pool_
Definition openthread.h:76
static void srp_start_callback(const otSockAddr *server_socket_address, void *context)
void set_mdns(esphome::mdns::MDNSComponent *mdns)
static void srp_factory_reset_callback(otError err, const otSrpClientHostInfo *host_info, const otSrpClientService *services, const otSrpClientService *removed_services, void *context)
float get_setup_priority() const override
Definition openthread.h:65
static void srp_callback(otError err, const otSrpClientHostInfo *host_info, const otSrpClientService *services, const otSrpClientService *removed_services, void *context)
esphome::mdns::MDNSComponent * mdns_
Definition openthread.h:75
std::array< IPAddress, 5 > IPAddresses
Definition ip_address.h:187
OpenThreadComponent * global_openthread_component
constexpr float WIFI
Definition component.h:36
size_t size
Definition helpers.h:854
void HOT delay(uint32_t ms)
Definition core.cpp:27