Alternative Pdo assignment for el3162.
authorFlorian Pose <fp@igh-essen.com>
Tue, 29 Jul 2008 11:37:29 +0000
changeset 1171 de880622f253
parent 1170 af068174a630
child 1172 74ee632c3b5e
Alternative Pdo assignment for el3162.
examples/mini/mini.c
--- a/examples/mini/mini.c	Tue Jul 29 09:30:33 2008 +0000
+++ b/examples/mini/mini.c	Tue Jul 29 11:37:29 2008 +0000
@@ -43,10 +43,11 @@
 // Module parameters
 #define FREQUENCY 100
 
-// Optional features (comment to disable)
-#define CONFIGURE_PDOS
-#define EXTERNAL_MEMORY
-#define SDO_ACCESS
+// Optional features
+#define CONFIGURE_PDOS  1
+#define EL3162_ALT_PDOS 0
+#define EXTERNAL_MEMORY 1
+#define SDO_ACCESS      0
 
 #define PFX "ec_mini: "
 
@@ -81,7 +82,11 @@
 static unsigned int off_dig_out;
 
 const static ec_pdo_entry_reg_t domain1_regs[] = {
+#if EL3162_ALT_PDOS
+    {AnaInSlavePos,  Beckhoff_EL3162, 0x6401, 2, &off_ana_in},
+#else
     {AnaInSlavePos,  Beckhoff_EL3162, 0x3101, 2, &off_ana_in},
+#endif
     {DigOutSlavePos, Beckhoff_EL2004, 0x3001, 1, &off_dig_out},
     {}
 };
@@ -91,20 +96,31 @@
 
 /*****************************************************************************/
 
-#ifdef CONFIGURE_PDOS
-static ec_pdo_entry_info_t el3162_channel1[] = {
-    {0x3101, 1,  8}, // status
-    {0x3101, 2, 16}  // value
-};
-
-static ec_pdo_entry_info_t el3162_channel2[] = {
-    {0x3102, 1,  8}, // status
-    {0x3102, 2, 16}  // value
-};
-
+#if CONFIGURE_PDOS
+
+static ec_pdo_entry_info_t el3162_pdo_entries[] = {
+    {0x3101, 1,  8}, // channel 1 status
+    {0x3101, 2, 16}, // channel 1 value
+    {0x3102, 1,  8}, // channel 2 status
+    {0x3102, 2, 16}, // channel 2 value
+    {0x6401, 1, 16}, // channel 1 value (alt.)
+    {0x6401, 2, 16}  // channel 2 value (alt.)
+};
+
+#if EL3162_ALT_PDOS
 static ec_pdo_info_t el3162_pdos[] = {
-    {0x1A00, 2, el3162_channel1},
-    {0x1A01, 2, el3162_channel2}
+    {0x1A10, 2, el3162_pdo_entries + 4},
+};
+
+static ec_sync_info_t el3162_syncs[] = {
+    {2, EC_DIR_OUTPUT},
+    {3, EC_DIR_INPUT, 1, el3162_pdos},
+    {0xff}
+};
+#else
+static ec_pdo_info_t el3162_pdos[] = {
+    {0x1A00, 2, el3162_pdo_entries},
+    {0x1A01, 2, el3162_pdo_entries + 2}
 };
 
 static ec_sync_info_t el3162_syncs[] = {
@@ -112,6 +128,7 @@
     {3, EC_DIR_INPUT, 2, el3162_pdos},
     {0xff}
 };
+#endif
 
 static ec_pdo_entry_info_t el2004_channels[] = {
     {0x3001, 1, 1}, // Value 1
@@ -136,7 +153,7 @@
 
 /*****************************************************************************/
 
-#ifdef SDO_ACCESS
+#if SDO_ACCESS
 static ec_sdo_request_t *sdo;
 #endif
 
@@ -201,7 +218,7 @@
 
 /*****************************************************************************/
 
-#ifdef SDO_ACCESS
+#if SDO_ACCESS
 void read_sdo(void)
 {
     switch (ecrt_sdo_request_state(sdo)) {
@@ -251,7 +268,7 @@
         // check for islave configuration state(s) (optional)
         check_slave_config_states();
         
-#ifdef SDO_ACCESS
+#if SDO_ACCESS
         // read process data Sdo
         read_sdo();
 #endif
@@ -290,10 +307,10 @@
 
 int __init init_mini_module(void)
 {
-#ifdef CONFIGURE_PDOS
+#if CONFIGURE_PDOS
     ec_slave_config_t *sc;
 #endif
-#ifdef EXTERNAL_MEMORY
+#if EXTERNAL_MEMORY
     unsigned int size;
 #endif
     
@@ -318,7 +335,7 @@
         goto out_release_master;
     }
 
-#ifdef CONFIGURE_PDOS
+#if CONFIGURE_PDOS
     printk(KERN_INFO PFX "Configuring Pdos...\n");
     if (ecrt_slave_config_pdos(sc_ana_in, EC_END, el3162_syncs)) {
         printk(KERN_ERR PFX "Failed to configure Pdos.\n");
@@ -337,7 +354,7 @@
     }
 #endif
 
-#ifdef SDO_ACCESS
+#if SDO_ACCESS
     printk(KERN_INFO PFX "Creating Sdo requests...\n");
     if (!(sdo = ecrt_slave_config_create_sdo_request(sc_ana_in, 0x3102, 2, 2))) {
         printk(KERN_ERR PFX "Failed to create Sdo request.\n");
@@ -352,7 +369,7 @@
         goto out_release_master;
     }
 
-#ifdef EXTERNAL_MEMORY
+#if EXTERNAL_MEMORY
     if ((size = ecrt_domain_size(domain1))) {
         if (!(domain1_pd = (uint8_t *) kmalloc(size, GFP_KERNEL))) {
             printk(KERN_ERR PFX "Failed to allocate %u bytes of process data"
@@ -366,14 +383,14 @@
     printk(KERN_INFO PFX "Activating master...\n");
     if (ecrt_master_activate(master)) {
         printk(KERN_ERR PFX "Failed to activate master!\n");
-#ifdef EXTERNAL_MEMORY
+#if EXTERNAL_MEMORY
         goto out_free_process_data;
 #else
         goto out_release_master;
 #endif
     }
 
-#ifndef EXTERNAL_MEMORY
+#if !EXTERNAL_MEMORY
     // Get internal process data for domain
     domain1_pd = ecrt_domain_data(domain1);
 #endif
@@ -387,7 +404,7 @@
     printk(KERN_INFO PFX "Started.\n");
     return 0;
 
-#ifdef EXTERNAL_MEMORY
+#if EXTERNAL_MEMORY
 out_free_process_data:
     kfree(domain1_pd);
 #endif
@@ -407,7 +424,7 @@
 
     del_timer_sync(&timer);
 
-#ifdef EXTERNAL_MEMORY
+#if EXTERNAL_MEMORY
     kfree(domain1_pd);
 #endif