master/master.c
changeset 61 cd014255f94f
parent 58 21b7342e2a90
child 63 0333d8ebfff5
--- a/master/master.c	Thu Jan 26 11:06:56 2006 +0000
+++ b/master/master.c	Thu Jan 26 13:41:47 2006 +0000
@@ -615,7 +615,7 @@
   }
 
   if (unlikely(cmd.working_counter != 1)) {
-    printk(KERN_ERR "EtherCAT: Could not set state %02X - Device %i (%s %s)"
+    printk(KERN_ERR "EtherCAT: Could not set state %02X - Slave %i (%s %s)"
            " did not respond!\n", state_and_ack, slave->ring_position * (-1),
            slave->type->vendor_name, slave->type->product_name);
     return -1;
@@ -735,7 +735,7 @@
    @param product_name String mit dem Produktnamen
    @param domain Domäne, in der der Slave sein soll
 
-   @return 0 bei Erfolg, sonst < 0
+   @return Zeiger auf den Slave bei Erfolg, sonst NULL
 */
 
 ec_slave_t *EtherCAT_rt_register_slave(ec_master_t *master,
@@ -819,6 +819,37 @@
 /*****************************************************************************/
 
 /**
+   Registriert eine ganze Liste von Slaves beim Master.
+
+   @param master Der EtherCAT-Master
+   @param slaves Array von Slave-Initialisierungsstrukturen
+   @param count Anzahl der Strukturen in "slaves"
+
+   @return 0 bei Erfolg, sonst < 0
+*/
+
+int EtherCAT_rt_register_slave_list(ec_master_t *master,
+                                    const ec_slave_init_t *slaves,
+                                    unsigned int count)
+{
+  unsigned int i;
+
+  for (i = 0; i < count; i++)
+  {
+    if ((*(slaves[i].slave_ptr) =
+         EtherCAT_rt_register_slave(master, slaves[i].bus_index,
+                                    slaves[i].vendor_name,
+                                    slaves[i].product_name,
+                                    slaves[i].domain)) == NULL)
+      return -1;
+  }
+
+  return 0;
+}
+
+/*****************************************************************************/
+
+/**
    Konfiguriert alle Slaves und setzt den Operational-Zustand.
 
    Führt die komplette Konfiguration und Aktivierunge aller registrierten
@@ -1046,7 +1077,7 @@
 
   for (i = 0; i < master->bus_slaves_count; i++)
   {
-    slave = master->bus_slaves + 1;
+    slave = master->bus_slaves + i;
 
     if (unlikely(ec_state_change(master, slave, EC_SLAVE_STATE_INIT) != 0))
       return -1;
@@ -1155,6 +1186,7 @@
 /*****************************************************************************/
 
 EXPORT_SYMBOL(EtherCAT_rt_register_slave);
+EXPORT_SYMBOL(EtherCAT_rt_register_slave_list);
 EXPORT_SYMBOL(EtherCAT_rt_activate_slaves);
 EXPORT_SYMBOL(EtherCAT_rt_deactivate_slaves);
 EXPORT_SYMBOL(EtherCAT_rt_domain_xio);