aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/fig/FIGCarouselPriority.cpp2
-rw-r--r--src/fig/FIGCarouselPriority.h17
2 files changed, 18 insertions, 1 deletions
diff --git a/src/fig/FIGCarouselPriority.cpp b/src/fig/FIGCarouselPriority.cpp
index ff40533..5434968 100644
--- a/src/fig/FIGCarouselPriority.cpp
+++ b/src/fig/FIGCarouselPriority.cpp
@@ -522,7 +522,7 @@ size_t FIGCarouselPriority::fill_fib(uint8_t* buf, size_t max_size, int fib_inde
// Pass 2: Any remaining FIGs that can send (to fill unused space)
// Reset tried set - we want to try everything again, but only those we skipped
- std::set<FIGEntryPriority*> tried_pass1 = tried_this_fib;
+ std::unordered_set<FIGEntryPriority*> tried_pass1 = tried_this_fib;
for (int prio = 1; prio < NUM_PRIORITIES && remaining > 2; prio++) {
if (m_priorities[prio].carousel.empty()) {
diff --git a/src/fig/FIGCarouselPriority.h b/src/fig/FIGCarouselPriority.h
index fc41616..76be671 100644
--- a/src/fig/FIGCarouselPriority.h
+++ b/src/fig/FIGCarouselPriority.h
@@ -58,6 +58,23 @@ constexpr int PRIORITY_CRITICAL = 0;
// Debug flag for repetition rate statistics - logs actual vs required rates
#define PRIORITY_RATE_STATS_DEBUG 0
+/* Helper function to calculate the deadline for the next transmission, in milliseconds.
+ * All values are multiples of 24ms (ETI frame duration) for easier reasoning.
+ */
+inline int rate_increment_ms(FIG_rate rate)
+{
+ switch (rate) {
+ case FIG_rate::FIG0_0: return 96; // Special case for FIG 0/0
+ case FIG_rate::A: return 240; // At least 10 times per second
+ case FIG_rate::A_B: return 480; // Between 10 times and once per second
+ case FIG_rate::B: return 960; // Once per second
+ case FIG_rate::C: return 24000; // Once every 10 seconds
+ case FIG_rate::D: return 30000; // Less than once every 10 seconds
+ case FIG_rate::E: return 120000; // All in two minutes
+ }
+ return 960; // Default to rate B if unknown
+}
+
/*
* FIGEntryPriority - Holds a FIG and its scheduling state
*