Lora SetPower

This commit is contained in:
Ricardo Guzman committed 2026-10-05 14:32:59 -03:00
1 parent d13227c519
commit 8ded0e96df
2 files changed
+33 -16

No files matched your search

+2 -2
View File
@@ -1429,8 +1429,8 @@ body{background:var(--msh-bg);color:var(--msh-text);font-family:"Inter",system-u
name="lora.power"
id="lora.power"
placeholder="20"
min="0"
max="20"
min="2"
max="22"
step="1"
class="form-control"
required=""
+31 -14
View File
@@ -69,6 +69,18 @@ int rssi, freqError;
float snr;
APRSPacket lastAprsPacket;
#if defined(HAS_SX1278) || defined(HAS_SX1276)
#define CHIP_MIN_POWER 2 // PA_BOOST (below 2 RadioLib switches to RFO, not wired on most modules)
#define CHIP_MAX_POWER 20
#else // SX1262 / SX1268 / LLCC68
#define CHIP_MIN_POWER -9
#define CHIP_MAX_POWER 22
#endif
#ifndef RADIO_MAX_POWER // optional per board in board_pinout.h (e.g. 1W PA modules)
#define RADIO_MAX_POWER CHIP_MAX_POWER
#endif
namespace LoRa_Utils {
@@ -85,6 +97,15 @@ namespace LoRa_Utils {
operationDone = true;
}
int validPower(int requested) {
const int maxPower = (RADIO_MAX_POWER < CHIP_MAX_POWER) ? RADIO_MAX_POWER : CHIP_MAX_POWER;
int power = constrain(requested, CHIP_MIN_POWER, maxPower);
#if defined(HAS_SX1278) || defined(HAS_SX1276)
if (power > 17 && power < 20) power = 17; // SX127x PA_BOOST: only 2-17 or 20
#endif
return power;
}
void setup() {
#if defined (LIGHTGATEWAY_1_0) || defined(LIGHTGATEWAY_PLUS_1_0)
pinMode(RADIO_VCC_PIN,OUTPUT);
@@ -136,16 +157,17 @@ namespace LoRa_Utils {
radio.setDio2AsRfSwitch(true);
#endif*/
#ifdef HAS_1W_LORA // Ebyte E22 400M30S (SX1268) / 900M30S (SX1262) / Ebyte E220 400M30S (LLCC68)
state = radio.setOutputPower(Config.loramodule.power); // max value 20dB for 1W modules as they have Low Noise Amp
radio.setCurrentLimit(140); // to be validated (100 , 120, 140)?
#endif
int power = validPower(Config.loramodule.power);
if (power != Config.loramodule.power) {
Utils::println("LoRa power adjusted: " + String(Config.loramodule.power) + " -> " + String(power));
}
state = radio.setOutputPower(power);
if (state != RADIOLIB_ERR_NONE) {
Utils::println("LoRa setOutputPower failed! State: " + String(state)); // log and keep going
}
#if defined(HAS_SX1278) || defined(HAS_SX1276)
state = radio.setOutputPower(Config.loramodule.power); // max value 20dB for 400M30S as it has Low Noise Amp
radio.setCurrentLimit(120); // OCP ceiling for SX127x: ~120mA needed at +20dBm (not a fixed consumption)
#endif
#if (defined(HAS_SX1268) || defined(HAS_SX1262)) && !defined(HAS_1W_LORA)
state = radio.setOutputPower(Config.loramodule.power + 2); // values available: 10, 17, 22 --> if 20 in tracker_conf.json it will be updated to 22.
#else // SX1262 / SX1268 / LLCC68 (also 1W Ebyte E22 / E220 modules)
radio.setCurrentLimit(140);
#endif
@@ -160,12 +182,7 @@ namespace LoRa_Utils {
radio.setTCXO(1.8);
#endif
if (state == RADIOLIB_ERR_NONE) {
Utils::println("init : LoRa Module ... done!");
} else {
Utils::println("Starting LoRa failed! State: " + String(state));
while (true);
}
Utils::println("init : LoRa Module ... done!");
}
void changeFreqTx() {