Skip to content

Commit e272883

Browse files
committed
align dev_plus with current PRs (meshcore-dev#1727 CAD on by default) + minor
Changes vs dev_plus: - meshcore-dev#1727 hardware-CAD redesign: cad_enabled pref (slot 293), 'cad on/off' CLI cmd, RSSI interference (int.thresh) + separate hardware-CAD gate in RadioLibWrappers. DEVIATION (per request): cad_enabled defaults to 1 (CAD ENABLED) on repeater/room/sensor; companion getCADEnabled() returns true. companion getInterferenceThreshold() aligned to PR (0; RSSI int.thresh disabled until currentRSSI() is fixed). Fixed a merge-dup of performChannelScan() decl. - meshcore-dev#2001: 'af' getter ftoa -> ftoa3 - meshcore-dev#1896: ESP32 RTC fallback seed literal -> RTC_TIME_MIN - meshcore-dev#1925: rak11200 P_LORA_DIO_1 via platformio build flag (not header #define) No-ops (verified already-aligned in dev_plus, or intentionally absent): meshcore-dev#1677 AEAD, meshcore-dev#1686 short-sleeps (=> meshcore-dev#1347 subset), meshcore-dev#2674 be-more-patient(+backoff), meshcore-dev#1447 robust-contacts (absent), meshcore-dev#2537 fix-serial-bursts (absent).
1 parent 1849bce commit e272883

18 files changed

Lines changed: 73 additions & 18 deletions

File tree

docs/cli_commands.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -559,6 +559,20 @@ This document provides an overview of CLI commands that can be sent to MeshCore
559559

560560
---
561561

562+
#### Enable or disable hardware Channel Activity Detection (CAD)
563+
**Usage:**
564+
- `get cad`
565+
- `set cad <on|off>`
566+
567+
**Description:** When enabled, the radio performs a hardware Channel Activity Detection scan before transmitting and defers if the channel is busy. Runs independently of `int.thresh` — either, both, or none may be active.
568+
569+
**Parameters:**
570+
- `on|off`: Enable or disable hardware CAD
571+
572+
**Default:** `off`
573+
574+
---
575+
562576
#### View or change the AGC Reset Interval
563577
**Usage:**
564578
- `get agc.reset.interval`

examples/companion_radio/MyMesh.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,10 @@ float MyMesh::getAirtimeBudgetFactor() const {
277277
}
278278

279279
int MyMesh::getInterferenceThreshold() const {
280-
return 1; // non-zero enables hardware CAD (Channel Activity Detection) before TX
280+
return 0; // RSSI interference detection disabled, until currentRSSI() problem is resolved
281+
}
282+
bool MyMesh::getCADEnabled() const {
283+
return true; // hardware CAD before TX (no CLI toggle on companion; enabled by default)
281284
}
282285

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

examples/companion_radio/MyMesh.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ class MyMesh : public BaseChatMesh, public DataStoreHost {
105105
protected:
106106
float getAirtimeBudgetFactor() const override;
107107
int getInterferenceThreshold() const override;
108+
bool getCADEnabled() const override;
108109
int calcRxDelay(float score, uint32_t air_time) const override;
109110
uint32_t getRetransmitDelay(const mesh::Packet *packet) override;
110111
uint32_t getDirectRetransmitDelay(const mesh::Packet *packet) override;

examples/simple_repeater/MyMesh.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -991,7 +991,8 @@ MyMesh::MyMesh(mesh::MainBoard &board, mesh::Radio &radio, mesh::MillisecondCloc
991991
_prefs.flood_max = 64;
992992
_prefs.flood_max_unscoped = 64;
993993
_prefs.flood_max_advert = 8;
994-
_prefs.interference_threshold = 1; // non-zero enables hardware CAD before TX
994+
_prefs.interference_threshold = 0; // disabled
995+
_prefs.cad_enabled = 1; // hardware CAD before TX (on by default; 'set cad off' to disable)
995996

996997
// bridge defaults
997998
_prefs.bridge_enabled = 1; // enabled

examples/simple_repeater/MyMesh.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,9 @@ class MyMesh : public mesh::Mesh, public CommonCLICallbacks {
152152
int getInterferenceThreshold() const override {
153153
return _prefs.interference_threshold;
154154
}
155+
bool getCADEnabled() const override {
156+
return _prefs.cad_enabled;
157+
}
155158
int getAGCResetInterval() const override {
156159
return ((int)_prefs.agc_reset_interval) * 4000; // milliseconds
157160
}

examples/simple_room_server/MyMesh.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -703,7 +703,8 @@ MyMesh::MyMesh(mesh::MainBoard &board, mesh::Radio &radio, mesh::MillisecondCloc
703703
_prefs.flood_max = 64;
704704
_prefs.flood_max_unscoped = 64;
705705
_prefs.flood_max_advert = 8;
706-
_prefs.interference_threshold = 1; // non-zero enables hardware CAD before TX
706+
_prefs.interference_threshold = 0; // disabled
707+
_prefs.cad_enabled = 1; // hardware CAD before TX (on by default; 'set cad off' to disable)
707708
#ifdef ROOM_PASSWORD
708709
StrHelper::strncpy(_prefs.guest_password, ROOM_PASSWORD, sizeof(_prefs.guest_password));
709710
#endif

examples/simple_room_server/MyMesh.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,9 @@ class MyMesh : public mesh::Mesh, public CommonCLICallbacks {
145145
int getInterferenceThreshold() const override {
146146
return _prefs.interference_threshold;
147147
}
148+
bool getCADEnabled() const override {
149+
return _prefs.cad_enabled;
150+
}
148151
int getAGCResetInterval() const override {
149152
return ((int)_prefs.agc_reset_interval) * 4000; // milliseconds
150153
}

examples/simple_sensor/SensorMesh.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -323,6 +323,9 @@ uint32_t SensorMesh::getDirectRetransmitDelay(const mesh::Packet* packet) {
323323
int SensorMesh::getInterferenceThreshold() const {
324324
return _prefs.interference_threshold;
325325
}
326+
bool SensorMesh::getCADEnabled() const {
327+
return _prefs.cad_enabled;
328+
}
326329
int SensorMesh::getAGCResetInterval() const {
327330
return ((int)_prefs.agc_reset_interval) * 4000; // milliseconds
328331
}
@@ -779,7 +782,8 @@ SensorMesh::SensorMesh(mesh::MainBoard& board, mesh::Radio& radio, mesh::Millise
779782
_prefs.flood_advert_interval = 0; // disabled
780783
_prefs.disable_fwd = true;
781784
_prefs.flood_max = 64;
782-
_prefs.interference_threshold = 1; // non-zero enables hardware CAD before TX
785+
_prefs.interference_threshold = 0; // disabled
786+
_prefs.cad_enabled = 1; // hardware CAD before TX (on by default; 'set cad off' to disable)
783787

784788
// GPS defaults
785789
_prefs.gps_enabled = 0;

examples/simple_sensor/SensorMesh.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@ class SensorMesh : public mesh::Mesh, public CommonCLICallbacks {
123123
uint32_t getRetransmitDelay(const mesh::Packet* packet) override;
124124
uint32_t getDirectRetransmitDelay(const mesh::Packet* packet) override;
125125
int getInterferenceThreshold() const override;
126+
bool getCADEnabled() const override;
126127
int getAGCResetInterval() const override;
127128
void onAnonDataRecv(mesh::Packet* packet, const uint8_t* secret, const mesh::Identity& sender, uint8_t* data, size_t len) override;
128129
int searchPeersByHash(const uint8_t* hash) override;

src/Dispatcher.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ uint32_t Dispatcher::getCADFailMaxDuration() const {
7575
void Dispatcher::loop() {
7676
if (millisHasNowPassed(next_floor_calib_time)) {
7777
_radio->triggerNoiseFloorCalibrate(getInterferenceThreshold());
78+
_radio->setCADEnabled(getCADEnabled());
7879
next_floor_calib_time = futureMillis(NOISE_FLOOR_CALIB_INTERVAL);
7980
}
8081
_radio->loop();

0 commit comments

Comments
 (0)