ESPHome 2026.1.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
42 protected:
43 std::optional<otIp6Address> get_omr_address_(InstanceLock &lock);
44 bool teardown_started_{false};
45 bool teardown_complete_{false};
46 std::function<void()> factory_reset_external_callback_;
47
48 private:
49 // Stores a pointer to a string literal (static storage duration).
50 // ONLY set from Python-generated code with string literals - never dynamic strings.
51 const char *use_address_{""};
52#if CONFIG_OPENTHREAD_MTD
53 uint32_t poll_period{0};
54#endif
55};
56
57extern OpenThreadComponent *global_openthread_component; // NOLINT(cppcoreguidelines-avoid-non-const-global-variables)
58
60 public:
62 // This has to run after the mdns component or else no services are available to advertise
63 float get_setup_priority() const override { return this->mdns_->get_setup_priority() - 1.0; }
64 void setup() override;
65 static void srp_callback(otError err, const otSrpClientHostInfo *host_info, const otSrpClientService *services,
66 const otSrpClientService *removed_services, void *context);
67 static void srp_start_callback(const otSockAddr *server_socket_address, void *context);
68 static void srp_factory_reset_callback(otError err, const otSrpClientHostInfo *host_info,
69 const otSrpClientService *services, const otSrpClientService *removed_services,
70 void *context);
71
72 protected:
74 std::vector<std::unique_ptr<uint8_t[]>> memory_pool_;
75 void *pool_alloc_(size_t size);
76};
77
79 public:
80 static std::optional<InstanceLock> try_acquire(int delay);
81 static InstanceLock acquire();
83
84 // Returns the global openthread instance guarded by this lock
85 otInstance *get_instance();
86
87 private:
88 // Use a private constructor in order to force thehandling
89 // of acquisition failure
90 InstanceLock() {}
91};
92
93} // namespace esphome::openthread
94#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::function< void()> factory_reset_external_callback_
Definition openthread.h:46
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:74
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:63
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:73
std::array< IPAddress, 5 > IPAddresses
Definition ip_address.h:158
OpenThreadComponent * global_openthread_component
void IRAM_ATTR HOT delay(uint32_t ms)
Definition core.cpp:26