mirror of
https://gitlab.com/etherlab.org/ethercat.git
synced 2026-02-05 19:39:50 +08:00
Set EoE IP params during slave configuation.
This commit is contained in:
@@ -92,9 +92,11 @@ void ec_fsm_master_init(
|
||||
ec_fsm_coe_init(&fsm->fsm_coe);
|
||||
ec_fsm_soe_init(&fsm->fsm_soe);
|
||||
ec_fsm_pdo_init(&fsm->fsm_pdo, &fsm->fsm_coe);
|
||||
ec_fsm_eoe_init(&fsm->fsm_eoe);
|
||||
ec_fsm_change_init(&fsm->fsm_change, fsm->datagram);
|
||||
ec_fsm_slave_config_init(&fsm->fsm_slave_config, fsm->datagram,
|
||||
&fsm->fsm_change, &fsm->fsm_coe, &fsm->fsm_soe, &fsm->fsm_pdo);
|
||||
&fsm->fsm_change, &fsm->fsm_coe, &fsm->fsm_soe, &fsm->fsm_pdo,
|
||||
&fsm->fsm_eoe);
|
||||
ec_fsm_slave_scan_init(&fsm->fsm_slave_scan, fsm->datagram,
|
||||
&fsm->fsm_slave_config, &fsm->fsm_pdo);
|
||||
ec_fsm_sii_init(&fsm->fsm_sii, fsm->datagram);
|
||||
@@ -112,6 +114,7 @@ void ec_fsm_master_clear(
|
||||
ec_fsm_coe_clear(&fsm->fsm_coe);
|
||||
ec_fsm_soe_clear(&fsm->fsm_soe);
|
||||
ec_fsm_pdo_clear(&fsm->fsm_pdo);
|
||||
ec_fsm_eoe_clear(&fsm->fsm_eoe);
|
||||
ec_fsm_change_clear(&fsm->fsm_change);
|
||||
ec_fsm_slave_config_clear(&fsm->fsm_slave_config);
|
||||
ec_fsm_slave_scan_clear(&fsm->fsm_slave_scan);
|
||||
|
||||
@@ -85,6 +85,7 @@ struct ec_fsm_master {
|
||||
ec_fsm_coe_t fsm_coe; /**< CoE state machine */
|
||||
ec_fsm_soe_t fsm_soe; /**< SoE state machine */
|
||||
ec_fsm_pdo_t fsm_pdo; /**< PDO configuration state machine. */
|
||||
ec_fsm_eoe_t fsm_eoe; /**< EoE state machine */
|
||||
ec_fsm_change_t fsm_change; /**< State change state machine */
|
||||
ec_fsm_slave_config_t fsm_slave_config; /**< slave state machine */
|
||||
ec_fsm_slave_scan_t fsm_slave_scan; /**< slave state machine */
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*****************************************************************************
|
||||
*
|
||||
* Copyright (C) 2006-2023 Florian Pose, Ingenieurgemeinschaft IgH
|
||||
* Copyright (C) 2006-2024 Florian Pose, Ingenieurgemeinschaft IgH
|
||||
*
|
||||
* This file is part of the IgH EtherCAT Master.
|
||||
*
|
||||
@@ -67,6 +67,7 @@ void ec_fsm_slave_config_state_assign_ethercat(ec_fsm_slave_config_t *);
|
||||
#endif
|
||||
void ec_fsm_slave_config_state_sdo_conf(ec_fsm_slave_config_t *);
|
||||
void ec_fsm_slave_config_state_soe_conf_preop(ec_fsm_slave_config_t *);
|
||||
void ec_fsm_slave_config_state_eoe_ip_param(ec_fsm_slave_config_t *);
|
||||
void ec_fsm_slave_config_state_watchdog_divider(ec_fsm_slave_config_t *);
|
||||
void ec_fsm_slave_config_state_watchdog(ec_fsm_slave_config_t *);
|
||||
void ec_fsm_slave_config_state_pdo_sync(ec_fsm_slave_config_t *);
|
||||
@@ -91,6 +92,7 @@ void ec_fsm_slave_config_enter_assign_pdi(ec_fsm_slave_config_t *);
|
||||
void ec_fsm_slave_config_enter_boot_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_soe_conf_preop(ec_fsm_slave_config_t *);
|
||||
void ec_fsm_slave_config_enter_eoe_ip_param(ec_fsm_slave_config_t *);
|
||||
void ec_fsm_slave_config_enter_pdo_conf(ec_fsm_slave_config_t *);
|
||||
void ec_fsm_slave_config_enter_watchdog_divider(ec_fsm_slave_config_t *);
|
||||
void ec_fsm_slave_config_enter_watchdog(ec_fsm_slave_config_t *);
|
||||
@@ -117,7 +119,8 @@ void ec_fsm_slave_config_init(
|
||||
ec_fsm_change_t *fsm_change, /**< State change state machine to use. */
|
||||
ec_fsm_coe_t *fsm_coe, /**< CoE state machine to use. */
|
||||
ec_fsm_soe_t *fsm_soe, /**< SoE state machine to use. */
|
||||
ec_fsm_pdo_t *fsm_pdo /**< PDO configuration state machine to use. */
|
||||
ec_fsm_pdo_t *fsm_pdo, /**< PDO configuration state machine to use. */
|
||||
ec_fsm_eoe_t *fsm_eoe /**< EoE state machine to use. */
|
||||
)
|
||||
{
|
||||
ec_sdo_request_init(&fsm->request_copy);
|
||||
@@ -128,6 +131,7 @@ void ec_fsm_slave_config_init(
|
||||
fsm->fsm_coe = fsm_coe;
|
||||
fsm->fsm_soe = fsm_soe;
|
||||
fsm->fsm_pdo = fsm_pdo;
|
||||
fsm->fsm_eoe = fsm_eoe;
|
||||
|
||||
fsm->wait_ms = 0;
|
||||
}
|
||||
@@ -901,7 +905,7 @@ void ec_fsm_slave_config_enter_soe_conf_preop(
|
||||
}
|
||||
|
||||
// No SoE configuration to be applied in PREOP
|
||||
ec_fsm_slave_config_enter_pdo_conf(fsm);
|
||||
ec_fsm_slave_config_enter_eoe_ip_param(fsm);
|
||||
}
|
||||
|
||||
/****************************************************************************/
|
||||
@@ -945,6 +949,56 @@ void ec_fsm_slave_config_state_soe_conf_preop(
|
||||
}
|
||||
|
||||
// All PREOP IDNs are now configured.
|
||||
ec_fsm_slave_config_enter_eoe_ip_param(fsm);
|
||||
}
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/** EOE_IP_PARAM entry function.
|
||||
*/
|
||||
void ec_fsm_slave_config_enter_eoe_ip_param(
|
||||
ec_fsm_slave_config_t *fsm /**< slave state machine */
|
||||
)
|
||||
{
|
||||
#if EC_EOE
|
||||
ec_slave_t *slave = fsm->slave;
|
||||
ec_eoe_request_t *request = &slave->config->eoe_ip_param_request;
|
||||
|
||||
if (ec_eoe_request_valid(request)) {
|
||||
EC_SLAVE_DBG(slave, 1, "Setting EoE IP parameters...\n");
|
||||
|
||||
// Start EoE command
|
||||
fsm->state = ec_fsm_slave_config_state_eoe_ip_param;
|
||||
ec_fsm_eoe_set_ip_param(fsm->fsm_eoe, slave, request);
|
||||
ec_fsm_eoe_exec(fsm->fsm_eoe, fsm->datagram); // execute immediately
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
ec_fsm_slave_config_enter_pdo_conf(fsm);
|
||||
}
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/** Slave configuration state: EOE_IP_PARAM.
|
||||
*/
|
||||
void ec_fsm_slave_config_state_eoe_ip_param(
|
||||
ec_fsm_slave_config_t *fsm /**< slave state machine */
|
||||
)
|
||||
{
|
||||
ec_slave_t *slave = fsm->slave;
|
||||
|
||||
if (ec_fsm_eoe_exec(fsm->fsm_eoe, fsm->datagram)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (ec_fsm_eoe_success(fsm->fsm_eoe)) {
|
||||
EC_SLAVE_DBG(slave, 1, "Finished setting EoE IP parameters.\n");
|
||||
}
|
||||
else {
|
||||
EC_SLAVE_ERR(slave, "Failed to set EoE IP parameters.\n");
|
||||
}
|
||||
|
||||
ec_fsm_slave_config_enter_pdo_conf(fsm);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*****************************************************************************
|
||||
*
|
||||
* Copyright (C) 2006-2023 Florian Pose, Ingenieurgemeinschaft IgH
|
||||
* Copyright (C) 2006-2024 Florian Pose, Ingenieurgemeinschaft IgH
|
||||
*
|
||||
* This file is part of the IgH EtherCAT Master.
|
||||
*
|
||||
@@ -34,6 +34,7 @@
|
||||
#include "fsm_change.h"
|
||||
#include "fsm_coe.h"
|
||||
#include "fsm_pdo.h"
|
||||
#include "fsm_eoe.h"
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
@@ -49,6 +50,7 @@ struct ec_fsm_slave_config
|
||||
ec_fsm_coe_t *fsm_coe; /**< CoE state machine. */
|
||||
ec_fsm_soe_t *fsm_soe; /**< SoE state machine. */
|
||||
ec_fsm_pdo_t *fsm_pdo; /**< PDO configuration state machine. */
|
||||
ec_fsm_eoe_t *fsm_eoe; /**< EoE state machine. */
|
||||
|
||||
ec_slave_t *slave; /**< Slave the FSM runs on. */
|
||||
void (*state)(ec_fsm_slave_config_t *); /**< State function. */
|
||||
@@ -65,7 +67,8 @@ struct ec_fsm_slave_config
|
||||
/****************************************************************************/
|
||||
|
||||
void ec_fsm_slave_config_init(ec_fsm_slave_config_t *, ec_datagram_t *,
|
||||
ec_fsm_change_t *, ec_fsm_coe_t *, ec_fsm_soe_t *, ec_fsm_pdo_t *);
|
||||
ec_fsm_change_t *, ec_fsm_coe_t *, ec_fsm_soe_t *, ec_fsm_pdo_t *,
|
||||
ec_fsm_eoe_t *);
|
||||
void ec_fsm_slave_config_clear(ec_fsm_slave_config_t *);
|
||||
|
||||
void ec_fsm_slave_config_start(ec_fsm_slave_config_t *, ec_slave_t *);
|
||||
|
||||
Reference in New Issue
Block a user