ESPHome 2025.12.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 {
17namespace openthread {
18
19class InstanceLock;
20
22 public:
25 void dump_config() override;
26 void setup() override;
27 bool teardown() override;
28 float get_setup_priority() const override { return setup_priority::WIFI; }
29
30 bool is_connected();
32 std::optional<otIp6Address> get_omr_address();
33 void ot_main();
34 void on_factory_reset(std::function<void()> callback);
36
37 const char *get_use_address() const;
38 void set_use_address(const char *use_address);
39#if CONFIG_OPENTHREAD_MTD
40 void set_poll_period(uint32_t poll_period) { this->poll_period = poll_period; }
41#endif
42
43 protected:
44 std::optional<otIp6Address> get_omr_address_(InstanceLock &lock);
45 bool teardown_started_{false};
46 bool teardown_complete_{false};
47 std::function<void()> factory_reset_external_callback_;
48
49 private:
50 // Stores a pointer to a string literal (static storage duration).
51 // ONLY set from Python-generated code with string literals - never dynamic strings.
52 const char *use_address_{""};
53#if CONFIG_OPENTHREAD_MTD
54 uint32_t poll_period{0};
55#endif
56};
57
58extern OpenThreadComponent *global_openthread_component; // NOLINT(cppcoreguidelines-avoid-non-const-global-variables)
59
61 public:
63 // This has to run after the mdns component or else no services are available to advertise
64 float get_setup_priority() const override { return this->mdns_->get_setup_priority() - 1.0; }
65 void setup() override;
66 static void srp_callback(otError err, const otSrpClientHostInfo *host_info, const otSrpClientService *services,
67 const otSrpClientService *removed_services, void *context);
68 static void srp_start_callback(const otSockAddr *server_socket_address, void *context);
69 static void srp_factory_reset_callback(otError err, const otSrpClientHostInfo *host_info,
70 const otSrpClientService *services, const otSrpClientService *removed_services,
71 void *context);
72
73 protected:
75 std::vector<std::unique_ptr<uint8_t[]>> memory_pool_;
76 void *pool_alloc_(size_t size);
77};
78
80 public:
81 static std::optional<InstanceLock> try_acquire(int delay);
82 static InstanceLock acquire();
84
85 // Returns the global openthread instance guarded by this lock
86 otInstance *get_instance();
87
88 private:
89 // Use a private constructor in order to force thehandling
90 // of acquisition failure
91 InstanceLock() {}
92};
93
94} // namespace openthread
95} // namespace esphome
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:40
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:47
std::optional< otIp6Address > get_omr_address()
float get_setup_priority() const override
Definition openthread.h:28
void on_factory_reset(std::function< void()> callback)
std::vector< std::unique_ptr< uint8_t[]> > memory_pool_
Definition openthread.h:75
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:64
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:74
std::array< IPAddress, 5 > IPAddresses
Definition ip_address.h:144
OpenThreadComponent * global_openthread_component
Providing packet encoding functions for exchanging data with a remote host.
Definition a01nyub.cpp:7
void IRAM_ATTR HOT delay(uint32_t ms)
Definition core.cpp:31