GCS_MAVLink: reserve some space when param fetch fails
this ensures we give some buffer space for parameter fetch when we are low on buffer space we reserve 100 bytes for 2 seconds after a param fetch fails due to low buffer space
This commit is contained in:
parent
f02c8f732c
commit
7ec513668e
@ -306,6 +306,9 @@ private:
|
|||||||
uint8_t next_deferred_message;
|
uint8_t next_deferred_message;
|
||||||
uint8_t num_deferred_messages;
|
uint8_t num_deferred_messages;
|
||||||
|
|
||||||
|
// time when we missed sending a parameter for GCS
|
||||||
|
static uint32_t reserve_param_space_start_ms;
|
||||||
|
|
||||||
// bitmask of what mavlink channels are active
|
// bitmask of what mavlink channels are active
|
||||||
static uint8_t mavlink_active;
|
static uint8_t mavlink_active;
|
||||||
|
|
||||||
|
@ -29,6 +29,7 @@ extern const AP_HAL::HAL& hal;
|
|||||||
uint32_t GCS_MAVLINK::last_radio_status_remrssi_ms;
|
uint32_t GCS_MAVLINK::last_radio_status_remrssi_ms;
|
||||||
uint8_t GCS_MAVLINK::mavlink_active = 0;
|
uint8_t GCS_MAVLINK::mavlink_active = 0;
|
||||||
ObjectArray<GCS_MAVLINK::statustext_t> GCS_MAVLINK::_statustext_queue(GCS_MAVLINK_PAYLOAD_STATUS_CAPACITY);
|
ObjectArray<GCS_MAVLINK::statustext_t> GCS_MAVLINK::_statustext_queue(GCS_MAVLINK_PAYLOAD_STATUS_CAPACITY);
|
||||||
|
uint32_t GCS_MAVLINK::reserve_param_space_start_ms;
|
||||||
|
|
||||||
GCS_MAVLINK::GCS_MAVLINK()
|
GCS_MAVLINK::GCS_MAVLINK()
|
||||||
{
|
{
|
||||||
@ -579,9 +580,17 @@ void GCS_MAVLINK::handle_param_request_read(mavlink_message_t *msg)
|
|||||||
mavlink_param_request_read_t packet;
|
mavlink_param_request_read_t packet;
|
||||||
mavlink_msg_param_request_read_decode(msg, &packet);
|
mavlink_msg_param_request_read_decode(msg, &packet);
|
||||||
|
|
||||||
|
/*
|
||||||
|
we reserve some space for sending parameters if the client ever
|
||||||
|
fails to get a parameter due to lack of space
|
||||||
|
*/
|
||||||
|
uint32_t saved_reserve_param_space_start_ms = reserve_param_space_start_ms;
|
||||||
|
reserve_param_space_start_ms = 0;
|
||||||
if (!HAVE_PAYLOAD_SPACE(chan, PARAM_VALUE)) {
|
if (!HAVE_PAYLOAD_SPACE(chan, PARAM_VALUE)) {
|
||||||
|
reserve_param_space_start_ms = AP_HAL::millis();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
reserve_param_space_start_ms = saved_reserve_param_space_start_ms;
|
||||||
|
|
||||||
enum ap_var_type p_type;
|
enum ap_var_type p_type;
|
||||||
AP_Param *vp;
|
AP_Param *vp;
|
||||||
|
@ -234,10 +234,23 @@ bool GCS_MAVLINK::signing_enabled(void) const
|
|||||||
*/
|
*/
|
||||||
uint8_t GCS_MAVLINK::packet_overhead_chan(mavlink_channel_t chan)
|
uint8_t GCS_MAVLINK::packet_overhead_chan(mavlink_channel_t chan)
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
|
reserve 100 bytes for parameters when a GCS fails to fetch a
|
||||||
|
parameter due to lack of buffer space. The reservation lasts 2
|
||||||
|
seconds
|
||||||
|
*/
|
||||||
|
uint8_t reserved_space = 0;
|
||||||
|
if (reserve_param_space_start_ms != 0 &&
|
||||||
|
AP_HAL::millis() - reserve_param_space_start_ms < 2000) {
|
||||||
|
reserved_space = 100;
|
||||||
|
} else {
|
||||||
|
reserve_param_space_start_ms = 0;
|
||||||
|
}
|
||||||
|
|
||||||
const mavlink_status_t *status = mavlink_get_channel_status(chan);
|
const mavlink_status_t *status = mavlink_get_channel_status(chan);
|
||||||
if (status->signing && (status->signing->flags & MAVLINK_SIGNING_FLAG_SIGN_OUTGOING)) {
|
if (status->signing && (status->signing->flags & MAVLINK_SIGNING_FLAG_SIGN_OUTGOING)) {
|
||||||
return MAVLINK_NUM_NON_PAYLOAD_BYTES + MAVLINK_SIGNATURE_BLOCK_LEN;
|
return MAVLINK_NUM_NON_PAYLOAD_BYTES + MAVLINK_SIGNATURE_BLOCK_LEN + reserved_space;
|
||||||
}
|
}
|
||||||
return MAVLINK_NUM_NON_PAYLOAD_BYTES;
|
return MAVLINK_NUM_NON_PAYLOAD_BYTES + reserved_space;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user