master/fsm_master.c
changeset 908 386b908033be
parent 907 570ae1c64465
child 910 9fd31755f576
--- a/master/fsm_master.c	Fri Apr 25 14:07:38 2008 +0000
+++ b/master/fsm_master.c	Fri Apr 25 14:32:56 2008 +0000
@@ -261,6 +261,11 @@
                     return;
                 }
 
+                // do not force reconfiguration in operation mode to avoid
+                // unnecesssary process data interruptions
+                if (master->mode != EC_MASTER_MODE_OPERATION)
+                    slave->force_config = 1;
+
                 list_add_tail(&slave->list, &master->slaves);
             }
 
@@ -514,7 +519,7 @@
     // Does the slave have to be configured?
     if (!slave->error_flag
             && (slave->current_state != slave->requested_state
-                || !slave->self_configured)) {
+                || slave->force_config)) {
         // Start slave configuration, if it is allowed.
         down(&master->config_sem);
         if (!master->allow_config) {
@@ -524,19 +529,19 @@
             up(&master->config_sem);
 
             if (master->debug_level) {
-                char old_state[EC_STATE_STRING_SIZE];
+                char old_state[EC_STATE_STRING_SIZE],
+                     new_state[EC_STATE_STRING_SIZE];
                 ec_state_string(slave->current_state, old_state);
-                if (slave->current_state != slave->requested_state) {
-                    char new_state[EC_STATE_STRING_SIZE];
-                    ec_state_string(slave->requested_state, new_state);
-                    EC_DBG("Changing state of slave %u (%s -> %s).\n",
-                            slave->ring_position, old_state, new_state);
-                } else if (!slave->self_configured) {
-                    EC_DBG("Reconfiguring slave %u (%s).\n",
-                            slave->ring_position, old_state);
-                }
+                ec_state_string(slave->requested_state, new_state);
+                EC_DBG("Changing state of slave %u from %s to %s%s.\n",
+                        slave->ring_position, old_state, new_state,
+                        slave->force_config ? " (forced)" : "");
             }
 
+            // configuration will be done immediately; therefore reset the
+            // force flag
+            slave->force_config = 0;
+
             fsm->idle = 0;
             fsm->state = ec_fsm_master_state_configure_slave;
             ec_fsm_slave_config_start(&fsm->fsm_slave_config, slave);