Sync manager size is always the total size of the assigned Pdos, if stable-1.3
authorFlorian Pose <fp@igh-essen.com>
Wed, 30 Apr 2008 09:52:41 +0000
branchstable-1.3
changeset 1753 124eb40a2818
parent 1752 b01562a45602
child 1754 e750b37597ad
Sync manager size is always the total size of the assigned Pdos, if
there are any.
master/sync.c
--- a/master/sync.c	Tue Apr 29 12:30:16 2008 +0000
+++ b/master/sync.c	Wed Apr 30 09:52:41 2008 +0000
@@ -93,9 +93,11 @@
     const ec_pdo_entry_t *pdo_entry;
     unsigned int bit_size, byte_size;
 
-    if (sync->length) return sync->length;
-    if (sync->est_length) return sync->est_length;
-
+    // if an estimated length is specified, return it
+    if (sync->est_length)
+        return sync->est_length;
+
+    // calculate total Pdo size in bit
     bit_size = 0;
     list_for_each_entry(pdo, &sync->pdos, list) {
         list_for_each_entry(pdo_entry, &pdo->entries, list) {
@@ -103,12 +105,21 @@
         }
     }
 
-    if (bit_size % 8) // round up to full bytes
+    // bits to bytes
+    if (bit_size % 8) {
+        // round up to full bytes
         byte_size = bit_size / 8 + 1;
-    else
+    } else {
         byte_size = bit_size / 8;
-
-    return byte_size;
+    }
+
+    if (byte_size) {
+        // return total Pdo size, if there are Pdos assigned
+        return byte_size;
+    } else {
+        // return sync manager default size, if no Pdos are assigned
+        return sync->length;
+    }
 }
 
 /*****************************************************************************/
@@ -126,7 +137,7 @@
     size_t sync_size = ec_sync_size(sync);
 
     if (sync->slave->master->debug_level) {
-        EC_DBG("SM%i: Addr 0x%04X, Size %3i, Ctrl 0x%02X, En %i\n",
+        EC_DBG("SM%u: Addr 0x%04X, Size %3u, Ctrl 0x%02X, En %u\n",
                sync->index, sync->physical_start_address,
                sync_size, sync->control_register, sync->enable);
     }