@@ -87,6 +87,9 @@ Battery::Battery(int index, ModuleParams *parent, const int sample_interval_us,
8787 snprintf (param_name, sizeof (param_name), " BAT%d_SOURCE" , _index);
8888 _param_handles.source = param_find (param_name);
8989
90+ snprintf (param_name, sizeof (param_name), " BAT%d_I_OVERWRITE" , _index);
91+ _param_handles.i_overwrite = param_find (param_name);
92+
9093 _param_handles.low_thr = param_find (" BAT_LOW_THR" );
9194 _param_handles.crit_thr = param_find (" BAT_CRIT_THR" );
9295 _param_handles.emergen_thr = param_find (" BAT_EMERGEN_THR" );
@@ -103,7 +106,13 @@ void Battery::updateVoltage(const float voltage_v)
103106
104107void Battery::updateCurrent (const float current_a)
105108{
106- _current_a = current_a;
109+ // Overwrite the measured current if current overwrite is defined and vehicle is unarmed
110+ if (!_armed && _params.i_overwrite > FLT_EPSILON) {
111+ _current_a = _params.i_overwrite ;
112+
113+ } else {
114+ _current_a = current_a;
115+ }
107116}
108117
109118void Battery::updateTemperature (const float temperature_c)
@@ -144,6 +153,14 @@ void Battery::updateBatteryStatus(const hrt_abstime ×tamp)
144153 if (_connected && _battery_initialized) {
145154 _warning = determineWarning (_state_of_charge);
146155 }
156+
157+ if (_vehicle_status_sub.updated ()) {
158+ vehicle_status_s vehicle_status;
159+
160+ if (_vehicle_status_sub.copy (&vehicle_status)) {
161+ _armed = (vehicle_status.arming_state == vehicle_status_s::ARMING_STATE_ARMED);
162+ }
163+ }
147164}
148165
149166battery_status_s Battery::getBatteryStatus ()
@@ -359,7 +376,6 @@ float Battery::computeRemainingTime(float current_a)
359376 vehicle_status_s vehicle_status;
360377
361378 if (_vehicle_status_sub.copy (&vehicle_status)) {
362- _armed = (vehicle_status.arming_state == vehicle_status_s::ARMING_STATE_ARMED);
363379
364380 if (vehicle_status.vehicle_type == vehicle_status_s::VEHICLE_TYPE_FIXED_WING && !_vehicle_status_is_fw) {
365381 reset_current_avg_filter = true ;
@@ -412,6 +428,7 @@ void Battery::updateParams()
412428 param_get (_param_handles.crit_thr , &_params.crit_thr );
413429 param_get (_param_handles.emergen_thr , &_params.emergen_thr );
414430 param_get (_param_handles.bat_avrg_current , &_params.bat_avrg_current );
431+ param_get (_param_handles.i_overwrite , &_params.i_overwrite );
415432
416433 float capacity{0 .f };
417434 param_get (_param_handles.capacity , &capacity);
0 commit comments