diff -r 570ae1c64465 -r 386b908033be master/fsm_master.c --- 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);