5#include "roo_io/memory/load.h"
6#include "roo_io/memory/store.h"
9#if (defined ESP32 || defined ROO_TESTING)
10#include "esp_random.h"
11#define RANDOM_INTEGER esp_random
13#define RANDOM_INTEGER rand
21 roo_io::StoreBeU16(header, payload_);
26 expiration_ = roo_time::Uptime::Start();
32roo_time::Duration Backoff(
int retry_count) {
33 float min_delay_us = 5000.0f;
34 float max_delay_us = 200000.0f;
35 float delay = pow(1.33, retry_count) * min_delay_us;
36 if (delay > max_delay_us) {
40 delay += (float)delay * ((
float)
RANDOM_INTEGER() / RAND_MAX - 0.5f) * 0.4f;
41 return roo_time::Micros((uint64_t)delay);
47 if (send_counter_ < 255) ++send_counter_;
48 expiration_ = now + Backoff(send_counter_);
52 uint16_t raw = roo_io::LoadBeU16(payload_);
54 roo_io::StoreBeU16(raw, payload_);
void init(SeqNum seq_id, bool control_bit)
void markSent(roo_time::Uptime now)
void SetPacketHeaderTypeFin(uint16_t &header)
uint16_t FormatPacketHeader(SeqNum seq, PacketType type, bool control_bit)