ESPHome 2025.5.0
Loading...
Searching...
No Matches
udp_component.h
Go to the documentation of this file.
1#pragma once
2
4#ifdef USE_NETWORK
6#if defined(USE_SOCKET_IMPL_BSD_SOCKETS) || defined(USE_SOCKET_IMPL_LWIP_SOCKETS)
8#endif
9#ifdef USE_SOCKET_IMPL_LWIP_TCP
10#include <WiFiUdp.h>
11#endif
12#include <vector>
13
14namespace esphome {
15namespace udp {
16
17static const size_t MAX_PACKET_SIZE = 508;
18class UDPComponent : public Component {
19 public:
20 void add_address(const char *addr) { this->addresses_.emplace_back(addr); }
21 void set_listen_address(const char *listen_addr) { this->listen_address_ = network::IPAddress(listen_addr); }
22 void set_listen_port(uint16_t port) { this->listen_port_ = port; }
23 void set_broadcast_port(uint16_t port) { this->broadcast_port_ = port; }
24 void set_should_broadcast() { this->should_broadcast_ = true; }
25 void set_should_listen() { this->should_listen_ = true; }
26 void add_listener(std::function<void(std::vector<uint8_t> &)> &&listener) {
27 this->packet_listeners_.add(std::move(listener));
28 }
29 void setup() override;
30 void loop() override;
31 void dump_config() override;
32 void send_packet(const uint8_t *data, size_t size);
33 void send_packet(const std::vector<uint8_t> &buf) { this->send_packet(buf.data(), buf.size()); }
34 float get_setup_priority() const override { return setup_priority::AFTER_WIFI; };
35
36 protected:
37 uint16_t listen_port_{};
38 uint16_t broadcast_port_{};
41 CallbackManager<void(std::vector<uint8_t> &)> packet_listeners_{};
42
43#if defined(USE_SOCKET_IMPL_BSD_SOCKETS) || defined(USE_SOCKET_IMPL_LWIP_SOCKETS)
44 std::unique_ptr<socket::Socket> broadcast_socket_ = nullptr;
45 std::unique_ptr<socket::Socket> listen_socket_ = nullptr;
46 std::vector<struct sockaddr> sockaddrs_{};
47#endif
48#ifdef USE_SOCKET_IMPL_LWIP_TCP
49 std::vector<IPAddress> ipaddrs_{};
50 WiFiUDP udp_client_{};
51#endif
52 std::vector<std::string> addresses_{};
53
55};
56
57} // namespace udp
58} // namespace esphome
59#endif
std::vector< std::string > addresses_
void add_address(const char *addr)
float get_setup_priority() const override
CallbackManager< void(std::vector< uint8_t > &)> packet_listeners_
std::unique_ptr< socket::Socket > listen_socket_
std::unique_ptr< socket::Socket > broadcast_socket_
void send_packet(const uint8_t *data, size_t size)
std::vector< IPAddress > ipaddrs_
void add_listener(std::function< void(std::vector< uint8_t > &)> &&listener)
void set_listen_address(const char *listen_addr)
void set_broadcast_port(uint16_t port)
optional< network::IPAddress > listen_address_
void set_listen_port(uint16_t port)
void send_packet(const std::vector< uint8_t > &buf)
std::vector< struct sockaddr > sockaddrs_
const float AFTER_WIFI
For components that should be initialized after WiFi is connected.
Definition component.cpp:26
Providing packet encoding functions for exchanging data with a remote host.
Definition a01nyub.cpp:7