mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-10-28 01:03:35 +08:00
uavcan/sensors/battery: add multiple battery filter instances
This commit is contained in:
@@ -231,13 +231,13 @@ void
|
|||||||
UavcanBatteryBridge::filterData(const uavcan::ReceivedDataStructure<uavcan::equipment::power::BatteryInfo> &msg,
|
UavcanBatteryBridge::filterData(const uavcan::ReceivedDataStructure<uavcan::equipment::power::BatteryInfo> &msg,
|
||||||
uint8_t instance)
|
uint8_t instance)
|
||||||
{
|
{
|
||||||
_battery.setConnected(true);
|
_battery[instance]->setConnected(true);
|
||||||
_battery.updateVoltage(msg.voltage);
|
_battery[instance]->updateVoltage(msg.voltage);
|
||||||
_battery.updateCurrent(msg.current);
|
_battery[instance]->updateCurrent(msg.current);
|
||||||
_battery.updateBatteryStatus(hrt_absolute_time());
|
_battery[instance]->updateBatteryStatus(hrt_absolute_time());
|
||||||
|
|
||||||
/* Override data that is expected to arrive from UAVCAN msg*/
|
/* 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].temperature = msg.temperature + CONSTANTS_ABSOLUTE_NULL_CELSIUS; // Kelvin to Celcius
|
||||||
_battery_status[instance].serial_number = msg.model_instance_id;
|
_battery_status[instance].serial_number = msg.model_instance_id;
|
||||||
_battery_status[instance].id = msg.getSrcNodeID().get(); // overwrite zeroed index from _battery
|
_battery_status[instance].id = msg.getSrcNodeID().get(); // overwrite zeroed index from _battery
|
||||||
|
|||||||
@@ -99,8 +99,18 @@ private:
|
|||||||
BatteryDataType _batt_update_mod[battery_status_s::MAX_INSTANCES] {};
|
BatteryDataType _batt_update_mod[battery_status_s::MAX_INSTANCES] {};
|
||||||
|
|
||||||
static constexpr int FILTER_DATA = 2;
|
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
|
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 };
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user