Retry receiving an EoE set IP parameter response.
This commit is contained in:
parent
cbadc30d15
commit
972337444b
|
|
@ -61,6 +61,7 @@ void ec_fsm_eoe_init(
|
||||||
fsm->datagram = NULL;
|
fsm->datagram = NULL;
|
||||||
fsm->jiffies_start = 0;
|
fsm->jiffies_start = 0;
|
||||||
fsm->request = NULL;
|
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.
|
ec_slave_mbox_prepare_check(slave, datagram); // can not fail.
|
||||||
fsm->retries = EC_FSM_RETRIES;
|
fsm->retries = EC_FSM_RETRIES;
|
||||||
fsm->state = ec_fsm_eoe_set_ip_check;
|
fsm->state = ec_fsm_eoe_set_ip_check;
|
||||||
|
fsm->frame_type_retries = 10;
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
@ -431,11 +433,25 @@ void ec_fsm_eoe_set_ip_response(
|
||||||
frame_type = EC_READ_U8(data) & 0x0f;
|
frame_type = EC_READ_U8(data) & 0x0f;
|
||||||
|
|
||||||
if (frame_type != EC_EOE_FRAMETYPE_SET_IP_RES) {
|
if (frame_type != EC_EOE_FRAMETYPE_SET_IP_RES) {
|
||||||
EC_SLAVE_ERR(slave, "Received no set IP parameter response"
|
if (master->debug_level) {
|
||||||
" (frame type %x).\n", frame_type);
|
EC_SLAVE_DBG(slave, 0, "Received no set IP parameter response"
|
||||||
ec_print_data(data, rec_size);
|
" (frame type %x).\n", frame_type);
|
||||||
fsm->state = ec_fsm_eoe_error;
|
ec_print_data(data, rec_size);
|
||||||
return;
|
}
|
||||||
|
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);
|
req->result = EC_READ_U16(data + 2);
|
||||||
|
|
|
||||||
|
|
@ -48,6 +48,7 @@ struct ec_fsm_eoe {
|
||||||
ec_datagram_t *datagram; /**< Datagram used in the previous step. */
|
ec_datagram_t *datagram; /**< Datagram used in the previous step. */
|
||||||
unsigned long jiffies_start; /**< Timestamp. */
|
unsigned long jiffies_start; /**< Timestamp. */
|
||||||
ec_eoe_request_t *request; /**< EoE request */
|
ec_eoe_request_t *request; /**< EoE request */
|
||||||
|
unsigned int frame_type_retries; /**< retries upon wrong frame type. */
|
||||||
};
|
};
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue