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) {}
94 uint64_t receive_address,
95 uint64_t send_address);
105 uint64_t receive_address,
106 uint64_t send_address);
122 constexpr static size_t kSomeNumberOfChannels = 16;
127 uint64_t receive_address_arg,
128 uint64_t send_address_arg)
133 ChannelData(
const ChannelData&) =
delete;
134 ChannelData& operator=(
const ChannelData&) =
delete;
135 ChannelData(ChannelData&&) =
default;
136 ChannelData& operator=(ChannelData&&) =
default;
151 ChannelData* FindChannelForReceiveAddress(uint64_t receive_address);
173 void RemoveClosedChannels();
197 std::optional<pw::hdlc::Frame> decoded_frame_;
203 struct OutgoingBuffer {
205 size_t hdlc_encoded_size;
206 uint64_t target_address;
210 std::optional<OutgoingBuffer> buffer_to_encode_and_send_;
215 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:139
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:142
Status RemoveChannel(pw::channel::DatagramReaderWriter &channel, uint64_t receive_address, uint64_t send_address)
uint64_t send_address
Definition: router.h:146
pw::async2::Poll Pend(pw::async2::Context &cx)