Refactored battery library for multiple instances

This commit is contained in:
Timothy Scott
2019-07-24 10:58:06 +02:00
committed by Julian Oes
parent d7b95870b9
commit bff1df7080
18 changed files with 1039 additions and 277 deletions
@@ -101,7 +101,7 @@ private:
orb_advert_t _battery_topic;
orb_advert_t _esc_topic;
Battery _battery;
Battery1 _battery;
bool _armed;
float _last_throttle;
@@ -201,14 +201,8 @@ int DfBebopBusWrapper::set_esc_speeds(const float speed_scaled[4])
int DfBebopBusWrapper::_publish(struct bebop_state_data &data)
{
battery_status_s battery_report;
const hrt_abstime timestamp = hrt_absolute_time();
// TODO Check if this is the right way for the Bebop
// We don't have current measurements
_battery.updateBatteryStatus(timestamp, data.battery_voltage_v, 0.0, true, true, 0, _last_throttle, _armed,
&battery_report);
esc_status_s esc_status = {};
uint16_t esc_speed_setpoint_rpm[4] = {};
@@ -224,13 +218,9 @@ int DfBebopBusWrapper::_publish(struct bebop_state_data &data)
// TODO: when is this ever blocked?
if (!(m_pub_blocked)) {
if (_battery_topic == nullptr) {
_battery_topic = orb_advertise_multi(ORB_ID(battery_status), &battery_report,
&_battery_orb_class_instance, ORB_PRIO_LOW);
} else {
orb_publish(ORB_ID(battery_status), _battery_topic, &battery_report);
}
// TODO Check if this is the right way for the Bebop
// We don't have current measurements
_battery.updateBatteryStatus(data.battery_voltage_v, 0.0, timestamp, true, 0, _last_throttle, _armed);
if (_esc_topic == nullptr) {
_esc_topic = orb_advertise(ORB_ID(esc_status), &esc_status);
@@ -48,7 +48,6 @@
#include <ltc2946/LTC2946.hpp>
#include <uORB/uORB.h>
#include <uORB/topics/battery_status.h>
#include <uORB/topics/actuator_controls.h>
#include <uORB/topics/vehicle_control_mode.h>
@@ -70,9 +69,7 @@ public:
private:
int _publish(const struct ltc2946_sensor_data &data);
orb_advert_t _battery_pub{nullptr};
battery_status_s _battery_status{};
Battery _battery{};
Battery1 _battery{};
int _actuator_ctrl_0_sub{-1};
int _vcontrol_mode_sub{-1};
@@ -82,7 +79,7 @@ private:
DfLtc2946Wrapper::DfLtc2946Wrapper() :
LTC2946(LTC2946_DEVICE_PATH)
{
_battery.reset(&_battery_status);
_battery.reset();
// subscriptions
_actuator_ctrl_0_sub = orb_subscribe(ORB_ID(actuator_controls_0));
@@ -134,21 +131,16 @@ int DfLtc2946Wrapper::stop()
int DfLtc2946Wrapper::_publish(const struct ltc2946_sensor_data &data)
{
hrt_abstime t = hrt_absolute_time();
bool connected = data.battery_voltage_V > BOARD_ADC_OPEN_CIRCUIT_V;
actuator_controls_s ctrl;
orb_copy(ORB_ID(actuator_controls_0), _actuator_ctrl_0_sub, &ctrl);
vehicle_control_mode_s vcontrol_mode;
orb_copy(ORB_ID(vehicle_control_mode), _vcontrol_mode_sub, &vcontrol_mode);
_battery.updateBatteryStatus(t, data.battery_voltage_V, data.battery_current_A,
connected, true, 1,
_battery.updateBatteryStatus(data.battery_voltage_V, data.battery_current_A, t,
true, 1,
ctrl.control[actuator_controls_s::INDEX_THROTTLE],
vcontrol_mode.flag_armed, &_battery_status);
int instance;
orb_publish_auto(ORB_ID(battery_status), &_battery_pub, &_battery_status, &instance, ORB_PRIO_DEFAULT);
vcontrol_mode.flag_armed);
return 0;
}