ESPHome 2025.10.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 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 protected:
37 std::optional<otIp6Address> get_omr_address_(InstanceLock &lock);
38 bool teardown_started_{false};
39 bool teardown_complete_{false};
40 std::function<void()> factory_reset_external_callback_;
41};
42
43extern OpenThreadComponent *global_openthread_component; // NOLINT(cppcoreguidelines-avoid-non-const-global-variables)
44
46 public:
48 // This has to run after the mdns component or else no services are available to advertise
49 float get_setup_priority() const override { return this->mdns_->get_setup_priority() - 1.0; }
50 void setup() override;
51 static void srp_callback(otError err, const otSrpClientHostInfo *host_info, const otSrpClientService *services,
52 const otSrpClientService *removed_services, void *context);
53 static void srp_start_callback(const otSockAddr *server_socket_address, void *context);
54 static void srp_factory_reset_callback(otError err, const otSrpClientHostInfo *host_info,
55 const otSrpClientService *services, const otSrpClientService *removed_services,
56 void *context);
57
58 protected:
60 std::vector<esphome::mdns::MDNSService> mdns_services_;
61 std::vector<std::unique_ptr<uint8_t[]>> memory_pool_;
62 void *pool_alloc_(size_t size);
63};
64
66 public:
67 static std::optional<InstanceLock> try_acquire(int delay);
68 static InstanceLock acquire();
70
71 // Returns the global openthread instance guarded by this lock
72 otInstance *get_instance();
73
74 private:
75 // Use a private constructor in order to force thehandling
76 // of acquisition failure
77 InstanceLock() {}
78};
79
80} // namespace openthread
81} // namespace esphome
82#endif
float get_setup_priority() const override
static std::optional< InstanceLock > try_acquire(int delay)
std::optional< otIp6Address > get_omr_address_(InstanceLock &lock)
std::function< void()> factory_reset_external_callback_
Definition openthread.h:40
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:61
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)
std::vector< esphome::mdns::MDNSService > mdns_services_
Definition openthread.h:60
float get_setup_priority() const override
Definition openthread.h:49
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:59
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:29