Просмотр исходного кода

Updated the Dispatcher logic to replace hardcoded values with defined constants for minimum TX budget reserve and airtime division.

ViezeVingertjes 6 месяцев назад
Родитель
Сommit
519b97a90a
1 измененных файлов с 7 добавлено и 5 удалено
  1. 7 5
      src/Dispatcher.cpp

+ 7 - 5
src/Dispatcher.cpp

@@ -8,7 +8,9 @@
 
 namespace mesh {
 
-#define MAX_RX_DELAY_MILLIS   32000  // 32 seconds
+#define MAX_RX_DELAY_MILLIS        32000  // 32 seconds
+#define MIN_TX_BUDGET_RESERVE_MS   100    // min budget (ms) required before allowing next TX
+#define MIN_TX_BUDGET_AIRTIME_DIV  2      // require at least 1/N of estimated airtime as budget before TX
 
 #ifndef NOISE_FLOOR_CALIB_INTERVAL
   #define NOISE_FLOOR_CALIB_INTERVAL   2000     // 2 seconds
@@ -94,9 +96,9 @@ void Dispatcher::loop() {
         tx_budget_ms -= t;
       }
 
-      if (tx_budget_ms < 100) {
+      if (tx_budget_ms < MIN_TX_BUDGET_RESERVE_MS) {
         float duty_cycle = 1.0f / (1.0f + getAirtimeBudgetFactor());
-        unsigned long needed = 100 - tx_budget_ms;
+        unsigned long needed = MIN_TX_BUDGET_RESERVE_MS - tx_budget_ms;
         next_tx_time = futureMillis((unsigned long)(needed / duty_cycle));
       } else {
         next_tx_time = _ms->getMillis();
@@ -264,9 +266,9 @@ void Dispatcher::checkSend() {
   updateTxBudget();
   
   uint32_t est_airtime = _radio->getEstAirtimeFor(MAX_TRANS_UNIT);
-  if (tx_budget_ms < est_airtime / 2) {
+  if (tx_budget_ms < est_airtime / MIN_TX_BUDGET_AIRTIME_DIV) {
     float duty_cycle = 1.0f / (1.0f + getAirtimeBudgetFactor());
-    unsigned long needed = est_airtime / 2 - tx_budget_ms;
+    unsigned long needed = est_airtime / MIN_TX_BUDGET_AIRTIME_DIV - tx_budget_ms;
     next_tx_time = futureMillis((unsigned long)(needed / duty_cycle));
     return;
   }