diff -r 36cd81362f10 -r 7fafc1a7451e master/fsm_coe.c --- a/master/fsm_coe.c Wed Jun 18 15:03:03 2008 +0000 +++ b/master/fsm_coe.c Thu Jun 19 07:54:45 2008 +0000 @@ -1024,6 +1024,7 @@ ec_print_data(data, 10 + request->data_size); } + fsm->request->jiffies_sent = jiffies; fsm->retries = EC_FSM_RETRIES; fsm->state = ec_fsm_coe_down_request; } @@ -1052,6 +1053,19 @@ } if (datagram->working_counter != 1) { + if (!datagram->working_counter) { + unsigned long diff_ms = + (jiffies - fsm->request->jiffies_sent) * 1000 / HZ; + if (diff_ms < fsm->request->response_timeout) { + if (fsm->slave->master->debug_level) { + EC_DBG("Slave %u did no respond to Sdo download request. " + "Retrying after %u ms...\n", + slave->ring_position, (u32) diff_ms); + // no response; send request datagram again + return; + } + } + } fsm->state = ec_fsm_coe_error; EC_ERR("Reception of CoE download request failed on slave %u: ", slave->ring_position); @@ -1253,6 +1267,7 @@ ec_print_data(data, 10); } + fsm->request->jiffies_sent = jiffies; fsm->retries = EC_FSM_RETRIES; fsm->state = ec_fsm_coe_up_request; } @@ -1281,6 +1296,19 @@ } if (datagram->working_counter != 1) { + if (!datagram->working_counter) { + unsigned long diff_ms = + (jiffies - fsm->request->jiffies_sent) * 1000 / HZ; + if (diff_ms < fsm->request->response_timeout) { + if (fsm->slave->master->debug_level) { + EC_DBG("Slave %u did no respond to Sdo upload request. " + "Retrying after %u ms...\n", + slave->ring_position, (u32) diff_ms); + // no response; send request datagram again + return; + } + } + } fsm->state = ec_fsm_coe_error; EC_ERR("Reception of CoE upload request failed on slave %u: ", slave->ring_position);