battery: separate out publishing from updating

to allow smart battery drivers to use the battery class and
filling in additional information in case it makes sense.
This commit is contained in:
Matthias Grob
2021-12-07 21:06:51 +01:00
parent e70d70468a
commit fdc40880d0
10 changed files with 40 additions and 17 deletions
+14 -1
View File
@@ -130,7 +130,10 @@ void Battery::updateBatteryStatus(const hrt_abstime &timestamp)
} else {
_connected = false;
}
}
battery_status_s Battery::getBatteryStatus()
{
battery_status_s battery_status{};
battery_status.voltage_v = _voltage_v;
battery_status.voltage_filtered_v = _voltage_filter_v.getState();
@@ -149,13 +152,23 @@ void Battery::updateBatteryStatus(const hrt_abstime &timestamp)
battery_status.capacity = _params.capacity > 0.f ? static_cast<uint16_t>(_params.capacity) : 0;
battery_status.id = static_cast<uint8_t>(_index);
battery_status.warning = _warning;
battery_status.timestamp = hrt_absolute_time();
return battery_status;
}
void Battery::publishBatteryStatus(const battery_status_s &battery_status)
{
if (_source == _params.source) {
battery_status.timestamp = hrt_absolute_time();
_battery_status_pub.publish(battery_status);
}
}
void Battery::updateAndPublishBatteryStatus(const hrt_abstime &timestamp)
{
updateBatteryStatus(timestamp);
publishBatteryStatus(getBatteryStatus());
}
void Battery::sumDischarged(const hrt_abstime &timestamp, float current_a)
{
// Not a valid measurement
+10
View File
@@ -97,6 +97,16 @@ public:
*/
void updateBatteryStatus(const hrt_abstime &timestamp);
battery_status_s getBatteryStatus();
void publishBatteryStatus(const battery_status_s &battery_status);
/**
* Convenience function for combined update and publication
* @see updateBatteryStatus()
* @see publishBatteryStatus()
*/
void updateAndPublishBatteryStatus(const hrt_abstime &timestamp);
protected:
struct {
param_t v_empty;