diff --git a/src/request_state.c b/src/request_state.c index 89c53857..2297789c 100644 --- a/src/request_state.c +++ b/src/request_state.c @@ -15,6 +15,7 @@ #include #include +#include #include #include @@ -95,7 +96,12 @@ bool request_state_match(const request_state_t *state) { int request_state_signal(request_state_t *state, settings_api_t *api, uint16_t msg_id) { assert(state); - assert(msg_id == state->msg_id); + + if (msg_id != state->msg_id) { + log_error("Error: request msg_id [%d] do not match state msg_id [%d]", + msg_id, state->msg_id); + assert(!"request msg_id do not match state msg_id"); + } state->match = true; state->pending = false; diff --git a/src/setting_sbp_cb.c b/src/setting_sbp_cb.c index 13c77320..2b6fc459 100644 --- a/src/setting_sbp_cb.c +++ b/src/setting_sbp_cb.c @@ -304,9 +304,12 @@ static void setting_read_by_index_done_callback(uint16_t sender_id, uint8_t len, /* Traverse the pending requests */ request_state_t *state = ctx->req_list; while (state != NULL) { - state->read_by_idx_done = true; - request_state_signal(state, &ctx->client_iface, - SBP_MSG_SETTINGS_READ_BY_INDEX_REQ); + // request state signal only if the msg_id matches + if (state->msg_id == SBP_MSG_SETTINGS_READ_BY_INDEX_REQ) { + state->read_by_idx_done = true; + request_state_signal(state, &ctx->client_iface, + SBP_MSG_SETTINGS_READ_BY_INDEX_REQ); + } state = state->next; } }