12#include <unordered_map>
48 static constexpr std::uint32_t
rts_bit = 1U << 0;
49 static constexpr std::uint32_t
dtr_bit = 1U << 1;
54 [[nodiscard]] std::uint32_t
to_bits()
const {
115 void ensure_modem_pins_handler();
116 void ensure_data_handler();
119 std::unordered_map<std::uint32_t, DataHandler> instance_data_handlers_;
122 std::unordered_map<std::uint32_t, std::vector<ModemPinsHandler>> pending_modem_pins_;
123 bool data_registered_ =
false;
124 bool modem_pins_registered_ =
false;
132 : proxy_(&proxy), instance_(instance) {}
134 [[nodiscard]] std::uint32_t
index() const noexcept {
152 void write(
const std::string& data)
const {
153 proxy_->
write(instance_, data);
165 proxy_->
on_data(instance_, std::move(handler));
170 std::uint32_t instance_;
Async client for a single device.
Definition client.hpp:38
A single serial-proxy instance bound to its index — the instance-aware, ergonomic front end to Serial...
Definition serial_proxy.hpp:129
void configure(SerialProxyConfig config) const
Definition serial_proxy.hpp:148
std::uint32_t index() const noexcept
Definition serial_proxy.hpp:134
void on_data(SerialProxy::DataHandler handler) const
Receive data for this instance only.
Definition serial_proxy.hpp:164
void unsubscribe() const
Definition serial_proxy.hpp:141
void flush() const
Definition serial_proxy.hpp:144
SerialPort(SerialProxy &proxy, const std::uint32_t instance)
Definition serial_proxy.hpp:131
void set_modem_pins(const SerialProxyLineStates lines) const
Definition serial_proxy.hpp:159
void get_modem_pins(SerialProxy::ModemPinsHandler once={}) const
Definition serial_proxy.hpp:156
void subscribe() const
Definition serial_proxy.hpp:138
void write(const std::string &data) const
Definition serial_proxy.hpp:152
Proxies a UART on the device, forwarding data and control to clients.
Definition serial_proxy.hpp:68
void write(std::uint32_t instance, const std::string &data) const
Write raw data to the serial device.
SerialPort instance(std::uint32_t index)
An instance-bound handle so you don't repeat the instance index on every call: client....
Definition serial_proxy.hpp:173
void configure(const SerialProxyConfig &config) const
Configure UART parameters for an instance.
void get_modem_pins(std::uint32_t instance, ModemPinsHandler once={})
Request the current modem control pin states.
void set_modem_pins_raw(std::uint32_t instance, std::uint32_t line_states) const
Set modem control pin states from a raw bitmask (advanced).
void on_modem_pins(ModemPinsHandler handler)
Register a persistent callback fired for every modem-pin response.
void request(std::uint32_t instance, SerialProxyRequestType type) const
Issue a simple control request (subscribe, unsubscribe, flush).
std::function< void(const SerialProxyModemPins &)> ModemPinsHandler
Definition serial_proxy.hpp:72
void on_request_response(ResponseHandler handler)
Register a callback fired for each SerialProxyRequestResponse.
std::function< void(const SerialProxyData &)> DataHandler
Definition serial_proxy.hpp:70
void on_data(DataHandler handler)
Register a callback fired for every incoming SerialProxyDataReceived (any instance).
void set_modem_pins(std::uint32_t instance, SerialProxyLineStates lines) const
Set modem control pin states (RTS and DTR).
std::function< void(const SerialProxyResponse &)> ResponseHandler
Definition serial_proxy.hpp:71
SerialProxy(Client &client)
Definition serial_proxy.hpp:74
void on_data(std::uint32_t instance, DataHandler handler)
Register a callback fired only for data from instance.
Shared base for the subsystems exposed by Client (log streaming, the various proxies,...
Definition subsystem.hpp:18
Typed mirrors of the ESPHome protobuf enums.
SerialProxyStatus
Mirror of proto enum SerialProxyStatus.
Definition enums.hpp:405
SerialProxyParity
Mirror of proto enum SerialProxyParity.
Definition enums.hpp:391
SerialProxyRequestType
Mirror of proto enum SerialProxyRequestType.
Definition enums.hpp:398
UART parameters for a serial proxy instance (api: SerialProxyConfigureRequest).
Definition serial_proxy.hpp:18
std::uint32_t data_size
Definition serial_proxy.hpp:24
bool flow_control
Definition serial_proxy.hpp:21
std::uint32_t baudrate
Definition serial_proxy.hpp:20
std::uint32_t stop_bits
Definition serial_proxy.hpp:23
std::uint32_t instance
Definition serial_proxy.hpp:19
SerialProxyParity parity
Definition serial_proxy.hpp:22
Data forwarded from a serial device (api: SerialProxyDataReceived).
Definition serial_proxy.hpp:28
std::string data
Definition serial_proxy.hpp:30
std::uint32_t instance
Definition serial_proxy.hpp:29
Typed view of the modem control/status lines exchanged with the proxy.
Definition serial_proxy.hpp:44
bool rts
Request To Send (bit 0)
Definition serial_proxy.hpp:45
static SerialProxyLineStates from_bits(const std::uint32_t bits)
Definition serial_proxy.hpp:51
bool dtr
Data Terminal Ready (bit 1)
Definition serial_proxy.hpp:46
static constexpr std::uint32_t dtr_bit
Definition serial_proxy.hpp:49
static constexpr std::uint32_t rts_bit
Definition serial_proxy.hpp:48
std::uint32_t to_bits() const
Definition serial_proxy.hpp:54
Current modem control pin states (api: SerialProxyGetModemPinsResponse).
Definition serial_proxy.hpp:60
std::uint32_t instance
Definition serial_proxy.hpp:61
SerialProxyLineStates lines
Definition serial_proxy.hpp:62
Result of a SerialProxyRequest (api: SerialProxyRequestResponse).
Definition serial_proxy.hpp:34
std::uint32_t instance
Definition serial_proxy.hpp:35
SerialProxyRequestType type
Definition serial_proxy.hpp:36
SerialProxyStatus status
Definition serial_proxy.hpp:37
std::string error_message
Definition serial_proxy.hpp:38
Common base for the Client-owned subsystems.