diff --git a/documentation/graphs/fsm_slave_conf.dot b/documentation/graphs/fsm_slave_conf.dot index 74354aac..b855d335 100644 --- a/documentation/graphs/fsm_slave_conf.dot +++ b/documentation/graphs/fsm_slave_conf.dot @@ -53,17 +53,17 @@ digraph slaveconf { pdo_sync [fontname="Helvetica"] //pdo_sync -> pdo_sync //pdo_sync -> error - pdo_sync -> pdo_assign [weight=10] - - pdo_assign [fontname="Helvetica"] - //pdo_assign -> pdo_assign - //pdo_assign -> error - pdo_assign -> pdo_mapping [weight=10] + pdo_sync -> pdo_mapping [weight=10] pdo_mapping [fontname="Helvetica"] //pdo_mapping -> pdo_mapping //pdo_mapping -> error - pdo_mapping -> enter_fmmu [weight=10] + pdo_mapping -> pdo_assign [weight=10] + + pdo_assign [fontname="Helvetica"] + //pdo_assign -> pdo_assign + //pdo_assign -> error + pdo_assign -> enter_fmmu [weight=10] enter_fmmu [shape=point,label=""] enter_fmmu -> enter_safeop [fontname="Helvetica",label="No FMMUs\nto configure"] diff --git a/master/fsm_slave_config.c b/master/fsm_slave_config.c index db4b2332..28bc6bbb 100644 --- a/master/fsm_slave_config.c +++ b/master/fsm_slave_config.c @@ -63,7 +63,6 @@ void ec_fsm_slave_config_enter_mbox_sync(ec_fsm_slave_config_t *); void ec_fsm_slave_config_enter_preop(ec_fsm_slave_config_t *); void ec_fsm_slave_config_enter_sdo_conf(ec_fsm_slave_config_t *); void ec_fsm_slave_config_enter_pdo_sync(ec_fsm_slave_config_t *); -void ec_fsm_slave_config_enter_pdo_assign(ec_fsm_slave_config_t *); void ec_fsm_slave_config_enter_fmmu(ec_fsm_slave_config_t *); void ec_fsm_slave_config_enter_safeop(ec_fsm_slave_config_t *); @@ -568,45 +567,6 @@ void ec_fsm_slave_config_state_pdo_sync(ec_fsm_slave_config_t *fsm /**< slave st return; } - ec_fsm_slave_config_enter_pdo_assign(fsm); -} - -/*****************************************************************************/ - -/** - * Check for alternate Pdo assignments to be applied. - */ - -void ec_fsm_slave_config_enter_pdo_assign( - ec_fsm_slave_config_t *fsm /**< slave state machine */ - ) -{ - // start applying alternate Pdo assignments - fsm->state = ec_fsm_slave_config_state_pdo_assign; - ec_fsm_pdo_assign_start(&fsm->fsm_pdo_assign, fsm->slave); - ec_fsm_pdo_assign_exec(&fsm->fsm_pdo_assign); // execute immediately -} - -/*****************************************************************************/ - -/** - Slave configuration state: PDO_ASSIGN. -*/ - -void ec_fsm_slave_config_state_pdo_assign( - ec_fsm_slave_config_t *fsm /**< slave state machine */ - ) -{ - if (ec_fsm_pdo_assign_exec(&fsm->fsm_pdo_assign)) return; - - if (!ec_fsm_pdo_assign_success(&fsm->fsm_pdo_assign)) { - EC_ERR("Pdo assignment failed for slave %u.\n", - fsm->slave->ring_position); - fsm->slave->error_flag = 1; - fsm->state = ec_fsm_slave_config_state_error; - return; - } - // Start configuring Pdo mapping fsm->state = ec_fsm_slave_config_state_pdo_mapping; ec_fsm_pdo_mapping_start(&fsm->fsm_pdo_mapping, fsm->slave); @@ -633,6 +593,32 @@ void ec_fsm_slave_config_state_pdo_mapping( return; } + // start applying alternate Pdo assignments + fsm->state = ec_fsm_slave_config_state_pdo_assign; + ec_fsm_pdo_assign_start(&fsm->fsm_pdo_assign, fsm->slave); + ec_fsm_pdo_assign_exec(&fsm->fsm_pdo_assign); // execute immediately +} + +/*****************************************************************************/ + +/** + Slave configuration state: PDO_ASSIGN. +*/ + +void ec_fsm_slave_config_state_pdo_assign( + ec_fsm_slave_config_t *fsm /**< slave state machine */ + ) +{ + if (ec_fsm_pdo_assign_exec(&fsm->fsm_pdo_assign)) return; + + if (!ec_fsm_pdo_assign_success(&fsm->fsm_pdo_assign)) { + EC_ERR("Pdo assignment failed for slave %u.\n", + fsm->slave->ring_position); + fsm->slave->error_flag = 1; + fsm->state = ec_fsm_slave_config_state_error; + return; + } + ec_fsm_slave_config_enter_fmmu(fsm); }