Browse Source

tweaks get/set adcMultiplier logic

taco 8 months ago
parent
commit
fc93d84fb8
3 changed files with 26 additions and 8 deletions
  1. 2 2
      src/MeshCore.h
  2. 17 4
      src/helpers/CommonCLI.cpp
  3. 7 2
      variants/promicro/PromicroBoard.h

+ 2 - 2
src/MeshCore.h

@@ -42,8 +42,8 @@ namespace mesh {
 class MainBoard {
 public:
   virtual uint16_t getBattMilliVolts() = 0;
-  virtual void setAdcMultiplier(float multiplier) {};
-  virtual float getAdcMultiplier() const { return 1.0f; }
+  virtual bool setAdcMultiplier(float multiplier) { return false; };
+  virtual float getAdcMultiplier() const { return 0.0f; }
   virtual const char* getManufacturerName() const = 0;
   virtual void onBeforeTransmit() { }
   virtual void onAfterTransmit() { }

+ 17 - 4
src/helpers/CommonCLI.cpp

@@ -335,7 +335,12 @@ void CommonCLI::handleCommand(uint32_t sender_timestamp, const char* command, ch
         sprintf(reply, "> %s", _prefs->bridge_secret);
 #endif
       } else if (memcmp(config, "adc.multiplier", 14) == 0) {
-        sprintf(reply, "> %s", StrHelper::ftoa(_prefs->adc_multiplier));
+        float adc_mult = _board->getAdcMultiplier();
+        if (adc_mult == 0.0f) {
+          strcpy(reply, "Error: unsupported by this board");
+        } else {
+          sprintf(reply, "> %.3f", adc_mult);
+        }
       } else {
         sprintf(reply, "??: %s", config);
       }
@@ -530,9 +535,17 @@ void CommonCLI::handleCommand(uint32_t sender_timestamp, const char* command, ch
 #endif
       } else if (memcmp(config, "adc.multiplier ", 15) == 0) {
         _prefs->adc_multiplier = atof(&config[15]);
-        _board->setAdcMultiplier(_prefs->adc_multiplier);
-        savePrefs();
-        strcpy(reply, "OK");
+        if (_board->setAdcMultiplier(_prefs->adc_multiplier)) {
+          savePrefs();
+          if (_prefs->adc_multiplier == 0.0f) {
+            strcpy(reply, "OK - using default board multiplier");
+          } else {
+            sprintf(reply, "OK - multiplier set to %.3f", _prefs->adc_multiplier);
+          }
+        } else {
+          _prefs->adc_multiplier = 0.0f;
+          strcpy(reply, "Error: unsupported by this board");
+        };
       } else {
         sprintf(reply, "unknown config: %s", config);
       }

+ 7 - 2
variants/promicro/PromicroBoard.h

@@ -43,15 +43,20 @@ public:
     return (adc_mult * raw);
   }
 
-  void setAdcMultiplier(float multiplier) override {
+  bool setAdcMultiplier(float multiplier) override {
     if (multiplier == 0.0f) {
       adc_mult = ADC_MULTIPLIER;}
     else {
       adc_mult = multiplier;
     }
+    return true;
   }
   float getAdcMultiplier() const override {
-    return adc_mult;
+    if (adc_mult == 0.0f) {
+      return ADC_MULTIPLIER;
+    } else {
+      return adc_mult;
+    }
   }
 
   const char* getManufacturerName() const override {