include/EtherCAT_rt.h
changeset 55 059a9e712aa7
parent 54 7506e67dd122
child 56 36d1fa37f5e1
--- a/include/EtherCAT_rt.h	Tue Jan 17 18:28:15 2006 +0000
+++ b/include/EtherCAT_rt.h	Fri Jan 20 13:32:31 2006 +0000
@@ -14,22 +14,71 @@
 struct ec_master;
 typedef struct ec_master ec_master_t;
 
+struct ec_slave_type;
+typedef struct ec_slave_type ec_slave_type_t;
+
+struct ec_slave;
+typedef struct ec_slave ec_slave_t;
+
 /*****************************************************************************/
 
 ec_master_t *EtherCAT_rt_request_master(unsigned int master_index);
 
 void EtherCAT_rt_release_master(ec_master_t *master);
 
-void *EtherCAT_rt_register_slave(ec_master_t *master, unsigned int slave_index,
-                                 const char *vendor_name,
-                                 const char *product_name);
+ec_slave_t *EtherCAT_rt_register_slave(ec_master_t *master,
+                                       unsigned int slave_index,
+                                       const char *vendor_name,
+                                       const char *product_name,
+                                       unsigned int domain);
 
 int EtherCAT_rt_activate_slaves(ec_master_t *master);
 
 int EtherCAT_rt_deactivate_slaves(ec_master_t *master);
 
-int EtherCAT_rt_domain_cycle(ec_master_t *master, unsigned int domain,
-                             unsigned int timeout_us);
+int EtherCAT_rt_exchange_io(ec_master_t *master, unsigned int domain,
+                            unsigned int timeout_us);
+
+/*****************************************************************************/
+
+/**
+   EtherCAT-Slave
+*/
+
+struct ec_slave
+{
+    // Base data
+    unsigned char base_type; /**< Slave-Typ */
+    unsigned char base_revision; /**< Revision */
+    unsigned short base_build; /**< Build-Nummer */
+
+    // Addresses
+    short ring_position; /**< (Negative) Position des Slaves im Bus */
+    unsigned short station_address; /**< Konfigurierte Slave-Adresse */
+
+    // Slave information interface
+    unsigned int sii_vendor_id; /**< Identifikationsnummer des Herstellers */
+    unsigned int sii_product_code; /**< Herstellerspezifischer Produktcode */
+    unsigned int sii_revision_number; /**< Revisionsnummer */
+    unsigned int sii_serial_number; /**< Seriennummer der Klemme */
+
+    const ec_slave_type_t *type; /**< Zeiger auf die Beschreibung
+                                    des Slave-Typs */
+
+    unsigned int logical_address; /**< Konfigurierte, logische Adresse */
+
+    void *process_data; /**< Zeiger auf den Speicherbereich
+                           innerhalb eines Prozessdatenobjekts */
+    void *private_data; /**< Zeiger auf privaten Datenbereich */
+    int (*configure)(ec_slave_t *); /**< Zeiger auf die Funktion zur
+                                     Konfiguration */
+
+    unsigned char registered; /**< Der Slave wurde registriert */
+
+    unsigned int domain; /**< Prozessdatendomäne */
+
+    int error_reported; /**< Ein Zugriffsfehler wurde bereits gemeldet */
+};
 
 /*****************************************************************************/