From 197db237ce39e09abdf18042ca584db330b2b0de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Br=C3=A1zio?= Date: Tue, 25 Nov 2025 13:50:42 +0000 Subject: [PATCH 01/30] Add power settings for SX126X: current limit and boosted gain --- examples/simple_repeater/MyMesh.cpp | 8 +++++ examples/simple_repeater/MyMesh.h | 4 +++ src/helpers/CommonCLI.cpp | 54 +++++++++++++++++++++++------ src/helpers/CommonCLI.h | 11 ++++++ variants/heltec_v3/target.h | 2 ++ 5 files changed, 68 insertions(+), 11 deletions(-) diff --git a/examples/simple_repeater/MyMesh.cpp b/examples/simple_repeater/MyMesh.cpp index 091d79019..04052d96d 100644 --- a/examples/simple_repeater/MyMesh.cpp +++ b/examples/simple_repeater/MyMesh.cpp @@ -732,6 +732,14 @@ void MyMesh::begin(FILESYSTEM *fs) { radio_set_params(_prefs.freq, _prefs.bw, _prefs.sf, _prefs.cr); radio_set_tx_power(_prefs.tx_power_dbm); + // LNA and power settings +// #ifdef SX126X_CURRENT_LIMIT +// setCurrentLimit(SX126X_CURRENT_LIMIT); +// #endif +// #ifdef SX126X_RX_BOOSTED_GAIN +// setRxBoostedGainMode(SX126X_RX_BOOSTED_GAIN); +// #endif + updateAdvertTimer(); updateFloodAdvertTimer(); diff --git a/examples/simple_repeater/MyMesh.h b/examples/simple_repeater/MyMesh.h index d8a20486a..a194cacc0 100644 --- a/examples/simple_repeater/MyMesh.h +++ b/examples/simple_repeater/MyMesh.h @@ -225,4 +225,8 @@ class MyMesh : public mesh::Mesh, public CommonCLICallbacks { bridge.begin(); } #endif + +#if defined(SX126X_CURRENT_LIMIT) + void setCurrentLimit(uint8_t ma) { radio_set_current_limit(ma); } +#endif }; diff --git a/src/helpers/CommonCLI.cpp b/src/helpers/CommonCLI.cpp index 17b2b7532..33d509733 100644 --- a/src/helpers/CommonCLI.cpp +++ b/src/helpers/CommonCLI.cpp @@ -43,19 +43,19 @@ void CommonCLI::loadPrefsInt(FILESYSTEM* fs, const char* filename) { file.read((uint8_t *)&_prefs->tx_power_dbm, sizeof(_prefs->tx_power_dbm)); // 76 file.read((uint8_t *)&_prefs->disable_fwd, sizeof(_prefs->disable_fwd)); // 77 file.read((uint8_t *)&_prefs->advert_interval, sizeof(_prefs->advert_interval)); // 78 - file.read((uint8_t *)pad, 1); // 79 was 'unused' + file.read((uint8_t *)pad, 1); // 79 : 1 byte unused file.read((uint8_t *)&_prefs->rx_delay_base, sizeof(_prefs->rx_delay_base)); // 80 file.read((uint8_t *)&_prefs->tx_delay_factor, sizeof(_prefs->tx_delay_factor)); // 84 file.read((uint8_t *)&_prefs->guest_password[0], sizeof(_prefs->guest_password)); // 88 file.read((uint8_t *)&_prefs->direct_tx_delay_factor, sizeof(_prefs->direct_tx_delay_factor)); // 104 - file.read(pad, 4); // 108 + file.read(pad, 4); // 108 : 4 bytes unused file.read((uint8_t *)&_prefs->sf, sizeof(_prefs->sf)); // 112 file.read((uint8_t *)&_prefs->cr, sizeof(_prefs->cr)); // 113 file.read((uint8_t *)&_prefs->allow_read_only, sizeof(_prefs->allow_read_only)); // 114 file.read((uint8_t *)&_prefs->multi_acks, sizeof(_prefs->multi_acks)); // 115 file.read((uint8_t *)&_prefs->bw, sizeof(_prefs->bw)); // 116 file.read((uint8_t *)&_prefs->agc_reset_interval, sizeof(_prefs->agc_reset_interval)); // 120 - file.read(pad, 3); // 121 + file.read(pad, 3); // 121 : 3 bytes unused file.read((uint8_t *)&_prefs->flood_max, sizeof(_prefs->flood_max)); // 124 file.read((uint8_t *)&_prefs->flood_advert_interval, sizeof(_prefs->flood_advert_interval)); // 125 file.read((uint8_t *)&_prefs->interference_threshold, sizeof(_prefs->interference_threshold)); // 126 @@ -65,13 +65,16 @@ void CommonCLI::loadPrefsInt(FILESYSTEM* fs, const char* filename) { file.read((uint8_t *)&_prefs->bridge_baud, sizeof(_prefs->bridge_baud)); // 131 file.read((uint8_t *)&_prefs->bridge_channel, sizeof(_prefs->bridge_channel)); // 135 file.read((uint8_t *)&_prefs->bridge_secret, sizeof(_prefs->bridge_secret)); // 136 - file.read(pad, 4); // 152 + file.read(pad, 4); // 152 : 4 bytes unused file.read((uint8_t *)&_prefs->gps_enabled, sizeof(_prefs->gps_enabled)); // 156 file.read((uint8_t *)&_prefs->gps_interval, sizeof(_prefs->gps_interval)); // 157 file.read((uint8_t *)&_prefs->advert_loc_policy, sizeof (_prefs->advert_loc_policy)); // 161 file.read((uint8_t *)&_prefs->discovery_mod_timestamp, sizeof(_prefs->discovery_mod_timestamp)); // 162 - file.read((uint8_t *)&_prefs->adc_multiplier, sizeof(_prefs->adc_multiplier)); // 166 - // 170 + file.read((uint8_t *)&_prefs->adc_multiplier, sizeof(_prefs->adc_multiplier)); // 166 + file.read(pad, 4); // 169 : 4 bytes unused + file.read((uint8_t *)&_prefs->sx126x_current_limit, sizeof(_prefs->sx126x_current_limit)); // 173 + file.read((uint8_t *)&_prefs->sx126x_rx_boosted_gain, sizeof(_prefs->sx126x_rx_boosted_gain)); // 174 + // next: 175 // sanitise bad pref values _prefs->rx_delay_base = constrain(_prefs->rx_delay_base, 0, 20.0f); @@ -96,6 +99,10 @@ void CommonCLI::loadPrefsInt(FILESYSTEM* fs, const char* filename) { _prefs->gps_enabled = constrain(_prefs->gps_enabled, 0, 1); _prefs->advert_loc_policy = constrain(_prefs->advert_loc_policy, 0, 2); + // sanitise power settings + _prefs->sx126x_current_limit = constrain(_prefs->sx126x_current_limit, 0, 140); // mA + _prefs->sx126x_rx_boosted_gain = constrain(_prefs->sx126x_rx_boosted_gain, 0, 1); // boolean + file.close(); } } @@ -123,19 +130,19 @@ void CommonCLI::savePrefs(FILESYSTEM* fs) { file.write((uint8_t *)&_prefs->tx_power_dbm, sizeof(_prefs->tx_power_dbm)); // 76 file.write((uint8_t *)&_prefs->disable_fwd, sizeof(_prefs->disable_fwd)); // 77 file.write((uint8_t *)&_prefs->advert_interval, sizeof(_prefs->advert_interval)); // 78 - file.write((uint8_t *)pad, 1); // 79 was 'unused' + file.write((uint8_t *)pad, 1); // 79 : 1 byte unused file.write((uint8_t *)&_prefs->rx_delay_base, sizeof(_prefs->rx_delay_base)); // 80 file.write((uint8_t *)&_prefs->tx_delay_factor, sizeof(_prefs->tx_delay_factor)); // 84 file.write((uint8_t *)&_prefs->guest_password[0], sizeof(_prefs->guest_password)); // 88 file.write((uint8_t *)&_prefs->direct_tx_delay_factor, sizeof(_prefs->direct_tx_delay_factor)); // 104 - file.write(pad, 4); // 108 + file.write(pad, 4); // 108 : 4 byte unused file.write((uint8_t *)&_prefs->sf, sizeof(_prefs->sf)); // 112 file.write((uint8_t *)&_prefs->cr, sizeof(_prefs->cr)); // 113 file.write((uint8_t *)&_prefs->allow_read_only, sizeof(_prefs->allow_read_only)); // 114 file.write((uint8_t *)&_prefs->multi_acks, sizeof(_prefs->multi_acks)); // 115 file.write((uint8_t *)&_prefs->bw, sizeof(_prefs->bw)); // 116 file.write((uint8_t *)&_prefs->agc_reset_interval, sizeof(_prefs->agc_reset_interval)); // 120 - file.write(pad, 3); // 121 + file.write(pad, 3); // 121 : 3 bytes unused file.write((uint8_t *)&_prefs->flood_max, sizeof(_prefs->flood_max)); // 124 file.write((uint8_t *)&_prefs->flood_advert_interval, sizeof(_prefs->flood_advert_interval)); // 125 file.write((uint8_t *)&_prefs->interference_threshold, sizeof(_prefs->interference_threshold)); // 126 @@ -145,13 +152,16 @@ void CommonCLI::savePrefs(FILESYSTEM* fs) { file.write((uint8_t *)&_prefs->bridge_baud, sizeof(_prefs->bridge_baud)); // 131 file.write((uint8_t *)&_prefs->bridge_channel, sizeof(_prefs->bridge_channel)); // 135 file.write((uint8_t *)&_prefs->bridge_secret, sizeof(_prefs->bridge_secret)); // 136 - file.write(pad, 4); // 152 + file.write(pad, 4); // 152 : 4 bytes unused file.write((uint8_t *)&_prefs->gps_enabled, sizeof(_prefs->gps_enabled)); // 156 file.write((uint8_t *)&_prefs->gps_interval, sizeof(_prefs->gps_interval)); // 157 file.write((uint8_t *)&_prefs->advert_loc_policy, sizeof(_prefs->advert_loc_policy)); // 161 file.write((uint8_t *)&_prefs->discovery_mod_timestamp, sizeof(_prefs->discovery_mod_timestamp)); // 162 file.write((uint8_t *)&_prefs->adc_multiplier, sizeof(_prefs->adc_multiplier)); // 166 - // 170 + file.write(pad, 4); // 169 : 4 bytes unused + file.write((uint8_t *)&_prefs->sx126x_current_limit, sizeof(_prefs->sx126x_current_limit)); // 173 + file.write((uint8_t *)&_prefs->sx126x_rx_boosted_gain, sizeof(_prefs->sx126x_rx_boosted_gain)); // 174 + // next: 175 file.close(); } @@ -341,6 +351,14 @@ void CommonCLI::handleCommand(uint32_t sender_timestamp, const char* command, ch } else { sprintf(reply, "> %.3f", adc_mult); } +#ifdef SX126X_CURRENT_LIMIT + } else if (memcmp(config, "sx126x.current", 14) == 0) { + sprintf(reply, "> %d mA", (uint8_t)_prefs->sx126x_current_limit); +#endif +#ifdef SX126X_RX_BOOSTED_GAIN + } else if (memcmp(config, "sx126x.rxboost", 14) == 0) { + sprintf(reply, "> %s", _prefs->sx126x_rx_boosted_gain ? "on" : "off"); +#endif } else { sprintf(reply, "??: %s", config); } @@ -546,6 +564,20 @@ void CommonCLI::handleCommand(uint32_t sender_timestamp, const char* command, ch _prefs->adc_multiplier = 0.0f; strcpy(reply, "Error: unsupported by this board"); }; +#ifdef SX126X_CURRENT_LIMIT + } else if (memcmp(config, "sx126x.current ", 15) == 0) { + _prefs->sx126x_current_limit = atoi(&config[15]); + strcpy(reply, "OK"); + savePrefs(); + _callbacks->setCurrentLimit(_prefs->sx126x_current_limit); +#endif +#ifdef SX126X_RX_BOOSTED_GAIN + } else if (memcmp(config, "sx126x.rxboost ", 15) == 0) { + _prefs->sx126x_rx_boosted_gain = memcmp(&config[15], "on", 2) == 0; + strcpy(reply, "OK"); + savePrefs(); + _callbacks->setRxBoostedGain(_prefs->sx126x_rx_boosted_gain); +#endif } else { sprintf(reply, "unknown config: %s", config); } diff --git a/src/helpers/CommonCLI.h b/src/helpers/CommonCLI.h index 068783ab1..5458a5a78 100644 --- a/src/helpers/CommonCLI.h +++ b/src/helpers/CommonCLI.h @@ -48,6 +48,9 @@ struct NodePrefs { // persisted to file uint8_t advert_loc_policy; uint32_t discovery_mod_timestamp; float adc_multiplier; + // Power settings + uint8_t sx126x_current_limit; + uint8_t sx126x_rx_boosted_gain; }; class CommonCLICallbacks { @@ -83,6 +86,14 @@ class CommonCLICallbacks { virtual void restartBridge() { // no op by default }; + + virtual void setCurrentLimit(uint8_t ma) { + // no op by default + }; + + virtual void setRxBoostedGain(bool enable) { + // no op by default + }; }; class CommonCLI { diff --git a/variants/heltec_v3/target.h b/variants/heltec_v3/target.h index 739aecfe0..2dd30a591 100644 --- a/variants/heltec_v3/target.h +++ b/variants/heltec_v3/target.h @@ -27,4 +27,6 @@ bool radio_init(); uint32_t radio_get_rng_seed(); void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr); void radio_set_tx_power(uint8_t dbm); +void radio_set_current_limit(uint8_t ma); +void radio_set_rx_boosted_gain(bool enable); mesh::LocalIdentity radio_new_identity(); From 67b1124eef38ad4db91d62dc314d022f0a5efe00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Br=C3=A1zio?= Date: Sun, 30 Nov 2025 12:28:44 +0000 Subject: [PATCH 02/30] Add support for SX126X current limit and boosted gain settings --- examples/simple_repeater/MyMesh.cpp | 33 +++++++++++++++---- examples/simple_repeater/MyMesh.h | 11 +++++-- src/helpers/CommonCLI.cpp | 50 ++++++++++++++--------------- src/helpers/CommonCLI.h | 2 +- src/helpers/radiolib/CustomSX1262.h | 6 ++++ src/helpers/radiolib/CustomSX1268.h | 6 ++++ variants/heltec_v3/target.cpp | 16 +++++++++ variants/heltec_v3/target.h | 7 ++-- 8 files changed, 94 insertions(+), 37 deletions(-) diff --git a/examples/simple_repeater/MyMesh.cpp b/examples/simple_repeater/MyMesh.cpp index 04052d96d..6e0188e6b 100644 --- a/examples/simple_repeater/MyMesh.cpp +++ b/examples/simple_repeater/MyMesh.cpp @@ -712,6 +712,23 @@ MyMesh::MyMesh(mesh::MainBoard &board, mesh::Radio &radio, mesh::MillisecondCloc _prefs.advert_loc_policy = ADVERT_LOC_PREFS; _prefs.adc_multiplier = 0.0f; // 0.0f means use default board multiplier + +#if (RADIO_CLASS == CustomSX1262) || (RADIO_CLASS == CustomSX1268) || (RADIO_CLASS == CustomSX1276) +#if defined(SX126X_CURRENT_LIMIT) +_prefs.sx12xx_current_limit = SX126X_CURRENT_LIMIT; +#elif defined(SX127X_CURRENT_LIMIT) +_prefs.sx12xx_current_limit = SX127X_CURRENT_LIMIT; +#else +_prefs.sx12xx_current_limit = 140; // mA +#endif +#if (RADIO_CLASS == CustomSX1262) || (RADIO_CLASS == CustomSX1268) +#ifdef SX126X_RX_BOOSTED_GAIN + _prefs.sx126x_rx_boosted_gain = SX126X_RX_BOOSTED_GAIN; +#else + _prefs.sx126x_rx_boosted_gain = 1; // enabled by default; +#endif +#endif +#endif } void MyMesh::begin(FILESYSTEM *fs) { @@ -732,13 +749,15 @@ void MyMesh::begin(FILESYSTEM *fs) { radio_set_params(_prefs.freq, _prefs.bw, _prefs.sf, _prefs.cr); radio_set_tx_power(_prefs.tx_power_dbm); - // LNA and power settings -// #ifdef SX126X_CURRENT_LIMIT -// setCurrentLimit(SX126X_CURRENT_LIMIT); -// #endif -// #ifdef SX126X_RX_BOOSTED_GAIN -// setRxBoostedGainMode(SX126X_RX_BOOSTED_GAIN); -// #endif +#if (RADIO_CLASS == CustomSX1262) || (RADIO_CLASS == CustomSX1268) || (RADIO_CLASS == CustomSX1276) + radio_set_current_limit(_prefs.sx12xx_current_limit); + MESH_DEBUG_PRINTLN("SX12xx Current Limit: %d mA", radio_get_current_limit()); +#if (RADIO_CLASS == CustomSX1262) || (RADIO_CLASS == CustomSX1268) + radio_set_rx_boosted_gain_mode(_prefs.sx126x_rx_boosted_gain); + MESH_DEBUG_PRINTLN("SX126x RX Boosted Gain Mode: %s", + radio_get_rx_boosted_gain_mode() ? "Enabled" : "Disabled"); +#endif +#endif updateAdvertTimer(); updateFloodAdvertTimer(); diff --git a/examples/simple_repeater/MyMesh.h b/examples/simple_repeater/MyMesh.h index a194cacc0..3b83c5768 100644 --- a/examples/simple_repeater/MyMesh.h +++ b/examples/simple_repeater/MyMesh.h @@ -226,7 +226,14 @@ class MyMesh : public mesh::Mesh, public CommonCLICallbacks { } #endif -#if defined(SX126X_CURRENT_LIMIT) - void setCurrentLimit(uint8_t ma) { radio_set_current_limit(ma); } +#if (RADIO_CLASS == CustomSX1262) || (RADIO_CLASS == CustomSX1268) || (RADIO_CLASS == CustomSX1276) + void setCurrentLimit(uint8_t ma) override { + radio_set_current_limit(ma); + } +#if (RADIO_CLASS == CustomSX1262) || (RADIO_CLASS == CustomSX1268) + void setRxBoostedGain(bool enable) override { + radio_set_rx_boosted_gain_mode(enable); + } +#endif #endif }; diff --git a/src/helpers/CommonCLI.cpp b/src/helpers/CommonCLI.cpp index 33d509733..83ef4d4bf 100644 --- a/src/helpers/CommonCLI.cpp +++ b/src/helpers/CommonCLI.cpp @@ -72,7 +72,7 @@ void CommonCLI::loadPrefsInt(FILESYSTEM* fs, const char* filename) { file.read((uint8_t *)&_prefs->discovery_mod_timestamp, sizeof(_prefs->discovery_mod_timestamp)); // 162 file.read((uint8_t *)&_prefs->adc_multiplier, sizeof(_prefs->adc_multiplier)); // 166 file.read(pad, 4); // 169 : 4 bytes unused - file.read((uint8_t *)&_prefs->sx126x_current_limit, sizeof(_prefs->sx126x_current_limit)); // 173 + file.read((uint8_t *)&_prefs->sx12xx_current_limit, sizeof(_prefs->sx12xx_current_limit)); // 173 file.read((uint8_t *)&_prefs->sx126x_rx_boosted_gain, sizeof(_prefs->sx126x_rx_boosted_gain)); // 174 // next: 175 @@ -100,7 +100,7 @@ void CommonCLI::loadPrefsInt(FILESYSTEM* fs, const char* filename) { _prefs->advert_loc_policy = constrain(_prefs->advert_loc_policy, 0, 2); // sanitise power settings - _prefs->sx126x_current_limit = constrain(_prefs->sx126x_current_limit, 0, 140); // mA + _prefs->sx12xx_current_limit = constrain(_prefs->sx12xx_current_limit, 0, 140); // mA _prefs->sx126x_rx_boosted_gain = constrain(_prefs->sx126x_rx_boosted_gain, 0, 1); // boolean file.close(); @@ -159,7 +159,7 @@ void CommonCLI::savePrefs(FILESYSTEM* fs) { file.write((uint8_t *)&_prefs->discovery_mod_timestamp, sizeof(_prefs->discovery_mod_timestamp)); // 162 file.write((uint8_t *)&_prefs->adc_multiplier, sizeof(_prefs->adc_multiplier)); // 166 file.write(pad, 4); // 169 : 4 bytes unused - file.write((uint8_t *)&_prefs->sx126x_current_limit, sizeof(_prefs->sx126x_current_limit)); // 173 + file.write((uint8_t *)&_prefs->sx12xx_current_limit, sizeof(_prefs->sx12xx_current_limit)); // 173 file.write((uint8_t *)&_prefs->sx126x_rx_boosted_gain, sizeof(_prefs->sx126x_rx_boosted_gain)); // 174 // next: 175 @@ -294,6 +294,14 @@ void CommonCLI::handleCommand(uint32_t sender_timestamp, const char* command, ch sprintf(reply, "> %s", StrHelper::ftoa(_prefs->node_lat)); } else if (memcmp(config, "lon", 3) == 0) { sprintf(reply, "> %s", StrHelper::ftoa(_prefs->node_lon)); +#if (RADIO_CLASS == CustomSX1262) || (RADIO_CLASS == CustomSX1268) || (RADIO_CLASS == CustomSX1276) + } else if (memcmp(config, "radio.current", 13) == 0) { + sprintf(reply, "> %d mA", (uint8_t)_prefs->sx12xx_current_limit); +#if (RADIO_CLASS == CustomSX1262) || (RADIO_CLASS == CustomSX1268) + } else if (memcmp(config, "radio.rxbgm", 11) == 0) { + sprintf(reply, "> %s", _prefs->sx126x_rx_boosted_gain ? "on" : "off"); +#endif +#endif } else if (memcmp(config, "radio", 5) == 0) { char freq[16], bw[16]; strcpy(freq, StrHelper::ftoa(_prefs->freq)); @@ -351,14 +359,6 @@ void CommonCLI::handleCommand(uint32_t sender_timestamp, const char* command, ch } else { sprintf(reply, "> %.3f", adc_mult); } -#ifdef SX126X_CURRENT_LIMIT - } else if (memcmp(config, "sx126x.current", 14) == 0) { - sprintf(reply, "> %d mA", (uint8_t)_prefs->sx126x_current_limit); -#endif -#ifdef SX126X_RX_BOOSTED_GAIN - } else if (memcmp(config, "sx126x.rxboost", 14) == 0) { - sprintf(reply, "> %s", _prefs->sx126x_rx_boosted_gain ? "on" : "off"); -#endif } else { sprintf(reply, "??: %s", config); } @@ -431,6 +431,20 @@ void CommonCLI::handleCommand(uint32_t sender_timestamp, const char* command, ch _prefs->disable_fwd = memcmp(&config[7], "off", 3) == 0; savePrefs(); strcpy(reply, _prefs->disable_fwd ? "OK - repeat is now OFF" : "OK - repeat is now ON"); +#if (RADIO_CLASS == CustomSX1262) || (RADIO_CLASS == CustomSX1268) || (RADIO_CLASS == CustomSX1276) + } else if (memcmp(config, "radio.current ", 14) == 0) { + _prefs->sx12xx_current_limit = atoi(&config[14]); + strcpy(reply, "OK"); + savePrefs(); + _callbacks->setCurrentLimit(_prefs->sx12xx_current_limit); +#if (RADIO_CLASS == CustomSX1262) || (RADIO_CLASS == CustomSX1268) + } else if (memcmp(config, "radio.rxbgm ", 12) == 0) { + _prefs->sx126x_rx_boosted_gain = memcmp(&config[12], "on", 2) == 0; + strcpy(reply, "OK"); + savePrefs(); + _callbacks->setRxBoostedGain(_prefs->sx126x_rx_boosted_gain); +#endif +#endif } else if (memcmp(config, "radio ", 6) == 0) { strcpy(tmp, &config[6]); const char *parts[4]; @@ -564,20 +578,6 @@ void CommonCLI::handleCommand(uint32_t sender_timestamp, const char* command, ch _prefs->adc_multiplier = 0.0f; strcpy(reply, "Error: unsupported by this board"); }; -#ifdef SX126X_CURRENT_LIMIT - } else if (memcmp(config, "sx126x.current ", 15) == 0) { - _prefs->sx126x_current_limit = atoi(&config[15]); - strcpy(reply, "OK"); - savePrefs(); - _callbacks->setCurrentLimit(_prefs->sx126x_current_limit); -#endif -#ifdef SX126X_RX_BOOSTED_GAIN - } else if (memcmp(config, "sx126x.rxboost ", 15) == 0) { - _prefs->sx126x_rx_boosted_gain = memcmp(&config[15], "on", 2) == 0; - strcpy(reply, "OK"); - savePrefs(); - _callbacks->setRxBoostedGain(_prefs->sx126x_rx_boosted_gain); -#endif } else { sprintf(reply, "unknown config: %s", config); } diff --git a/src/helpers/CommonCLI.h b/src/helpers/CommonCLI.h index 5458a5a78..a0363f758 100644 --- a/src/helpers/CommonCLI.h +++ b/src/helpers/CommonCLI.h @@ -49,7 +49,7 @@ struct NodePrefs { // persisted to file uint32_t discovery_mod_timestamp; float adc_multiplier; // Power settings - uint8_t sx126x_current_limit; + uint8_t sx12xx_current_limit; uint8_t sx126x_rx_boosted_gain; }; diff --git a/src/helpers/radiolib/CustomSX1262.h b/src/helpers/radiolib/CustomSX1262.h index bfaea7c76..1927f28f3 100644 --- a/src/helpers/radiolib/CustomSX1262.h +++ b/src/helpers/radiolib/CustomSX1262.h @@ -84,4 +84,10 @@ class CustomSX1262 : public SX1262 { bool detected = (irq & SX126X_IRQ_HEADER_VALID) || (irq & SX126X_IRQ_PREAMBLE_DETECTED); return detected; } + + uint8_t getRxBoostedGainMode() { + uint8_t rxGain = 0; + readRegister(RADIOLIB_SX126X_REG_RX_GAIN, &rxGain, 1); + return rxGain; + } }; \ No newline at end of file diff --git a/src/helpers/radiolib/CustomSX1268.h b/src/helpers/radiolib/CustomSX1268.h index 1e2e26204..dd772b746 100644 --- a/src/helpers/radiolib/CustomSX1268.h +++ b/src/helpers/radiolib/CustomSX1268.h @@ -84,4 +84,10 @@ class CustomSX1268 : public SX1268 { bool detected = (irq & SX126X_IRQ_HEADER_VALID) || (irq & SX126X_IRQ_PREAMBLE_DETECTED); return detected; } + + uint8_t getRxBoostedGainMode() { + uint8_t rxGain = 0; + readRegister(RADIOLIB_SX126X_REG_RX_GAIN, &rxGain, 1); + return rxGain; + } }; \ No newline at end of file diff --git a/variants/heltec_v3/target.cpp b/variants/heltec_v3/target.cpp index 78b881972..9eea0627d 100644 --- a/variants/heltec_v3/target.cpp +++ b/variants/heltec_v3/target.cpp @@ -58,3 +58,19 @@ mesh::LocalIdentity radio_new_identity() { RadioNoiseListener rng(radio); return mesh::LocalIdentity(&rng); // create new random identity } + +void radio_set_current_limit(uint8_t ma) { + radio.setCurrentLimit(ma); +} + +uint8_t radio_get_current_limit() { + return radio.getCurrentLimit(); +} + +void radio_set_rx_boosted_gain_mode(bool rxbgm) { + radio.setRxBoostedGainMode(rxbgm); +} + +bool radio_get_rx_boosted_gain_mode() { + return radio.getRxBoostedGainMode(); +} diff --git a/variants/heltec_v3/target.h b/variants/heltec_v3/target.h index 2dd30a591..65e06dd5a 100644 --- a/variants/heltec_v3/target.h +++ b/variants/heltec_v3/target.h @@ -27,6 +27,9 @@ bool radio_init(); uint32_t radio_get_rng_seed(); void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr); void radio_set_tx_power(uint8_t dbm); -void radio_set_current_limit(uint8_t ma); -void radio_set_rx_boosted_gain(bool enable); mesh::LocalIdentity radio_new_identity(); + +bool radio_get_rx_boosted_gain_mode(); +uint8_t radio_get_current_limit(); +void radio_set_current_limit(uint8_t ma); +void radio_set_rx_boosted_gain_mode(bool rxbgm); \ No newline at end of file From 920376139cf14e3f03b01d9da10d0045697b8bab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Br=C3=A1zio?= Date: Sun, 30 Nov 2025 12:31:14 +0000 Subject: [PATCH 03/30] Update ebyte_eora_s3 board --- variants/ebyte_eora_s3/target.cpp | 16 ++++++++++++++++ variants/ebyte_eora_s3/target.h | 5 +++++ 2 files changed, 21 insertions(+) diff --git a/variants/ebyte_eora_s3/target.cpp b/variants/ebyte_eora_s3/target.cpp index 647f59972..7b400f8d6 100644 --- a/variants/ebyte_eora_s3/target.cpp +++ b/variants/ebyte_eora_s3/target.cpp @@ -83,3 +83,19 @@ mesh::LocalIdentity radio_new_identity() { RadioNoiseListener rng(radio); return mesh::LocalIdentity(&rng); // create new random identity } + +void radio_set_current_limit(uint8_t ma) { + radio.setCurrentLimit(ma); +} + +uint8_t radio_get_current_limit() { + return radio.getCurrentLimit(); +} + +void radio_set_rx_boosted_gain_mode(bool rxbgm) { + radio.setRxBoostedGainMode(rxbgm); +} + +bool radio_get_rx_boosted_gain_mode() { + return radio.getRxBoostedGainMode(); +} \ No newline at end of file diff --git a/variants/ebyte_eora_s3/target.h b/variants/ebyte_eora_s3/target.h index f184c7575..a0c897d79 100644 --- a/variants/ebyte_eora_s3/target.h +++ b/variants/ebyte_eora_s3/target.h @@ -27,3 +27,8 @@ uint32_t radio_get_rng_seed(); void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr); void radio_set_tx_power(uint8_t dbm); mesh::LocalIdentity radio_new_identity(); + +bool radio_get_rx_boosted_gain_mode(); +uint8_t radio_get_current_limit(); +void radio_set_current_limit(uint8_t ma); +void radio_set_rx_boosted_gain_mode(bool rxbgm); \ No newline at end of file From 3c30f8fa02d1cff9ad2c4c65e6ca63f2ac2664f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Br=C3=A1zio?= Date: Sun, 30 Nov 2025 12:32:23 +0000 Subject: [PATCH 04/30] Update heltec_ct62 board --- variants/heltec_ct62/target.cpp | 16 ++++++++++++++++ variants/heltec_ct62/target.h | 7 ++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/variants/heltec_ct62/target.cpp b/variants/heltec_ct62/target.cpp index a8c15f5ff..e2ab38a9a 100644 --- a/variants/heltec_ct62/target.cpp +++ b/variants/heltec_ct62/target.cpp @@ -34,4 +34,20 @@ void radio_set_tx_power(uint8_t dbm) { mesh::LocalIdentity radio_new_identity() { RadioNoiseListener rng(radio); return mesh::LocalIdentity(&rng); // create new random identity +} + +void radio_set_current_limit(uint8_t ma) { + radio.setCurrentLimit(ma); +} + +uint8_t radio_get_current_limit() { + return radio.getCurrentLimit(); +} + +void radio_set_rx_boosted_gain_mode(bool rxbgm) { + radio.setRxBoostedGainMode(rxbgm); +} + +bool radio_get_rx_boosted_gain_mode() { + return radio.getRxBoostedGainMode(); } \ No newline at end of file diff --git a/variants/heltec_ct62/target.h b/variants/heltec_ct62/target.h index 9639ab2df..aba1504d7 100644 --- a/variants/heltec_ct62/target.h +++ b/variants/heltec_ct62/target.h @@ -17,4 +17,9 @@ bool radio_init(); uint32_t radio_get_rng_seed(); void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr); void radio_set_tx_power(uint8_t dbm); -mesh::LocalIdentity radio_new_identity(); \ No newline at end of file +mesh::LocalIdentity radio_new_identity(); + +bool radio_get_rx_boosted_gain_mode(); +uint8_t radio_get_current_limit(); +void radio_set_current_limit(uint8_t ma); +void radio_set_rx_boosted_gain_mode(bool rxbgm); \ No newline at end of file From d5e75e297ea28f3fada1539b1872763037867a1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Br=C3=A1zio?= Date: Sun, 30 Nov 2025 12:33:39 +0000 Subject: [PATCH 05/30] Update heltec_e213 board --- variants/heltec_e213/target.cpp | 16 ++++++++++++++++ variants/heltec_e213/target.h | 7 ++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/variants/heltec_e213/target.cpp b/variants/heltec_e213/target.cpp index 23561850e..989bb7d14 100644 --- a/variants/heltec_e213/target.cpp +++ b/variants/heltec_e213/target.cpp @@ -52,3 +52,19 @@ mesh::LocalIdentity radio_new_identity() { RadioNoiseListener rng(radio); return mesh::LocalIdentity(&rng); // create new random identity } + +void radio_set_current_limit(uint8_t ma) { + radio.setCurrentLimit(ma); +} + +uint8_t radio_get_current_limit() { + return radio.getCurrentLimit(); +} + +void radio_set_rx_boosted_gain_mode(bool rxbgm) { + radio.setRxBoostedGainMode(rxbgm); +} + +bool radio_get_rx_boosted_gain_mode() { + return radio.getRxBoostedGainMode(); +} \ No newline at end of file diff --git a/variants/heltec_e213/target.h b/variants/heltec_e213/target.h index 9ecdc212a..efc73068e 100644 --- a/variants/heltec_e213/target.h +++ b/variants/heltec_e213/target.h @@ -26,4 +26,9 @@ bool radio_init(); uint32_t radio_get_rng_seed(); void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr); void radio_set_tx_power(uint8_t dbm); -mesh::LocalIdentity radio_new_identity(); \ No newline at end of file +mesh::LocalIdentity radio_new_identity(); + +bool radio_get_rx_boosted_gain_mode(); +uint8_t radio_get_current_limit(); +void radio_set_current_limit(uint8_t ma); +void radio_set_rx_boosted_gain_mode(bool rxbgm); \ No newline at end of file From 1eebdbe5601aec995952538f24ef69832aa51c02 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Br=C3=A1zio?= Date: Sun, 30 Nov 2025 12:35:46 +0000 Subject: [PATCH 06/30] Update heltec_e290 board --- .devcontainer/devcontainer.json | 42 +++++++++++++++++++++++++++++++++ variants/heltec_e290/target.cpp | 16 +++++++++++++ variants/heltec_e290/target.h | 7 +++++- 3 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 .devcontainer/devcontainer.json diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 000000000..e0add320d --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,42 @@ +{ + "name": "MeshCore", + "image": "mcr.microsoft.com/devcontainers/python:3-bookworm", + "features": { + "ghcr.io/rocker-org/devcontainer-features/apt-packages:1": { + "packages": [ + "sudo" + ] + } + }, + "runArgs": [ + "--network=host", + "--privileged", + "-v", + "/dev/bus/usb:/dev/bus/usb" + ], + "postCreateCommand": { + "platformio": "pipx install platformio" + }, + "customizations": { + "vscode": { + "settings": { + "platformio-ide.disablePIOHomeStartup": true, + "editor.formatOnSave": false, + "workbench.colorCustomizations": { + "titleBar.activeBackground": "#0d1a2b", + "titleBar.activeForeground": "#ffffff", + "titleBar.inactiveBackground": "#0d1a2b99", + "titleBar.inactiveForeground": "#ffffff99" + } + }, + "extensions": [ + "platformio.platformio-ide", + "github.vscode-github-actions", + "GitHub.vscode-pull-request-github" + ], + "unwantedRecommendations": [ + "ms-vscode.cpptools-extension-pack" + ] + } + } +} \ No newline at end of file diff --git a/variants/heltec_e290/target.cpp b/variants/heltec_e290/target.cpp index 92b02092e..044ba76e0 100644 --- a/variants/heltec_e290/target.cpp +++ b/variants/heltec_e290/target.cpp @@ -52,3 +52,19 @@ mesh::LocalIdentity radio_new_identity() { RadioNoiseListener rng(radio); return mesh::LocalIdentity(&rng); // create new random identity } + +void radio_set_current_limit(uint8_t ma) { + radio.setCurrentLimit(ma); +} + +uint8_t radio_get_current_limit() { + return radio.getCurrentLimit(); +} + +void radio_set_rx_boosted_gain_mode(bool rxbgm) { + radio.setRxBoostedGainMode(rxbgm); +} + +bool radio_get_rx_boosted_gain_mode() { + return radio.getRxBoostedGainMode(); +} \ No newline at end of file diff --git a/variants/heltec_e290/target.h b/variants/heltec_e290/target.h index 607701127..d01237569 100644 --- a/variants/heltec_e290/target.h +++ b/variants/heltec_e290/target.h @@ -26,4 +26,9 @@ bool radio_init(); uint32_t radio_get_rng_seed(); void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr); void radio_set_tx_power(uint8_t dbm); -mesh::LocalIdentity radio_new_identity(); \ No newline at end of file +mesh::LocalIdentity radio_new_identity(); + +bool radio_get_rx_boosted_gain_mode(); +uint8_t radio_get_current_limit(); +void radio_set_current_limit(uint8_t ma); +void radio_set_rx_boosted_gain_mode(bool rxbgm); \ No newline at end of file From 80274d990662d2c939a6766369d174a660904b71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Br=C3=A1zio?= Date: Sun, 30 Nov 2025 12:39:41 +0000 Subject: [PATCH 07/30] Update heltec_mesh_solar board --- variants/heltec_mesh_solar/target.cpp | 16 ++++++++++++++++ variants/heltec_mesh_solar/target.h | 5 +++++ 2 files changed, 21 insertions(+) diff --git a/variants/heltec_mesh_solar/target.cpp b/variants/heltec_mesh_solar/target.cpp index ad79f7171..cffd24610 100644 --- a/variants/heltec_mesh_solar/target.cpp +++ b/variants/heltec_mesh_solar/target.cpp @@ -121,3 +121,19 @@ bool SolarSensorManager::setSettingValue(const char* name, const char* value) { } return false; // not supported } + +void radio_set_current_limit(uint8_t ma) { + radio.setCurrentLimit(ma); +} + +uint8_t radio_get_current_limit() { + return radio.getCurrentLimit(); +} + +void radio_set_rx_boosted_gain_mode(bool rxbgm) { + radio.setRxBoostedGainMode(rxbgm); +} + +bool radio_get_rx_boosted_gain_mode() { + return radio.getRxBoostedGainMode(); +} \ No newline at end of file diff --git a/variants/heltec_mesh_solar/target.h b/variants/heltec_mesh_solar/target.h index e301a2735..2432cde87 100644 --- a/variants/heltec_mesh_solar/target.h +++ b/variants/heltec_mesh_solar/target.h @@ -44,3 +44,8 @@ uint32_t radio_get_rng_seed(); void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr); void radio_set_tx_power(uint8_t dbm); mesh::LocalIdentity radio_new_identity(); + +bool radio_get_rx_boosted_gain_mode(); +uint8_t radio_get_current_limit(); +void radio_set_current_limit(uint8_t ma); +void radio_set_rx_boosted_gain_mode(bool rxbgm); \ No newline at end of file From ca4380ce8457c8c54448aca53e0ccaaf14f99387 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Br=C3=A1zio?= Date: Sun, 30 Nov 2025 12:40:56 +0000 Subject: [PATCH 08/30] Update heltec_t114 board --- variants/heltec_t114/target.cpp | 16 ++++++++++++++++ variants/heltec_t114/target.h | 5 +++++ 2 files changed, 21 insertions(+) diff --git a/variants/heltec_t114/target.cpp b/variants/heltec_t114/target.cpp index c3341103a..a4ab6d7ec 100644 --- a/variants/heltec_t114/target.cpp +++ b/variants/heltec_t114/target.cpp @@ -131,3 +131,19 @@ bool T114SensorManager::setSettingValue(const char* name, const char* value) { } return false; // not supported } + +void radio_set_current_limit(uint8_t ma) { + radio.setCurrentLimit(ma); +} + +uint8_t radio_get_current_limit() { + return radio.getCurrentLimit(); +} + +void radio_set_rx_boosted_gain_mode(bool rxbgm) { + radio.setRxBoostedGainMode(rxbgm); +} + +bool radio_get_rx_boosted_gain_mode() { + return radio.getRxBoostedGainMode(); +} \ No newline at end of file diff --git a/variants/heltec_t114/target.h b/variants/heltec_t114/target.h index 6306cd699..cb2c20ba2 100644 --- a/variants/heltec_t114/target.h +++ b/variants/heltec_t114/target.h @@ -52,3 +52,8 @@ uint32_t radio_get_rng_seed(); void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr); void radio_set_tx_power(uint8_t dbm); mesh::LocalIdentity radio_new_identity(); + +bool radio_get_rx_boosted_gain_mode(); +uint8_t radio_get_current_limit(); +void radio_set_current_limit(uint8_t ma); +void radio_set_rx_boosted_gain_mode(bool rxbgm); \ No newline at end of file From 3c7d3c6e03f3c5974505df2c8dfc2005a5f1b604 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Br=C3=A1zio?= Date: Sun, 30 Nov 2025 12:42:30 +0000 Subject: [PATCH 09/30] Update heltec_t190 board --- variants/heltec_t190/target.cpp | 16 ++++++++++++++++ variants/heltec_t190/target.h | 7 ++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/variants/heltec_t190/target.cpp b/variants/heltec_t190/target.cpp index b93575943..e7d7e5b09 100644 --- a/variants/heltec_t190/target.cpp +++ b/variants/heltec_t190/target.cpp @@ -52,3 +52,19 @@ mesh::LocalIdentity radio_new_identity() { RadioNoiseListener rng(radio); return mesh::LocalIdentity(&rng); // create new random identity } + +void radio_set_current_limit(uint8_t ma) { + radio.setCurrentLimit(ma); +} + +uint8_t radio_get_current_limit() { + return radio.getCurrentLimit(); +} + +void radio_set_rx_boosted_gain_mode(bool rxbgm) { + radio.setRxBoostedGainMode(rxbgm); +} + +bool radio_get_rx_boosted_gain_mode() { + return radio.getRxBoostedGainMode(); +} \ No newline at end of file diff --git a/variants/heltec_t190/target.h b/variants/heltec_t190/target.h index 8a5fc716f..e9726a28f 100644 --- a/variants/heltec_t190/target.h +++ b/variants/heltec_t190/target.h @@ -26,4 +26,9 @@ bool radio_init(); uint32_t radio_get_rng_seed(); void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr); void radio_set_tx_power(uint8_t dbm); -mesh::LocalIdentity radio_new_identity(); \ No newline at end of file +mesh::LocalIdentity radio_new_identity(); + +bool radio_get_rx_boosted_gain_mode(); +uint8_t radio_get_current_limit(); +void radio_set_current_limit(uint8_t ma); +void radio_set_rx_boosted_gain_mode(bool rxbgm); \ No newline at end of file From 92ab535b9d8a40c10e6f05ec1745bf72ca34f0e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Br=C3=A1zio?= Date: Sun, 30 Nov 2025 12:43:35 +0000 Subject: [PATCH 10/30] Update heltec_tracker --- variants/heltec_tracker/target.cpp | 16 ++++++++++++++++ variants/heltec_tracker/target.h | 5 +++++ 2 files changed, 21 insertions(+) diff --git a/variants/heltec_tracker/target.cpp b/variants/heltec_tracker/target.cpp index 5ba9a8fb4..40ae03726 100644 --- a/variants/heltec_tracker/target.cpp +++ b/variants/heltec_tracker/target.cpp @@ -124,3 +124,19 @@ bool HWTSensorManager::setSettingValue(const char* name, const char* value) { } return false; // not supported } + +void radio_set_current_limit(uint8_t ma) { + radio.setCurrentLimit(ma); +} + +uint8_t radio_get_current_limit() { + return radio.getCurrentLimit(); +} + +void radio_set_rx_boosted_gain_mode(bool rxbgm) { + radio.setRxBoostedGainMode(rxbgm); +} + +bool radio_get_rx_boosted_gain_mode() { + return radio.getRxBoostedGainMode(); +} \ No newline at end of file diff --git a/variants/heltec_tracker/target.h b/variants/heltec_tracker/target.h index 8ac5eb720..0b5df65d7 100644 --- a/variants/heltec_tracker/target.h +++ b/variants/heltec_tracker/target.h @@ -45,3 +45,8 @@ uint32_t radio_get_rng_seed(); void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr); void radio_set_tx_power(uint8_t dbm); mesh::LocalIdentity radio_new_identity(); + +bool radio_get_rx_boosted_gain_mode(); +uint8_t radio_get_current_limit(); +void radio_set_current_limit(uint8_t ma); +void radio_set_rx_boosted_gain_mode(bool rxbgm); \ No newline at end of file From a0319075c2cb5b04ac3bf20a8a109f3cad06cedd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Br=C3=A1zio?= Date: Sun, 30 Nov 2025 12:51:20 +0000 Subject: [PATCH 11/30] Updated mesh_pocket board --- variants/mesh_pocket/target.cpp | 16 ++++++++++++++++ variants/mesh_pocket/target.h | 5 +++++ 2 files changed, 21 insertions(+) diff --git a/variants/mesh_pocket/target.cpp b/variants/mesh_pocket/target.cpp index a7f6c7fb1..2a874de7d 100644 --- a/variants/mesh_pocket/target.cpp +++ b/variants/mesh_pocket/target.cpp @@ -42,3 +42,19 @@ mesh::LocalIdentity radio_new_identity() { RadioNoiseListener rng(radio); return mesh::LocalIdentity(&rng); // create new random identity } + +void radio_set_current_limit(uint8_t ma) { + radio.setCurrentLimit(ma); +} + +uint8_t radio_get_current_limit() { + return radio.getCurrentLimit(); +} + +void radio_set_rx_boosted_gain_mode(bool rxbgm) { + radio.setRxBoostedGainMode(rxbgm); +} + +bool radio_get_rx_boosted_gain_mode() { + return radio.getRxBoostedGainMode(); +} diff --git a/variants/mesh_pocket/target.h b/variants/mesh_pocket/target.h index 2aa956693..54d981df8 100644 --- a/variants/mesh_pocket/target.h +++ b/variants/mesh_pocket/target.h @@ -31,3 +31,8 @@ mesh::LocalIdentity radio_new_identity(); extern SensorManager sensors; +bool radio_get_rx_boosted_gain_mode(); +uint8_t radio_get_current_limit(); +void radio_set_current_limit(uint8_t ma); +void radio_set_rx_boosted_gain_mode(bool rxbgm); + From 79cebd713ddb8cd8304054840ca1ed651b1ea0be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Br=C3=A1zio?= Date: Sun, 30 Nov 2025 12:52:02 +0000 Subject: [PATCH 12/30] Updated thinknode_m1 board --- variants/thinknode_m1/target.cpp | 16 ++++++++++++++++ variants/thinknode_m1/target.h | 5 +++++ 2 files changed, 21 insertions(+) diff --git a/variants/thinknode_m1/target.cpp b/variants/thinknode_m1/target.cpp index 2b04d7c6e..783a9c6ae 100644 --- a/variants/thinknode_m1/target.cpp +++ b/variants/thinknode_m1/target.cpp @@ -150,3 +150,19 @@ bool ThinkNodeM1SensorManager::setSettingValue(const char* name, const char* val } return false; // not supported } + +void radio_set_current_limit(uint8_t ma) { + radio.setCurrentLimit(ma); +} + +uint8_t radio_get_current_limit() { + return radio.getCurrentLimit(); +} + +void radio_set_rx_boosted_gain_mode(bool rxbgm) { + radio.setRxBoostedGainMode(rxbgm); +} + +bool radio_get_rx_boosted_gain_mode() { + return radio.getRxBoostedGainMode(); +} diff --git a/variants/thinknode_m1/target.h b/variants/thinknode_m1/target.h index 1e4e1381f..a7cb97758 100644 --- a/variants/thinknode_m1/target.h +++ b/variants/thinknode_m1/target.h @@ -46,3 +46,8 @@ uint32_t radio_get_rng_seed(); void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr); void radio_set_tx_power(uint8_t dbm); mesh::LocalIdentity radio_new_identity(); + +bool radio_get_rx_boosted_gain_mode(); +uint8_t radio_get_current_limit(); +void radio_set_current_limit(uint8_t ma); +void radio_set_rx_boosted_gain_mode(bool rxbgm); From f8c9864d08d07c8a91f7ee1dd3da01bf81c1a7e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Br=C3=A1zio?= Date: Sun, 30 Nov 2025 12:52:23 +0000 Subject: [PATCH 13/30] Updated promicro board --- variants/promicro/target.cpp | 16 ++++++++++++++++ variants/promicro/target.h | 5 +++++ 2 files changed, 21 insertions(+) diff --git a/variants/promicro/target.cpp b/variants/promicro/target.cpp index b26320e47..91e4d2ac8 100644 --- a/variants/promicro/target.cpp +++ b/variants/promicro/target.cpp @@ -49,3 +49,19 @@ mesh::LocalIdentity radio_new_identity() { return mesh::LocalIdentity(&rng); // create new random identity } +void radio_set_current_limit(uint8_t ma) { + radio.setCurrentLimit(ma); +} + +uint8_t radio_get_current_limit() { + return radio.getCurrentLimit(); +} + +void radio_set_rx_boosted_gain_mode(bool rxbgm) { + radio.setRxBoostedGainMode(rxbgm); +} + +bool radio_get_rx_boosted_gain_mode() { + return radio.getRxBoostedGainMode(); +} + diff --git a/variants/promicro/target.h b/variants/promicro/target.h index 38c4b4e88..c05be0258 100644 --- a/variants/promicro/target.h +++ b/variants/promicro/target.h @@ -28,3 +28,8 @@ uint32_t radio_get_rng_seed(); void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr); void radio_set_tx_power(uint8_t dbm); mesh::LocalIdentity radio_new_identity(); + +bool radio_get_rx_boosted_gain_mode(); +uint8_t radio_get_current_limit(); +void radio_set_current_limit(uint8_t ma); +void radio_set_rx_boosted_gain_mode(bool rxbgm); From a33f6c51c9d0f43b4da48240b629098046f613be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Br=C3=A1zio?= Date: Sun, 30 Nov 2025 12:52:40 +0000 Subject: [PATCH 14/30] Updated thinknode_m2 board --- variants/thinknode_m2/target.cpp | 16 ++++++++++++++++ variants/thinknode_m2/target.h | 6 +++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/variants/thinknode_m2/target.cpp b/variants/thinknode_m2/target.cpp index cb3c1624d..4cc6be379 100644 --- a/variants/thinknode_m2/target.cpp +++ b/variants/thinknode_m2/target.cpp @@ -55,3 +55,19 @@ mesh::LocalIdentity radio_new_identity() { return mesh::LocalIdentity(&rng); // create new random identity } +void radio_set_current_limit(uint8_t ma) { + radio.setCurrentLimit(ma); +} + +uint8_t radio_get_current_limit() { + return radio.getCurrentLimit(); +} + +void radio_set_rx_boosted_gain_mode(bool rxbgm) { + radio.setRxBoostedGainMode(rxbgm); +} + +bool radio_get_rx_boosted_gain_mode() { + return radio.getRxBoostedGainMode(); +} + diff --git a/variants/thinknode_m2/target.h b/variants/thinknode_m2/target.h index b05def8aa..1d6300dba 100644 --- a/variants/thinknode_m2/target.h +++ b/variants/thinknode_m2/target.h @@ -29,4 +29,8 @@ void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr); void radio_set_tx_power(uint8_t dbm); mesh::LocalIdentity radio_new_identity(); - \ No newline at end of file +bool radio_get_rx_boosted_gain_mode(); +uint8_t radio_get_current_limit(); +void radio_set_current_limit(uint8_t ma); +void radio_set_rx_boosted_gain_mode(bool rxbgm); + From 56a98a1387eddc1330d8e6285b869ec6cfa833f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Br=C3=A1zio?= Date: Sun, 30 Nov 2025 12:52:57 +0000 Subject: [PATCH 15/30] Updated xiao_rp2040 board --- variants/xiao_rp2040/target.cpp | 16 ++++++++++++++++ variants/xiao_rp2040/target.h | 5 +++++ 2 files changed, 21 insertions(+) diff --git a/variants/xiao_rp2040/target.cpp b/variants/xiao_rp2040/target.cpp index b7c199758..0c7a45d4f 100644 --- a/variants/xiao_rp2040/target.cpp +++ b/variants/xiao_rp2040/target.cpp @@ -47,3 +47,19 @@ mesh::LocalIdentity radio_new_identity() { RadioNoiseListener rng(radio); return mesh::LocalIdentity(&rng); // create new random identity } + +void radio_set_current_limit(uint8_t ma) { + radio.setCurrentLimit(ma); +} + +uint8_t radio_get_current_limit() { + return radio.getCurrentLimit(); +} + +void radio_set_rx_boosted_gain_mode(bool rxbgm) { + radio.setRxBoostedGainMode(rxbgm); +} + +bool radio_get_rx_boosted_gain_mode() { + return radio.getRxBoostedGainMode(); +} diff --git a/variants/xiao_rp2040/target.h b/variants/xiao_rp2040/target.h index 33b3766c2..29ab4e8d2 100644 --- a/variants/xiao_rp2040/target.h +++ b/variants/xiao_rp2040/target.h @@ -19,3 +19,8 @@ uint32_t radio_get_rng_seed(); void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr); void radio_set_tx_power(uint8_t dbm); mesh::LocalIdentity radio_new_identity(); + +bool radio_get_rx_boosted_gain_mode(); +uint8_t radio_get_current_limit(); +void radio_set_current_limit(uint8_t ma); +void radio_set_rx_boosted_gain_mode(bool rxbgm); From dbd53d4c836d8aecb2023f5958285f39ca6cef70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Br=C3=A1zio?= Date: Sun, 30 Nov 2025 12:53:20 +0000 Subject: [PATCH 16/30] Updated ikoka_nano_nrf board --- variants/ikoka_nano_nrf/target.cpp | 16 ++++++++++++++++ variants/ikoka_nano_nrf/target.h | 5 +++++ 2 files changed, 21 insertions(+) diff --git a/variants/ikoka_nano_nrf/target.cpp b/variants/ikoka_nano_nrf/target.cpp index aed591823..0c0736078 100644 --- a/variants/ikoka_nano_nrf/target.cpp +++ b/variants/ikoka_nano_nrf/target.cpp @@ -42,3 +42,19 @@ mesh::LocalIdentity radio_new_identity() { RadioNoiseListener rng(radio); return mesh::LocalIdentity(&rng); // create new random identity } + +void radio_set_current_limit(uint8_t ma) { + radio.setCurrentLimit(ma); +} + +uint8_t radio_get_current_limit() { + return radio.getCurrentLimit(); +} + +void radio_set_rx_boosted_gain_mode(bool rxbgm) { + radio.setRxBoostedGainMode(rxbgm); +} + +bool radio_get_rx_boosted_gain_mode() { + return radio.getRxBoostedGainMode(); +} diff --git a/variants/ikoka_nano_nrf/target.h b/variants/ikoka_nano_nrf/target.h index 9b4e908ec..382190beb 100644 --- a/variants/ikoka_nano_nrf/target.h +++ b/variants/ikoka_nano_nrf/target.h @@ -26,3 +26,8 @@ uint32_t radio_get_rng_seed(); void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr); void radio_set_tx_power(uint8_t dbm); mesh::LocalIdentity radio_new_identity(); + +bool radio_get_rx_boosted_gain_mode(); +uint8_t radio_get_current_limit(); +void radio_set_current_limit(uint8_t ma); +void radio_set_rx_boosted_gain_mode(bool rxbgm); From 8ba8ca2b39156b7acbed9a23e3c17b70e47fd33a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Br=C3=A1zio?= Date: Sun, 30 Nov 2025 12:53:58 +0000 Subject: [PATCH 17/30] Updated xiao_c3 board --- variants/xiao_c3/target.cpp | 16 ++++++++++++++++ variants/xiao_c3/target.h | 5 +++++ 2 files changed, 21 insertions(+) diff --git a/variants/xiao_c3/target.cpp b/variants/xiao_c3/target.cpp index fe3f7196a..3758ff819 100644 --- a/variants/xiao_c3/target.cpp +++ b/variants/xiao_c3/target.cpp @@ -54,3 +54,19 @@ mesh::LocalIdentity radio_new_identity() { RadioNoiseListener rng(radio); return mesh::LocalIdentity(&rng); // create new random identity } + +void radio_set_current_limit(uint8_t ma) { + radio.setCurrentLimit(ma); +} + +uint8_t radio_get_current_limit() { + return radio.getCurrentLimit(); +} + +void radio_set_rx_boosted_gain_mode(bool rxbgm) { + radio.setRxBoostedGainMode(rxbgm); +} + +bool radio_get_rx_boosted_gain_mode() { + return radio.getRxBoostedGainMode(); +} diff --git a/variants/xiao_c3/target.h b/variants/xiao_c3/target.h index a7ef44218..a1fb484de 100644 --- a/variants/xiao_c3/target.h +++ b/variants/xiao_c3/target.h @@ -18,3 +18,8 @@ uint32_t radio_get_rng_seed(); void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr); void radio_set_tx_power(uint8_t dbm); mesh::LocalIdentity radio_new_identity(); + +bool radio_get_rx_boosted_gain_mode(); +uint8_t radio_get_current_limit(); +void radio_set_current_limit(uint8_t ma); +void radio_set_rx_boosted_gain_mode(bool rxbgm); From ab3296dd39e5218672652f4d09562dfb3cc7e540 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Br=C3=A1zio?= Date: Sun, 30 Nov 2025 12:54:05 +0000 Subject: [PATCH 18/30] Updated heltec_tracker_v2 board --- variants/heltec_tracker_v2/target.cpp | 16 ++++++++++++++++ variants/heltec_tracker_v2/target.h | 5 +++++ 2 files changed, 21 insertions(+) diff --git a/variants/heltec_tracker_v2/target.cpp b/variants/heltec_tracker_v2/target.cpp index da397fb74..5604fef8a 100644 --- a/variants/heltec_tracker_v2/target.cpp +++ b/variants/heltec_tracker_v2/target.cpp @@ -58,3 +58,19 @@ mesh::LocalIdentity radio_new_identity() { RadioNoiseListener rng(radio); return mesh::LocalIdentity(&rng); // create new random identity } + +void radio_set_current_limit(uint8_t ma) { + radio.setCurrentLimit(ma); +} + +uint8_t radio_get_current_limit() { + return radio.getCurrentLimit(); +} + +void radio_set_rx_boosted_gain_mode(bool rxbgm) { + radio.setRxBoostedGainMode(rxbgm); +} + +bool radio_get_rx_boosted_gain_mode() { + return radio.getRxBoostedGainMode(); +} diff --git a/variants/heltec_tracker_v2/target.h b/variants/heltec_tracker_v2/target.h index 190404ef9..34357f1bf 100644 --- a/variants/heltec_tracker_v2/target.h +++ b/variants/heltec_tracker_v2/target.h @@ -28,3 +28,8 @@ uint32_t radio_get_rng_seed(); void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr); void radio_set_tx_power(uint8_t dbm); mesh::LocalIdentity radio_new_identity(); + +bool radio_get_rx_boosted_gain_mode(); +uint8_t radio_get_current_limit(); +void radio_set_current_limit(uint8_t ma); +void radio_set_rx_boosted_gain_mode(bool rxbgm); From 923a41c7620fed2e43ec666bac906dd24d613f2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Br=C3=A1zio?= Date: Sun, 30 Nov 2025 12:54:09 +0000 Subject: [PATCH 19/30] Updated waveshare_rp2040_lora board --- variants/waveshare_rp2040_lora/target.cpp | 16 ++++++++++++++++ variants/waveshare_rp2040_lora/target.h | 5 +++++ 2 files changed, 21 insertions(+) diff --git a/variants/waveshare_rp2040_lora/target.cpp b/variants/waveshare_rp2040_lora/target.cpp index 7bc1d0430..7e3281fd4 100644 --- a/variants/waveshare_rp2040_lora/target.cpp +++ b/variants/waveshare_rp2040_lora/target.cpp @@ -47,3 +47,19 @@ mesh::LocalIdentity radio_new_identity() { RadioNoiseListener rng(radio); return mesh::LocalIdentity(&rng); // create new random identity } + +void radio_set_current_limit(uint8_t ma) { + radio.setCurrentLimit(ma); +} + +uint8_t radio_get_current_limit() { + return radio.getCurrentLimit(); +} + +void radio_set_rx_boosted_gain_mode(bool rxbgm) { + radio.setRxBoostedGainMode(rxbgm); +} + +bool radio_get_rx_boosted_gain_mode() { + return radio.getRxBoostedGainMode(); +} diff --git a/variants/waveshare_rp2040_lora/target.h b/variants/waveshare_rp2040_lora/target.h index aed558939..6905c899e 100644 --- a/variants/waveshare_rp2040_lora/target.h +++ b/variants/waveshare_rp2040_lora/target.h @@ -19,3 +19,8 @@ uint32_t radio_get_rng_seed(); void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr); void radio_set_tx_power(uint8_t dbm); mesh::LocalIdentity radio_new_identity(); + +bool radio_get_rx_boosted_gain_mode(); +uint8_t radio_get_current_limit(); +void radio_set_current_limit(uint8_t ma); +void radio_set_rx_boosted_gain_mode(bool rxbgm); From 8d96df015976a14387741bc55caa67ba9c436b79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Br=C3=A1zio?= Date: Sun, 30 Nov 2025 12:54:12 +0000 Subject: [PATCH 20/30] Updated lilygo_techo board --- variants/lilygo_techo/target.cpp | 16 ++++++++++++++++ variants/lilygo_techo/target.h | 5 +++++ 2 files changed, 21 insertions(+) diff --git a/variants/lilygo_techo/target.cpp b/variants/lilygo_techo/target.cpp index 2ebc0641f..5a191e86d 100644 --- a/variants/lilygo_techo/target.cpp +++ b/variants/lilygo_techo/target.cpp @@ -51,3 +51,19 @@ mesh::LocalIdentity radio_new_identity() { return mesh::LocalIdentity(&rng); // create new random identity } +void radio_set_current_limit(uint8_t ma) { + radio.setCurrentLimit(ma); +} + +uint8_t radio_get_current_limit() { + return radio.getCurrentLimit(); +} + +void radio_set_rx_boosted_gain_mode(bool rxbgm) { + radio.setRxBoostedGainMode(rxbgm); +} + +bool radio_get_rx_boosted_gain_mode() { + return radio.getRxBoostedGainMode(); +} + diff --git a/variants/lilygo_techo/target.h b/variants/lilygo_techo/target.h index 2b6ed45fc..e1c06a77b 100644 --- a/variants/lilygo_techo/target.h +++ b/variants/lilygo_techo/target.h @@ -29,3 +29,8 @@ uint32_t radio_get_rng_seed(); void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr); void radio_set_tx_power(uint8_t dbm); mesh::LocalIdentity radio_new_identity(); + +bool radio_get_rx_boosted_gain_mode(); +uint8_t radio_get_current_limit(); +void radio_set_current_limit(uint8_t ma); +void radio_set_rx_boosted_gain_mode(bool rxbgm); From aa51eea1c11c5f9de9e1b0ba1059a8a75b1b771c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Br=C3=A1zio?= Date: Sun, 30 Nov 2025 12:54:14 +0000 Subject: [PATCH 21/30] Updated sensecap_solar board --- variants/sensecap_solar/target.cpp | 16 ++++++++++++++++ variants/sensecap_solar/target.h | 5 +++++ 2 files changed, 21 insertions(+) diff --git a/variants/sensecap_solar/target.cpp b/variants/sensecap_solar/target.cpp index 6bd7d31a7..c88866cac 100644 --- a/variants/sensecap_solar/target.cpp +++ b/variants/sensecap_solar/target.cpp @@ -37,3 +37,19 @@ mesh::LocalIdentity radio_new_identity() { RadioNoiseListener rng(radio); return mesh::LocalIdentity(&rng); // create new random identity } + +void radio_set_current_limit(uint8_t ma) { + radio.setCurrentLimit(ma); +} + +uint8_t radio_get_current_limit() { + return radio.getCurrentLimit(); +} + +void radio_set_rx_boosted_gain_mode(bool rxbgm) { + radio.setRxBoostedGainMode(rxbgm); +} + +bool radio_get_rx_boosted_gain_mode() { + return radio.getRxBoostedGainMode(); +} diff --git a/variants/sensecap_solar/target.h b/variants/sensecap_solar/target.h index 90d60ba52..1bc0783aa 100644 --- a/variants/sensecap_solar/target.h +++ b/variants/sensecap_solar/target.h @@ -19,3 +19,8 @@ uint32_t radio_get_rng_seed(); void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr); void radio_set_tx_power(uint8_t dbm); mesh::LocalIdentity radio_new_identity(); + +bool radio_get_rx_boosted_gain_mode(); +uint8_t radio_get_current_limit(); +void radio_set_current_limit(uint8_t ma); +void radio_set_rx_boosted_gain_mode(bool rxbgm); From 47a85d47c1ba54ea7d1770bdac96941e8175a73f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Br=C3=A1zio?= Date: Sun, 30 Nov 2025 12:54:19 +0000 Subject: [PATCH 22/30] Updated wio-tracker-l1 board --- variants/wio-tracker-l1/target.cpp | 16 ++++++++++++++++ variants/wio-tracker-l1/target.h | 5 +++++ 2 files changed, 21 insertions(+) diff --git a/variants/wio-tracker-l1/target.cpp b/variants/wio-tracker-l1/target.cpp index 64866de00..54256fc01 100644 --- a/variants/wio-tracker-l1/target.cpp +++ b/variants/wio-tracker-l1/target.cpp @@ -52,3 +52,19 @@ mesh::LocalIdentity radio_new_identity() { RadioNoiseListener rng(radio); return mesh::LocalIdentity(&rng); // create new random identity } + +void radio_set_current_limit(uint8_t ma) { + radio.setCurrentLimit(ma); +} + +uint8_t radio_get_current_limit() { + return radio.getCurrentLimit(); +} + +void radio_set_rx_boosted_gain_mode(bool rxbgm) { + radio.setRxBoostedGainMode(rxbgm); +} + +bool radio_get_rx_boosted_gain_mode() { + return radio.getRxBoostedGainMode(); +} diff --git a/variants/wio-tracker-l1/target.h b/variants/wio-tracker-l1/target.h index 97e575d89..2dad2f93e 100644 --- a/variants/wio-tracker-l1/target.h +++ b/variants/wio-tracker-l1/target.h @@ -35,3 +35,8 @@ uint32_t radio_get_rng_seed(); void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr); void radio_set_tx_power(uint8_t dbm); mesh::LocalIdentity radio_new_identity(); + +bool radio_get_rx_boosted_gain_mode(); +uint8_t radio_get_current_limit(); +void radio_set_current_limit(uint8_t ma); +void radio_set_rx_boosted_gain_mode(bool rxbgm); From 23a1722ead64c9e3c11dbbb8b4c05f3ad39716cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Br=C3=A1zio?= Date: Sun, 30 Nov 2025 12:54:27 +0000 Subject: [PATCH 23/30] Updated ikoka_stick_nrf board --- variants/ikoka_stick_nrf/target.cpp | 16 ++++++++++++++++ variants/ikoka_stick_nrf/target.h | 5 +++++ 2 files changed, 21 insertions(+) diff --git a/variants/ikoka_stick_nrf/target.cpp b/variants/ikoka_stick_nrf/target.cpp index bd803399b..34809f163 100644 --- a/variants/ikoka_stick_nrf/target.cpp +++ b/variants/ikoka_stick_nrf/target.cpp @@ -42,3 +42,19 @@ mesh::LocalIdentity radio_new_identity() { RadioNoiseListener rng(radio); return mesh::LocalIdentity(&rng); // create new random identity } + +void radio_set_current_limit(uint8_t ma) { + radio.setCurrentLimit(ma); +} + +uint8_t radio_get_current_limit() { + return radio.getCurrentLimit(); +} + +void radio_set_rx_boosted_gain_mode(bool rxbgm) { + radio.setRxBoostedGainMode(rxbgm); +} + +bool radio_get_rx_boosted_gain_mode() { + return radio.getRxBoostedGainMode(); +} diff --git a/variants/ikoka_stick_nrf/target.h b/variants/ikoka_stick_nrf/target.h index c276e89f2..aaccfb0f6 100644 --- a/variants/ikoka_stick_nrf/target.h +++ b/variants/ikoka_stick_nrf/target.h @@ -26,3 +26,8 @@ uint32_t radio_get_rng_seed(); void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr); void radio_set_tx_power(uint8_t dbm); mesh::LocalIdentity radio_new_identity(); + +bool radio_get_rx_boosted_gain_mode(); +uint8_t radio_get_current_limit(); +void radio_set_current_limit(uint8_t ma); +void radio_set_rx_boosted_gain_mode(bool rxbgm); From a6676f1caef6ec2139a400fbaeea5b2efc3b23f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Br=C3=A1zio?= Date: Sun, 30 Nov 2025 12:54:30 +0000 Subject: [PATCH 24/30] Updated tenstar_c3 board --- variants/tenstar_c3/target.cpp | 16 ++++++++++++++++ variants/tenstar_c3/target.h | 5 +++++ 2 files changed, 21 insertions(+) diff --git a/variants/tenstar_c3/target.cpp b/variants/tenstar_c3/target.cpp index a29780f09..f2f759877 100644 --- a/variants/tenstar_c3/target.cpp +++ b/variants/tenstar_c3/target.cpp @@ -46,3 +46,19 @@ mesh::LocalIdentity radio_new_identity() { RadioNoiseListener rng(radio); return mesh::LocalIdentity(&rng); // create new random identity } + +void radio_set_current_limit(uint8_t ma) { + radio.setCurrentLimit(ma); +} + +uint8_t radio_get_current_limit() { + return radio.getCurrentLimit(); +} + +void radio_set_rx_boosted_gain_mode(bool rxbgm) { + radio.setRxBoostedGainMode(rxbgm); +} + +bool radio_get_rx_boosted_gain_mode() { + return radio.getRxBoostedGainMode(); +} diff --git a/variants/tenstar_c3/target.h b/variants/tenstar_c3/target.h index fa29e52bd..a707010d5 100644 --- a/variants/tenstar_c3/target.h +++ b/variants/tenstar_c3/target.h @@ -19,3 +19,8 @@ uint32_t radio_get_rng_seed(); void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr); void radio_set_tx_power(uint8_t dbm); mesh::LocalIdentity radio_new_identity(); + +bool radio_get_rx_boosted_gain_mode(); +uint8_t radio_get_current_limit(); +void radio_set_current_limit(uint8_t ma); +void radio_set_rx_boosted_gain_mode(bool rxbgm); From 617c8e65bca4f18ea2d3f98c3a035fd4574076df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Br=C3=A1zio?= Date: Sun, 30 Nov 2025 13:22:23 +0000 Subject: [PATCH 25/30] Fix preprocessor conditions when building SX1276 --- examples/simple_repeater/MyMesh.cpp | 8 ++++---- examples/simple_repeater/MyMesh.h | 4 ++-- src/helpers/CommonCLI.cpp | 8 ++++---- src/helpers/radiolib/CustomSX1262.h | 4 +++- src/helpers/radiolib/CustomSX1268.h | 4 +++- src/helpers/radiolib/CustomSX1276.h | 28 ++++++++++++++++++++++++++++ 6 files changed, 44 insertions(+), 12 deletions(-) diff --git a/examples/simple_repeater/MyMesh.cpp b/examples/simple_repeater/MyMesh.cpp index 6e0188e6b..93f210fa1 100644 --- a/examples/simple_repeater/MyMesh.cpp +++ b/examples/simple_repeater/MyMesh.cpp @@ -713,7 +713,7 @@ MyMesh::MyMesh(mesh::MainBoard &board, mesh::Radio &radio, mesh::MillisecondCloc _prefs.adc_multiplier = 0.0f; // 0.0f means use default board multiplier -#if (RADIO_CLASS == CustomSX1262) || (RADIO_CLASS == CustomSX1268) || (RADIO_CLASS == CustomSX1276) +#if defined(USE_SX1262) || defined(USE_SX1268) || defined(USE_SX1276) #if defined(SX126X_CURRENT_LIMIT) _prefs.sx12xx_current_limit = SX126X_CURRENT_LIMIT; #elif defined(SX127X_CURRENT_LIMIT) @@ -721,7 +721,7 @@ _prefs.sx12xx_current_limit = SX127X_CURRENT_LIMIT; #else _prefs.sx12xx_current_limit = 140; // mA #endif -#if (RADIO_CLASS == CustomSX1262) || (RADIO_CLASS == CustomSX1268) +#if defined(USE_SX1262) || defined(USE_SX1268) #ifdef SX126X_RX_BOOSTED_GAIN _prefs.sx126x_rx_boosted_gain = SX126X_RX_BOOSTED_GAIN; #else @@ -749,10 +749,10 @@ void MyMesh::begin(FILESYSTEM *fs) { radio_set_params(_prefs.freq, _prefs.bw, _prefs.sf, _prefs.cr); radio_set_tx_power(_prefs.tx_power_dbm); -#if (RADIO_CLASS == CustomSX1262) || (RADIO_CLASS == CustomSX1268) || (RADIO_CLASS == CustomSX1276) +#if defined(USE_SX1262) || defined(USE_SX1268) || defined(USE_SX1276) radio_set_current_limit(_prefs.sx12xx_current_limit); MESH_DEBUG_PRINTLN("SX12xx Current Limit: %d mA", radio_get_current_limit()); -#if (RADIO_CLASS == CustomSX1262) || (RADIO_CLASS == CustomSX1268) +#if defined(USE_SX1262) || defined(USE_SX1268) radio_set_rx_boosted_gain_mode(_prefs.sx126x_rx_boosted_gain); MESH_DEBUG_PRINTLN("SX126x RX Boosted Gain Mode: %s", radio_get_rx_boosted_gain_mode() ? "Enabled" : "Disabled"); diff --git a/examples/simple_repeater/MyMesh.h b/examples/simple_repeater/MyMesh.h index 3b83c5768..c1f0fbbd9 100644 --- a/examples/simple_repeater/MyMesh.h +++ b/examples/simple_repeater/MyMesh.h @@ -226,11 +226,11 @@ class MyMesh : public mesh::Mesh, public CommonCLICallbacks { } #endif -#if (RADIO_CLASS == CustomSX1262) || (RADIO_CLASS == CustomSX1268) || (RADIO_CLASS == CustomSX1276) +#if defined(USE_SX1262) || defined(USE_SX1268) || defined(USE_SX1276) void setCurrentLimit(uint8_t ma) override { radio_set_current_limit(ma); } -#if (RADIO_CLASS == CustomSX1262) || (RADIO_CLASS == CustomSX1268) +#if defined(USE_SX1262) || defined(USE_SX1268) void setRxBoostedGain(bool enable) override { radio_set_rx_boosted_gain_mode(enable); } diff --git a/src/helpers/CommonCLI.cpp b/src/helpers/CommonCLI.cpp index 83ef4d4bf..8b8a7935f 100644 --- a/src/helpers/CommonCLI.cpp +++ b/src/helpers/CommonCLI.cpp @@ -294,10 +294,10 @@ void CommonCLI::handleCommand(uint32_t sender_timestamp, const char* command, ch sprintf(reply, "> %s", StrHelper::ftoa(_prefs->node_lat)); } else if (memcmp(config, "lon", 3) == 0) { sprintf(reply, "> %s", StrHelper::ftoa(_prefs->node_lon)); -#if (RADIO_CLASS == CustomSX1262) || (RADIO_CLASS == CustomSX1268) || (RADIO_CLASS == CustomSX1276) +#if defined(USE_SX1262) || defined(USE_SX1268) || defined(USE_SX1276) } else if (memcmp(config, "radio.current", 13) == 0) { sprintf(reply, "> %d mA", (uint8_t)_prefs->sx12xx_current_limit); -#if (RADIO_CLASS == CustomSX1262) || (RADIO_CLASS == CustomSX1268) +#if defined(USE_SX1262) || defined(USE_SX1268) } else if (memcmp(config, "radio.rxbgm", 11) == 0) { sprintf(reply, "> %s", _prefs->sx126x_rx_boosted_gain ? "on" : "off"); #endif @@ -431,13 +431,13 @@ void CommonCLI::handleCommand(uint32_t sender_timestamp, const char* command, ch _prefs->disable_fwd = memcmp(&config[7], "off", 3) == 0; savePrefs(); strcpy(reply, _prefs->disable_fwd ? "OK - repeat is now OFF" : "OK - repeat is now ON"); -#if (RADIO_CLASS == CustomSX1262) || (RADIO_CLASS == CustomSX1268) || (RADIO_CLASS == CustomSX1276) +#if defined(USE_SX1262) || defined(USE_SX1268) || defined(USE_SX1276) } else if (memcmp(config, "radio.current ", 14) == 0) { _prefs->sx12xx_current_limit = atoi(&config[14]); strcpy(reply, "OK"); savePrefs(); _callbacks->setCurrentLimit(_prefs->sx12xx_current_limit); -#if (RADIO_CLASS == CustomSX1262) || (RADIO_CLASS == CustomSX1268) +#if defined(USE_SX1262) || defined(USE_SX1268) } else if (memcmp(config, "radio.rxbgm ", 12) == 0) { _prefs->sx126x_rx_boosted_gain = memcmp(&config[12], "on", 2) == 0; strcpy(reply, "OK"); diff --git a/src/helpers/radiolib/CustomSX1262.h b/src/helpers/radiolib/CustomSX1262.h index 1927f28f3..2787e6415 100644 --- a/src/helpers/radiolib/CustomSX1262.h +++ b/src/helpers/radiolib/CustomSX1262.h @@ -2,9 +2,11 @@ #include -#define SX126X_IRQ_HEADER_VALID 0b0000010000 // 4 4 valid LoRa header received +#define SX126X_IRQ_HEADER_VALID 0b0000010000 // 4 4 valid LoRa header received #define SX126X_IRQ_PREAMBLE_DETECTED 0x04 +#define USE_SX1262 + class CustomSX1262 : public SX1262 { public: CustomSX1262(Module *mod) : SX1262(mod) { } diff --git a/src/helpers/radiolib/CustomSX1268.h b/src/helpers/radiolib/CustomSX1268.h index dd772b746..0ef17b1a2 100644 --- a/src/helpers/radiolib/CustomSX1268.h +++ b/src/helpers/radiolib/CustomSX1268.h @@ -2,9 +2,11 @@ #include -#define SX126X_IRQ_HEADER_VALID 0b0000010000 // 4 4 valid LoRa header received +#define SX126X_IRQ_HEADER_VALID 0b0000010000 // 4 4 valid LoRa header received #define SX126X_IRQ_PREAMBLE_DETECTED 0x04 +#define USE_SX1268 + class CustomSX1268 : public SX1268 { public: CustomSX1268(Module *mod) : SX1268(mod) { } diff --git a/src/helpers/radiolib/CustomSX1276.h b/src/helpers/radiolib/CustomSX1276.h index bee252743..2c2675afd 100644 --- a/src/helpers/radiolib/CustomSX1276.h +++ b/src/helpers/radiolib/CustomSX1276.h @@ -8,6 +8,8 @@ #define RH_RF95_MODEM_STATUS_SIGNAL_SYNCHRONIZED 0x02 #define RH_RF95_MODEM_STATUS_SIGNAL_DETECTED 0x01 +#define USE_SX1276 + class CustomSX1276 : public SX1276 { public: CustomSX1276(Module *mod) : SX1276(mod) { } @@ -87,4 +89,30 @@ class CustomSX1276 : public SX1276 { } return 0; // timed out } + + int16_t getCurrentLimit() { + // read the OCP register + int16_t state = this->mod->SPIgetRegValue(RADIOLIB_SX127X_REG_OCP); + if (state < 0) { + return (state); + } + uint8_t regVal = (uint8_t)state; + + // check if OCP is enabled + if ((regVal & RADIOLIB_SX127X_OCP_ON) == 0) { + return (0); + } + + // get the raw value (bits 0-4) + uint8_t raw = regVal & 0x1F; + + // determine the current limit based on the raw value + if (raw <= 15) { + // low range: currentLimit = 45 + raw * 5 + return (45 + raw * 5); + } else { + // high range: currentLimit = raw * 10 - 30 + return (raw * 10 - 30); + } + } }; From 8160688e6480cd29a950262eb702bf56c788fe34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Br=C3=A1zio?= Date: Sun, 30 Nov 2025 13:22:59 +0000 Subject: [PATCH 26/30] Updated heltec_v2 board --- variants/heltec_v2/target.cpp | 8 ++++++++ variants/heltec_v2/target.h | 3 +++ 2 files changed, 11 insertions(+) diff --git a/variants/heltec_v2/target.cpp b/variants/heltec_v2/target.cpp index df71d3f4b..9d0948f3e 100644 --- a/variants/heltec_v2/target.cpp +++ b/variants/heltec_v2/target.cpp @@ -51,3 +51,11 @@ mesh::LocalIdentity radio_new_identity() { RadioNoiseListener rng(radio); return mesh::LocalIdentity(&rng); // create new random identity } + +void radio_set_current_limit(uint8_t ma) { + radio.setCurrentLimit(ma); +} + +uint8_t radio_get_current_limit() { + return radio.getCurrentLimit(); +} \ No newline at end of file diff --git a/variants/heltec_v2/target.h b/variants/heltec_v2/target.h index 48d750be4..ca77eb26b 100644 --- a/variants/heltec_v2/target.h +++ b/variants/heltec_v2/target.h @@ -27,3 +27,6 @@ uint32_t radio_get_rng_seed(); void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr); void radio_set_tx_power(uint8_t dbm); mesh::LocalIdentity radio_new_identity(); + +bool radio_get_rx_boosted_gain_mode(); +void radio_set_current_limit(uint8_t ma); From 8a7b2145372d28a2521c2cb04ab8673fb5c5c8f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Br=C3=A1zio?= Date: Sun, 30 Nov 2025 13:23:21 +0000 Subject: [PATCH 27/30] Updates lilygo_t3s3_sx1276 board --- variants/lilygo_t3s3_sx1276/target.cpp | 8 ++++++++ variants/lilygo_t3s3_sx1276/target.h | 5 ++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/variants/lilygo_t3s3_sx1276/target.cpp b/variants/lilygo_t3s3_sx1276/target.cpp index 042ff2062..f1e80c202 100644 --- a/variants/lilygo_t3s3_sx1276/target.cpp +++ b/variants/lilygo_t3s3_sx1276/target.cpp @@ -51,4 +51,12 @@ void radio_set_tx_power(uint8_t dbm) { mesh::LocalIdentity radio_new_identity() { RadioNoiseListener rng(radio); return mesh::LocalIdentity(&rng); // create new random identity +} + +void radio_set_current_limit(uint8_t ma) { + radio.setCurrentLimit(ma); +} + +uint8_t radio_get_current_limit() { + return radio.getCurrentLimit(); } \ No newline at end of file diff --git a/variants/lilygo_t3s3_sx1276/target.h b/variants/lilygo_t3s3_sx1276/target.h index 98a0fe359..2612d1bc1 100644 --- a/variants/lilygo_t3s3_sx1276/target.h +++ b/variants/lilygo_t3s3_sx1276/target.h @@ -26,4 +26,7 @@ bool radio_init(); uint32_t radio_get_rng_seed(); void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr); void radio_set_tx_power(uint8_t dbm); -mesh::LocalIdentity radio_new_identity(); \ No newline at end of file +mesh::LocalIdentity radio_new_identity(); + +bool radio_get_rx_boosted_gain_mode(); +void radio_set_current_limit(uint8_t ma); \ No newline at end of file From 7341c34d47b47b474ea4cf23c23527b999da0b26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Br=C3=A1zio?= Date: Sun, 30 Nov 2025 13:23:43 +0000 Subject: [PATCH 28/30] Updated lilygo_tbeam_SX1276 board --- variants/lilygo_tbeam_SX1276/target.cpp | 8 ++++++++ variants/lilygo_tbeam_SX1276/target.h | 3 +++ 2 files changed, 11 insertions(+) diff --git a/variants/lilygo_tbeam_SX1276/target.cpp b/variants/lilygo_tbeam_SX1276/target.cpp index 0a7517a21..e6b22128f 100644 --- a/variants/lilygo_tbeam_SX1276/target.cpp +++ b/variants/lilygo_tbeam_SX1276/target.cpp @@ -58,3 +58,11 @@ mesh::LocalIdentity radio_new_identity() { RadioNoiseListener rng(radio); return mesh::LocalIdentity(&rng); // create new random identity } + +void radio_set_current_limit(uint8_t ma) { + radio.setCurrentLimit(ma); +} + +uint8_t radio_get_current_limit() { + return radio.getCurrentLimit(); +} \ No newline at end of file diff --git a/variants/lilygo_tbeam_SX1276/target.h b/variants/lilygo_tbeam_SX1276/target.h index b382b652d..c9bf8f630 100644 --- a/variants/lilygo_tbeam_SX1276/target.h +++ b/variants/lilygo_tbeam_SX1276/target.h @@ -27,3 +27,6 @@ uint32_t radio_get_rng_seed(); void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr); void radio_set_tx_power(uint8_t dbm); mesh::LocalIdentity radio_new_identity(); + +bool radio_get_rx_boosted_gain_mode(); +void radio_set_current_limit(uint8_t ma); \ No newline at end of file From 77779aa5cc9193feea9a8c5085de2f69346f2aad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Br=C3=A1zio?= Date: Sun, 30 Nov 2025 13:24:01 +0000 Subject: [PATCH 29/30] Updated lilygo_tlora_v2_1 board --- variants/lilygo_tlora_v2_1/target.cpp | 8 ++++++++ variants/lilygo_tlora_v2_1/target.h | 3 +++ 2 files changed, 11 insertions(+) diff --git a/variants/lilygo_tlora_v2_1/target.cpp b/variants/lilygo_tlora_v2_1/target.cpp index 65a78c194..04c3ffcaa 100644 --- a/variants/lilygo_tlora_v2_1/target.cpp +++ b/variants/lilygo_tlora_v2_1/target.cpp @@ -47,3 +47,11 @@ mesh::LocalIdentity radio_new_identity() { RadioNoiseListener rng(radio); return mesh::LocalIdentity(&rng); // create new random identity } + +void radio_set_current_limit(uint8_t ma) { + radio.setCurrentLimit(ma); +} + +uint8_t radio_get_current_limit() { + return radio.getCurrentLimit(); +} \ No newline at end of file diff --git a/variants/lilygo_tlora_v2_1/target.h b/variants/lilygo_tlora_v2_1/target.h index 326a0dee7..9cda43aa4 100644 --- a/variants/lilygo_tlora_v2_1/target.h +++ b/variants/lilygo_tlora_v2_1/target.h @@ -27,3 +27,6 @@ uint32_t radio_get_rng_seed(); void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr); void radio_set_tx_power(uint8_t dbm); mesh::LocalIdentity radio_new_identity(); + +bool radio_get_rx_boosted_gain_mode(); +void radio_set_current_limit(uint8_t ma); \ No newline at end of file From 4148661539a9ac3a1c58d17f2cbb031dbe177413 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Br=C3=A1zio?= Date: Sun, 30 Nov 2025 13:44:42 +0000 Subject: [PATCH 30/30] Cleanup --- .devcontainer/devcontainer.json | 42 --------------------------------- 1 file changed, 42 deletions(-) delete mode 100644 .devcontainer/devcontainer.json diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json deleted file mode 100644 index e0add320d..000000000 --- a/.devcontainer/devcontainer.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "name": "MeshCore", - "image": "mcr.microsoft.com/devcontainers/python:3-bookworm", - "features": { - "ghcr.io/rocker-org/devcontainer-features/apt-packages:1": { - "packages": [ - "sudo" - ] - } - }, - "runArgs": [ - "--network=host", - "--privileged", - "-v", - "/dev/bus/usb:/dev/bus/usb" - ], - "postCreateCommand": { - "platformio": "pipx install platformio" - }, - "customizations": { - "vscode": { - "settings": { - "platformio-ide.disablePIOHomeStartup": true, - "editor.formatOnSave": false, - "workbench.colorCustomizations": { - "titleBar.activeBackground": "#0d1a2b", - "titleBar.activeForeground": "#ffffff", - "titleBar.inactiveBackground": "#0d1a2b99", - "titleBar.inactiveForeground": "#ffffff99" - } - }, - "extensions": [ - "platformio.platformio-ide", - "github.vscode-github-actions", - "GitHub.vscode-pull-request-github" - ], - "unwantedRecommendations": [ - "ms-vscode.cpptools-extension-pack" - ] - } - } -} \ No newline at end of file