Skip to content
Snippets Groups Projects
Commit d514439e authored by Florian Pose's avatar Florian Pose
Browse files

Configure Pdos before configuring the Pdo sync managers,

to earlier detect problems with non-existing SM information.
parent ff9f3696
No related branches found
No related tags found
No related merge requests found
......@@ -14,7 +14,6 @@ Version 1.4.0:
* Remove ec_sync_t::assign_source?
* Repair rcethercat status.
* Debug output for all configuration functions of the application interface.
* Output warning, if there is no sync manager for a configuration.
* Abort code messages in userspace.
Future issues:
......
......@@ -10,78 +10,61 @@ digraph slaveconf {
start -> init [weight=10]
init [fontname="Helvetica"]
//init -> init
//init -> error
init -> enter_mbox_sync [fontname="Helvetica",label ="No FMMUs"]
init -> enter_mbox_sync [fontname="Helvetica", label="No FMMUs"]
init -> clear_fmmus [weight=10]
clear_fmmus [fontname="Helvetica"]
//clear_fmmus -> clear_fmmus
//clear_fmmus -> error
clear_fmmus -> enter_mbox_sync [weight=10]
enter_mbox_sync [shape=point,label=""]
enter_mbox_sync -> end [fontname="Helvetica",label="INIT\nrequested"]
enter_mbox_sync -> preop [fontname="Helvetica",label="No mailboxes"]
enter_mbox_sync [shape=point, label=""]
enter_mbox_sync -> end [fontname="Helvetica", label="INIT\nrequested"]
enter_mbox_sync -> preop [fontname="Helvetica", label="No mailboxes"]
enter_mbox_sync -> mbox_sync [weight=10]
mbox_sync [fontname="Helvetica"]
//mbox_sync -> mbox_sync
//mbox_sync -> error
mbox_sync -> preop [weight=10]
preop [fontname="Helvetica"]
//preop -> preop
//preop -> error
preop -> end [fontname="Helvetica",label="PREOP\nrequested"]
preop -> enter_safeop [fontname="Helvetica",label="No slave\nconfig attached"]
preop -> end [fontname="Helvetica", label="PREOP\nrequested"]
preop -> enter_safeop [fontname="Helvetica", label="No slave\nconfig attached"]
preop -> enter_sdo_conf [weight=10]
enter_sdo_conf [shape=point,label=""]
enter_sdo_conf -> enter_pdo_sync [fontname="Helvetica",label="No Sdo\nconfigurations"]
enter_sdo_conf [shape=point, label=""]
enter_sdo_conf -> enter_pdo_conf [fontname="Helvetica", label="No Sdos\nconfigured"]
enter_sdo_conf -> sdo_conf [weight=10]
sdo_conf [fontname="Helvetica"]
//sdo_conf -> sdo_conf
//sdo_conf -> error
sdo_conf -> enter_pdo_sync [weight=10]
sdo_conf -> enter_pdo_conf [weight=10]
enter_pdo_sync [shape=point,label=""]
enter_pdo_sync -> enter_safeop [fontname="Helvetica",label="No Pdos"]
enter_pdo_conf [shape=point, label=""]
enter_pdo_conf -> pdo_conf [weight=10]
pdo_conf [fontname="Helvetica"]
pdo_conf -> enter_pdo_sync [weight=10]
enter_pdo_sync [shape=point, label=""]
enter_pdo_sync -> enter_fmmu [fontname="Helvetica", label="No Pdo SMs"]
enter_pdo_sync -> pdo_sync [weight=10]
pdo_sync [fontname="Helvetica"]
//pdo_sync -> pdo_sync
//pdo_sync -> error
pdo_sync -> pdo_conf [weight=10]
pdo_conf [fontname="Helvetica"]
//pdo_conf -> pdo_conf
//pdo_conf -> error
pdo_conf -> enter_fmmu [weight=10]
pdo_sync -> enter_fmmu [weight=10]
enter_fmmu [shape=point,label=""]
enter_fmmu -> enter_safeop [fontname="Helvetica",label="No FMMUs\nto configure"]
enter_fmmu -> enter_safeop [fontname="Helvetica", label="No FMMUs\nconfigured"]
enter_fmmu -> fmmu [weight=10]
fmmu [fontname="Helvetica"]
//fmmu -> fmmu
//fmmu -> error
fmmu -> enter_safeop [weight=10]
enter_safeop [shape=point,label=""]
enter_safeop -> safeop [weight=10]
safeop [fontname="Helvetica"]
//safeop -> safeop
//safeop -> error
safeop -> end [fontname="Helvetica",label="SAFEOP\nrequested"]
safeop -> end [fontname="Helvetica", label="SAFEOP\nrequested"]
safeop -> op [weight=10]
op [fontname="Helvetica"]
//op -> op
//op -> error
op -> end [weight=10]
op -> end// [weight=10]
end [fontname="Helvetica"]
}
......@@ -413,7 +413,7 @@ void ec_fsm_pdo_conf_action_next_sync(
if (!(fsm->sync = ec_slave_get_sync(fsm->slave, fsm->sync_index))) {
if (!list_empty(&fsm->pdos.list))
EC_WARN("Pdos configured for SM%u, but slave %u does not "
"provide a sync manager configuration!\n",
"provide the sync manager information!\n",
fsm->sync_index, fsm->slave->ring_position);
continue;
}
......
......@@ -61,6 +61,7 @@ void ec_fsm_slave_config_state_op(ec_fsm_slave_config_t *);
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_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_fmmu(ec_fsm_slave_config_t *);
void ec_fsm_slave_config_enter_safeop(ec_fsm_slave_config_t *);
......@@ -440,7 +441,7 @@ void ec_fsm_slave_config_enter_sdo_conf(
// No CoE configuration to be applied?
if (list_empty(&slave->config->sdo_configs)) { // skip Sdo configuration
ec_fsm_slave_config_enter_pdo_sync(fsm);
ec_fsm_slave_config_enter_pdo_conf(fsm);
return;
}
......@@ -482,6 +483,39 @@ void ec_fsm_slave_config_state_sdo_conf(
}
// All Sdos are now configured.
ec_fsm_slave_config_enter_pdo_conf(fsm);
}
/*****************************************************************************/
/** PDO_CONF entry function.
*/
void ec_fsm_slave_config_enter_pdo_conf(
ec_fsm_slave_config_t *fsm /**< slave state machine */
)
{
// Start configuring Pdos
ec_fsm_pdo_start_configuration(fsm->fsm_pdo, fsm->slave);
fsm->state = ec_fsm_slave_config_state_pdo_conf;
fsm->state(fsm); // execute immediately
}
/*****************************************************************************/
/** Slave configuration state: PDO_CONF.
*/
void ec_fsm_slave_config_state_pdo_conf(
ec_fsm_slave_config_t *fsm /**< slave state machine */
)
{
if (ec_fsm_pdo_exec(fsm->fsm_pdo))
return;
if (!ec_fsm_pdo_success(fsm->fsm_pdo)) {
EC_WARN("Pdo configuration failed on slave %u.\n",
fsm->slave->ring_position);
}
ec_fsm_slave_config_enter_pdo_sync(fsm);
}
......@@ -509,7 +543,7 @@ void ec_fsm_slave_config_enter_pdo_sync(
if (slave->sii.sync_count <= offset) {
// no Pdo sync managers to configure
ec_fsm_slave_config_enter_safeop(fsm);
ec_fsm_slave_config_enter_fmmu(fsm);
return;
}
......@@ -565,28 +599,6 @@ void ec_fsm_slave_config_state_pdo_sync(
return;
}
// Start configuring Pdos
ec_fsm_pdo_start_configuration(fsm->fsm_pdo, fsm->slave);
fsm->state = ec_fsm_slave_config_state_pdo_conf;
fsm->state(fsm); // execute immediately
}
/*****************************************************************************/
/** Slave configuration state: PDO_CONF.
*/
void ec_fsm_slave_config_state_pdo_conf(
ec_fsm_slave_config_t *fsm /**< slave state machine */
)
{
if (ec_fsm_pdo_exec(fsm->fsm_pdo))
return;
if (!ec_fsm_pdo_success(fsm->fsm_pdo)) {
EC_WARN("Pdo configuration failed on slave %u.\n",
fsm->slave->ring_position);
}
ec_fsm_slave_config_enter_fmmu(fsm);
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment