--- a/master/fsm_change.c Fri Aug 10 15:27:08 2007 +0000
+++ b/master/fsm_change.c Thu Sep 13 11:08:46 2007 +0000
@@ -190,13 +190,14 @@
fsm->jiffies_start = datagram->jiffies_sent;
}
- if (datagram->working_counter != 1) {
+ if (datagram->working_counter == 0) {
if (datagram->jiffies_received - fsm->jiffies_start >= 3 * HZ) {
char state_str[EC_STATE_STRING_SIZE];
ec_state_string(fsm->requested_state, state_str);
fsm->state = ec_fsm_change_state_error;
- EC_ERR("Failed to set state %s on slave %i: Slave did not"
- " respond.\n", state_str, fsm->slave->ring_position);
+ EC_ERR("Failed to set state %s on slave %i: ",
+ state_str, fsm->slave->ring_position);
+ ec_datagram_print_wc_error(datagram);
return;
}
@@ -207,6 +208,16 @@
return;
}
+ if (unlikely(datagram->working_counter > 1)) {
+ char state_str[EC_STATE_STRING_SIZE];
+ ec_state_string(fsm->requested_state, state_str);
+ fsm->state = ec_fsm_change_state_error;
+ EC_ERR("Failed to set state %s on slave %i: ",
+ state_str, fsm->slave->ring_position);
+ ec_datagram_print_wc_error(datagram);
+ return;
+ }
+
fsm->take_time = 1;
// read AL status from slave
@@ -242,8 +253,9 @@
char req_state[EC_STATE_STRING_SIZE];
ec_state_string(fsm->requested_state, req_state);
fsm->state = ec_fsm_change_state_error;
- EC_ERR("Failed to check state %s on slave %i.\n",
+ EC_ERR("Failed to check state %s on slave %i: ",
req_state, slave->ring_position);
+ ec_datagram_print_wc_error(datagram);
return;
}
@@ -372,7 +384,8 @@
}
if (datagram->working_counter != 1) {
- EC_WARN("Reception of AL status code datagram failed.\n");
+ EC_WARN("Reception of AL status code datagram failed: ");
+ ec_datagram_print_wc_error(datagram);
}
else {
if ((code = EC_READ_U16(datagram->data))) {
@@ -433,8 +446,9 @@
if (datagram->working_counter != 1) {
fsm->state = ec_fsm_change_state_error;
- EC_ERR("Reception of state ack datagram failed - slave %i did not"
- " respond.\n", slave->ring_position);
+ EC_ERR("Reception of state ack datagram failed on slave %i: ",
+ slave->ring_position);
+ ec_datagram_print_wc_error(datagram);
return;
}
@@ -471,8 +485,9 @@
if (datagram->working_counter != 1) {
fsm->state = ec_fsm_change_state_error;
- EC_ERR("Reception of state ack check datagram failed - slave %i did"
- " not respond.\n", slave->ring_position);
+ EC_ERR("Reception of state ack check datagram failed on slave %i: ",
+ slave->ring_position);
+ ec_datagram_print_wc_error(datagram);
return;
}