# HG changeset patch # User Florian Pose # Date 1217331449 0 # Node ID de880622f2530babd77c4c1a77d838bd18e39416 # Parent af068174a630aa4a49842ad44b9e9ee12c50e9e0 Alternative Pdo assignment for el3162. diff -r af068174a630 -r de880622f253 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