Retry receiving an EoE set IP parameter response.

This commit is contained in:
Florian Pose 2024-05-14 18:37:17 +02:00
parent cbadc30d15
commit 972337444b
2 changed files with 22 additions and 5 deletions

View File

@ -61,6 +61,7 @@ void ec_fsm_eoe_init(
fsm->datagram = NULL;
fsm->jiffies_start = 0;
fsm->request = NULL;
fsm->frame_type_retries = 0;
}
/****************************************************************************/
@ -313,6 +314,7 @@ void ec_fsm_eoe_set_ip_request(
ec_slave_mbox_prepare_check(slave, datagram); // can not fail.
fsm->retries = EC_FSM_RETRIES;
fsm->state = ec_fsm_eoe_set_ip_check;
fsm->frame_type_retries = 10;
}
/****************************************************************************/
@ -431,12 +433,26 @@ void ec_fsm_eoe_set_ip_response(
frame_type = EC_READ_U8(data) & 0x0f;
if (frame_type != EC_EOE_FRAMETYPE_SET_IP_RES) {
EC_SLAVE_ERR(slave, "Received no set IP parameter response"
if (master->debug_level) {
EC_SLAVE_DBG(slave, 0, "Received no set IP parameter response"
" (frame type %x).\n", frame_type);
ec_print_data(data, rec_size);
}
if (fsm->frame_type_retries--) {
// there may be an EoE segment left in the mailbox.
// discard it and receive again.
fsm->jiffies_start = fsm->datagram->jiffies_sent;
ec_slave_mbox_prepare_check(slave, datagram); // can not fail.
fsm->retries = EC_FSM_RETRIES;
fsm->state = ec_fsm_eoe_set_ip_check;
return;
}
else {
EC_SLAVE_ERR(slave, "Received no set IP parameter response.\n");
fsm->state = ec_fsm_eoe_error;
return;
}
}
req->result = EC_READ_U16(data + 2);

View File

@ -48,6 +48,7 @@ struct ec_fsm_eoe {
ec_datagram_t *datagram; /**< Datagram used in the previous step. */
unsigned long jiffies_start; /**< Timestamp. */
ec_eoe_request_t *request; /**< EoE request */
unsigned int frame_type_retries; /**< retries upon wrong frame type. */
};
/****************************************************************************/