master/domain.c
branchstable-1.0
changeset 1621 4bbe090553f7
parent 1619 0d4119024f55
child 1624 9dc190591c0f
--- a/master/domain.c	Mon May 29 09:54:18 2006 +0000
+++ b/master/domain.c	Mon Jun 26 15:04:06 2006 +0000
@@ -225,7 +225,7 @@
 */
 
 int ec_domain_alloc(ec_domain_t *domain, /**< EtherCAT domain */
-                    uint32_t base_address /**< Logische Basisadresse */
+                    uint32_t base_address /**< logical base address */
                     )
 {
     ec_field_reg_t *field_reg;
@@ -234,12 +234,12 @@
     unsigned int i, j, cmd_count;
     uint32_t field_off, field_off_cmd;
     uint32_t cmd_offset;
-    size_t cmd_data_size;
+    size_t cmd_data_size, sync_size;
     ec_command_t *command;
 
     domain->base_address = base_address;
 
-    // Größe der Prozessdaten berechnen und Kommandos allozieren
+    // calculate size of process data and allocate memory
     domain->data_size = 0;
     cmd_offset = base_address;
     cmd_data_size = 0;
@@ -249,20 +249,21 @@
             fmmu = &slave->fmmus[j];
             if (fmmu->domain == domain) {
                 fmmu->logical_start_address = base_address + domain->data_size;
-                domain->data_size += fmmu->sync->size;
-                if (cmd_data_size + fmmu->sync->size > EC_MAX_DATA_SIZE) {
+                sync_size = ec_slave_calc_sync_size(slave, fmmu->sync);
+                domain->data_size += sync_size;
+                if (cmd_data_size + sync_size > EC_MAX_DATA_SIZE) {
                     if (ec_domain_add_command(domain, cmd_offset,
                                               cmd_data_size)) return -1;
                     cmd_offset += cmd_data_size;
                     cmd_data_size = 0;
                     cmd_count++;
                 }
-                cmd_data_size += fmmu->sync->size;
+                cmd_data_size += sync_size;
             }
         }
     }
 
-    // Letztes Kommando allozieren
+    // allocate last command
     if (cmd_data_size) {
         if (ec_domain_add_command(domain, cmd_offset, cmd_data_size))
             return -1;
@@ -275,14 +276,14 @@
         return 0;
     }
 
-    // Alle Prozessdatenzeiger setzen
+    // set all process data pointers
     list_for_each_entry(field_reg, &domain->field_regs, list) {
         for (i = 0; i < field_reg->slave->fmmu_count; i++) {
             fmmu = &field_reg->slave->fmmus[i];
             if (fmmu->domain == domain && fmmu->sync == field_reg->sync) {
                 field_off = fmmu->logical_start_address +
                     field_reg->field_offset;
-                // Kommando suchen
+                // search command
                 list_for_each_entry(command, &domain->commands, list) {
                     field_off_cmd = field_off - command->address.logical;
                     if (field_off >= command->address.logical &&