mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-10-24 06:53:34 +08:00
mavlink: reduce rate multiplier to 0.25 while sending parameters
Co-authored-by: alexcekay <alexander@auterion.com>
This commit is contained in:
committed by
Alexander Lerach
co-authored by
alexcekay
parent
cfe1666add
commit
bb3fd295ea
@@ -1318,6 +1318,11 @@ Mavlink::update_rate_mult()
|
|||||||
/* scale up and down as the link permits */
|
/* scale up and down as the link permits */
|
||||||
float bandwidth_mult = (float)(_datarate * mavlink_ulog_streaming_rate_inv - const_rate) / rate;
|
float bandwidth_mult = (float)(_datarate * mavlink_ulog_streaming_rate_inv - const_rate) / rate;
|
||||||
|
|
||||||
|
/* Reduce rate while sending parameters in low bandwidth mode */
|
||||||
|
if (sending_parameters() && _mode == Mavlink::MAVLINK_MODE_LOW_BANDWIDTH) {
|
||||||
|
bandwidth_mult = fminf(bandwidth_mult, 0.25f);
|
||||||
|
}
|
||||||
|
|
||||||
/* if we do not have flow control, limit to the set data rate */
|
/* if we do not have flow control, limit to the set data rate */
|
||||||
if (!get_flow_control_enabled()) {
|
if (!get_flow_control_enabled()) {
|
||||||
bandwidth_mult = fminf(1.0f, bandwidth_mult);
|
bandwidth_mult = fminf(1.0f, bandwidth_mult);
|
||||||
|
|||||||
@@ -180,6 +180,9 @@ public:
|
|||||||
void check_events_enable() { _should_check_events.store(true); }
|
void check_events_enable() { _should_check_events.store(true); }
|
||||||
void check_events_disable() { _should_check_events.store(false); }
|
void check_events_disable() { _should_check_events.store(false); }
|
||||||
|
|
||||||
|
bool sending_parameters() const { return _sending_parameters.load(); }
|
||||||
|
void set_sending_parameters(bool sending) { _sending_parameters.store(sending); }
|
||||||
|
|
||||||
int get_uart_fd() const { return _uart_fd; }
|
int get_uart_fd() const { return _uart_fd; }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -570,6 +573,7 @@ private:
|
|||||||
bool _received_messages{false}; /**< Whether we've received valid mavlink messages. */
|
bool _received_messages{false}; /**< Whether we've received valid mavlink messages. */
|
||||||
|
|
||||||
px4::atomic_bool _should_check_events{false}; /**< Events subscription: only one MAVLink instance should check */
|
px4::atomic_bool _should_check_events{false}; /**< Events subscription: only one MAVLink instance should check */
|
||||||
|
px4::atomic_bool _sending_parameters{false}; /**< True if parameters are currently sent out */
|
||||||
|
|
||||||
unsigned _main_loop_delay{1000}; /**< mainloop delay, depends on data rate */
|
unsigned _main_loop_delay{1000}; /**< mainloop delay, depends on data rate */
|
||||||
|
|
||||||
|
|||||||
@@ -552,6 +552,8 @@ MavlinkParametersManager::send_param(param_t param, int component_id)
|
|||||||
_mavlink_resend_uart(_mavlink.get_channel(), &mavlink_packet);
|
_mavlink_resend_uart(_mavlink.get_channel(), &mavlink_packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_last_param_sent = hrt_absolute_time();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -77,6 +77,17 @@ public:
|
|||||||
|
|
||||||
void handle_message(const mavlink_message_t *msg);
|
void handle_message(const mavlink_message_t *msg);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if parameters are sent out. This includes:
|
||||||
|
* - while sending all parameters
|
||||||
|
* - while sending a single requested parameter
|
||||||
|
* - while sending out changed parameters
|
||||||
|
*/
|
||||||
|
bool send_active() const
|
||||||
|
{
|
||||||
|
return hrt_absolute_time() < _last_param_sent + 2_s;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
int _send_all_index{-1};
|
int _send_all_index{-1};
|
||||||
|
|
||||||
@@ -161,6 +172,8 @@ protected:
|
|||||||
|
|
||||||
Mavlink &_mavlink;
|
Mavlink &_mavlink;
|
||||||
|
|
||||||
|
hrt_abstime _last_param_sent{0};
|
||||||
|
|
||||||
bool _first_send{false};
|
bool _first_send{false};
|
||||||
hrt_abstime _last_param_sent_timestamp{0}; // time at which the last parameter was sent
|
hrt_abstime _last_param_sent_timestamp{0}; // time at which the last parameter was sent
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -3291,6 +3291,7 @@ MavlinkReceiver::run()
|
|||||||
|
|
||||||
if (_mavlink.get_mode() != Mavlink::MAVLINK_MODE::MAVLINK_MODE_IRIDIUM) {
|
if (_mavlink.get_mode() != Mavlink::MAVLINK_MODE::MAVLINK_MODE_IRIDIUM) {
|
||||||
_parameters_manager.send();
|
_parameters_manager.send();
|
||||||
|
_mavlink.set_sending_parameters(_parameters_manager.send_active());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_mavlink.ftp_enabled()) {
|
if (_mavlink.ftp_enabled()) {
|
||||||
|
|||||||
Reference in New Issue
Block a user