11#include <promeki/config.h>
12#if PROMEKI_ENABLE_NETWORK
21PROMEKI_NAMESPACE_BEGIN
77class PacketScheduler {
80 using UPtr = UniquePtr<PacketScheduler>;
106 Duration frameInterval;
119 uint64_t bytesPerSec = 0;
131 int packetsPerFrame = 0;
174 enum class CadenceMode {
179 PacketScheduler() =
default;
180 virtual ~PacketScheduler() =
default;
182 PacketScheduler(
const PacketScheduler &) =
delete;
183 PacketScheduler &operator=(
const PacketScheduler &) =
delete;
194 void setTransport(PacketTransport *t) { _transport = t; }
197 PacketTransport *transport()
const {
return _transport; }
212 virtual Error configure(
const Spec &spec);
227 Error setRate(uint64_t bytesPerSec);
236 void setCadenceMode(CadenceMode mode) { _cadenceMode = mode; }
239 CadenceMode cadenceMode()
const {
return _cadenceMode; }
262 virtual int enqueue(
const PacketTransport::DatagramList &datagrams) = 0;
273 virtual int predictedTxDelayUs()
const {
return 0; }
286 virtual Error flushPending() {
return Error::Ok; }
296 virtual Error abort() {
return Error::Ok; }
299 const Spec &spec()
const {
return _spec; }
322 static UPtr create(
const Enum &mode, PacketTransport *transport);
325 PacketTransport *_transport =
nullptr;
327 CadenceMode _cadenceMode = CadenceMode::PerBatch;