diff -r e485694c6427 -r da4640f9776d master/fsm_master.c --- a/master/fsm_master.c Tue Aug 09 22:17:16 2011 +0200 +++ b/master/fsm_master.c Tue Aug 09 22:10:45 2011 +0200 @@ -566,6 +566,17 @@ ec_master_t *master = fsm->master; ec_slave_t *slave = fsm->slave; + if (master->config_changed) { + // abort iterating through slaves, + // first compensate DC system time offsets, + // then begin configuring at slave 0 + EC_MASTER_DBG(master, 1, "Configuration changed" + " (aborting state check).\n"); + + fsm->slave = master->slaves; // begin with first slave + ec_fsm_master_enter_write_system_times(fsm); + } + // Does the slave have to be configured? if ((slave->current_state != slave->requested_state || slave->force_config) && !slave->error_flag) { @@ -857,6 +868,7 @@ EC_MASTER_DBG(master, 1, "Writing system time offsets...\n"); if (master->has_app_time) { + while (fsm->slave < master->slaves + master->slave_count) { if (!fsm->slave->base_dc_supported || !fsm->slave->has_dc_system_time) { @@ -873,8 +885,14 @@ fsm->state = ec_fsm_master_state_dc_read_offset; return; } + } else { - EC_MASTER_DBG(master, 1, "No app_time received up to now.\n"); + if (master->active) { + EC_MASTER_ERR(master, "No app_time received up to now," + " but master already active).\n"); + } else { + EC_MASTER_DBG(master, 1, "No app_time received up to now.\n"); + } } ec_master_request_op(master);