Skip to content

Commit ff600fe

Browse files
committed
Use hardware channel activity detection for checking interference
1 parent b67decf commit ff600fe

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
@@ -250,7 +250,7 @@ float MyMesh::getAirtimeBudgetFactor() const {
250250
}
251251

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

256256
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
@@ -840,7 +840,7 @@ MyMesh::MyMesh(mesh::MainBoard &board, mesh::Radio &radio, mesh::MillisecondCloc
840840
_prefs.advert_interval = 1; // default to 2 minutes for NEW installs
841841
_prefs.flood_advert_interval = 12; // 12 hours
842842
_prefs.flood_max = 64;
843-
_prefs.interference_threshold = 0; // disabled
843+
_prefs.interference_threshold = 1; // non-zero enables hardware CAD before TX
844844

845845
// bridge defaults
846846
_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
@@ -616,7 +616,7 @@ MyMesh::MyMesh(mesh::MainBoard &board, mesh::Radio &radio, mesh::MillisecondCloc
616616
_prefs.advert_interval = 1; // default to 2 minutes for NEW installs
617617
_prefs.flood_advert_interval = 12; // 12 hours
618618
_prefs.flood_max = 64;
619-
_prefs.interference_threshold = 0; // disabled
619+
_prefs.interference_threshold = 1; // non-zero enables hardware CAD before TX
620620
#ifdef ROOM_PASSWORD
621621
StrHelper::strncpy(_prefs.guest_password, ROOM_PASSWORD, sizeof(_prefs.guest_password));
622622
#endif

examples/simple_sensor/SensorMesh.cpp

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

728728
// GPS defaults
729729
_prefs.gps_enabled = 0;

src/helpers/radiolib/RadioLibWrappers.cpp

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -157,10 +157,17 @@ void RadioLibWrapper::onSendFinished() {
157157
state = STATE_IDLE;
158158
}
159159

160+
int16_t RadioLibWrapper::performChannelScan() {
161+
return _radio->scanChannel();
162+
}
163+
160164
bool RadioLibWrapper::isChannelActive() {
161-
return _threshold == 0
162-
? false // interference check is disabled
163-
: getCurrentRSSI() > _noise_floor + _threshold;
165+
if (_threshold == 0) return false; // interference check is disabled
166+
167+
int16_t result = performChannelScan();
168+
// scanChannel() leaves radio in standby — restart RX regardless of result
169+
startRecv();
170+
return (result == RADIOLIB_LORA_DETECTED);
164171
}
165172

166173
float RadioLibWrapper::getLastRSSI() const {

src/helpers/radiolib/RadioLibWrappers.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,14 @@ class RadioLibWrapper : public mesh::Radio {
3030
bool isInRecvMode() const override;
3131
bool isChannelActive();
3232

33-
bool isReceiving() override {
33+
bool isReceiving() override {
3434
if (isReceivingPacket()) return true;
3535

3636
return isChannelActive();
3737
}
3838

3939
virtual float getCurrentRSSI() =0;
40+
virtual int16_t performChannelScan();
4041

4142
int getNoiseFloor() const override { return _noise_floor; }
4243
void triggerNoiseFloorCalibrate(int threshold) override;

0 commit comments

Comments
 (0)