Skip to content

Commit bb3fd29

Browse files
bkuengalexcekay
andcommitted
mavlink: reduce rate multiplier to 0.25 while sending parameters
Co-authored-by: alexcekay <alexander@auterion.com>
1 parent cfe1666 commit bb3fd29

File tree

5 files changed

+25
-0
lines changed

5 files changed

+25
-0
lines changed

src/modules/mavlink/mavlink_main.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1318,6 +1318,11 @@ Mavlink::update_rate_mult()
13181318
/* scale up and down as the link permits */
13191319
float bandwidth_mult = (float)(_datarate * mavlink_ulog_streaming_rate_inv - const_rate) / rate;
13201320

1321+
/* Reduce rate while sending parameters in low bandwidth mode */
1322+
if (sending_parameters() && _mode == Mavlink::MAVLINK_MODE_LOW_BANDWIDTH) {
1323+
bandwidth_mult = fminf(bandwidth_mult, 0.25f);
1324+
}
1325+
13211326
/* if we do not have flow control, limit to the set data rate */
13221327
if (!get_flow_control_enabled()) {
13231328
bandwidth_mult = fminf(1.0f, bandwidth_mult);

src/modules/mavlink/mavlink_main.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,9 @@ class Mavlink final : public ModuleParams
180180
void check_events_enable() { _should_check_events.store(true); }
181181
void check_events_disable() { _should_check_events.store(false); }
182182

183+
bool sending_parameters() const { return _sending_parameters.load(); }
184+
void set_sending_parameters(bool sending) { _sending_parameters.store(sending); }
185+
183186
int get_uart_fd() const { return _uart_fd; }
184187

185188
/**
@@ -570,6 +573,7 @@ class Mavlink final : public ModuleParams
570573
bool _received_messages{false}; /**< Whether we've received valid mavlink messages. */
571574

572575
px4::atomic_bool _should_check_events{false}; /**< Events subscription: only one MAVLink instance should check */
576+
px4::atomic_bool _sending_parameters{false}; /**< True if parameters are currently sent out */
573577

574578
unsigned _main_loop_delay{1000}; /**< mainloop delay, depends on data rate */
575579

src/modules/mavlink/mavlink_parameters.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -552,6 +552,8 @@ MavlinkParametersManager::send_param(param_t param, int component_id)
552552
_mavlink_resend_uart(_mavlink.get_channel(), &mavlink_packet);
553553
}
554554

555+
_last_param_sent = hrt_absolute_time();
556+
555557
return 0;
556558
}
557559

src/modules/mavlink/mavlink_parameters.h

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,17 @@ class MavlinkParametersManager
7777

7878
void handle_message(const mavlink_message_t *msg);
7979

80+
/**
81+
* Check if parameters are sent out. This includes:
82+
* - while sending all parameters
83+
* - while sending a single requested parameter
84+
* - while sending out changed parameters
85+
*/
86+
bool send_active() const
87+
{
88+
return hrt_absolute_time() < _last_param_sent + 2_s;
89+
}
90+
8091
private:
8192
int _send_all_index{-1};
8293

@@ -161,6 +172,8 @@ class MavlinkParametersManager
161172

162173
Mavlink &_mavlink;
163174

175+
hrt_abstime _last_param_sent{0};
176+
164177
bool _first_send{false};
165178
hrt_abstime _last_param_sent_timestamp{0}; // time at which the last parameter was sent
166179
};

src/modules/mavlink/mavlink_receiver.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3291,6 +3291,7 @@ MavlinkReceiver::run()
32913291

32923292
if (_mavlink.get_mode() != Mavlink::MAVLINK_MODE::MAVLINK_MODE_IRIDIUM) {
32933293
_parameters_manager.send();
3294+
_mavlink.set_sending_parameters(_parameters_manager.send_active());
32943295
}
32953296

32963297
if (_mavlink.ftp_enabled()) {

0 commit comments

Comments
 (0)