master/fsm_coe_map.c
changeset 1055 2be8918682fa
parent 1053 0cb9604cbaa7
child 1058 1c5b19c1ae9d
--- a/master/fsm_coe_map.c	Tue Jun 24 10:55:40 2008 +0000
+++ b/master/fsm_coe_map.c	Thu Jun 26 13:16:15 2008 +0000
@@ -55,7 +55,7 @@
 void ec_fsm_coe_map_state_end(ec_fsm_coe_map_t *);
 void ec_fsm_coe_map_state_error(ec_fsm_coe_map_t *);
 
-void ec_fsm_coe_map_action_next_dir(ec_fsm_coe_map_t *);
+void ec_fsm_coe_map_action_next_sync(ec_fsm_coe_map_t *);
 void ec_fsm_coe_map_action_next_pdo(ec_fsm_coe_map_t *);
 void ec_fsm_coe_map_action_next_pdo_entry(ec_fsm_coe_map_t *);
 
@@ -134,50 +134,46 @@
  *  state functions
  *****************************************************************************/
 
-/**
- * Start reading Pdo assignment.
- */
-
+/** Start reading Pdo assignment.
+ */
 void ec_fsm_coe_map_state_start(
         ec_fsm_coe_map_t *fsm /**< finite state machine */
         )
 {
-    // read Pdo assignment for first direction
-    fsm->dir = (ec_direction_t) -1; // next is EC_DIR_OUTPUT
-    ec_fsm_coe_map_action_next_dir(fsm);
-}
-
-/*****************************************************************************/
-
-/**
- * Read Pdo assignment of next direction manager.
- */
-
-void ec_fsm_coe_map_action_next_dir(
-        ec_fsm_coe_map_t *fsm /**< finite state machine */
+    // read Pdo assignment for first sync manager
+    fsm->sync_index = 0xff; // next is 0
+    ec_fsm_coe_map_action_next_sync(fsm);
+}
+
+/*****************************************************************************/
+
+/** Read Pdo assignment of next sync manager.
+ */
+void ec_fsm_coe_map_action_next_sync(
+        ec_fsm_coe_map_t *fsm /**< Finite state machine */
         )
 {
     ec_slave_t *slave = fsm->slave;
 
-    fsm->dir++;
+    fsm->sync_index++;
 
     if (slave->master->debug_level)
-        EC_DBG("Processing dir %u of slave %u.\n",
-                fsm->dir, slave->ring_position);
-
-    for (; fsm->dir <= EC_DIR_INPUT; fsm->dir++) {
-
-        if (!(fsm->sync = ec_slave_get_pdo_sync(slave, fsm->dir))) {
+        EC_DBG("Processing SM%u of slave %u.\n",
+                fsm->sync_index, slave->ring_position);
+
+    for (; fsm->sync_index < EC_MAX_SYNCS; fsm->sync_index++) {
+        if (!(fsm->sync = ec_slave_get_sync(slave, fsm->sync_index))) {
             if (slave->master->debug_level)
-                EC_DBG("No sync manager for direction %u!\n", fsm->dir);
+                EC_DBG("Slave %u does not provide a configuration for "
+                        "SM%u!\n", fsm->slave->ring_position, fsm->sync_index);
             continue;
         }
 
-        fsm->sync_sdo_index = 0x1C10 + fsm->sync->index;
+        fsm->sync_sdo_index = 0x1C10 + fsm->sync_index;
 
         if (slave->master->debug_level)
-            EC_DBG("Reading Pdo assignment of sync manager %u of slave %u.\n",
-                    fsm->sync->index, slave->ring_position);
+            EC_DBG("Reading Pdo assignment of SM%u of slave %u.\n",
+                    fsm->sync_index, slave->ring_position);
 
         ec_pdo_list_clear_pdos(&fsm->pdos);
 
@@ -226,7 +222,7 @@
     fsm->sync_subindices = EC_READ_U8(fsm->request.data);
 
     if (fsm->slave->master->debug_level)
-        EC_DBG("  %u Pdos assigned.\n", fsm->sync_subindices);
+        EC_DBG("%u Pdos assigned.\n", fsm->sync_subindices);
 
     // read first Pdo
     fsm->sync_subindex = 1;
@@ -263,8 +259,8 @@
     fsm->sync->assign_source = EC_ASSIGN_COE;
     ec_pdo_list_clear_pdos(&fsm->pdos);
 
-    // next direction
-    ec_fsm_coe_map_action_next_dir(fsm);
+    // next sync manager
+    ec_fsm_coe_map_action_next_sync(fsm);
 }
 
 /*****************************************************************************/
@@ -304,10 +300,10 @@
 
     ec_pdo_init(fsm->pdo);
     fsm->pdo->index = EC_READ_U16(fsm->request.data);
-    fsm->pdo->dir = ec_sync_direction(fsm->sync);
+    fsm->pdo->sync_index = fsm->sync_index;
 
     if (fsm->slave->master->debug_level)
-        EC_DBG("  Pdo 0x%04X.\n", fsm->pdo->index);
+        EC_DBG("Pdo 0x%04X.\n", fsm->pdo->index);
 
     list_add_tail(&fsm->pdo->list, &fsm->pdos.list);
 
@@ -348,7 +344,7 @@
     fsm->pdo_subindices = EC_READ_U8(fsm->request.data);
 
     if (fsm->slave->master->debug_level)
-        EC_DBG("    %u Pdo entries mapped.\n", fsm->pdo_subindices);
+        EC_DBG("%u Pdo entries mapped.\n", fsm->pdo_subindices);
 
     // read first Pdo entry
     fsm->pdo_subindex = 1;
@@ -432,7 +428,7 @@
         }
 
         if (fsm->slave->master->debug_level) {
-            EC_DBG("    Pdo entry 0x%04X:%02X, %u bit,  \"%s\".\n",
+            EC_DBG("Pdo entry 0x%04X:%02X, %u bit, \"%s\".\n",
                     pdo_entry->index, pdo_entry->subindex,
                     pdo_entry->bit_length,
                     pdo_entry->name ? pdo_entry->name : "???");