@@ -88,10 +88,11 @@ void CommonCLI::loadPrefsInt(FILESYSTEM* fs, const char* filename) {
8888 file.read ((uint8_t *)&_prefs->discovery_mod_timestamp , sizeof (_prefs->discovery_mod_timestamp )); // 162
8989 file.read ((uint8_t *)&_prefs->adc_multiplier , sizeof (_prefs->adc_multiplier )); // 166
9090 file.read ((uint8_t *)_prefs->owner_info , sizeof (_prefs->owner_info )); // 170
91- file.read ((uint8_t *)&_prefs->rx_boosted_gain , sizeof (_prefs->rx_boosted_gain )); // 290
92- file.read ((uint8_t *)&_prefs->flood_max_unscoped , sizeof (_prefs->flood_max_unscoped )); // 291
93- file.read ((uint8_t *)&_prefs->flood_max_advert , sizeof (_prefs->flood_max_advert )); // 292
94- // next: 293
91+ file.read ((uint8_t *)&_prefs->rx_boosted_gain , sizeof (_prefs->rx_boosted_gain )); // 290
92+ file.read ((uint8_t *)&_prefs->flood_max_unscoped , sizeof (_prefs->flood_max_unscoped )); // 291
93+ file.read ((uint8_t *)&_prefs->flood_max_advert , sizeof (_prefs->flood_max_advert )); // 292
94+ file.read ((uint8_t *)&_prefs->radio_fem_rxgain , sizeof (_prefs->radio_fem_rxgain )); // 293
95+ // next: 294
9596
9697 // sanitise bad pref values
9798 _prefs->rx_delay_base = constrain (_prefs->rx_delay_base , 0 , 20 .0f );
@@ -121,6 +122,7 @@ void CommonCLI::loadPrefsInt(FILESYSTEM* fs, const char* filename) {
121122
122123 // sanitise settings
123124 _prefs->rx_boosted_gain = constrain (_prefs->rx_boosted_gain , 0 , 1 ); // boolean
125+ _prefs->radio_fem_rxgain = constrain (_prefs->radio_fem_rxgain , 0 , 1 ); // boolean
124126
125127 file.close ();
126128 }
@@ -181,10 +183,11 @@ void CommonCLI::savePrefs(FILESYSTEM* fs) {
181183 file.write ((uint8_t *)&_prefs->discovery_mod_timestamp , sizeof (_prefs->discovery_mod_timestamp )); // 162
182184 file.write ((uint8_t *)&_prefs->adc_multiplier , sizeof (_prefs->adc_multiplier )); // 166
183185 file.write ((uint8_t *)_prefs->owner_info , sizeof (_prefs->owner_info )); // 170
184- file.write ((uint8_t *)&_prefs->rx_boosted_gain , sizeof (_prefs->rx_boosted_gain )); // 290
185- file.write ((uint8_t *)&_prefs->flood_max_unscoped , sizeof (_prefs->flood_max_unscoped )); // 291
186- file.write ((uint8_t *)&_prefs->flood_max_advert , sizeof (_prefs->flood_max_advert )); // 292
187- // next: 293
186+ file.write ((uint8_t *)&_prefs->rx_boosted_gain , sizeof (_prefs->rx_boosted_gain )); // 290
187+ file.write ((uint8_t *)&_prefs->flood_max_unscoped , sizeof (_prefs->flood_max_unscoped )); // 291
188+ file.write ((uint8_t *)&_prefs->flood_max_advert , sizeof (_prefs->flood_max_advert )); // 292
189+ file.write ((uint8_t *)&_prefs->radio_fem_rxgain , sizeof (_prefs->radio_fem_rxgain )); // 293
190+ // next: 294
188191
189192 file.close ();
190193 }
@@ -568,6 +571,28 @@ void CommonCLI::handleSetCmd(uint32_t sender_timestamp, char* command, char* rep
568571 savePrefs ();
569572 _callbacks->setRxBoostedGain (_prefs->rx_boosted_gain );
570573#endif
574+ } else if (memcmp (config, " radio.fem.rxgain " , 17 ) == 0 ) {
575+ if (!_board->canControlLoRaFemLna ()) {
576+ strcpy (reply, " Error: unsupported" );
577+ } else if (memcmp (&config[17 ], " on" , 2 ) == 0 ) {
578+ if (_board->setLoRaFemLnaEnabled (true )) {
579+ _prefs->radio_fem_rxgain = 1 ;
580+ savePrefs ();
581+ strcpy (reply, " OK - LoRa FEM RX gain on" );
582+ } else {
583+ strcpy (reply, " Error: failed to apply LoRa FEM RX gain" );
584+ }
585+ } else if (memcmp (&config[17 ], " off" , 3 ) == 0 ) {
586+ if (_board->setLoRaFemLnaEnabled (false )) {
587+ _prefs->radio_fem_rxgain = 0 ;
588+ savePrefs ();
589+ strcpy (reply, " OK - LoRa FEM RX gain off" );
590+ } else {
591+ strcpy (reply, " Error: failed to apply LoRa FEM RX gain" );
592+ }
593+ } else {
594+ strcpy (reply, " Error: state must be on or off" );
595+ }
571596 } else if (memcmp (config, " radio " , 6 ) == 0 ) {
572597 strcpy (tmp, &config[6 ]);
573598 const char *parts[4 ];
@@ -757,7 +782,7 @@ void CommonCLI::handleSetCmd(uint32_t sender_timestamp, char* command, char* rep
757782 }
758783 } else {
759784 _prefs->adc_multiplier = 0 .0f ;
760- strcpy (reply, " Error: unsupported by this board " );
785+ strcpy (reply, " Error: unsupported" );
761786 };
762787 } else {
763788 strcpy (reply, " unknown config: " );
@@ -805,6 +830,12 @@ void CommonCLI::handleGetCmd(uint32_t sender_timestamp, char* command, char* rep
805830 } else if (memcmp (config, " radio.rxgain" , 12 ) == 0 ) {
806831 sprintf (reply, " > %s" , _prefs->rx_boosted_gain ? " on" : " off" );
807832#endif
833+ } else if (memcmp (config, " radio.fem.rxgain" , 16 ) == 0 ) {
834+ if (!_board->canControlLoRaFemLna ()) {
835+ strcpy (reply, " Error: unsupported" );
836+ } else {
837+ sprintf (reply, " > %s" , _board->isLoRaFemLnaEnabled () ? " on" : " off" );
838+ }
808839 } else if (memcmp (config, " radio" , 5 ) == 0 ) {
809840 char freq[16 ], bw[16 ];
810841 strcpy (freq, StrHelper::ftoa (_prefs->freq ));
@@ -890,12 +921,12 @@ void CommonCLI::handleGetCmd(uint32_t sender_timestamp, char* command, char* rep
890921 strcpy (reply, " > unknown" );
891922 }
892923 #else
893- strcpy (reply, " ERROR : unsupported" );
924+ strcpy (reply, " Error : unsupported" );
894925 #endif
895926 } else if (memcmp (config, " adc.multiplier" , 14 ) == 0 ) {
896927 float adc_mult = _board->getAdcMultiplier ();
897928 if (adc_mult == 0 .0f ) {
898- strcpy (reply, " Error: unsupported by this board " );
929+ strcpy (reply, " Error: unsupported" );
899930 } else {
900931 sprintf (reply, " > %.3f" , adc_mult);
901932 }
0 commit comments