From 38c776784e724f49e4bde9668045b91903034854 Mon Sep 17 00:00:00 2001 From: Alexander Lerach Date: Thu, 31 Jul 2025 17:10:07 +0200 Subject: [PATCH] auterion pm: set max current based on eeprom --- .../PowerMonitorSelectorAuterion.cpp | 26 ++++++++++++++++--- .../PowerMonitorSelectorAuterion.h | 2 ++ 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/drivers/power_monitor/pm_selector_auterion/PowerMonitorSelectorAuterion.cpp b/src/drivers/power_monitor/pm_selector_auterion/PowerMonitorSelectorAuterion.cpp index bd852b82c9..294d3ba7b6 100644 --- a/src/drivers/power_monitor/pm_selector_auterion/PowerMonitorSelectorAuterion.cpp +++ b/src/drivers/power_monitor/pm_selector_auterion/PowerMonitorSelectorAuterion.cpp @@ -96,6 +96,7 @@ void PowerMonitorSelectorAuterion::try_eeprom_start() EepromBlockPm eeprom_block_pm = _eeprom_blocks_pm[ii]; uint16_t dev_type = eeprom_block_pm.dev_type; + set_max_current(dev_type, eeprom_block_pm.max_current); set_shunt_value(dev_type, eeprom_block_pm.shunt_value); int ret_val = start_pm(_buses[i].bus_number, dev_type, eeprom_block_pm.i2c_addr, _buses[i].id); @@ -368,6 +369,19 @@ bool PowerMonitorSelectorAuterion::is_user_configured(const uint16_t dev_type) c return sens_en != 0; } +void PowerMonitorSelectorAuterion::set_max_current(const uint16_t dev_type, const float max_current) const +{ + const char *ina_type = get_ina_type(dev_type); + + if (ina_type == nullptr) { + return; + } + + char param_name[PARAM_MAX_LEN]; + snprintf(param_name, sizeof(param_name), "INA%s_CURRENT", ina_type); + set_float_param(param_name, max_current); +} + void PowerMonitorSelectorAuterion::set_shunt_value(const uint16_t dev_type, const float shunt_value) const { const char *ina_type = get_ina_type(dev_type); @@ -378,12 +392,16 @@ void PowerMonitorSelectorAuterion::set_shunt_value(const uint16_t dev_type, cons char param_name[PARAM_MAX_LEN]; snprintf(param_name, sizeof(param_name), "INA%s_SHUNT", ina_type); + set_float_param(param_name, shunt_value); +} - float current_shunt_value = 0; - param_get(param_find(param_name), ¤t_shunt_value); +void PowerMonitorSelectorAuterion::set_float_param(const char *param_name, const float param_val) const +{ + float current_param_value = 0; + param_get(param_find(param_name), ¤t_param_value); - if (fabsf(current_shunt_value - shunt_value) > FLT_EPSILON) { - param_set(param_find(param_name), &(shunt_value)); + if (fabsf(current_param_value - param_val) > FLT_EPSILON) { + param_set(param_find(param_name), &(param_val)); } } diff --git a/src/drivers/power_monitor/pm_selector_auterion/PowerMonitorSelectorAuterion.h b/src/drivers/power_monitor/pm_selector_auterion/PowerMonitorSelectorAuterion.h index 0099ff04fc..23910cf39a 100644 --- a/src/drivers/power_monitor/pm_selector_auterion/PowerMonitorSelectorAuterion.h +++ b/src/drivers/power_monitor/pm_selector_auterion/PowerMonitorSelectorAuterion.h @@ -160,7 +160,9 @@ private: const char *get_start_command(const uint16_t dev_type) const; bool is_user_configured(const uint16_t dev_type) const; + void set_max_current(const uint16_t dev_type, const float max_current) const; void set_shunt_value(const uint16_t dev_type, const float shunt_value) const; + void set_float_param(const char *param_name, const float param_val) const; const char *get_ina_type(const uint16_t dev_type) const; uint16_t crc16_update(const uint16_t current_crc, const uint8_t *data_p, size_t length) const;