--- a/master/fsm_pdo.c Thu Sep 06 14:21:02 2012 +0200
+++ b/master/fsm_pdo.c Mon Nov 03 15:20:05 2014 +0100
@@ -42,30 +42,30 @@
/*****************************************************************************/
-void ec_fsm_pdo_read_state_start(ec_fsm_pdo_t *);
-void ec_fsm_pdo_read_state_pdo_count(ec_fsm_pdo_t *);
-void ec_fsm_pdo_read_state_pdo(ec_fsm_pdo_t *);
-void ec_fsm_pdo_read_state_pdo_entries(ec_fsm_pdo_t *);
-
-void ec_fsm_pdo_read_action_next_sync(ec_fsm_pdo_t *);
-void ec_fsm_pdo_read_action_next_pdo(ec_fsm_pdo_t *);
-
-void ec_fsm_pdo_conf_state_start(ec_fsm_pdo_t *);
-void ec_fsm_pdo_conf_state_read_mapping(ec_fsm_pdo_t *);
-void ec_fsm_pdo_conf_state_mapping(ec_fsm_pdo_t *);
-void ec_fsm_pdo_conf_state_zero_pdo_count(ec_fsm_pdo_t *);
-void ec_fsm_pdo_conf_state_assign_pdo(ec_fsm_pdo_t *);
-void ec_fsm_pdo_conf_state_set_pdo_count(ec_fsm_pdo_t *);
-
-void ec_fsm_pdo_conf_action_next_sync(ec_fsm_pdo_t *);
-void ec_fsm_pdo_conf_action_pdo_mapping(ec_fsm_pdo_t *);
-void ec_fsm_pdo_conf_action_check_mapping(ec_fsm_pdo_t *);
-void ec_fsm_pdo_conf_action_next_pdo_mapping(ec_fsm_pdo_t *);
-void ec_fsm_pdo_conf_action_check_assignment(ec_fsm_pdo_t *);
-void ec_fsm_pdo_conf_action_assign_pdo(ec_fsm_pdo_t *);
-
-void ec_fsm_pdo_state_end(ec_fsm_pdo_t *);
-void ec_fsm_pdo_state_error(ec_fsm_pdo_t *);
+void ec_fsm_pdo_read_state_start(ec_fsm_pdo_t *, ec_datagram_t *);
+void ec_fsm_pdo_read_state_pdo_count(ec_fsm_pdo_t *, ec_datagram_t *);
+void ec_fsm_pdo_read_state_pdo(ec_fsm_pdo_t *, ec_datagram_t *);
+void ec_fsm_pdo_read_state_pdo_entries(ec_fsm_pdo_t *, ec_datagram_t *);
+
+void ec_fsm_pdo_read_action_next_sync(ec_fsm_pdo_t *, ec_datagram_t *);
+void ec_fsm_pdo_read_action_next_pdo(ec_fsm_pdo_t *, ec_datagram_t *);
+
+void ec_fsm_pdo_conf_state_start(ec_fsm_pdo_t *, ec_datagram_t *);
+void ec_fsm_pdo_conf_state_read_mapping(ec_fsm_pdo_t *, ec_datagram_t *);
+void ec_fsm_pdo_conf_state_mapping(ec_fsm_pdo_t *, ec_datagram_t *);
+void ec_fsm_pdo_conf_state_zero_pdo_count(ec_fsm_pdo_t *, ec_datagram_t *);
+void ec_fsm_pdo_conf_state_assign_pdo(ec_fsm_pdo_t *, ec_datagram_t *);
+void ec_fsm_pdo_conf_state_set_pdo_count(ec_fsm_pdo_t *, ec_datagram_t *);
+
+void ec_fsm_pdo_conf_action_next_sync(ec_fsm_pdo_t *, ec_datagram_t *);
+void ec_fsm_pdo_conf_action_pdo_mapping(ec_fsm_pdo_t *, ec_datagram_t *);
+void ec_fsm_pdo_conf_action_check_mapping(ec_fsm_pdo_t *, ec_datagram_t *);
+void ec_fsm_pdo_conf_action_next_pdo_mapping(ec_fsm_pdo_t *, ec_datagram_t *);
+void ec_fsm_pdo_conf_action_check_assignment(ec_fsm_pdo_t *, ec_datagram_t *);
+void ec_fsm_pdo_conf_action_assign_pdo(ec_fsm_pdo_t *, ec_datagram_t *);
+
+void ec_fsm_pdo_state_end(ec_fsm_pdo_t *, ec_datagram_t *);
+void ec_fsm_pdo_state_error(ec_fsm_pdo_t *, ec_datagram_t *);
/*****************************************************************************/
@@ -162,10 +162,12 @@
* \return false, if state machine has terminated
*/
int ec_fsm_pdo_exec(
- ec_fsm_pdo_t *fsm /**< PDO configuration state machine. */
- )
-{
- fsm->state(fsm);
+ ec_fsm_pdo_t *fsm, /**< PDO configuration state machine. */
+ ec_datagram_t *datagram /**< Datagram to use. */
+ )
+{
+ fsm->state(fsm, datagram);
+
return ec_fsm_pdo_running(fsm);
}
@@ -189,12 +191,13 @@
/** Start reading PDO assignment.
*/
void ec_fsm_pdo_read_state_start(
- ec_fsm_pdo_t *fsm /**< finite state machine */
+ ec_fsm_pdo_t *fsm, /**< Finite state machine. */
+ ec_datagram_t *datagram /**< Datagram to use. */
)
{
// read PDO assignment for first sync manager not reserved for mailbox
fsm->sync_index = 1; // next is 2
- ec_fsm_pdo_read_action_next_sync(fsm);
+ ec_fsm_pdo_read_action_next_sync(fsm, datagram);
}
/*****************************************************************************/
@@ -202,7 +205,8 @@
/** Read PDO assignment of next sync manager.
*/
void ec_fsm_pdo_read_action_next_sync(
- ec_fsm_pdo_t *fsm /**< Finite state machine */
+ ec_fsm_pdo_t *fsm, /**< finite state machine. */
+ ec_datagram_t *datagram /**< Datagram to use. */
)
{
ec_slave_t *slave = fsm->slave;
@@ -218,11 +222,11 @@
ec_pdo_list_clear_pdos(&fsm->pdos);
- ec_sdo_request_address(&fsm->request, 0x1C10 + fsm->sync_index, 0);
+ ecrt_sdo_request_index(&fsm->request, 0x1C10 + fsm->sync_index, 0);
ecrt_sdo_request_read(&fsm->request);
fsm->state = ec_fsm_pdo_read_state_pdo_count;
ec_fsm_coe_transfer(fsm->fsm_coe, fsm->slave, &fsm->request);
- ec_fsm_coe_exec(fsm->fsm_coe); // execute immediately
+ ec_fsm_coe_exec(fsm->fsm_coe, datagram); // execute immediately
return;
}
@@ -237,15 +241,18 @@
/** Count assigned PDOs.
*/
void ec_fsm_pdo_read_state_pdo_count(
- ec_fsm_pdo_t *fsm /**< finite state machine */
- )
-{
- if (ec_fsm_coe_exec(fsm->fsm_coe)) return;
+ ec_fsm_pdo_t *fsm, /**< Finite state machine. */
+ ec_datagram_t *datagram /**< Datagram to use. */
+ )
+{
+ if (ec_fsm_coe_exec(fsm->fsm_coe, datagram)) {
+ return;
+ }
if (!ec_fsm_coe_success(fsm->fsm_coe)) {
EC_SLAVE_ERR(fsm->slave, "Failed to read number of assigned PDOs"
" for SM%u.\n", fsm->sync_index);
- ec_fsm_pdo_read_action_next_sync(fsm);
+ ec_fsm_pdo_read_action_next_sync(fsm, datagram);
return;
}
@@ -253,7 +260,7 @@
EC_SLAVE_ERR(fsm->slave, "Invalid data size %zu returned"
" when uploading SDO 0x%04X:%02X.\n", fsm->request.data_size,
fsm->request.index, fsm->request.subindex);
- ec_fsm_pdo_read_action_next_sync(fsm);
+ ec_fsm_pdo_read_action_next_sync(fsm, datagram);
return;
}
fsm->pdo_count = EC_READ_U8(fsm->request.data);
@@ -262,7 +269,7 @@
// read first PDO
fsm->pdo_pos = 1;
- ec_fsm_pdo_read_action_next_pdo(fsm);
+ ec_fsm_pdo_read_action_next_pdo(fsm, datagram);
}
/*****************************************************************************/
@@ -270,26 +277,27 @@
/** Read next PDO.
*/
void ec_fsm_pdo_read_action_next_pdo(
- ec_fsm_pdo_t *fsm /**< finite state machine */
+ ec_fsm_pdo_t *fsm, /**< Finite state machine. */
+ ec_datagram_t *datagram /**< Datagram to use. */
)
{
if (fsm->pdo_pos <= fsm->pdo_count) {
- ec_sdo_request_address(&fsm->request, 0x1C10 + fsm->sync_index,
+ ecrt_sdo_request_index(&fsm->request, 0x1C10 + fsm->sync_index,
fsm->pdo_pos);
ecrt_sdo_request_read(&fsm->request);
fsm->state = ec_fsm_pdo_read_state_pdo;
ec_fsm_coe_transfer(fsm->fsm_coe, fsm->slave, &fsm->request);
- ec_fsm_coe_exec(fsm->fsm_coe); // execute immediately
+ ec_fsm_coe_exec(fsm->fsm_coe, datagram); // execute immediately
return;
}
// finished reading PDO configuration
-
+
ec_pdo_list_copy(&fsm->sync->pdos, &fsm->pdos);
ec_pdo_list_clear_pdos(&fsm->pdos);
// next sync manager
- ec_fsm_pdo_read_action_next_sync(fsm);
+ ec_fsm_pdo_read_action_next_sync(fsm, datagram);
}
/*****************************************************************************/
@@ -297,16 +305,19 @@
/** Fetch PDO information.
*/
void ec_fsm_pdo_read_state_pdo(
- ec_fsm_pdo_t *fsm /**< finite state machine */
- )
-{
- if (ec_fsm_coe_exec(fsm->fsm_coe)) return;
+ ec_fsm_pdo_t *fsm, /**< Finite state machine. */
+ ec_datagram_t *datagram /**< Datagram to use. */
+ )
+{
+ if (ec_fsm_coe_exec(fsm->fsm_coe, datagram)) {
+ return;
+ }
if (!ec_fsm_coe_success(fsm->fsm_coe)) {
EC_SLAVE_ERR(fsm->slave, "Failed to read index of"
" assigned PDO %u from SM%u.\n",
fsm->pdo_pos, fsm->sync_index);
- ec_fsm_pdo_read_action_next_sync(fsm);
+ ec_fsm_pdo_read_action_next_sync(fsm, datagram);
return;
}
@@ -314,14 +325,14 @@
EC_SLAVE_ERR(fsm->slave, "Invalid data size %zu returned"
" when uploading SDO 0x%04X:%02X.\n", fsm->request.data_size,
fsm->request.index, fsm->request.subindex);
- ec_fsm_pdo_read_action_next_sync(fsm);
+ ec_fsm_pdo_read_action_next_sync(fsm, datagram);
return;
}
if (!(fsm->pdo = (ec_pdo_t *)
kmalloc(sizeof(ec_pdo_t), GFP_KERNEL))) {
EC_SLAVE_ERR(fsm->slave, "Failed to allocate PDO.\n");
- ec_fsm_pdo_read_action_next_sync(fsm);
+ ec_fsm_pdo_read_action_next_sync(fsm, datagram);
return;
}
@@ -335,7 +346,7 @@
fsm->state = ec_fsm_pdo_read_state_pdo_entries;
ec_fsm_pdo_entry_start_reading(&fsm->fsm_pdo_entry, fsm->slave, fsm->pdo);
- fsm->state(fsm); // execute immediately
+ fsm->state(fsm, datagram); // execute immediately
}
/*****************************************************************************/
@@ -343,22 +354,24 @@
/** Fetch PDO information.
*/
void ec_fsm_pdo_read_state_pdo_entries(
- ec_fsm_pdo_t *fsm /**< finite state machine */
- )
-{
- if (ec_fsm_pdo_entry_exec(&fsm->fsm_pdo_entry))
- return;
+ ec_fsm_pdo_t *fsm, /**< Finite state machine. */
+ ec_datagram_t *datagram /**< Datagram to use. */
+ )
+{
+ if (ec_fsm_pdo_entry_exec(&fsm->fsm_pdo_entry, datagram)) {
+ return;
+ }
if (!ec_fsm_pdo_entry_success(&fsm->fsm_pdo_entry)) {
EC_SLAVE_ERR(fsm->slave, "Failed to read mapped PDO entries"
" for PDO 0x%04X.\n", fsm->pdo->index);
- ec_fsm_pdo_read_action_next_sync(fsm);
+ ec_fsm_pdo_read_action_next_sync(fsm, datagram);
return;
}
// next PDO
fsm->pdo_pos++;
- ec_fsm_pdo_read_action_next_pdo(fsm);
+ ec_fsm_pdo_read_action_next_pdo(fsm, datagram);
}
/******************************************************************************
@@ -368,7 +381,8 @@
/** Start PDO configuration.
*/
void ec_fsm_pdo_conf_state_start(
- ec_fsm_pdo_t *fsm /**< PDO configuration state machine. */
+ ec_fsm_pdo_t *fsm, /**< Finite state machine. */
+ ec_datagram_t *datagram /**< Datagram to use. */
)
{
if (!fsm->slave->config) {
@@ -377,19 +391,21 @@
}
fsm->sync_index = 1; // next is 2
- ec_fsm_pdo_conf_action_next_sync(fsm);
+ ec_fsm_pdo_conf_action_next_sync(fsm, datagram);
}
/*****************************************************************************/
/** Assign next PDO.
+ *
+ * \return Next PDO, or NULL.
*/
ec_pdo_t *ec_fsm_pdo_conf_action_next_pdo(
const ec_fsm_pdo_t *fsm, /**< PDO configuration state machine. */
const struct list_head *list /**< current PDO list item */
)
{
- list = list->next;
+ list = list->next;
if (list == &fsm->pdos.list)
return NULL; // no next PDO
return list_entry(list, ec_pdo_t, list);
@@ -400,13 +416,14 @@
/** Get the next sync manager for a pdo configuration.
*/
void ec_fsm_pdo_conf_action_next_sync(
- ec_fsm_pdo_t *fsm /**< PDO configuration state machine. */
+ ec_fsm_pdo_t *fsm, /**< Finite state machine. */
+ ec_datagram_t *datagram /**< Datagram to use. */
)
{
fsm->sync_index++;
for (; fsm->sync_index < EC_MAX_SYNC_MANAGERS; fsm->sync_index++) {
- if (!fsm->slave->config) {
+ if (!fsm->slave->config) {
// slave configuration removed in the meantime
fsm->state = ec_fsm_pdo_state_error;
return;
@@ -418,7 +435,7 @@
fsm->state = ec_fsm_pdo_state_error;
return;
}
-
+
if (!(fsm->sync = ec_slave_get_sync(fsm->slave, fsm->sync_index))) {
if (!list_empty(&fsm->pdos.list))
EC_SLAVE_WARN(fsm->slave, "PDOs configured for SM%u,"
@@ -432,11 +449,11 @@
if (!(fsm->pdo =
ec_fsm_pdo_conf_action_next_pdo(fsm, &fsm->pdos.list))) {
// no pdos configured
- ec_fsm_pdo_conf_action_check_assignment(fsm);
+ ec_fsm_pdo_conf_action_check_assignment(fsm, datagram);
return;
}
- ec_fsm_pdo_conf_action_pdo_mapping(fsm);
+ ec_fsm_pdo_conf_action_pdo_mapping(fsm, datagram);
return;
}
@@ -448,7 +465,8 @@
/** Check if the mapping has to be read, otherwise start to configure it.
*/
void ec_fsm_pdo_conf_action_pdo_mapping(
- ec_fsm_pdo_t *fsm /**< PDO configuration state machine. */
+ ec_fsm_pdo_t *fsm, /**< Finite state machine. */
+ ec_datagram_t *datagram /**< Datagram to use. */
)
{
const ec_pdo_t *assigned_pdo;
@@ -464,17 +482,17 @@
if (list_empty(&fsm->slave_pdo.entries)) {
EC_SLAVE_DBG(fsm->slave, 1, "Reading mapping of PDO 0x%04X.\n",
fsm->pdo->index);
-
+
// pdo mapping is unknown; start loading it
ec_fsm_pdo_entry_start_reading(&fsm->fsm_pdo_entry, fsm->slave,
&fsm->slave_pdo);
fsm->state = ec_fsm_pdo_conf_state_read_mapping;
- fsm->state(fsm); // execute immediately
+ fsm->state(fsm, datagram); // execute immediately
return;
}
// pdo mapping is known, check if it most be re-configured
- ec_fsm_pdo_conf_action_check_mapping(fsm);
+ ec_fsm_pdo_conf_action_check_mapping(fsm, datagram);
}
/*****************************************************************************/
@@ -482,11 +500,13 @@
/** Execute the PDO entry state machine to read the current PDO's mapping.
*/
void ec_fsm_pdo_conf_state_read_mapping(
- ec_fsm_pdo_t *fsm /**< PDO configuration state machine. */
- )
-{
- if (ec_fsm_pdo_entry_exec(&fsm->fsm_pdo_entry))
- return;
+ ec_fsm_pdo_t *fsm, /**< Finite state machine. */
+ ec_datagram_t *datagram /**< Datagram to use. */
+ )
+{
+ if (ec_fsm_pdo_entry_exec(&fsm->fsm_pdo_entry, datagram)) {
+ return;
+ }
if (!ec_fsm_pdo_entry_success(&fsm->fsm_pdo_entry))
EC_SLAVE_WARN(fsm->slave,
@@ -494,7 +514,7 @@
fsm->pdo->index);
// check if the mapping must be re-configured
- ec_fsm_pdo_conf_action_check_mapping(fsm);
+ ec_fsm_pdo_conf_action_check_mapping(fsm, datagram);
}
/*****************************************************************************/
@@ -504,7 +524,8 @@
* \todo Display mapping differences.
*/
void ec_fsm_pdo_conf_action_check_mapping(
- ec_fsm_pdo_t *fsm /**< PDO configuration state machine. */
+ ec_fsm_pdo_t *fsm, /**< Finite state machine. */
+ ec_datagram_t *datagram /**< Datagram to use. */
)
{
// check, if slave supports PDO configuration
@@ -516,7 +537,7 @@
ec_fsm_pdo_entry_start_configuration(&fsm->fsm_pdo_entry, fsm->slave,
fsm->pdo, &fsm->slave_pdo);
fsm->state = ec_fsm_pdo_conf_state_mapping;
- fsm->state(fsm); // execure immediately
+ fsm->state(fsm, datagram); // execure immediately
return;
}
else if (!ec_pdo_equal_entries(fsm->pdo, &fsm->slave_pdo)) {
@@ -530,7 +551,7 @@
printk("\n");
}
- ec_fsm_pdo_conf_action_next_pdo_mapping(fsm);
+ ec_fsm_pdo_conf_action_next_pdo_mapping(fsm, datagram);
}
/*****************************************************************************/
@@ -538,18 +559,20 @@
/** Let the PDO entry state machine configure the current PDO's mapping.
*/
void ec_fsm_pdo_conf_state_mapping(
- ec_fsm_pdo_t *fsm /**< PDO configuration state machine. */
- )
-{
- if (ec_fsm_pdo_entry_exec(&fsm->fsm_pdo_entry))
- return;
+ ec_fsm_pdo_t *fsm, /**< Finite state machine. */
+ ec_datagram_t *datagram /**< Datagram to use. */
+ )
+{
+ if (ec_fsm_pdo_entry_exec(&fsm->fsm_pdo_entry, datagram)) {
+ return;
+ }
if (!ec_fsm_pdo_entry_success(&fsm->fsm_pdo_entry))
EC_SLAVE_WARN(fsm->slave,
"Failed to configure mapping of PDO 0x%04X.\n",
fsm->pdo->index);
- ec_fsm_pdo_conf_action_next_pdo_mapping(fsm);
+ ec_fsm_pdo_conf_action_next_pdo_mapping(fsm, datagram);
}
/*****************************************************************************/
@@ -557,17 +580,18 @@
/** Check mapping of next PDO, otherwise configure assignment.
*/
void ec_fsm_pdo_conf_action_next_pdo_mapping(
- ec_fsm_pdo_t *fsm /**< PDO configuration state machine. */
+ ec_fsm_pdo_t *fsm, /**< Finite state machine. */
+ ec_datagram_t *datagram /**< Datagram to use. */
)
{
// get next configured PDO
if (!(fsm->pdo = ec_fsm_pdo_conf_action_next_pdo(fsm, &fsm->pdo->list))) {
// no more configured pdos
- ec_fsm_pdo_conf_action_check_assignment(fsm);
- return;
- }
-
- ec_fsm_pdo_conf_action_pdo_mapping(fsm);
+ ec_fsm_pdo_conf_action_check_assignment(fsm, datagram);
+ return;
+ }
+
+ ec_fsm_pdo_conf_action_pdo_mapping(fsm, datagram);
}
/*****************************************************************************/
@@ -575,7 +599,8 @@
/** Check if the PDO assignment of the current SM has to be re-configured.
*/
void ec_fsm_pdo_conf_action_check_assignment(
- ec_fsm_pdo_t *fsm /**< PDO configuration state machine. */
+ ec_fsm_pdo_t *fsm, /**< Finite state machine. */
+ ec_datagram_t *datagram /**< Datagram to use. */
)
{
if ((fsm->slave->sii.mailbox_protocols & EC_MBOX_COE)
@@ -597,7 +622,7 @@
// set mapped PDO count to zero
EC_WRITE_U8(fsm->request.data, 0); // zero PDOs mapped
fsm->request.data_size = 1;
- ec_sdo_request_address(&fsm->request, 0x1C10 + fsm->sync_index, 0);
+ ecrt_sdo_request_index(&fsm->request, 0x1C10 + fsm->sync_index, 0);
ecrt_sdo_request_write(&fsm->request);
EC_SLAVE_DBG(fsm->slave, 1, "Setting number of assigned"
@@ -605,7 +630,7 @@
fsm->state = ec_fsm_pdo_conf_state_zero_pdo_count;
ec_fsm_coe_transfer(fsm->fsm_coe, fsm->slave, &fsm->request);
- ec_fsm_coe_exec(fsm->fsm_coe); // execute immediately
+ ec_fsm_coe_exec(fsm->fsm_coe, datagram); // execute immediately
return;
}
else if (!ec_pdo_list_equal(&fsm->sync->pdos, &fsm->pdos)) {
@@ -613,7 +638,7 @@
EC_SLAVE_WARN(fsm->slave, ""); ec_fsm_pdo_print(fsm);
}
- ec_fsm_pdo_conf_action_next_sync(fsm);
+ ec_fsm_pdo_conf_action_next_sync(fsm, datagram);
}
/*****************************************************************************/
@@ -621,17 +646,20 @@
/** Set the number of assigned PDOs to zero.
*/
void ec_fsm_pdo_conf_state_zero_pdo_count(
- ec_fsm_pdo_t *fsm /**< PDO configuration state machine. */
- )
-{
- if (ec_fsm_coe_exec(fsm->fsm_coe))
- return;
+ ec_fsm_pdo_t *fsm, /**< Finite state machine. */
+ ec_datagram_t *datagram /**< Datagram to use. */
+ )
+{
+ if (ec_fsm_coe_exec(fsm->fsm_coe, datagram)) {
+ return;
+ }
if (!ec_fsm_coe_success(fsm->fsm_coe)) {
EC_SLAVE_WARN(fsm->slave, "Failed to clear PDO assignment of SM%u.\n",
fsm->sync_index);
- EC_SLAVE_WARN(fsm->slave, ""); ec_fsm_pdo_print(fsm);
- ec_fsm_pdo_conf_action_next_sync(fsm);
+ EC_SLAVE_WARN(fsm->slave, "");
+ ec_fsm_pdo_print(fsm);
+ ec_fsm_pdo_conf_action_next_sync(fsm, datagram);
return;
}
@@ -639,18 +667,17 @@
ec_pdo_list_clear_pdos(&fsm->sync->pdos);
// assign all PDOs belonging to the current sync manager
-
+
// find first PDO
if (!(fsm->pdo = ec_fsm_pdo_conf_action_next_pdo(fsm, &fsm->pdos.list))) {
-
// check for mapping to be altered
- ec_fsm_pdo_conf_action_next_sync(fsm);
+ ec_fsm_pdo_conf_action_next_sync(fsm, datagram);
return;
}
// assign first PDO
fsm->pdo_pos = 1;
- ec_fsm_pdo_conf_action_assign_pdo(fsm);
+ ec_fsm_pdo_conf_action_assign_pdo(fsm, datagram);
}
/*****************************************************************************/
@@ -658,21 +685,22 @@
/** Assign a PDO.
*/
void ec_fsm_pdo_conf_action_assign_pdo(
- ec_fsm_pdo_t *fsm /**< PDO configuration state machine. */
+ ec_fsm_pdo_t *fsm, /**< Finite state machine. */
+ ec_datagram_t *datagram /**< Datagram to use. */
)
{
EC_WRITE_U16(fsm->request.data, fsm->pdo->index);
fsm->request.data_size = 2;
- ec_sdo_request_address(&fsm->request,
+ ecrt_sdo_request_index(&fsm->request,
0x1C10 + fsm->sync_index, fsm->pdo_pos);
ecrt_sdo_request_write(&fsm->request);
EC_SLAVE_DBG(fsm->slave, 1, "Assigning PDO 0x%04X at position %u.\n",
fsm->pdo->index, fsm->pdo_pos);
-
+
fsm->state = ec_fsm_pdo_conf_state_assign_pdo;
ec_fsm_coe_transfer(fsm->fsm_coe, fsm->slave, &fsm->request);
- ec_fsm_coe_exec(fsm->fsm_coe); // execute immediately
+ ec_fsm_coe_exec(fsm->fsm_coe, datagram); // execute immediately
}
/*****************************************************************************/
@@ -680,10 +708,13 @@
/** Add a PDO to the sync managers PDO assignment.
*/
void ec_fsm_pdo_conf_state_assign_pdo(
- ec_fsm_pdo_t *fsm /**< PDO configuration state machine. */
- )
-{
- if (ec_fsm_coe_exec(fsm->fsm_coe)) return;
+ ec_fsm_pdo_t *fsm, /**< Finite state machine. */
+ ec_datagram_t *datagram /**< Datagram to use. */
+ )
+{
+ if (ec_fsm_coe_exec(fsm->fsm_coe, datagram)) {
+ return;
+ }
if (!ec_fsm_coe_success(fsm->fsm_coe)) {
EC_SLAVE_WARN(fsm->slave, "Failed to assign PDO 0x%04X at position %u"
@@ -696,37 +727,39 @@
// find next PDO
if (!(fsm->pdo = ec_fsm_pdo_conf_action_next_pdo(fsm, &fsm->pdo->list))) {
-
// no more PDOs to assign, set PDO count
EC_WRITE_U8(fsm->request.data, fsm->pdo_pos);
fsm->request.data_size = 1;
- ec_sdo_request_address(&fsm->request, 0x1C10 + fsm->sync_index, 0);
+ ecrt_sdo_request_index(&fsm->request, 0x1C10 + fsm->sync_index, 0);
ecrt_sdo_request_write(&fsm->request);
EC_SLAVE_DBG(fsm->slave, 1,
"Setting number of assigned PDOs to %u.\n",
fsm->pdo_pos);
-
+
fsm->state = ec_fsm_pdo_conf_state_set_pdo_count;
ec_fsm_coe_transfer(fsm->fsm_coe, fsm->slave, &fsm->request);
- ec_fsm_coe_exec(fsm->fsm_coe); // execute immediately
+ ec_fsm_coe_exec(fsm->fsm_coe, datagram); // execute immediately
return;
}
// add next PDO to assignment
fsm->pdo_pos++;
- ec_fsm_pdo_conf_action_assign_pdo(fsm);
-}
-
+ ec_fsm_pdo_conf_action_assign_pdo(fsm, datagram);
+}
+
/*****************************************************************************/
/** Set the number of assigned PDOs.
*/
void ec_fsm_pdo_conf_state_set_pdo_count(
- ec_fsm_pdo_t *fsm /**< PDO configuration state machine. */
- )
-{
- if (ec_fsm_coe_exec(fsm->fsm_coe)) return;
+ ec_fsm_pdo_t *fsm, /**< Finite state machine. */
+ ec_datagram_t *datagram /**< Datagram to use. */
+ )
+{
+ if (ec_fsm_coe_exec(fsm->fsm_coe, datagram)) {
+ return;
+ }
if (!ec_fsm_coe_success(fsm->fsm_coe)) {
EC_SLAVE_WARN(fsm->slave, "Failed to set number of"
@@ -743,7 +776,7 @@
" PDO assignment of SM%u.\n", fsm->sync_index);
// check if PDO mapping has to be altered
- ec_fsm_pdo_conf_action_next_sync(fsm);
+ ec_fsm_pdo_conf_action_next_sync(fsm, datagram);
}
/******************************************************************************
@@ -753,7 +786,8 @@
/** State: ERROR.
*/
void ec_fsm_pdo_state_error(
- ec_fsm_pdo_t *fsm /**< PDO configuration state machine. */
+ ec_fsm_pdo_t *fsm, /**< Finite state machine. */
+ ec_datagram_t *datagram /**< Datagram to use. */
)
{
}
@@ -763,9 +797,10 @@
/** State: END.
*/
void ec_fsm_pdo_state_end(
- ec_fsm_pdo_t *fsm /**< PDO configuration state machine. */
- )
-{
-}
-
-/*****************************************************************************/
+ ec_fsm_pdo_t *fsm, /**< Finite state machine. */
+ ec_datagram_t *datagram /**< Datagram to use. */
+ )
+{
+}
+
+/*****************************************************************************/