rt/msr_module.c
changeset 98 f564d0929292
parent 91 0120d6214948
child 104 052bc82d5442
--- a/rt/msr_module.c	Thu Mar 02 13:08:07 2006 +0000
+++ b/rt/msr_module.c	Mon Mar 06 15:12:34 2006 +0000
@@ -50,9 +50,11 @@
 // EtherCAT
 ec_master_t *master = NULL;
 ec_domain_t *domain1 = NULL;
+ec_domain_t *domain2 = NULL;
 
 // Prozessdaten
 void *r_ssi;
+void *r_ssi2;
 void *r_inc;
 
 uint32_t k_angle;
@@ -60,19 +62,39 @@
 
 ec_field_init_t domain1_fields[] = {
     {&r_ssi,  "1", "Beckhoff", "EL5001", ec_ipvalue, 0, 1},
-    {&r_inc, "10", "Beckhoff", "EL5101", ec_ipvalue, 0, 1},
     {}
 };
 
+ec_field_init_t domain2_fields[] = {
+    {&r_ssi2,  "1", "Beckhoff", "EL5001", ec_ipvalue, 0, 1},
+    {}
+};
+
 /*****************************************************************************/
 
 static void msr_controller_run(void)
 {
+    static unsigned int counter = 0;
+
+    if (counter) counter--;
+    else {
+        //EtherCAT_rt_master_debug(master, 2);
+        counter = MSR_ABTASTFREQUENZ;
+    }
+
     // Prozessdaten lesen und schreiben
-    EtherCAT_rt_domain_xio(domain1);
-
-    k_angle = EC_READ_U16(r_inc);
+    EtherCAT_rt_domain_queue(domain1);
+    EtherCAT_rt_domain_queue(domain2);
+
+    EtherCAT_rt_master_xio(master);
+
+    EtherCAT_rt_domain_process(domain1);
+    EtherCAT_rt_domain_process(domain2);
+
+    //k_angle = EC_READ_U16(r_inc);
     k_pos = EC_READ_U32(r_ssi);
+
+    //EtherCAT_rt_master_debug(master, 0);
 }
 
 /*****************************************************************************/
@@ -118,7 +140,6 @@
 int __init init_rt_module(void)
 {
     struct ipipe_domain_attr attr; //ipipe
-    const ec_field_init_t *field;
     uint32_t version;
 
     // Als allererstes die RT-lib initialisieren
@@ -134,7 +155,7 @@
 
     //EtherCAT_rt_master_print(master);
 
-    printk(KERN_INFO "Registering domain...\n");
+    printk(KERN_INFO "Registering domains...\n");
 
     if (!(domain1 = EtherCAT_rt_master_register_domain(master, ec_sync, 100)))
     {
@@ -142,32 +163,37 @@
         goto out_release_master;
     }
 
+    if (!(domain2 = EtherCAT_rt_master_register_domain(master, ec_sync, 100)))
+    {
+        printk(KERN_ERR "EtherCAT: Could not register domain!\n");
+        goto out_release_master;
+    }
+
     printk(KERN_INFO "Registering domain fields...\n");
 
-    for (field = domain1_fields; field->data; field++)
-    {
-        if (!EtherCAT_rt_register_slave_field(domain1,
-                                              field->address,
-                                              field->vendor,
-                                              field->product,
-                                              field->data,
-                                              field->field_type,
-                                              field->field_index,
-                                              field->field_count)) {
-            printk(KERN_ERR "Could not register field!\n");
-            goto out_release_master;
-        }
+    if (EtherCAT_rt_register_domain_fields(domain1, domain1_fields)) {
+        printk(KERN_ERR "Failed to register domain fields.\n");
+        goto out_release_master;
+    }
+
+    if (EtherCAT_rt_register_domain_fields(domain2, domain2_fields)) {
+        printk(KERN_ERR "Failed to register domain fields.\n");
+        goto out_release_master;
     }
 
     printk(KERN_INFO "Activating master...\n");
 
+    //EtherCAT_rt_master_debug(master, 2);
+
     if (EtherCAT_rt_master_activate(master)) {
         printk(KERN_ERR "Could not activate master!\n");
         goto out_release_master;
     }
 
+    //EtherCAT_rt_master_debug(master, 0);
+
 #if 1
-    if (EtherCAT_rt_canopen_sdo_addr_read(master, "1", 0x100A, 1,
+    if (EtherCAT_rt_canopen_sdo_addr_read(master, "6", 0x100A, 1,
                                           &version)) {
         printk(KERN_ERR "Could not read SSI version!\n");
         goto out_release_master;
@@ -222,9 +248,16 @@
 
 /*****************************************************************************/
 
+#define EC_LIT(X) #X
+#define EC_STR(X) EC_LIT(X)
+#define COMPILE_INFO "Revision " EC_STR(SVNREV) \
+                     ", compiled by " EC_STR(USER) \
+                     " at " __DATE__ " " __TIME__
+
 MODULE_LICENSE("GPL");
 MODULE_AUTHOR ("Florian Pose <fp@igh-essen.com>");
 MODULE_DESCRIPTION ("EtherCAT real-time test environment");
+MODULE_VERSION(COMPILE_INFO);
 
 module_init(init_rt_module);
 module_exit(cleanup_rt_module);