port adc.multiplier command

This commit is contained in:
liquidraver
2026-04-22 10:49:41 +02:00
parent de4bcd9a52
commit d03deda313
3 changed files with 39 additions and 2 deletions
+29 -2
View File
@@ -135,14 +135,41 @@ uint16_t ZephyrBoard::getBattMilliVolts()
return 0;
}
raw /= valid_samples;
uint16_t mv = (uint16_t)((VBAT_MV_MULTIPLIER * (int64_t)raw) / 4096);
LOG_DBG("Battery: raw=%d multiplier=%d mv=%u", (int)raw, VBAT_MV_MULTIPLIER, mv);
int64_t mult = (_adc_multiplier_override != 0.0f)
? (int64_t)_adc_multiplier_override
: (int64_t)VBAT_MV_MULTIPLIER;
uint16_t mv = (uint16_t)((mult * (int64_t)raw) / 4096);
LOG_DBG("Battery: raw=%d multiplier=%lld mv=%u", (int)raw, (long long)mult, mv);
return mv;
#else
return 0;
#endif
}
bool ZephyrBoard::setAdcMultiplier(float multiplier)
{
#if DT_NODE_EXISTS(DT_PATH(zephyr_user)) && \
DT_NODE_HAS_PROP(DT_PATH(zephyr_user), io_channels)
_adc_multiplier_override = multiplier;
return true;
#else
(void)multiplier;
return false;
#endif
}
float ZephyrBoard::getAdcMultiplier() const
{
#if DT_NODE_EXISTS(DT_PATH(zephyr_user)) && \
DT_NODE_HAS_PROP(DT_PATH(zephyr_user), io_channels)
return (_adc_multiplier_override != 0.0f)
? _adc_multiplier_override
: (float)VBAT_MV_MULTIPLIER;
#else
return 0.0f;
#endif
}
float ZephyrBoard::getMCUTemperature()
{
/* nRF52840 die temperature sensor - "nordic,nrf-temp" at 0x4000c000
+7
View File
@@ -13,6 +13,8 @@ class ZephyrBoard : public MainBoard {
public:
uint16_t getBattMilliVolts() override;
float getMCUTemperature() override;
bool setAdcMultiplier(float multiplier) override;
float getAdcMultiplier() const override;
const char *getManufacturerName() const override;
void onBeforeTransmit() override;
void onAfterTransmit() override;
@@ -22,6 +24,11 @@ public:
bool startOTAUpdate(const char *id, char reply[]) override; /* Reboot into BLE OTA DFU */
void clearBootloaderMagic(); /* Clear stale GPREGRET values at startup */
uint8_t getStartupReason() const override;
private:
/* Runtime override for vbat-mv-multiplier. Units match DT `vbat-mv-multiplier`
* (mV scale such that `mv = multiplier * raw / 4096`). 0 = use DT default. */
float _adc_multiplier_override = 0.0f;
};
} /* namespace mesh */
+3
View File
@@ -669,6 +669,9 @@ int main(void)
lora_radio.setRxBoost(companion_mesh.prefs.rx_boost != 0);
lora_radio.enableRxDutyCycle(companion_mesh.prefs.rx_duty_cycle != 0);
/* Restore runtime ADC multiplier override (0 = keep DT default) */
zephyr_board.setAdcMultiplier(companion_mesh.prefs.adc_multiplier);
/* Initialize mesh event object */
k_event_init(&mesh_events);