master/fsm_pdo.c
changeset 1472 6ca667095c67
parent 1363 11c0b2caa253
child 1507 68e89abadd19
--- a/master/fsm_pdo.c	Mon Jun 15 15:46:04 2009 +0000
+++ b/master/fsm_pdo.c	Mon Jun 15 15:58:09 2009 +0000
@@ -214,6 +214,7 @@
     if (slave->master->debug_level)
         EC_DBG("Reading of PDO configuration finished.\n");
 
+    ec_pdo_list_clear_pdos(&fsm->pdos);
     fsm->state = ec_fsm_pdo_state_end;
 }
 
@@ -230,7 +231,7 @@
     if (!ec_fsm_coe_success(fsm->fsm_coe)) {
         EC_ERR("Failed to read number of assigned PDOs for SM%u"
                 " of slave %u.\n", fsm->sync_index, fsm->slave->ring_position);
-        fsm->state = ec_fsm_pdo_state_error;
+        ec_fsm_pdo_read_action_next_sync(fsm);
         return;
     }
 
@@ -239,7 +240,7 @@
                 "from slave %u.\n", fsm->request.data_size,
                 fsm->request.index, fsm->request.subindex,
                 fsm->slave->ring_position);
-        fsm->state = ec_fsm_pdo_state_error;
+        ec_fsm_pdo_read_action_next_sync(fsm);
         return;
     }
     fsm->pdo_count = EC_READ_U8(fsm->request.data);
@@ -272,11 +273,7 @@
 
     // finished reading PDO configuration
     
-    if (ec_pdo_list_copy(&fsm->sync->pdos, &fsm->pdos)) {
-        fsm->state = ec_fsm_pdo_state_error;
-        return;
-    }
-
+    ec_pdo_list_copy(&fsm->sync->pdos, &fsm->pdos);
     ec_pdo_list_clear_pdos(&fsm->pdos);
 
     // next sync manager
@@ -296,7 +293,7 @@
     if (!ec_fsm_coe_success(fsm->fsm_coe)) {
         EC_ERR("Failed to read index of assigned PDO %u from SM%u.\n",
                 fsm->pdo_pos, fsm->sync_index);
-        fsm->state = ec_fsm_pdo_state_error;
+        ec_fsm_pdo_read_action_next_sync(fsm);
         return;
     }
 
@@ -305,14 +302,14 @@
                 "from slave %u.\n", fsm->request.data_size,
                 fsm->request.index, fsm->request.subindex,
                 fsm->slave->ring_position);
-        fsm->state = ec_fsm_pdo_state_error;
+        ec_fsm_pdo_read_action_next_sync(fsm);
         return;
     }
 
     if (!(fsm->pdo = (ec_pdo_t *)
                 kmalloc(sizeof(ec_pdo_t), GFP_KERNEL))) {
         EC_ERR("Failed to allocate PDO.\n");
-        fsm->state = ec_fsm_pdo_state_error;
+        ec_fsm_pdo_read_action_next_sync(fsm);
         return;
     }
 
@@ -344,7 +341,7 @@
     if (!ec_fsm_pdo_entry_success(&fsm->fsm_pdo_entry)) {
         EC_ERR("Failed to read mapped PDO entries for PDO 0x%04X.\n",
                 fsm->pdo->index);
-        fsm->state = ec_fsm_pdo_state_error;
+        ec_fsm_pdo_read_action_next_sync(fsm);
         return;
     }