29#include "pw_async2/dispatcher.h"
30#include "pw_async2/poll.h"
31#include "pw_channel/channel.h"
32#include "pw_containers/vector.h"
33#include "pw_hdlc/decoder.h"
34#include "pw_multibuf/allocator.h"
35#include "pw_multibuf/multibuf.h"
36#include "pw_status/status.h"
59 : io_channel_(io_channel), decoder_(decode_buffer) {}
100 uint64_t receive_address,
101 uint64_t send_address);
117 uint64_t receive_address,
118 uint64_t send_address);
134 constexpr static size_t kSomeNumberOfChannels = 16;
139 uint64_t receive_address_arg,
140 uint64_t send_address_arg)
145 ChannelData(
const ChannelData&) =
delete;
146 ChannelData& operator=(
const ChannelData&) =
delete;
147 ChannelData(ChannelData&&) =
default;
148 ChannelData& operator=(ChannelData&&) =
default;
163 ChannelData* FindChannelForReceiveAddress(uint64_t receive_address);
185 void RemoveClosedChannels();
209 std::optional<pw::hdlc::Frame> decoded_frame_;
215 struct OutgoingBuffer {
217 size_t hdlc_encoded_size;
218 uint64_t target_address;
222 std::optional<OutgoingBuffer> buffer_to_encode_and_send_;
227 size_t next_first_read_index_ = 0;
Definition: multibuf_v1.h:248
pw::async2::Poll PendClose(pw::async2::Context &cx)
Closes all underlying channels, attempting to flush any data.
pw::channel::DatagramReaderWriter * channel
A channel which reads and writes datagrams.
Definition: router.h:151
Status AddChannel(pw::channel::DatagramReaderWriter &channel, uint64_t receive_address, uint64_t send_address)
Router(pw::channel::ByteReaderWriter &io_channel, ByteSpan decode_buffer)
Definition: router.h:58
uint64_t receive_address
Data received over HDLC with this address will be sent to channel.
Definition: router.h:154
Status RemoveChannel(pw::channel::DatagramReaderWriter &channel, uint64_t receive_address, uint64_t send_address)
uint64_t send_address
Definition: router.h:158
pw::async2::Poll Pend(pw::async2::Context &cx)
Serial comms library.
Definition: decoder.h:29