ESPHome 2026.10.0
Loading...
Searching...
No Matches
tcp_uart.h
Go to the documentation of this file.
1#pragma once
2
4#ifdef USE_BINARY_SENSOR
6#endif
7#ifdef USE_SENSOR
9#endif
11#ifdef USE_SOCKET_TCP_LISTENER
13#endif
16
17#include <cstdint>
18
19namespace esphome::tcp_uart {
20
22class TcpUart : public uart::UARTComponent, public Component {
23 public:
25
26 void set_host(const char *host) { this->link_.set_host(host); }
27 void set_port(uint16_t port) { this->link_.set_port(port); }
29#ifdef USE_BINARY_SENSOR
31#endif
32#ifdef USE_SENSOR
34#endif
35#ifdef USE_SOCKET_TCP_LISTENER
36 void set_server(bool server) { this->server_ = server; }
37#ifdef USE_SOCKET_IPV4_ALLOW
38 void set_allow(const socket::Ipv4AllowEntry *entries, size_t count) { this->listener_.set_allow(entries, count); }
39#endif
40#endif
41
42 void setup() override;
43 void loop() override;
44 void dump_config() override;
45 void on_shutdown() override;
46 float get_setup_priority() const override { return setup_priority::AFTER_WIFI; }
47
48 void write_array(const uint8_t *data, size_t len) override;
49 bool peek_byte(uint8_t *data) override;
50 bool read_array(uint8_t *data, size_t len) override;
51 size_t available() override { return static_cast<size_t>(this->rx_end_ - this->rx_start_); }
52 // Same room write_array() grants, so consumers can apply backpressure.
53 size_t available_for_write() override { return this->link_.tx_free(); }
55 bool is_connected() override { return this->link_.connected(); }
56#if defined(USE_ESP8266) || defined(USE_ESP32)
57 void load_settings(bool dump_config) override {}
58 using UARTComponent::load_settings; // also bring in the no-arg overload for convenience
59#endif
60
61 protected:
62 void check_logger_conflict() override {}
63 void sync_link_();
64 void read_socket_();
65
66 static constexpr size_t RX_BUFFER_SIZE = 1024;
67
69#ifdef USE_SOCKET_TCP_LISTENER
71#endif
72#ifdef USE_BINARY_SENSOR
74#endif
75#ifdef USE_SENSOR
78#endif
80 // rx_[rx_start_, rx_end_) holds unread bytes; read_socket_() compacts to the front.
81 uint16_t rx_start_{0};
82 uint16_t rx_end_{0};
83 bool server_{false};
84 // The link state loop() saw last; edges publish the sensor, the up edge clears rx_.
85 bool link_was_up_{false};
86 // A read stopped before EAGAIN. ready() stays false until new data arrives.
87 bool rx_pending_{false};
88 uint8_t rx_[RX_BUFFER_SIZE]{};
89};
90
91} // namespace esphome::tcp_uart
Base class for all binary_sensor-type classes.
Base-class for all sensors.
Definition sensor.h:47
The server side of a bridged TCP link: owns the listen socket and the allow list, accepts one peer at...
void set_allow(const Ipv4AllowEntry *entries, size_t count)
TCP client or server presented as a UART. Bytes are copied unchanged.
Definition tcp_uart.h:22
bool read_array(uint8_t *data, size_t len) override
Definition tcp_uart.cpp:147
socket::TcpClientLink link_
Definition tcp_uart.h:68
void set_disconnects_sensor(sensor::Sensor *sensor)
Definition tcp_uart.h:33
void set_allow(const socket::Ipv4AllowEntry *entries, size_t count)
Definition tcp_uart.h:38
void write_array(const uint8_t *data, size_t len) override
Definition tcp_uart.cpp:126
void check_logger_conflict() override
Definition tcp_uart.h:62
void set_connected_sensor(binary_sensor::BinarySensor *sensor)
Definition tcp_uart.h:30
size_t available() override
Definition tcp_uart.h:51
binary_sensor::BinarySensor * connected_sensor_
Definition tcp_uart.h:73
void setup() override
Definition tcp_uart.cpp:15
void set_port(uint16_t port)
Definition tcp_uart.h:27
void load_settings(bool dump_config) override
Definition tcp_uart.h:57
void dump_config() override
Definition tcp_uart.cpp:32
void on_shutdown() override
Definition tcp_uart.cpp:51
static constexpr size_t RX_BUFFER_SIZE
Definition tcp_uart.h:66
void set_host(const char *host)
Definition tcp_uart.h:26
void set_server(bool server)
Definition tcp_uart.h:36
void set_reconnect_interval(uint32_t ms)
Definition tcp_uart.h:28
uint8_t rx_[RX_BUFFER_SIZE]
Definition tcp_uart.h:88
uart::UARTFlushResult flush() override
Definition tcp_uart.cpp:156
bool peek_byte(uint8_t *data) override
Definition tcp_uart.cpp:139
sensor::Sensor * disconnects_sensor_
Definition tcp_uart.h:76
bool is_connected() override
Definition tcp_uart.h:55
size_t available_for_write() override
Definition tcp_uart.h:53
float get_setup_priority() const override
Definition tcp_uart.h:46
socket::TcpListener listener_
Definition tcp_uart.h:70
unsigned count
Definition gif.cpp:51
constexpr float AFTER_WIFI
For components that should be initialized after WiFi is connected.
Definition component.h:55
UARTFlushResult
Result of a flush() call.
const void size_t len
Definition hal.h:64
static void uint32_t
One allowed IPv4 network, network byte order, host bits cleared.
Definition ipv4_allow.h:14