Browse Source

uavcan/sensors/battery: add multiple battery filter instances

main
Igor Mišić 3 years ago committed by Beat Küng
parent
commit
7e9a45a01a
  1. 10
      src/drivers/uavcan/sensors/battery.cpp
  2. 14
      src/drivers/uavcan/sensors/battery.hpp

10
src/drivers/uavcan/sensors/battery.cpp

@ -231,13 +231,13 @@ void @@ -231,13 +231,13 @@ void
UavcanBatteryBridge::filterData(const uavcan::ReceivedDataStructure<uavcan::equipment::power::BatteryInfo> &msg,
uint8_t instance)
{
_battery.setConnected(true);
_battery.updateVoltage(msg.voltage);
_battery.updateCurrent(msg.current);
_battery.updateBatteryStatus(hrt_absolute_time());
_battery[instance]->setConnected(true);
_battery[instance]->updateVoltage(msg.voltage);
_battery[instance]->updateCurrent(msg.current);
_battery[instance]->updateBatteryStatus(hrt_absolute_time());
/* Override data that is expected to arrive from UAVCAN msg*/
_battery_status[instance] = _battery.getBatteryStatus();
_battery_status[instance] = _battery[instance]->getBatteryStatus();
_battery_status[instance].temperature = msg.temperature + CONSTANTS_ABSOLUTE_NULL_CELSIUS; // Kelvin to Celcius
_battery_status[instance].serial_number = msg.model_instance_id;
_battery_status[instance].id = msg.getSrcNodeID().get(); // overwrite zeroed index from _battery

14
src/drivers/uavcan/sensors/battery.hpp

@ -99,8 +99,18 @@ private: @@ -99,8 +99,18 @@ private:
BatteryDataType _batt_update_mod[battery_status_s::MAX_INSTANCES] {};
static constexpr int FILTER_DATA = 2;
static constexpr int BATTERY_INDEX = 1;
static constexpr int BATTERY_INDEX_1 = 1;
static constexpr int BATTERY_INDEX_2 = 2;
static constexpr int BATTERY_INDEX_3 = 3;
static constexpr int BATTERY_INDEX_4 = 4;
static constexpr int SAMPLE_INTERVAL_US = 20_ms; // assume higher frequency UAVCAN feedback than 50Hz
Battery _battery{BATTERY_INDEX, this, SAMPLE_INTERVAL_US, battery_status_s::BATTERY_SOURCE_EXTERNAL};
static_assert(battery_status_s::MAX_INSTANCES <= BATTERY_INDEX_4, "Battery array too big");
Battery battery1 = {BATTERY_INDEX_1, this, SAMPLE_INTERVAL_US, battery_status_s::BATTERY_SOURCE_EXTERNAL};
Battery battery2 = {BATTERY_INDEX_2, this, SAMPLE_INTERVAL_US, battery_status_s::BATTERY_SOURCE_EXTERNAL};
Battery battery3 = {BATTERY_INDEX_3, this, SAMPLE_INTERVAL_US, battery_status_s::BATTERY_SOURCE_EXTERNAL};
Battery battery4 = {BATTERY_INDEX_4, this, SAMPLE_INTERVAL_US, battery_status_s::BATTERY_SOURCE_EXTERNAL};
Battery *_battery[battery_status_s::MAX_INSTANCES] = { &battery1, &battery2, &battery3, &battery4 };
};

Loading…
Cancel
Save