Skip to content

Commit 806dcf8

Browse files
committed
Use hardware channel activity detection for checking interference
1 parent 8c0d5c5 commit 806dcf8

6 files changed

Lines changed: 16 additions & 8 deletions

File tree

examples/companion_radio/MyMesh.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,7 @@ float MyMesh::getAirtimeBudgetFactor() const {
259259
}
260260

261261
int MyMesh::getInterferenceThreshold() const {
262-
return 0; // disabled for now, until currentRSSI() problem is resolved
262+
return 1; // non-zero enables hardware CAD (Channel Activity Detection) before TX
263263
}
264264

265265
int MyMesh::calcRxDelay(float score, uint32_t air_time) const {

examples/simple_repeater/MyMesh.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -892,7 +892,7 @@ MyMesh::MyMesh(mesh::MainBoard &board, mesh::Radio &radio, mesh::MillisecondCloc
892892
_prefs.flood_max = 64;
893893
_prefs.flood_max_unscoped = 64;
894894
_prefs.flood_max_advert = 8;
895-
_prefs.interference_threshold = 0; // disabled
895+
_prefs.interference_threshold = 1; // non-zero enables hardware CAD before TX
896896

897897
// bridge defaults
898898
_prefs.bridge_enabled = 1; // enabled

examples/simple_room_server/MyMesh.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -649,7 +649,7 @@ MyMesh::MyMesh(mesh::MainBoard &board, mesh::Radio &radio, mesh::MillisecondCloc
649649
_prefs.flood_max = 64;
650650
_prefs.flood_max_unscoped = 64;
651651
_prefs.flood_max_advert = 8;
652-
_prefs.interference_threshold = 0; // disabled
652+
_prefs.interference_threshold = 1; // non-zero enables hardware CAD before TX
653653
#ifdef ROOM_PASSWORD
654654
StrHelper::strncpy(_prefs.guest_password, ROOM_PASSWORD, sizeof(_prefs.guest_password));
655655
#endif

examples/simple_sensor/SensorMesh.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -725,7 +725,7 @@ SensorMesh::SensorMesh(mesh::MainBoard& board, mesh::Radio& radio, mesh::Millise
725725
_prefs.flood_advert_interval = 0; // disabled
726726
_prefs.disable_fwd = true;
727727
_prefs.flood_max = 64;
728-
_prefs.interference_threshold = 0; // disabled
728+
_prefs.interference_threshold = 1; // non-zero enables hardware CAD before TX
729729

730730
// GPS defaults
731731
_prefs.gps_enabled = 0;

src/helpers/radiolib/RadioLibWrappers.cpp

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -178,10 +178,17 @@ void RadioLibWrapper::onSendFinished() {
178178
state = STATE_IDLE;
179179
}
180180

181+
int16_t RadioLibWrapper::performChannelScan() {
182+
return _radio->scanChannel();
183+
}
184+
181185
bool RadioLibWrapper::isChannelActive() {
182-
return _threshold == 0
183-
? false // interference check is disabled
184-
: getCurrentRSSI() > _noise_floor + _threshold;
186+
if (_threshold == 0) return false; // interference check is disabled
187+
188+
int16_t result = performChannelScan();
189+
// scanChannel() leaves radio in standby — restart RX regardless of result
190+
startRecv();
191+
return (result == RADIOLIB_LORA_DETECTED);
185192
}
186193

187194
float RadioLibWrapper::getLastRSSI() const {

src/helpers/radiolib/RadioLibWrappers.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ class RadioLibWrapper : public mesh::Radio {
3232
bool isInRecvMode() const override;
3333
bool isChannelActive();
3434

35-
bool isReceiving() override {
35+
bool isReceiving() override {
3636
if (isReceivingPacket()) return true;
3737

3838
return isChannelActive();
@@ -46,6 +46,7 @@ class RadioLibWrapper : public mesh::Radio {
4646
virtual uint8_t getSpreadingFactor() const { return LORA_SF; }
4747
static uint16_t preambleLengthForSF(uint8_t sf) { return sf <= 8 ? 32 : 16; }
4848
void updatePreamble(uint8_t sf) { _preamble_sf = sf; _radio->setPreambleLength(preambleLengthForSF(sf)); }
49+
virtual int16_t performChannelScan();
4950

5051
int getNoiseFloor() const override { return _noise_floor; }
5152
void triggerNoiseFloorCalibrate(int threshold) override;

0 commit comments

Comments
 (0)