diff --git a/master/fsm_master.c b/master/fsm_master.c index 72da0322..6c59fa89 100644 --- a/master/fsm_master.c +++ b/master/fsm_master.c @@ -790,6 +790,8 @@ void ec_fsm_master_state_configure_slave( if (ec_fsm_slave_config_exec(&fsm->fsm_slave_config)) return; + fsm->slave->force_config = 0; + // configuration finished master->config_busy = 0; wake_up_interruptible(&master->config_queue); diff --git a/master/fsm_slave_config.c b/master/fsm_slave_config.c index 5b74d531..73936246 100644 --- a/master/fsm_slave_config.c +++ b/master/fsm_slave_config.c @@ -172,10 +172,6 @@ void ec_fsm_slave_config_state_start( EC_DBG("Configuring slave %u...\n", fsm->slave->ring_position); } - // configuration will be done immediately; therefore reset the - // force flag - fsm->slave->force_config = 0; - ec_fsm_change_start(fsm->fsm_change, fsm->slave, EC_SLAVE_STATE_INIT); ec_fsm_change_exec(fsm->fsm_change); fsm->state = ec_fsm_slave_config_state_init; diff --git a/master/slave_config.c b/master/slave_config.c index 77c30b42..efbac3c7 100644 --- a/master/slave_config.c +++ b/master/slave_config.c @@ -807,7 +807,8 @@ void ecrt_slave_config_state(const ec_slave_config_t *sc, state->online = sc->slave ? 1 : 0; if (state->online) { state->operational = - sc->slave->current_state == EC_SLAVE_STATE_OP; + sc->slave->current_state == EC_SLAVE_STATE_OP + && !sc->slave->force_config; state->al_state = sc->slave->current_state; } else { state->operational = 0;