Moved configuration of Pdo mapping before Pdo assignment.

This commit is contained in:
Florian Pose 2008-04-07 15:12:43 +00:00
parent eeb80bb7b7
commit 42f0529b05
2 changed files with 33 additions and 47 deletions

View File

@ -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"]

View File

@ -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);
}