Browse Source

Prevent forced TX during JP LBT backoff via getCADFailMaxDuration()

Add isJapanMode() virtual to mesh::Radio (default false) so Dispatcher
can query frequency context without depending on RadioLibWrapper.
Dispatcher::getCADFailMaxDuration() returns UINT32_MAX for JP nodes,
eliminating the 4-second forced-TX that would violate ARIB STD-T108.
Non-JP nodes retain the original 4-second safety timeout unchanged.
pull/2218/head
me 1 month ago
parent
commit
ce1575754c
  1. 1
      src/Dispatcher.cpp
  2. 2
      src/Dispatcher.h
  3. 2
      src/helpers/radiolib/RadioLibWrappers.h

1
src/Dispatcher.cpp

@ -60,6 +60,7 @@ uint32_t Dispatcher::getCADFailRetryDelay() const {
return 200; return 200;
} }
uint32_t Dispatcher::getCADFailMaxDuration() const { uint32_t Dispatcher::getCADFailMaxDuration() const {
if (_radio->isJapanMode()) return UINT32_MAX; // ARIB STD-T108: never force TX during LBT
return 4000; // 4 seconds return 4000; // 4 seconds
} }

2
src/Dispatcher.h

@ -78,6 +78,8 @@ public:
virtual float getLastRSSI() const { return 0; } virtual float getLastRSSI() const { return 0; }
virtual float getLastSNR() const { return 0; } virtual float getLastSNR() const { return 0; }
virtual bool isJapanMode() const { return false; }
}; };
/** /**

2
src/helpers/radiolib/RadioLibWrappers.h

@ -57,7 +57,7 @@ public:
virtual uint8_t getCodingRate() const { return 8; } // default CR4/8, override in subclass virtual uint8_t getCodingRate() const { return 8; } // default CR4/8, override in subclass
virtual float getFreqMHz() const { return 0.0f; } // default unknown, override in subclass virtual float getFreqMHz() const { return 0.0f; } // default unknown, override in subclass
bool isJapanMode() const { bool isJapanMode() const override {
float freq = getFreqMHz(); float freq = getFreqMHz();
return (fabsf(freq - 920.800f) < 0.05f || return (fabsf(freq - 920.800f) < 0.05f ||
fabsf(freq - 921.000f) < 0.05f || fabsf(freq - 921.000f) < 0.05f ||

Loading…
Cancel
Save