ESPHome 2026.11.0-dev
Loading...
Searching...
No Matches
tcp_uart.h
Go to the documentation of this file.
1#pragma once
2
4#ifdef USE_SENSOR
6#endif
8#ifdef USE_SOCKET_TCP_LISTENER
10#endif
13
14#include <cstdint>
15
16namespace esphome::tcp_uart {
17
19class TcpUart : public uart::UARTComponent, public Component {
20 public:
22
23 void set_host(const char *host) { this->link_.set_host(host); }
24 void set_port(uint16_t port) { this->link_.set_port(port); }
27#ifdef USE_SENSOR
29#endif
30#ifdef USE_SOCKET_TCP_LISTENER
31 void set_server(bool server) { this->server_ = server; }
32#ifdef USE_SOCKET_IPV4_ALLOW
33 void set_allow(const socket::Ipv4AllowEntry *entries, size_t count) { this->listener_.set_allow(entries, count); }
34#endif
35#endif
36
37 void setup() override;
38 void loop() override;
39 void dump_config() override;
40 void on_shutdown() override;
41 float get_setup_priority() const override { return setup_priority::AFTER_WIFI; }
42
43 void write_array(const uint8_t *data, size_t len) override;
44 bool peek_byte(uint8_t *data) override;
45 bool read_array(uint8_t *data, size_t len) override;
46 size_t available() override { return static_cast<size_t>(this->rx_end_ - this->rx_start_); }
47 // Same room write_array() grants, so consumers can apply backpressure.
48 size_t available_for_write() override { return this->link_.tx_free(); }
50 bool is_connected() override { return this->link_.connected(); }
51#if defined(USE_ESP8266) || defined(USE_ESP32)
52 void load_settings(bool dump_config) override {}
53 using UARTComponent::load_settings; // also bring in the no-arg overload for convenience
54#endif
55
56 protected:
57 void check_logger_conflict() override {}
58 void sync_link_();
59 void read_socket_();
60
61 static constexpr size_t RX_BUFFER_SIZE = 1024;
62
64#ifdef USE_SOCKET_TCP_LISTENER
66#endif
68#ifdef USE_SENSOR
71#endif
73 // rx_[rx_start_, rx_end_) holds unread bytes; read_socket_() compacts to the front.
74 uint16_t rx_start_{0};
75 uint16_t rx_end_{0};
76 bool server_{false};
77 // The link state loop() saw last; edges publish the sensor, the up edge clears rx_.
78 bool link_was_up_{false};
79 // A read stopped before EAGAIN. ready() stays false until new data arrives.
80 bool rx_pending_{false};
81 uint8_t rx_[RX_BUFFER_SIZE]{};
82};
83
84} // 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:19
bool read_array(uint8_t *data, size_t len) override
Definition tcp_uart.cpp:141
socket::TcpClientLink link_
Definition tcp_uart.h:63
void set_disconnects_sensor(sensor::Sensor *sensor)
Definition tcp_uart.h:28
void set_allow(const socket::Ipv4AllowEntry *entries, size_t count)
Definition tcp_uart.h:33
void write_array(const uint8_t *data, size_t len) override
Definition tcp_uart.cpp:120
void check_logger_conflict() override
Definition tcp_uart.h:57
void set_connected_sensor(binary_sensor::BinarySensor *sensor)
Definition tcp_uart.h:26
size_t available() override
Definition tcp_uart.h:46
binary_sensor::BinarySensor * connected_sensor_
Definition tcp_uart.h:67
void setup() override
Definition tcp_uart.cpp:15
void set_port(uint16_t port)
Definition tcp_uart.h:24
void load_settings(bool dump_config) override
Definition tcp_uart.h:52
void dump_config() override
Definition tcp_uart.cpp:30
void on_shutdown() override
Definition tcp_uart.cpp:47
static constexpr size_t RX_BUFFER_SIZE
Definition tcp_uart.h:61
void set_host(const char *host)
Definition tcp_uart.h:23
void set_server(bool server)
Definition tcp_uart.h:31
void set_reconnect_interval(uint32_t ms)
Definition tcp_uart.h:25
uint8_t rx_[RX_BUFFER_SIZE]
Definition tcp_uart.h:81
uart::UARTFlushResult flush() override
Definition tcp_uart.cpp:150
bool peek_byte(uint8_t *data) override
Definition tcp_uart.cpp:133
sensor::Sensor * disconnects_sensor_
Definition tcp_uart.h:69
bool is_connected() override
Definition tcp_uart.h:50
size_t available_for_write() override
Definition tcp_uart.h:48
float get_setup_priority() const override
Definition tcp_uart.h:41
socket::TcpListener listener_
Definition tcp_uart.h:65
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:68
static void uint32_t
One allowed IPv4 network, network byte order, host bits cleared.
Definition ipv4_allow.h:14