|
@@ -106,7 +106,10 @@ void CommonCLI::loadPrefsInt(FILESYSTEM* fs, const char* filename) {
|
|
|
if (file.available() >= (int)sizeof(_prefs->flood_max_advert)) {
|
|
if (file.available() >= (int)sizeof(_prefs->flood_max_advert)) {
|
|
|
file.read((uint8_t *)&_prefs->flood_max_advert, sizeof(_prefs->flood_max_advert)); // 296
|
|
file.read((uint8_t *)&_prefs->flood_max_advert, sizeof(_prefs->flood_max_advert)); // 296
|
|
|
}
|
|
}
|
|
|
- // next: 297
|
|
|
|
|
|
|
+ if (file.available() >= (int)sizeof(_prefs->radio_fem_rxgain)) {
|
|
|
|
|
+ file.read((uint8_t *)&_prefs->radio_fem_rxgain, sizeof(_prefs->radio_fem_rxgain)); // 297
|
|
|
|
|
+ }
|
|
|
|
|
+ // next: 298
|
|
|
|
|
|
|
|
// sanitise bad pref values
|
|
// sanitise bad pref values
|
|
|
_prefs->rx_delay_base = constrain(_prefs->rx_delay_base, 0, 20.0f);
|
|
_prefs->rx_delay_base = constrain(_prefs->rx_delay_base, 0, 20.0f);
|
|
@@ -136,6 +139,8 @@ void CommonCLI::loadPrefsInt(FILESYSTEM* fs, const char* filename) {
|
|
|
|
|
|
|
|
// sanitise settings
|
|
// sanitise settings
|
|
|
_prefs->rx_boosted_gain = constrain(_prefs->rx_boosted_gain, 0, 1); // boolean
|
|
_prefs->rx_boosted_gain = constrain(_prefs->rx_boosted_gain, 0, 1); // boolean
|
|
|
|
|
+ _prefs->radio_fem_rxgain = constrain(_prefs->radio_fem_rxgain, 0, 1); // boolean
|
|
|
|
|
+
|
|
|
_prefs->fan_mode = constrain(_prefs->fan_mode, 0, 2);
|
|
_prefs->fan_mode = constrain(_prefs->fan_mode, 0, 2);
|
|
|
_prefs->fan_timeout_secs = constrain(_prefs->fan_timeout_secs, 0, 600);
|
|
_prefs->fan_timeout_secs = constrain(_prefs->fan_timeout_secs, 0, 600);
|
|
|
|
|
|
|
@@ -204,7 +209,8 @@ void CommonCLI::savePrefs(FILESYSTEM* fs) {
|
|
|
file.write((uint8_t *)&_prefs->fan_timeout_secs, sizeof(_prefs->fan_timeout_secs)); // 293
|
|
file.write((uint8_t *)&_prefs->fan_timeout_secs, sizeof(_prefs->fan_timeout_secs)); // 293
|
|
|
file.write((uint8_t *)&_prefs->flood_max_unscoped, sizeof(_prefs->flood_max_unscoped)); // 295
|
|
file.write((uint8_t *)&_prefs->flood_max_unscoped, sizeof(_prefs->flood_max_unscoped)); // 295
|
|
|
file.write((uint8_t *)&_prefs->flood_max_advert, sizeof(_prefs->flood_max_advert)); // 296
|
|
file.write((uint8_t *)&_prefs->flood_max_advert, sizeof(_prefs->flood_max_advert)); // 296
|
|
|
- // next: 297
|
|
|
|
|
|
|
+ file.write((uint8_t *)&_prefs->radio_fem_rxgain, sizeof(_prefs->radio_fem_rxgain)); // 297
|
|
|
|
|
+ // next: 298
|
|
|
|
|
|
|
|
file.close();
|
|
file.close();
|
|
|
}
|
|
}
|
|
@@ -597,6 +603,28 @@ void CommonCLI::handleSetCmd(uint32_t sender_timestamp, char* command, char* rep
|
|
|
savePrefs();
|
|
savePrefs();
|
|
|
_callbacks->setRxBoostedGain(_prefs->rx_boosted_gain);
|
|
_callbacks->setRxBoostedGain(_prefs->rx_boosted_gain);
|
|
|
#endif
|
|
#endif
|
|
|
|
|
+ } else if (memcmp(config, "radio.fem.rxgain ", 17) == 0) {
|
|
|
|
|
+ if (!_board->canControlLoRaFemLna()) {
|
|
|
|
|
+ strcpy(reply, "Error: unsupported");
|
|
|
|
|
+ } else if (memcmp(&config[17], "on", 2) == 0) {
|
|
|
|
|
+ if (_board->setLoRaFemLnaEnabled(true)) {
|
|
|
|
|
+ _prefs->radio_fem_rxgain = 1;
|
|
|
|
|
+ savePrefs();
|
|
|
|
|
+ strcpy(reply, "OK - LoRa FEM RX gain on");
|
|
|
|
|
+ } else {
|
|
|
|
|
+ strcpy(reply, "Error: failed to apply LoRa FEM RX gain");
|
|
|
|
|
+ }
|
|
|
|
|
+ } else if (memcmp(&config[17], "off", 3) == 0) {
|
|
|
|
|
+ if (_board->setLoRaFemLnaEnabled(false)) {
|
|
|
|
|
+ _prefs->radio_fem_rxgain = 0;
|
|
|
|
|
+ savePrefs();
|
|
|
|
|
+ strcpy(reply, "OK - LoRa FEM RX gain off");
|
|
|
|
|
+ } else {
|
|
|
|
|
+ strcpy(reply, "Error: failed to apply LoRa FEM RX gain");
|
|
|
|
|
+ }
|
|
|
|
|
+ } else {
|
|
|
|
|
+ strcpy(reply, "Error: state must be on or off");
|
|
|
|
|
+ }
|
|
|
} else if (memcmp(config, "radio ", 6) == 0) {
|
|
} else if (memcmp(config, "radio ", 6) == 0) {
|
|
|
strcpy(tmp, &config[6]);
|
|
strcpy(tmp, &config[6]);
|
|
|
const char *parts[4];
|
|
const char *parts[4];
|
|
@@ -834,6 +862,12 @@ void CommonCLI::handleGetCmd(uint32_t sender_timestamp, char* command, char* rep
|
|
|
} else if (memcmp(config, "radio.rxgain", 12) == 0) {
|
|
} else if (memcmp(config, "radio.rxgain", 12) == 0) {
|
|
|
sprintf(reply, "> %s", _prefs->rx_boosted_gain ? "on" : "off");
|
|
sprintf(reply, "> %s", _prefs->rx_boosted_gain ? "on" : "off");
|
|
|
#endif
|
|
#endif
|
|
|
|
|
+ } else if (memcmp(config, "radio.fem.rxgain", 16) == 0) {
|
|
|
|
|
+ if (!_board->canControlLoRaFemLna()) {
|
|
|
|
|
+ strcpy(reply, "Error: unsupported");
|
|
|
|
|
+ } else {
|
|
|
|
|
+ sprintf(reply, "> %s", _board->isLoRaFemLnaEnabled() ? "on" : "off");
|
|
|
|
|
+ }
|
|
|
} else if (memcmp(config, "radio", 5) == 0) {
|
|
} else if (memcmp(config, "radio", 5) == 0) {
|
|
|
char freq[16], bw[16];
|
|
char freq[16], bw[16];
|
|
|
strcpy(freq, StrHelper::ftoa(_prefs->freq));
|
|
strcpy(freq, StrHelper::ftoa(_prefs->freq));
|