master/fsm_change.c
branchstable-1.3
changeset 1745 07fd94c5119d
parent 1744 7bc131b92039
child 1746 72e7507b3f1b
--- 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;
     }