Skip to content

Commit

Permalink
Re-add filter functionality
Browse files Browse the repository at this point in the history
  • Loading branch information
sdomoszlai13 committed Jan 31, 2025
1 parent 3b83bb4 commit a713d88
Showing 1 changed file with 34 additions and 1 deletion.
35 changes: 34 additions & 1 deletion src/drivers/uavcan/sensors/battery.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,10 @@ int UavcanBatteryBridge::init()

for (uint8_t instance = 0; instance < battery_status_s::MAX_INSTANCES; instance++) {

if (uavcan_sub_bat == RAW_DATA) {
if (uavcan_sub_bat == FILTER_DATA) {
_batt_update_mod[instance] = BatteryDataType::Filter;

} else if (uavcan_sub_bat == RAW_DATA) {
_batt_update_mod[instance] = BatteryDataType::Raw;

} else if (uavcan_sub_bat == RAW_AUX_DATA) {
Expand Down Expand Up @@ -107,6 +110,12 @@ UavcanBatteryBridge::battery_sub_cb(const uavcan::ReceivedDataStructure<uavcan::
return;
}

if (_batt_update_mod[instance] == BatteryDataType::Filter) {

filterData(msg, instance);
return;
}

_battery_status[instance].timestamp = hrt_absolute_time();
_battery_status[instance].voltage_v = msg.voltage;
_battery_status[instance].current_a = msg.current;
Expand Down Expand Up @@ -169,6 +178,12 @@ UavcanBatteryBridge::battery_aux_sub_cb(const uavcan::ReceivedDataStructure<ardu
return;
}

if (_batt_update_mod[instance] == BatteryDataType::Filter) {
return;
}

_batt_update_mod[instance] = BatteryDataType::RawAux;

_battery_status[instance].discharged_mah = (_battery_status[instance].full_charge_capacity_wh -
_battery_status[instance].remaining_capacity_wh) / msg.nominal_voltage *
1000;
Expand Down Expand Up @@ -258,3 +273,21 @@ UavcanBatteryBridge::determineWarning(float remaining)
_warning = battery_status_s::BATTERY_WARNING_LOW;
}
}

void
UavcanBatteryBridge::filterData(const uavcan::ReceivedDataStructure<uavcan::equipment::power::BatteryInfo> &msg,
uint8_t instance)
{
_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[instance]->getBatteryStatus();
_battery_status[instance].temperature = msg.temperature + atmosphere::kAbsoluteNullCelsius; // Kelvin to Celsius
_battery_status[instance].serial_number = msg.model_instance_id;
_battery_status[instance].id = msg.getSrcNodeID().get(); // overwrite zeroed index from _battery

publish(msg.getSrcNodeID().get(), &_battery_status[instance]);
}

0 comments on commit a713d88

Please sign in to comment.