Skip to content

Commit 5a3ea64

Browse files
committed
Repeater: add adc.multiplier setting
1 parent f5a56c5 commit 5a3ea64

File tree

5 files changed

+32
-3
lines changed

5 files changed

+32
-3
lines changed

examples/simple_repeater/MyMesh.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -710,6 +710,8 @@ MyMesh::MyMesh(mesh::MainBoard &board, mesh::Radio &radio, mesh::MillisecondCloc
710710
_prefs.gps_enabled = 0;
711711
_prefs.gps_interval = 0;
712712
_prefs.advert_loc_policy = ADVERT_LOC_PREFS;
713+
714+
_prefs.adc_multiplier = 0.0f; // 0.0f means use default board multiplier
713715
}
714716

715717
void MyMesh::begin(FILESYSTEM *fs) {
@@ -733,6 +735,8 @@ void MyMesh::begin(FILESYSTEM *fs) {
733735
updateAdvertTimer();
734736
updateFloodAdvertTimer();
735737

738+
board.setAdcMultiplier(_prefs.adc_multiplier);
739+
736740
#if ENV_INCLUDE_GPS == 1
737741
applyGpsPrefs();
738742
#endif

src/MeshCore.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ namespace mesh {
4242
class MainBoard {
4343
public:
4444
virtual uint16_t getBattMilliVolts() = 0;
45+
virtual void setAdcMultiplier(float multiplier) {};
46+
virtual float getAdcMultiplier() const { return 1.0f; }
4547
virtual const char* getManufacturerName() const = 0;
4648
virtual void onBeforeTransmit() { }
4749
virtual void onAfterTransmit() { }

src/helpers/CommonCLI.cpp

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,8 @@ void CommonCLI::loadPrefsInt(FILESYSTEM* fs, const char* filename) {
7070
file.read((uint8_t *)&_prefs->gps_interval, sizeof(_prefs->gps_interval)); // 157
7171
file.read((uint8_t *)&_prefs->advert_loc_policy, sizeof (_prefs->advert_loc_policy)); // 161
7272
file.read((uint8_t *)&_prefs->discovery_mod_timestamp, sizeof(_prefs->discovery_mod_timestamp)); // 162
73-
// 166
73+
file.read((uint8_t *)&_prefs->adc_multiplier, sizeof(_prefs->adc_multiplier)); // 166
74+
// 170
7475

7576
// sanitise bad pref values
7677
_prefs->rx_delay_base = constrain(_prefs->rx_delay_base, 0, 20.0f);
@@ -83,6 +84,7 @@ void CommonCLI::loadPrefsInt(FILESYSTEM* fs, const char* filename) {
8384
_prefs->cr = constrain(_prefs->cr, 5, 8);
8485
_prefs->tx_power_dbm = constrain(_prefs->tx_power_dbm, 1, 30);
8586
_prefs->multi_acks = constrain(_prefs->multi_acks, 0, 1);
87+
_prefs->adc_multiplier = constrain(_prefs->adc_multiplier, 0.0f, 10.0f);
8688

8789
// sanitise bad bridge pref values
8890
_prefs->bridge_enabled = constrain(_prefs->bridge_enabled, 0, 1);
@@ -148,7 +150,8 @@ void CommonCLI::savePrefs(FILESYSTEM* fs) {
148150
file.write((uint8_t *)&_prefs->gps_interval, sizeof(_prefs->gps_interval)); // 157
149151
file.write((uint8_t *)&_prefs->advert_loc_policy, sizeof(_prefs->advert_loc_policy)); // 161
150152
file.write((uint8_t *)&_prefs->discovery_mod_timestamp, sizeof(_prefs->discovery_mod_timestamp)); // 162
151-
// 166
153+
file.write((uint8_t *)&_prefs->adc_multiplier, sizeof(_prefs->adc_multiplier)); // 166
154+
// 170
152155

153156
file.close();
154157
}
@@ -331,6 +334,8 @@ void CommonCLI::handleCommand(uint32_t sender_timestamp, const char* command, ch
331334
} else if (memcmp(config, "bridge.secret", 13) == 0) {
332335
sprintf(reply, "> %s", _prefs->bridge_secret);
333336
#endif
337+
} else if (memcmp(config, "adc.multiplier", 14) == 0) {
338+
sprintf(reply, "> %s", StrHelper::ftoa(_prefs->adc_multiplier));
334339
} else {
335340
sprintf(reply, "??: %s", config);
336341
}
@@ -523,6 +528,11 @@ void CommonCLI::handleCommand(uint32_t sender_timestamp, const char* command, ch
523528
savePrefs();
524529
strcpy(reply, "OK");
525530
#endif
531+
} else if (memcmp(config, "adc.multiplier ", 15) == 0) {
532+
_prefs->adc_multiplier = atof(&config[15]);
533+
_board->setAdcMultiplier(_prefs->adc_multiplier);
534+
savePrefs();
535+
strcpy(reply, "OK");
526536
} else {
527537
sprintf(reply, "unknown config: %s", config);
528538
}

src/helpers/CommonCLI.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ struct NodePrefs { // persisted to file
4747
uint32_t gps_interval; // in seconds
4848
uint8_t advert_loc_policy;
4949
uint32_t discovery_mod_timestamp;
50+
float adc_multiplier;
5051
};
5152

5253
class CommonCLICallbacks {

variants/promicro/PromicroBoard.h

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ class PromicroBoard : public mesh::MainBoard {
2323
protected:
2424
uint8_t startup_reason;
2525
uint8_t btn_prev_state;
26+
float adc_mult = ADC_MULTIPLIER;
2627

2728
public:
2829
void begin();
@@ -39,7 +40,18 @@ class PromicroBoard : public mesh::MainBoard {
3940
raw += analogRead(PIN_VBAT_READ);
4041
}
4142
raw = raw / BATTERY_SAMPLES;
42-
return (ADC_MULTIPLIER * raw);
43+
return (adc_mult * raw);
44+
}
45+
46+
void setAdcMultiplier(float multiplier) override {
47+
if (multiplier == 0.0f) {
48+
adc_mult = ADC_MULTIPLIER;}
49+
else {
50+
adc_mult = multiplier;
51+
}
52+
}
53+
float getAdcMultiplier() const override {
54+
return adc_mult;
4355
}
4456

4557
const char* getManufacturerName() const override {

0 commit comments

Comments
 (0)