examples/mini/mini.c
author Dominik Staubli <ch1010252@ch10pc423>
Thu, 21 Jan 2010 11:09:31 +0100
changeset 1798 e7733f825982
parent 1580 1baac79a40cf
child 1975 8e173dddd183
permissions -rw-r--r--
Domain datagram working counter calculation bugfix: increment expected wc for a given slave & direction just once for each datagram
This bug occurs if you configure more than one SM in the same direction on the same slave
220
342ad851ec78 Added examples directory.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
     1
/******************************************************************************
342ad851ec78 Added examples directory.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
     2
 *
342ad851ec78 Added examples directory.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
     3
 *  $Id$
342ad851ec78 Added examples directory.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
     4
 *
1326
ef907b0b5125 merge -c1603 branches/stable-1.4: Changed licence headers to avoid conflicts with the GPL; restricted licence to GPLv2 only.
Florian Pose <fp@igh-essen.com>
parents: 1239
diff changeset
     5
 *  Copyright (C) 2006-2008  Florian Pose, Ingenieurgemeinschaft IgH
220
342ad851ec78 Added examples directory.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
     6
 *
342ad851ec78 Added examples directory.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
     7
 *  This file is part of the IgH EtherCAT Master.
342ad851ec78 Added examples directory.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
     8
 *
1326
ef907b0b5125 merge -c1603 branches/stable-1.4: Changed licence headers to avoid conflicts with the GPL; restricted licence to GPLv2 only.
Florian Pose <fp@igh-essen.com>
parents: 1239
diff changeset
     9
 *  The IgH EtherCAT Master is free software; you can redistribute it and/or
ef907b0b5125 merge -c1603 branches/stable-1.4: Changed licence headers to avoid conflicts with the GPL; restricted licence to GPLv2 only.
Florian Pose <fp@igh-essen.com>
parents: 1239
diff changeset
    10
 *  modify it under the terms of the GNU General Public License version 2, as
ef907b0b5125 merge -c1603 branches/stable-1.4: Changed licence headers to avoid conflicts with the GPL; restricted licence to GPLv2 only.
Florian Pose <fp@igh-essen.com>
parents: 1239
diff changeset
    11
 *  published by the Free Software Foundation.
ef907b0b5125 merge -c1603 branches/stable-1.4: Changed licence headers to avoid conflicts with the GPL; restricted licence to GPLv2 only.
Florian Pose <fp@igh-essen.com>
parents: 1239
diff changeset
    12
 *
ef907b0b5125 merge -c1603 branches/stable-1.4: Changed licence headers to avoid conflicts with the GPL; restricted licence to GPLv2 only.
Florian Pose <fp@igh-essen.com>
parents: 1239
diff changeset
    13
 *  The IgH EtherCAT Master is distributed in the hope that it will be useful,
ef907b0b5125 merge -c1603 branches/stable-1.4: Changed licence headers to avoid conflicts with the GPL; restricted licence to GPLv2 only.
Florian Pose <fp@igh-essen.com>
parents: 1239
diff changeset
    14
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
ef907b0b5125 merge -c1603 branches/stable-1.4: Changed licence headers to avoid conflicts with the GPL; restricted licence to GPLv2 only.
Florian Pose <fp@igh-essen.com>
parents: 1239
diff changeset
    15
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General
ef907b0b5125 merge -c1603 branches/stable-1.4: Changed licence headers to avoid conflicts with the GPL; restricted licence to GPLv2 only.
Florian Pose <fp@igh-essen.com>
parents: 1239
diff changeset
    16
 *  Public License for more details.
ef907b0b5125 merge -c1603 branches/stable-1.4: Changed licence headers to avoid conflicts with the GPL; restricted licence to GPLv2 only.
Florian Pose <fp@igh-essen.com>
parents: 1239
diff changeset
    17
 *
ef907b0b5125 merge -c1603 branches/stable-1.4: Changed licence headers to avoid conflicts with the GPL; restricted licence to GPLv2 only.
Florian Pose <fp@igh-essen.com>
parents: 1239
diff changeset
    18
 *  You should have received a copy of the GNU General Public License along
ef907b0b5125 merge -c1603 branches/stable-1.4: Changed licence headers to avoid conflicts with the GPL; restricted licence to GPLv2 only.
Florian Pose <fp@igh-essen.com>
parents: 1239
diff changeset
    19
 *  with the IgH EtherCAT Master; if not, write to the Free Software
220
342ad851ec78 Added examples directory.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    20
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
342ad851ec78 Added examples directory.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    21
 *
1363
11c0b2caa253 Improved and added license headers.
Florian Pose <fp@igh-essen.com>
parents: 1327
diff changeset
    22
 *  ---
11c0b2caa253 Improved and added license headers.
Florian Pose <fp@igh-essen.com>
parents: 1327
diff changeset
    23
 *
11c0b2caa253 Improved and added license headers.
Florian Pose <fp@igh-essen.com>
parents: 1327
diff changeset
    24
 *  The license mentioned above concerns the source code only. Using the
11c0b2caa253 Improved and added license headers.
Florian Pose <fp@igh-essen.com>
parents: 1327
diff changeset
    25
 *  EtherCAT technology and brand is only permitted in compliance with the
11c0b2caa253 Improved and added license headers.
Florian Pose <fp@igh-essen.com>
parents: 1327
diff changeset
    26
 *  industrial property and similar rights of Beckhoff Automation GmbH.
246
0bf7c769de06 Changed license headers and added EtherCAT license notice.
Florian Pose <fp@igh-essen.com>
parents: 226
diff changeset
    27
 *
220
342ad851ec78 Added examples directory.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    28
 *****************************************************************************/
342ad851ec78 Added examples directory.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    29
1501
59990318c95b Added semaphore header distinction in minimal example.
Florian Pose <fp@igh-essen.com>
parents: 1500
diff changeset
    30
#include <linux/version.h>
220
342ad851ec78 Added examples directory.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    31
#include <linux/module.h>
342ad851ec78 Added examples directory.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    32
#include <linux/timer.h>
342ad851ec78 Added examples directory.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    33
#include <linux/interrupt.h>
1239
b50b93faaf3e Used ERR_PTR() macro for return value of ecrt_request_master().
Florian Pose <fp@igh-essen.com>
parents: 1212
diff changeset
    34
#include <linux/err.h>
220
342ad851ec78 Added examples directory.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    35
1501
59990318c95b Added semaphore header distinction in minimal example.
Florian Pose <fp@igh-essen.com>
parents: 1500
diff changeset
    36
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27)
59990318c95b Added semaphore header distinction in minimal example.
Florian Pose <fp@igh-essen.com>
parents: 1500
diff changeset
    37
#include <linux/semaphore.h>
59990318c95b Added semaphore header distinction in minimal example.
Florian Pose <fp@igh-essen.com>
parents: 1500
diff changeset
    38
#else
59990318c95b Added semaphore header distinction in minimal example.
Florian Pose <fp@igh-essen.com>
parents: 1500
diff changeset
    39
#include <asm/semaphore.h>
59990318c95b Added semaphore header distinction in minimal example.
Florian Pose <fp@igh-essen.com>
parents: 1500
diff changeset
    40
#endif
59990318c95b Added semaphore header distinction in minimal example.
Florian Pose <fp@igh-essen.com>
parents: 1500
diff changeset
    41
223
daa5e5656b35 Applied new path information to example modules.
Florian Pose <fp@igh-essen.com>
parents: 220
diff changeset
    42
#include "../../include/ecrt.h" // EtherCAT realtime interface
220
342ad851ec78 Added examples directory.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    43
820
f8e6f5966cce Cleaned up mini module.
Florian Pose <fp@igh-essen.com>
parents: 818
diff changeset
    44
/*****************************************************************************/
f8e6f5966cce Cleaned up mini module.
Florian Pose <fp@igh-essen.com>
parents: 818
diff changeset
    45
858
69122084d066 Basic reading realtime Sdo access working.
Florian Pose <fp@igh-essen.com>
parents: 851
diff changeset
    46
// Module parameters
220
342ad851ec78 Added examples directory.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    47
#define FREQUENCY 100
858
69122084d066 Basic reading realtime Sdo access working.
Florian Pose <fp@igh-essen.com>
parents: 851
diff changeset
    48
1171
de880622f253 Alternative Pdo assignment for el3162.
Florian Pose <fp@igh-essen.com>
parents: 1082
diff changeset
    49
// Optional features
de880622f253 Alternative Pdo assignment for el3162.
Florian Pose <fp@igh-essen.com>
parents: 1082
diff changeset
    50
#define CONFIGURE_PDOS  1
1179
c0e6adec1aee Added analog output to minimal example.
Florian Pose <fp@igh-essen.com>
parents: 1171
diff changeset
    51
#define EL3152_ALT_PDOS 0
1171
de880622f253 Alternative Pdo assignment for el3162.
Florian Pose <fp@igh-essen.com>
parents: 1082
diff changeset
    52
#define EXTERNAL_MEMORY 1
de880622f253 Alternative Pdo assignment for el3162.
Florian Pose <fp@igh-essen.com>
parents: 1082
diff changeset
    53
#define SDO_ACCESS      0
1209
8be462afb7f4 Added VoE handler.
Florian Pose <fp@igh-essen.com>
parents: 1179
diff changeset
    54
#define VOE_ACCESS      0
457
2b4ba84b6058 Minor changes to minimal example.
Florian Pose <fp@igh-essen.com>
parents: 454
diff changeset
    55
820
f8e6f5966cce Cleaned up mini module.
Florian Pose <fp@igh-essen.com>
parents: 818
diff changeset
    56
#define PFX "ec_mini: "
f8e6f5966cce Cleaned up mini module.
Florian Pose <fp@igh-essen.com>
parents: 818
diff changeset
    57
f8e6f5966cce Cleaned up mini module.
Florian Pose <fp@igh-essen.com>
parents: 818
diff changeset
    58
/*****************************************************************************/
220
342ad851ec78 Added examples directory.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    59
342ad851ec78 Added examples directory.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    60
// EtherCAT
612
aede068f9a74 Introduced master status, ecrt_master_get_status(), tainted flag,
Florian Pose <fp@igh-essen.com>
parents: 551
diff changeset
    61
static ec_master_t *master = NULL;
818
b6c87ae254c9 Calculate expected working counter for domains.
Florian Pose <fp@igh-essen.com>
parents: 814
diff changeset
    62
static ec_master_state_t master_state = {};
1500
ed1a733efbc5 Improved the callback mechanism.
Florian Pose <fp@igh-essen.com>
parents: 1378
diff changeset
    63
struct semaphore master_sem;
818
b6c87ae254c9 Calculate expected working counter for domains.
Florian Pose <fp@igh-essen.com>
parents: 814
diff changeset
    64
612
aede068f9a74 Introduced master status, ecrt_master_get_status(), tainted flag,
Florian Pose <fp@igh-essen.com>
parents: 551
diff changeset
    65
static ec_domain_t *domain1 = NULL;
818
b6c87ae254c9 Calculate expected working counter for domains.
Florian Pose <fp@igh-essen.com>
parents: 814
diff changeset
    66
static ec_domain_state_t domain1_state = {};
b6c87ae254c9 Calculate expected working counter for domains.
Florian Pose <fp@igh-essen.com>
parents: 814
diff changeset
    67
1022
8e49b519e6ba Implemented ecrt_slave_config_state(); minor changes in
Florian Pose <fp@igh-essen.com>
parents: 909
diff changeset
    68
static ec_slave_config_t *sc_ana_in = NULL;
8e49b519e6ba Implemented ecrt_slave_config_state(); minor changes in
Florian Pose <fp@igh-essen.com>
parents: 909
diff changeset
    69
static ec_slave_config_state_t sc_ana_in_state = {};
8e49b519e6ba Implemented ecrt_slave_config_state(); minor changes in
Florian Pose <fp@igh-essen.com>
parents: 909
diff changeset
    70
1080
088a61306930 Removed MSR example; adapted RTAI example; README files for examples.
Florian Pose <fp@igh-essen.com>
parents: 1061
diff changeset
    71
// Timer
820
f8e6f5966cce Cleaned up mini module.
Florian Pose <fp@igh-essen.com>
parents: 818
diff changeset
    72
static struct timer_list timer;
f8e6f5966cce Cleaned up mini module.
Florian Pose <fp@igh-essen.com>
parents: 818
diff changeset
    73
f8e6f5966cce Cleaned up mini module.
Florian Pose <fp@igh-essen.com>
parents: 818
diff changeset
    74
/*****************************************************************************/
f8e6f5966cce Cleaned up mini module.
Florian Pose <fp@igh-essen.com>
parents: 818
diff changeset
    75
f8e6f5966cce Cleaned up mini module.
Florian Pose <fp@igh-essen.com>
parents: 818
diff changeset
    76
// process data
f8e6f5966cce Cleaned up mini module.
Florian Pose <fp@igh-essen.com>
parents: 818
diff changeset
    77
static uint8_t *domain1_pd; // process data memory
f8e6f5966cce Cleaned up mini module.
Florian Pose <fp@igh-essen.com>
parents: 818
diff changeset
    78
1212
d634ed3a9b94 mini top.
Florian Pose <fp@igh-essen.com>
parents: 1209
diff changeset
    79
#define AnaInSlavePos  0, 2
d634ed3a9b94 mini top.
Florian Pose <fp@igh-essen.com>
parents: 1209
diff changeset
    80
#define AnaOutSlavePos 0, 1
1080
088a61306930 Removed MSR example; adapted RTAI example; README files for examples.
Florian Pose <fp@igh-essen.com>
parents: 1061
diff changeset
    81
#define DigOutSlavePos 0, 3
088a61306930 Removed MSR example; adapted RTAI example; README files for examples.
Florian Pose <fp@igh-essen.com>
parents: 1061
diff changeset
    82
088a61306930 Removed MSR example; adapted RTAI example; README files for examples.
Florian Pose <fp@igh-essen.com>
parents: 1061
diff changeset
    83
#define Beckhoff_EL2004 0x00000002, 0x07D43052
1179
c0e6adec1aee Added analog output to minimal example.
Florian Pose <fp@igh-essen.com>
parents: 1171
diff changeset
    84
#define Beckhoff_EL3152 0x00000002, 0x0c503052
c0e6adec1aee Added analog output to minimal example.
Florian Pose <fp@igh-essen.com>
parents: 1171
diff changeset
    85
#define Beckhoff_EL4102 0x00000002, 0x10063052
c0e6adec1aee Added analog output to minimal example.
Florian Pose <fp@igh-essen.com>
parents: 1171
diff changeset
    86
1327
4d179b06dd3c merge -c1604 branches/stable-1.4: Fixed spelling of EtherCAT terms.
Florian Pose <fp@igh-essen.com>
parents: 1326
diff changeset
    87
// offsets for PDO entries
1179
c0e6adec1aee Added analog output to minimal example.
Florian Pose <fp@igh-essen.com>
parents: 1171
diff changeset
    88
static unsigned int off_ana_in;
c0e6adec1aee Added analog output to minimal example.
Florian Pose <fp@igh-essen.com>
parents: 1171
diff changeset
    89
static unsigned int off_ana_out;
820
f8e6f5966cce Cleaned up mini module.
Florian Pose <fp@igh-essen.com>
parents: 818
diff changeset
    90
static unsigned int off_dig_out;
f8e6f5966cce Cleaned up mini module.
Florian Pose <fp@igh-essen.com>
parents: 818
diff changeset
    91
1080
088a61306930 Removed MSR example; adapted RTAI example; README files for examples.
Florian Pose <fp@igh-essen.com>
parents: 1061
diff changeset
    92
const static ec_pdo_entry_reg_t domain1_regs[] = {
1179
c0e6adec1aee Added analog output to minimal example.
Florian Pose <fp@igh-essen.com>
parents: 1171
diff changeset
    93
#if EL3152_ALT_PDOS
c0e6adec1aee Added analog output to minimal example.
Florian Pose <fp@igh-essen.com>
parents: 1171
diff changeset
    94
    {AnaInSlavePos,  Beckhoff_EL3152, 0x6401, 1, &off_ana_in},
1171
de880622f253 Alternative Pdo assignment for el3162.
Florian Pose <fp@igh-essen.com>
parents: 1082
diff changeset
    95
#else
1179
c0e6adec1aee Added analog output to minimal example.
Florian Pose <fp@igh-essen.com>
parents: 1171
diff changeset
    96
    {AnaInSlavePos,  Beckhoff_EL3152, 0x3101, 2, &off_ana_in},
c0e6adec1aee Added analog output to minimal example.
Florian Pose <fp@igh-essen.com>
parents: 1171
diff changeset
    97
#endif
c0e6adec1aee Added analog output to minimal example.
Florian Pose <fp@igh-essen.com>
parents: 1171
diff changeset
    98
    {AnaOutSlavePos, Beckhoff_EL4102, 0x3001, 1, &off_ana_out},
1080
088a61306930 Removed MSR example; adapted RTAI example; README files for examples.
Florian Pose <fp@igh-essen.com>
parents: 1061
diff changeset
    99
    {DigOutSlavePos, Beckhoff_EL2004, 0x3001, 1, &off_dig_out},
088a61306930 Removed MSR example; adapted RTAI example; README files for examples.
Florian Pose <fp@igh-essen.com>
parents: 1061
diff changeset
   100
    {}
088a61306930 Removed MSR example; adapted RTAI example; README files for examples.
Florian Pose <fp@igh-essen.com>
parents: 1061
diff changeset
   101
};
088a61306930 Removed MSR example; adapted RTAI example; README files for examples.
Florian Pose <fp@igh-essen.com>
parents: 1061
diff changeset
   102
088a61306930 Removed MSR example; adapted RTAI example; README files for examples.
Florian Pose <fp@igh-essen.com>
parents: 1061
diff changeset
   103
static unsigned int counter = 0;
820
f8e6f5966cce Cleaned up mini module.
Florian Pose <fp@igh-essen.com>
parents: 818
diff changeset
   104
static unsigned int blink = 0;
f8e6f5966cce Cleaned up mini module.
Florian Pose <fp@igh-essen.com>
parents: 818
diff changeset
   105
f8e6f5966cce Cleaned up mini module.
Florian Pose <fp@igh-essen.com>
parents: 818
diff changeset
   106
/*****************************************************************************/
f8e6f5966cce Cleaned up mini module.
Florian Pose <fp@igh-essen.com>
parents: 818
diff changeset
   107
1171
de880622f253 Alternative Pdo assignment for el3162.
Florian Pose <fp@igh-essen.com>
parents: 1082
diff changeset
   108
#if CONFIGURE_PDOS
de880622f253 Alternative Pdo assignment for el3162.
Florian Pose <fp@igh-essen.com>
parents: 1082
diff changeset
   109
1179
c0e6adec1aee Added analog output to minimal example.
Florian Pose <fp@igh-essen.com>
parents: 1171
diff changeset
   110
// Analog in --------------------------
c0e6adec1aee Added analog output to minimal example.
Florian Pose <fp@igh-essen.com>
parents: 1171
diff changeset
   111
c0e6adec1aee Added analog output to minimal example.
Florian Pose <fp@igh-essen.com>
parents: 1171
diff changeset
   112
static ec_pdo_entry_info_t el3152_pdo_entries[] = {
1171
de880622f253 Alternative Pdo assignment for el3162.
Florian Pose <fp@igh-essen.com>
parents: 1082
diff changeset
   113
    {0x3101, 1,  8}, // channel 1 status
de880622f253 Alternative Pdo assignment for el3162.
Florian Pose <fp@igh-essen.com>
parents: 1082
diff changeset
   114
    {0x3101, 2, 16}, // channel 1 value
de880622f253 Alternative Pdo assignment for el3162.
Florian Pose <fp@igh-essen.com>
parents: 1082
diff changeset
   115
    {0x3102, 1,  8}, // channel 2 status
de880622f253 Alternative Pdo assignment for el3162.
Florian Pose <fp@igh-essen.com>
parents: 1082
diff changeset
   116
    {0x3102, 2, 16}, // channel 2 value
de880622f253 Alternative Pdo assignment for el3162.
Florian Pose <fp@igh-essen.com>
parents: 1082
diff changeset
   117
    {0x6401, 1, 16}, // channel 1 value (alt.)
de880622f253 Alternative Pdo assignment for el3162.
Florian Pose <fp@igh-essen.com>
parents: 1082
diff changeset
   118
    {0x6401, 2, 16}  // channel 2 value (alt.)
de880622f253 Alternative Pdo assignment for el3162.
Florian Pose <fp@igh-essen.com>
parents: 1082
diff changeset
   119
};
de880622f253 Alternative Pdo assignment for el3162.
Florian Pose <fp@igh-essen.com>
parents: 1082
diff changeset
   120
1179
c0e6adec1aee Added analog output to minimal example.
Florian Pose <fp@igh-essen.com>
parents: 1171
diff changeset
   121
#if EL3152_ALT_PDOS
c0e6adec1aee Added analog output to minimal example.
Florian Pose <fp@igh-essen.com>
parents: 1171
diff changeset
   122
static ec_pdo_info_t el3152_pdos[] = {
c0e6adec1aee Added analog output to minimal example.
Florian Pose <fp@igh-essen.com>
parents: 1171
diff changeset
   123
    {0x1A10, 2, el3152_pdo_entries + 4},
c0e6adec1aee Added analog output to minimal example.
Florian Pose <fp@igh-essen.com>
parents: 1171
diff changeset
   124
};
c0e6adec1aee Added analog output to minimal example.
Florian Pose <fp@igh-essen.com>
parents: 1171
diff changeset
   125
c0e6adec1aee Added analog output to minimal example.
Florian Pose <fp@igh-essen.com>
parents: 1171
diff changeset
   126
static ec_sync_info_t el3152_syncs[] = {
1171
de880622f253 Alternative Pdo assignment for el3162.
Florian Pose <fp@igh-essen.com>
parents: 1082
diff changeset
   127
    {2, EC_DIR_OUTPUT},
1179
c0e6adec1aee Added analog output to minimal example.
Florian Pose <fp@igh-essen.com>
parents: 1171
diff changeset
   128
    {3, EC_DIR_INPUT, 1, el3152_pdos},
1171
de880622f253 Alternative Pdo assignment for el3162.
Florian Pose <fp@igh-essen.com>
parents: 1082
diff changeset
   129
    {0xff}
de880622f253 Alternative Pdo assignment for el3162.
Florian Pose <fp@igh-essen.com>
parents: 1082
diff changeset
   130
};
de880622f253 Alternative Pdo assignment for el3162.
Florian Pose <fp@igh-essen.com>
parents: 1082
diff changeset
   131
#else
1179
c0e6adec1aee Added analog output to minimal example.
Florian Pose <fp@igh-essen.com>
parents: 1171
diff changeset
   132
static ec_pdo_info_t el3152_pdos[] = {
c0e6adec1aee Added analog output to minimal example.
Florian Pose <fp@igh-essen.com>
parents: 1171
diff changeset
   133
    {0x1A00, 2, el3152_pdo_entries},
c0e6adec1aee Added analog output to minimal example.
Florian Pose <fp@igh-essen.com>
parents: 1171
diff changeset
   134
    {0x1A01, 2, el3152_pdo_entries + 2}
c0e6adec1aee Added analog output to minimal example.
Florian Pose <fp@igh-essen.com>
parents: 1171
diff changeset
   135
};
c0e6adec1aee Added analog output to minimal example.
Florian Pose <fp@igh-essen.com>
parents: 1171
diff changeset
   136
c0e6adec1aee Added analog output to minimal example.
Florian Pose <fp@igh-essen.com>
parents: 1171
diff changeset
   137
static ec_sync_info_t el3152_syncs[] = {
1061
90c3d75057e4 Adapted minimal example to sync manager configuration interface.
Florian Pose <fp@igh-essen.com>
parents: 1027
diff changeset
   138
    {2, EC_DIR_OUTPUT},
1179
c0e6adec1aee Added analog output to minimal example.
Florian Pose <fp@igh-essen.com>
parents: 1171
diff changeset
   139
    {3, EC_DIR_INPUT, 1, el3152_pdos},
1061
90c3d75057e4 Adapted minimal example to sync manager configuration interface.
Florian Pose <fp@igh-essen.com>
parents: 1027
diff changeset
   140
    {0xff}
792
3778920f61e4 Implemented most realtime interface changes for version 1.4, improved
Florian Pose <fp@igh-essen.com>
parents: 654
diff changeset
   141
};
1171
de880622f253 Alternative Pdo assignment for el3162.
Florian Pose <fp@igh-essen.com>
parents: 1082
diff changeset
   142
#endif
809
ec4ef8911824 External domain memory.
Florian Pose <fp@igh-essen.com>
parents: 799
diff changeset
   143
1179
c0e6adec1aee Added analog output to minimal example.
Florian Pose <fp@igh-essen.com>
parents: 1171
diff changeset
   144
// Analog out -------------------------
c0e6adec1aee Added analog output to minimal example.
Florian Pose <fp@igh-essen.com>
parents: 1171
diff changeset
   145
c0e6adec1aee Added analog output to minimal example.
Florian Pose <fp@igh-essen.com>
parents: 1171
diff changeset
   146
static ec_pdo_entry_info_t el4102_pdo_entries[] = {
c0e6adec1aee Added analog output to minimal example.
Florian Pose <fp@igh-essen.com>
parents: 1171
diff changeset
   147
    {0x3001, 1, 16}, // channel 1 value
c0e6adec1aee Added analog output to minimal example.
Florian Pose <fp@igh-essen.com>
parents: 1171
diff changeset
   148
    {0x3002, 1, 16}, // channel 2 value
c0e6adec1aee Added analog output to minimal example.
Florian Pose <fp@igh-essen.com>
parents: 1171
diff changeset
   149
};
c0e6adec1aee Added analog output to minimal example.
Florian Pose <fp@igh-essen.com>
parents: 1171
diff changeset
   150
c0e6adec1aee Added analog output to minimal example.
Florian Pose <fp@igh-essen.com>
parents: 1171
diff changeset
   151
static ec_pdo_info_t el4102_pdos[] = {
c0e6adec1aee Added analog output to minimal example.
Florian Pose <fp@igh-essen.com>
parents: 1171
diff changeset
   152
    {0x1600, 1, el4102_pdo_entries},
c0e6adec1aee Added analog output to minimal example.
Florian Pose <fp@igh-essen.com>
parents: 1171
diff changeset
   153
    {0x1601, 1, el4102_pdo_entries + 1}
c0e6adec1aee Added analog output to minimal example.
Florian Pose <fp@igh-essen.com>
parents: 1171
diff changeset
   154
};
c0e6adec1aee Added analog output to minimal example.
Florian Pose <fp@igh-essen.com>
parents: 1171
diff changeset
   155
c0e6adec1aee Added analog output to minimal example.
Florian Pose <fp@igh-essen.com>
parents: 1171
diff changeset
   156
static ec_sync_info_t el4102_syncs[] = {
c0e6adec1aee Added analog output to minimal example.
Florian Pose <fp@igh-essen.com>
parents: 1171
diff changeset
   157
    {2, EC_DIR_OUTPUT, 2, el4102_pdos},
c0e6adec1aee Added analog output to minimal example.
Florian Pose <fp@igh-essen.com>
parents: 1171
diff changeset
   158
    {3, EC_DIR_INPUT},
c0e6adec1aee Added analog output to minimal example.
Florian Pose <fp@igh-essen.com>
parents: 1171
diff changeset
   159
    {0xff}
c0e6adec1aee Added analog output to minimal example.
Florian Pose <fp@igh-essen.com>
parents: 1171
diff changeset
   160
};
c0e6adec1aee Added analog output to minimal example.
Florian Pose <fp@igh-essen.com>
parents: 1171
diff changeset
   161
c0e6adec1aee Added analog output to minimal example.
Florian Pose <fp@igh-essen.com>
parents: 1171
diff changeset
   162
// Digital out ------------------------
c0e6adec1aee Added analog output to minimal example.
Florian Pose <fp@igh-essen.com>
parents: 1171
diff changeset
   163
851
2bb18adcd204 Removed 'const' from Pdo configuration entries.
Florian Pose <fp@igh-essen.com>
parents: 846
diff changeset
   164
static ec_pdo_entry_info_t el2004_channels[] = {
809
ec4ef8911824 External domain memory.
Florian Pose <fp@igh-essen.com>
parents: 799
diff changeset
   165
    {0x3001, 1, 1}, // Value 1
ec4ef8911824 External domain memory.
Florian Pose <fp@igh-essen.com>
parents: 799
diff changeset
   166
    {0x3001, 2, 1}, // Value 2
ec4ef8911824 External domain memory.
Florian Pose <fp@igh-essen.com>
parents: 799
diff changeset
   167
    {0x3001, 3, 1}, // Value 3
ec4ef8911824 External domain memory.
Florian Pose <fp@igh-essen.com>
parents: 799
diff changeset
   168
    {0x3001, 4, 1}  // Value 4
ec4ef8911824 External domain memory.
Florian Pose <fp@igh-essen.com>
parents: 799
diff changeset
   169
};
ec4ef8911824 External domain memory.
Florian Pose <fp@igh-essen.com>
parents: 799
diff changeset
   170
879
9b395c5646ab Changed terms "Pdo mapping" -> "Pdo assignment" and "Pdo configuration"
Florian Pose <fp@igh-essen.com>
parents: 878
diff changeset
   171
static ec_pdo_info_t el2004_pdos[] = {
1061
90c3d75057e4 Adapted minimal example to sync manager configuration interface.
Florian Pose <fp@igh-essen.com>
parents: 1027
diff changeset
   172
    {0x1600, 1, &el2004_channels[0]},
90c3d75057e4 Adapted minimal example to sync manager configuration interface.
Florian Pose <fp@igh-essen.com>
parents: 1027
diff changeset
   173
    {0x1601, 1, &el2004_channels[1]},
90c3d75057e4 Adapted minimal example to sync manager configuration interface.
Florian Pose <fp@igh-essen.com>
parents: 1027
diff changeset
   174
    {0x1602, 1, &el2004_channels[2]},
90c3d75057e4 Adapted minimal example to sync manager configuration interface.
Florian Pose <fp@igh-essen.com>
parents: 1027
diff changeset
   175
    {0x1603, 1, &el2004_channels[3]}
90c3d75057e4 Adapted minimal example to sync manager configuration interface.
Florian Pose <fp@igh-essen.com>
parents: 1027
diff changeset
   176
};
90c3d75057e4 Adapted minimal example to sync manager configuration interface.
Florian Pose <fp@igh-essen.com>
parents: 1027
diff changeset
   177
90c3d75057e4 Adapted minimal example to sync manager configuration interface.
Florian Pose <fp@igh-essen.com>
parents: 1027
diff changeset
   178
static ec_sync_info_t el2004_syncs[] = {
90c3d75057e4 Adapted minimal example to sync manager configuration interface.
Florian Pose <fp@igh-essen.com>
parents: 1027
diff changeset
   179
    {0, EC_DIR_OUTPUT, 4, el2004_pdos},
90c3d75057e4 Adapted minimal example to sync manager configuration interface.
Florian Pose <fp@igh-essen.com>
parents: 1027
diff changeset
   180
    {1, EC_DIR_INPUT},
90c3d75057e4 Adapted minimal example to sync manager configuration interface.
Florian Pose <fp@igh-essen.com>
parents: 1027
diff changeset
   181
    {0xff}
809
ec4ef8911824 External domain memory.
Florian Pose <fp@igh-essen.com>
parents: 799
diff changeset
   182
};
792
3778920f61e4 Implemented most realtime interface changes for version 1.4, improved
Florian Pose <fp@igh-essen.com>
parents: 654
diff changeset
   183
#endif
3778920f61e4 Implemented most realtime interface changes for version 1.4, improved
Florian Pose <fp@igh-essen.com>
parents: 654
diff changeset
   184
818
b6c87ae254c9 Calculate expected working counter for domains.
Florian Pose <fp@igh-essen.com>
parents: 814
diff changeset
   185
/*****************************************************************************/
b6c87ae254c9 Calculate expected working counter for domains.
Florian Pose <fp@igh-essen.com>
parents: 814
diff changeset
   186
1171
de880622f253 Alternative Pdo assignment for el3162.
Florian Pose <fp@igh-essen.com>
parents: 1082
diff changeset
   187
#if SDO_ACCESS
858
69122084d066 Basic reading realtime Sdo access working.
Florian Pose <fp@igh-essen.com>
parents: 851
diff changeset
   188
static ec_sdo_request_t *sdo;
69122084d066 Basic reading realtime Sdo access working.
Florian Pose <fp@igh-essen.com>
parents: 851
diff changeset
   189
#endif
69122084d066 Basic reading realtime Sdo access working.
Florian Pose <fp@igh-essen.com>
parents: 851
diff changeset
   190
1209
8be462afb7f4 Added VoE handler.
Florian Pose <fp@igh-essen.com>
parents: 1179
diff changeset
   191
#if VOE_ACCESS
8be462afb7f4 Added VoE handler.
Florian Pose <fp@igh-essen.com>
parents: 1179
diff changeset
   192
static ec_voe_handler_t *voe;
8be462afb7f4 Added VoE handler.
Florian Pose <fp@igh-essen.com>
parents: 1179
diff changeset
   193
#endif
8be462afb7f4 Added VoE handler.
Florian Pose <fp@igh-essen.com>
parents: 1179
diff changeset
   194
858
69122084d066 Basic reading realtime Sdo access working.
Florian Pose <fp@igh-essen.com>
parents: 851
diff changeset
   195
/*****************************************************************************/
69122084d066 Basic reading realtime Sdo access working.
Florian Pose <fp@igh-essen.com>
parents: 851
diff changeset
   196
818
b6c87ae254c9 Calculate expected working counter for domains.
Florian Pose <fp@igh-essen.com>
parents: 814
diff changeset
   197
void check_domain1_state(void)
b6c87ae254c9 Calculate expected working counter for domains.
Florian Pose <fp@igh-essen.com>
parents: 814
diff changeset
   198
{
b6c87ae254c9 Calculate expected working counter for domains.
Florian Pose <fp@igh-essen.com>
parents: 814
diff changeset
   199
    ec_domain_state_t ds;
b6c87ae254c9 Calculate expected working counter for domains.
Florian Pose <fp@igh-essen.com>
parents: 814
diff changeset
   200
1500
ed1a733efbc5 Improved the callback mechanism.
Florian Pose <fp@igh-essen.com>
parents: 1378
diff changeset
   201
    down(&master_sem);
818
b6c87ae254c9 Calculate expected working counter for domains.
Florian Pose <fp@igh-essen.com>
parents: 814
diff changeset
   202
    ecrt_domain_state(domain1, &ds);
1500
ed1a733efbc5 Improved the callback mechanism.
Florian Pose <fp@igh-essen.com>
parents: 1378
diff changeset
   203
    up(&master_sem);
1022
8e49b519e6ba Implemented ecrt_slave_config_state(); minor changes in
Florian Pose <fp@igh-essen.com>
parents: 909
diff changeset
   204
818
b6c87ae254c9 Calculate expected working counter for domains.
Florian Pose <fp@igh-essen.com>
parents: 814
diff changeset
   205
    if (ds.working_counter != domain1_state.working_counter)
1022
8e49b519e6ba Implemented ecrt_slave_config_state(); minor changes in
Florian Pose <fp@igh-essen.com>
parents: 909
diff changeset
   206
        printk(KERN_INFO PFX "Domain1: WC %u.\n", ds.working_counter);
818
b6c87ae254c9 Calculate expected working counter for domains.
Florian Pose <fp@igh-essen.com>
parents: 814
diff changeset
   207
    if (ds.wc_state != domain1_state.wc_state)
1022
8e49b519e6ba Implemented ecrt_slave_config_state(); minor changes in
Florian Pose <fp@igh-essen.com>
parents: 909
diff changeset
   208
        printk(KERN_INFO PFX "Domain1: State %u.\n", ds.wc_state);
818
b6c87ae254c9 Calculate expected working counter for domains.
Florian Pose <fp@igh-essen.com>
parents: 814
diff changeset
   209
b6c87ae254c9 Calculate expected working counter for domains.
Florian Pose <fp@igh-essen.com>
parents: 814
diff changeset
   210
    domain1_state = ds;
b6c87ae254c9 Calculate expected working counter for domains.
Florian Pose <fp@igh-essen.com>
parents: 814
diff changeset
   211
}
b6c87ae254c9 Calculate expected working counter for domains.
Florian Pose <fp@igh-essen.com>
parents: 814
diff changeset
   212
b6c87ae254c9 Calculate expected working counter for domains.
Florian Pose <fp@igh-essen.com>
parents: 814
diff changeset
   213
/*****************************************************************************/
b6c87ae254c9 Calculate expected working counter for domains.
Florian Pose <fp@igh-essen.com>
parents: 814
diff changeset
   214
b6c87ae254c9 Calculate expected working counter for domains.
Florian Pose <fp@igh-essen.com>
parents: 814
diff changeset
   215
void check_master_state(void)
b6c87ae254c9 Calculate expected working counter for domains.
Florian Pose <fp@igh-essen.com>
parents: 814
diff changeset
   216
{
b6c87ae254c9 Calculate expected working counter for domains.
Florian Pose <fp@igh-essen.com>
parents: 814
diff changeset
   217
    ec_master_state_t ms;
b6c87ae254c9 Calculate expected working counter for domains.
Florian Pose <fp@igh-essen.com>
parents: 814
diff changeset
   218
1500
ed1a733efbc5 Improved the callback mechanism.
Florian Pose <fp@igh-essen.com>
parents: 1378
diff changeset
   219
    down(&master_sem);
818
b6c87ae254c9 Calculate expected working counter for domains.
Florian Pose <fp@igh-essen.com>
parents: 814
diff changeset
   220
    ecrt_master_state(master, &ms);
1500
ed1a733efbc5 Improved the callback mechanism.
Florian Pose <fp@igh-essen.com>
parents: 1378
diff changeset
   221
    up(&master_sem);
818
b6c87ae254c9 Calculate expected working counter for domains.
Florian Pose <fp@igh-essen.com>
parents: 814
diff changeset
   222
1022
8e49b519e6ba Implemented ecrt_slave_config_state(); minor changes in
Florian Pose <fp@igh-essen.com>
parents: 909
diff changeset
   223
    if (ms.slaves_responding != master_state.slaves_responding)
8e49b519e6ba Implemented ecrt_slave_config_state(); minor changes in
Florian Pose <fp@igh-essen.com>
parents: 909
diff changeset
   224
        printk(KERN_INFO PFX "%u slave(s).\n", ms.slaves_responding);
8e49b519e6ba Implemented ecrt_slave_config_state(); minor changes in
Florian Pose <fp@igh-essen.com>
parents: 909
diff changeset
   225
    if (ms.al_states != master_state.al_states)
8e49b519e6ba Implemented ecrt_slave_config_state(); minor changes in
Florian Pose <fp@igh-essen.com>
parents: 909
diff changeset
   226
        printk(KERN_INFO PFX "AL states: 0x%02X.\n", ms.al_states);
8e49b519e6ba Implemented ecrt_slave_config_state(); minor changes in
Florian Pose <fp@igh-essen.com>
parents: 909
diff changeset
   227
    if (ms.link_up != master_state.link_up)
8e49b519e6ba Implemented ecrt_slave_config_state(); minor changes in
Florian Pose <fp@igh-essen.com>
parents: 909
diff changeset
   228
        printk(KERN_INFO PFX "Link is %s.\n", ms.link_up ? "up" : "down");
818
b6c87ae254c9 Calculate expected working counter for domains.
Florian Pose <fp@igh-essen.com>
parents: 814
diff changeset
   229
b6c87ae254c9 Calculate expected working counter for domains.
Florian Pose <fp@igh-essen.com>
parents: 814
diff changeset
   230
    master_state = ms;
b6c87ae254c9 Calculate expected working counter for domains.
Florian Pose <fp@igh-essen.com>
parents: 814
diff changeset
   231
}
220
342ad851ec78 Added examples directory.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   232
342ad851ec78 Added examples directory.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   233
/*****************************************************************************/
342ad851ec78 Added examples directory.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   234
1022
8e49b519e6ba Implemented ecrt_slave_config_state(); minor changes in
Florian Pose <fp@igh-essen.com>
parents: 909
diff changeset
   235
void check_slave_config_states(void)
8e49b519e6ba Implemented ecrt_slave_config_state(); minor changes in
Florian Pose <fp@igh-essen.com>
parents: 909
diff changeset
   236
{
8e49b519e6ba Implemented ecrt_slave_config_state(); minor changes in
Florian Pose <fp@igh-essen.com>
parents: 909
diff changeset
   237
    ec_slave_config_state_t s;
8e49b519e6ba Implemented ecrt_slave_config_state(); minor changes in
Florian Pose <fp@igh-essen.com>
parents: 909
diff changeset
   238
1500
ed1a733efbc5 Improved the callback mechanism.
Florian Pose <fp@igh-essen.com>
parents: 1378
diff changeset
   239
    down(&master_sem);
1022
8e49b519e6ba Implemented ecrt_slave_config_state(); minor changes in
Florian Pose <fp@igh-essen.com>
parents: 909
diff changeset
   240
    ecrt_slave_config_state(sc_ana_in, &s);
1500
ed1a733efbc5 Improved the callback mechanism.
Florian Pose <fp@igh-essen.com>
parents: 1378
diff changeset
   241
    up(&master_sem);
1022
8e49b519e6ba Implemented ecrt_slave_config_state(); minor changes in
Florian Pose <fp@igh-essen.com>
parents: 909
diff changeset
   242
8e49b519e6ba Implemented ecrt_slave_config_state(); minor changes in
Florian Pose <fp@igh-essen.com>
parents: 909
diff changeset
   243
    if (s.al_state != sc_ana_in_state.al_state)
8e49b519e6ba Implemented ecrt_slave_config_state(); minor changes in
Florian Pose <fp@igh-essen.com>
parents: 909
diff changeset
   244
        printk(KERN_INFO PFX "AnaIn: State 0x%02X.\n", s.al_state);
8e49b519e6ba Implemented ecrt_slave_config_state(); minor changes in
Florian Pose <fp@igh-essen.com>
parents: 909
diff changeset
   245
    if (s.online != sc_ana_in_state.online)
8e49b519e6ba Implemented ecrt_slave_config_state(); minor changes in
Florian Pose <fp@igh-essen.com>
parents: 909
diff changeset
   246
        printk(KERN_INFO PFX "AnaIn: %s.\n", s.online ? "online" : "offline");
8e49b519e6ba Implemented ecrt_slave_config_state(); minor changes in
Florian Pose <fp@igh-essen.com>
parents: 909
diff changeset
   247
    if (s.operational != sc_ana_in_state.operational)
8e49b519e6ba Implemented ecrt_slave_config_state(); minor changes in
Florian Pose <fp@igh-essen.com>
parents: 909
diff changeset
   248
        printk(KERN_INFO PFX "AnaIn: %soperational.\n",
8e49b519e6ba Implemented ecrt_slave_config_state(); minor changes in
Florian Pose <fp@igh-essen.com>
parents: 909
diff changeset
   249
                s.operational ? "" : "Not ");
8e49b519e6ba Implemented ecrt_slave_config_state(); minor changes in
Florian Pose <fp@igh-essen.com>
parents: 909
diff changeset
   250
8e49b519e6ba Implemented ecrt_slave_config_state(); minor changes in
Florian Pose <fp@igh-essen.com>
parents: 909
diff changeset
   251
    sc_ana_in_state = s;
8e49b519e6ba Implemented ecrt_slave_config_state(); minor changes in
Florian Pose <fp@igh-essen.com>
parents: 909
diff changeset
   252
}
8e49b519e6ba Implemented ecrt_slave_config_state(); minor changes in
Florian Pose <fp@igh-essen.com>
parents: 909
diff changeset
   253
8e49b519e6ba Implemented ecrt_slave_config_state(); minor changes in
Florian Pose <fp@igh-essen.com>
parents: 909
diff changeset
   254
/*****************************************************************************/
8e49b519e6ba Implemented ecrt_slave_config_state(); minor changes in
Florian Pose <fp@igh-essen.com>
parents: 909
diff changeset
   255
1171
de880622f253 Alternative Pdo assignment for el3162.
Florian Pose <fp@igh-essen.com>
parents: 1082
diff changeset
   256
#if SDO_ACCESS
858
69122084d066 Basic reading realtime Sdo access working.
Florian Pose <fp@igh-essen.com>
parents: 851
diff changeset
   257
void read_sdo(void)
69122084d066 Basic reading realtime Sdo access working.
Florian Pose <fp@igh-essen.com>
parents: 851
diff changeset
   258
{
69122084d066 Basic reading realtime Sdo access working.
Florian Pose <fp@igh-essen.com>
parents: 851
diff changeset
   259
    switch (ecrt_sdo_request_state(sdo)) {
1209
8be462afb7f4 Added VoE handler.
Florian Pose <fp@igh-essen.com>
parents: 1179
diff changeset
   260
        case EC_REQUEST_UNUSED: // request was not used yet
867
93a0180ee938 Minor changes.
Florian Pose <fp@igh-essen.com>
parents: 861
diff changeset
   261
            ecrt_sdo_request_read(sdo); // trigger first read
858
69122084d066 Basic reading realtime Sdo access working.
Florian Pose <fp@igh-essen.com>
parents: 851
diff changeset
   262
            break;
1209
8be462afb7f4 Added VoE handler.
Florian Pose <fp@igh-essen.com>
parents: 1179
diff changeset
   263
        case EC_REQUEST_BUSY:
861
6e3de145421a Introduced ec_sdo_request_state_t, making ec_request_t private again;
Florian Pose <fp@igh-essen.com>
parents: 858
diff changeset
   264
            printk(KERN_INFO PFX "Still busy...\n");
6e3de145421a Introduced ec_sdo_request_state_t, making ec_request_t private again;
Florian Pose <fp@igh-essen.com>
parents: 858
diff changeset
   265
            break;
1209
8be462afb7f4 Added VoE handler.
Florian Pose <fp@igh-essen.com>
parents: 1179
diff changeset
   266
        case EC_REQUEST_SUCCESS:
1327
4d179b06dd3c merge -c1604 branches/stable-1.4: Fixed spelling of EtherCAT terms.
Florian Pose <fp@igh-essen.com>
parents: 1326
diff changeset
   267
            printk(KERN_INFO PFX "SDO value: 0x%04X\n",
861
6e3de145421a Introduced ec_sdo_request_state_t, making ec_request_t private again;
Florian Pose <fp@igh-essen.com>
parents: 858
diff changeset
   268
                    EC_READ_U16(ecrt_sdo_request_data(sdo)));
867
93a0180ee938 Minor changes.
Florian Pose <fp@igh-essen.com>
parents: 861
diff changeset
   269
            ecrt_sdo_request_read(sdo); // trigger next read
861
6e3de145421a Introduced ec_sdo_request_state_t, making ec_request_t private again;
Florian Pose <fp@igh-essen.com>
parents: 858
diff changeset
   270
            break;
1209
8be462afb7f4 Added VoE handler.
Florian Pose <fp@igh-essen.com>
parents: 1179
diff changeset
   271
        case EC_REQUEST_ERROR:
1327
4d179b06dd3c merge -c1604 branches/stable-1.4: Fixed spelling of EtherCAT terms.
Florian Pose <fp@igh-essen.com>
parents: 1326
diff changeset
   272
            printk(KERN_INFO PFX "Failed to read SDO!\n");
867
93a0180ee938 Minor changes.
Florian Pose <fp@igh-essen.com>
parents: 861
diff changeset
   273
            ecrt_sdo_request_read(sdo); // retry reading
858
69122084d066 Basic reading realtime Sdo access working.
Florian Pose <fp@igh-essen.com>
parents: 851
diff changeset
   274
            break;
69122084d066 Basic reading realtime Sdo access working.
Florian Pose <fp@igh-essen.com>
parents: 851
diff changeset
   275
    }
69122084d066 Basic reading realtime Sdo access working.
Florian Pose <fp@igh-essen.com>
parents: 851
diff changeset
   276
}
69122084d066 Basic reading realtime Sdo access working.
Florian Pose <fp@igh-essen.com>
parents: 851
diff changeset
   277
#endif
69122084d066 Basic reading realtime Sdo access working.
Florian Pose <fp@igh-essen.com>
parents: 851
diff changeset
   278
69122084d066 Basic reading realtime Sdo access working.
Florian Pose <fp@igh-essen.com>
parents: 851
diff changeset
   279
/*****************************************************************************/
69122084d066 Basic reading realtime Sdo access working.
Florian Pose <fp@igh-essen.com>
parents: 851
diff changeset
   280
1209
8be462afb7f4 Added VoE handler.
Florian Pose <fp@igh-essen.com>
parents: 1179
diff changeset
   281
#if VOE_ACCESS
8be462afb7f4 Added VoE handler.
Florian Pose <fp@igh-essen.com>
parents: 1179
diff changeset
   282
void read_voe(void)
8be462afb7f4 Added VoE handler.
Florian Pose <fp@igh-essen.com>
parents: 1179
diff changeset
   283
{
8be462afb7f4 Added VoE handler.
Florian Pose <fp@igh-essen.com>
parents: 1179
diff changeset
   284
    switch (ecrt_voe_handler_execute(voe)) {
8be462afb7f4 Added VoE handler.
Florian Pose <fp@igh-essen.com>
parents: 1179
diff changeset
   285
        case EC_REQUEST_UNUSED:
8be462afb7f4 Added VoE handler.
Florian Pose <fp@igh-essen.com>
parents: 1179
diff changeset
   286
            ecrt_voe_handler_read(voe); // trigger first read
8be462afb7f4 Added VoE handler.
Florian Pose <fp@igh-essen.com>
parents: 1179
diff changeset
   287
            break;
8be462afb7f4 Added VoE handler.
Florian Pose <fp@igh-essen.com>
parents: 1179
diff changeset
   288
        case EC_REQUEST_BUSY:
8be462afb7f4 Added VoE handler.
Florian Pose <fp@igh-essen.com>
parents: 1179
diff changeset
   289
            printk(KERN_INFO PFX "VoE read still busy...\n");
8be462afb7f4 Added VoE handler.
Florian Pose <fp@igh-essen.com>
parents: 1179
diff changeset
   290
            break;
8be462afb7f4 Added VoE handler.
Florian Pose <fp@igh-essen.com>
parents: 1179
diff changeset
   291
        case EC_REQUEST_SUCCESS:
8be462afb7f4 Added VoE handler.
Florian Pose <fp@igh-essen.com>
parents: 1179
diff changeset
   292
            printk(KERN_INFO PFX "VoE received.\n");
8be462afb7f4 Added VoE handler.
Florian Pose <fp@igh-essen.com>
parents: 1179
diff changeset
   293
            // get data via ecrt_voe_handler_data(voe)
8be462afb7f4 Added VoE handler.
Florian Pose <fp@igh-essen.com>
parents: 1179
diff changeset
   294
            ecrt_voe_handler_read(voe); // trigger next read
8be462afb7f4 Added VoE handler.
Florian Pose <fp@igh-essen.com>
parents: 1179
diff changeset
   295
            break;
8be462afb7f4 Added VoE handler.
Florian Pose <fp@igh-essen.com>
parents: 1179
diff changeset
   296
        case EC_REQUEST_ERROR:
8be462afb7f4 Added VoE handler.
Florian Pose <fp@igh-essen.com>
parents: 1179
diff changeset
   297
            printk(KERN_INFO PFX "Failed to read VoE data!\n");
8be462afb7f4 Added VoE handler.
Florian Pose <fp@igh-essen.com>
parents: 1179
diff changeset
   298
            ecrt_voe_handler_read(voe); // retry reading
8be462afb7f4 Added VoE handler.
Florian Pose <fp@igh-essen.com>
parents: 1179
diff changeset
   299
            break;
8be462afb7f4 Added VoE handler.
Florian Pose <fp@igh-essen.com>
parents: 1179
diff changeset
   300
    }
8be462afb7f4 Added VoE handler.
Florian Pose <fp@igh-essen.com>
parents: 1179
diff changeset
   301
}
8be462afb7f4 Added VoE handler.
Florian Pose <fp@igh-essen.com>
parents: 1179
diff changeset
   302
#endif
8be462afb7f4 Added VoE handler.
Florian Pose <fp@igh-essen.com>
parents: 1179
diff changeset
   303
8be462afb7f4 Added VoE handler.
Florian Pose <fp@igh-essen.com>
parents: 1179
diff changeset
   304
/*****************************************************************************/
8be462afb7f4 Added VoE handler.
Florian Pose <fp@igh-essen.com>
parents: 1179
diff changeset
   305
820
f8e6f5966cce Cleaned up mini module.
Florian Pose <fp@igh-essen.com>
parents: 818
diff changeset
   306
void cyclic_task(unsigned long data)
f8e6f5966cce Cleaned up mini module.
Florian Pose <fp@igh-essen.com>
parents: 818
diff changeset
   307
{
818
b6c87ae254c9 Calculate expected working counter for domains.
Florian Pose <fp@igh-essen.com>
parents: 814
diff changeset
   308
    // receive process data
1500
ed1a733efbc5 Improved the callback mechanism.
Florian Pose <fp@igh-essen.com>
parents: 1378
diff changeset
   309
    down(&master_sem);
325
7833cf70c4f2 VERSION 1.1: New realtime interface, only state machines.
Florian Pose <fp@igh-essen.com>
parents: 280
diff changeset
   310
    ecrt_master_receive(master);
220
342ad851ec78 Added examples directory.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   311
    ecrt_domain_process(domain1);
1500
ed1a733efbc5 Improved the callback mechanism.
Florian Pose <fp@igh-essen.com>
parents: 1378
diff changeset
   312
    up(&master_sem);
220
342ad851ec78 Added examples directory.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   313
818
b6c87ae254c9 Calculate expected working counter for domains.
Florian Pose <fp@igh-essen.com>
parents: 814
diff changeset
   314
    // check process data state (optional)
b6c87ae254c9 Calculate expected working counter for domains.
Florian Pose <fp@igh-essen.com>
parents: 814
diff changeset
   315
    check_domain1_state();
512
24292123d174 Shorter critical sections in examples.
Florian Pose <fp@igh-essen.com>
parents: 509
diff changeset
   316
24292123d174 Shorter critical sections in examples.
Florian Pose <fp@igh-essen.com>
parents: 509
diff changeset
   317
    if (counter) {
24292123d174 Shorter critical sections in examples.
Florian Pose <fp@igh-essen.com>
parents: 509
diff changeset
   318
        counter--;
858
69122084d066 Basic reading realtime Sdo access working.
Florian Pose <fp@igh-essen.com>
parents: 851
diff changeset
   319
    } else { // do this at 1 Hz
512
24292123d174 Shorter critical sections in examples.
Florian Pose <fp@igh-essen.com>
parents: 509
diff changeset
   320
        counter = FREQUENCY;
818
b6c87ae254c9 Calculate expected working counter for domains.
Florian Pose <fp@igh-essen.com>
parents: 814
diff changeset
   321
b6c87ae254c9 Calculate expected working counter for domains.
Florian Pose <fp@igh-essen.com>
parents: 814
diff changeset
   322
        // calculate new process data
512
24292123d174 Shorter critical sections in examples.
Florian Pose <fp@igh-essen.com>
parents: 509
diff changeset
   323
        blink = !blink;
612
aede068f9a74 Introduced master status, ecrt_master_get_status(), tainted flag,
Florian Pose <fp@igh-essen.com>
parents: 551
diff changeset
   324
818
b6c87ae254c9 Calculate expected working counter for domains.
Florian Pose <fp@igh-essen.com>
parents: 814
diff changeset
   325
        // check for master state (optional)
b6c87ae254c9 Calculate expected working counter for domains.
Florian Pose <fp@igh-essen.com>
parents: 814
diff changeset
   326
        check_master_state();
1022
8e49b519e6ba Implemented ecrt_slave_config_state(); minor changes in
Florian Pose <fp@igh-essen.com>
parents: 909
diff changeset
   327
8e49b519e6ba Implemented ecrt_slave_config_state(); minor changes in
Florian Pose <fp@igh-essen.com>
parents: 909
diff changeset
   328
        // check for islave configuration state(s) (optional)
8e49b519e6ba Implemented ecrt_slave_config_state(); minor changes in
Florian Pose <fp@igh-essen.com>
parents: 909
diff changeset
   329
        check_slave_config_states();
858
69122084d066 Basic reading realtime Sdo access working.
Florian Pose <fp@igh-essen.com>
parents: 851
diff changeset
   330
        
1171
de880622f253 Alternative Pdo assignment for el3162.
Florian Pose <fp@igh-essen.com>
parents: 1082
diff changeset
   331
#if SDO_ACCESS
1327
4d179b06dd3c merge -c1604 branches/stable-1.4: Fixed spelling of EtherCAT terms.
Florian Pose <fp@igh-essen.com>
parents: 1326
diff changeset
   332
        // read process data SDO
858
69122084d066 Basic reading realtime Sdo access working.
Florian Pose <fp@igh-essen.com>
parents: 851
diff changeset
   333
        read_sdo();
69122084d066 Basic reading realtime Sdo access working.
Florian Pose <fp@igh-essen.com>
parents: 851
diff changeset
   334
#endif
1209
8be462afb7f4 Added VoE handler.
Florian Pose <fp@igh-essen.com>
parents: 1179
diff changeset
   335
8be462afb7f4 Added VoE handler.
Florian Pose <fp@igh-essen.com>
parents: 1179
diff changeset
   336
#if VOE_ACCESS
8be462afb7f4 Added VoE handler.
Florian Pose <fp@igh-essen.com>
parents: 1179
diff changeset
   337
        read_voe();
8be462afb7f4 Added VoE handler.
Florian Pose <fp@igh-essen.com>
parents: 1179
diff changeset
   338
#endif
818
b6c87ae254c9 Calculate expected working counter for domains.
Florian Pose <fp@igh-essen.com>
parents: 814
diff changeset
   339
    }
b6c87ae254c9 Calculate expected working counter for domains.
Florian Pose <fp@igh-essen.com>
parents: 814
diff changeset
   340
b6c87ae254c9 Calculate expected working counter for domains.
Florian Pose <fp@igh-essen.com>
parents: 814
diff changeset
   341
    // write process data
846
19248bbf9308 Cross blinking.
Florian Pose <fp@igh-essen.com>
parents: 820
diff changeset
   342
    EC_WRITE_U8(domain1_pd + off_dig_out, blink ? 0x06 : 0x09);
818
b6c87ae254c9 Calculate expected working counter for domains.
Florian Pose <fp@igh-essen.com>
parents: 814
diff changeset
   343
b6c87ae254c9 Calculate expected working counter for domains.
Florian Pose <fp@igh-essen.com>
parents: 814
diff changeset
   344
    // send process data
1500
ed1a733efbc5 Improved the callback mechanism.
Florian Pose <fp@igh-essen.com>
parents: 1378
diff changeset
   345
    down(&master_sem);
509
87baea61d0c7 Adjusted examples to 1.2.0 interface changes.
Florian Pose <fp@igh-essen.com>
parents: 472
diff changeset
   346
    ecrt_domain_queue(domain1);
325
7833cf70c4f2 VERSION 1.1: New realtime interface, only state machines.
Florian Pose <fp@igh-essen.com>
parents: 280
diff changeset
   347
    ecrt_master_send(master);
1500
ed1a733efbc5 Improved the callback mechanism.
Florian Pose <fp@igh-essen.com>
parents: 1378
diff changeset
   348
    up(&master_sem);
220
342ad851ec78 Added examples directory.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   349
342ad851ec78 Added examples directory.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   350
    // restart timer
342ad851ec78 Added examples directory.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   351
    timer.expires += HZ / FREQUENCY;
342ad851ec78 Added examples directory.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   352
    add_timer(&timer);
342ad851ec78 Added examples directory.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   353
}
342ad851ec78 Added examples directory.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   354
342ad851ec78 Added examples directory.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   355
/*****************************************************************************/
342ad851ec78 Added examples directory.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   356
1513
60ca68d853b8 Re-added callback data pointer, because it is necessary for some applications.
Florian Pose <fp@igh-essen.com>
parents: 1501
diff changeset
   357
void send_callback(void *cb_data)
60ca68d853b8 Re-added callback data pointer, because it is necessary for some applications.
Florian Pose <fp@igh-essen.com>
parents: 1501
diff changeset
   358
{
60ca68d853b8 Re-added callback data pointer, because it is necessary for some applications.
Florian Pose <fp@igh-essen.com>
parents: 1501
diff changeset
   359
    ec_master_t *m = (ec_master_t *) cb_data;
60ca68d853b8 Re-added callback data pointer, because it is necessary for some applications.
Florian Pose <fp@igh-essen.com>
parents: 1501
diff changeset
   360
    down(&master_sem);
60ca68d853b8 Re-added callback data pointer, because it is necessary for some applications.
Florian Pose <fp@igh-essen.com>
parents: 1501
diff changeset
   361
    ecrt_master_send_ext(m);
60ca68d853b8 Re-added callback data pointer, because it is necessary for some applications.
Florian Pose <fp@igh-essen.com>
parents: 1501
diff changeset
   362
    up(&master_sem);
60ca68d853b8 Re-added callback data pointer, because it is necessary for some applications.
Florian Pose <fp@igh-essen.com>
parents: 1501
diff changeset
   363
}
60ca68d853b8 Re-added callback data pointer, because it is necessary for some applications.
Florian Pose <fp@igh-essen.com>
parents: 1501
diff changeset
   364
60ca68d853b8 Re-added callback data pointer, because it is necessary for some applications.
Florian Pose <fp@igh-essen.com>
parents: 1501
diff changeset
   365
/*****************************************************************************/
60ca68d853b8 Re-added callback data pointer, because it is necessary for some applications.
Florian Pose <fp@igh-essen.com>
parents: 1501
diff changeset
   366
60ca68d853b8 Re-added callback data pointer, because it is necessary for some applications.
Florian Pose <fp@igh-essen.com>
parents: 1501
diff changeset
   367
void receive_callback(void *cb_data)
60ca68d853b8 Re-added callback data pointer, because it is necessary for some applications.
Florian Pose <fp@igh-essen.com>
parents: 1501
diff changeset
   368
{
60ca68d853b8 Re-added callback data pointer, because it is necessary for some applications.
Florian Pose <fp@igh-essen.com>
parents: 1501
diff changeset
   369
    ec_master_t *m = (ec_master_t *) cb_data;
60ca68d853b8 Re-added callback data pointer, because it is necessary for some applications.
Florian Pose <fp@igh-essen.com>
parents: 1501
diff changeset
   370
    down(&master_sem);
60ca68d853b8 Re-added callback data pointer, because it is necessary for some applications.
Florian Pose <fp@igh-essen.com>
parents: 1501
diff changeset
   371
    ecrt_master_receive(m);
1500
ed1a733efbc5 Improved the callback mechanism.
Florian Pose <fp@igh-essen.com>
parents: 1378
diff changeset
   372
    up(&master_sem);
220
342ad851ec78 Added examples directory.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   373
}
342ad851ec78 Added examples directory.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   374
342ad851ec78 Added examples directory.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   375
/*****************************************************************************/
342ad851ec78 Added examples directory.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   376
342ad851ec78 Added examples directory.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   377
int __init init_mini_module(void)
342ad851ec78 Added examples directory.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   378
{
1239
b50b93faaf3e Used ERR_PTR() macro for return value of ecrt_request_master().
Florian Pose <fp@igh-essen.com>
parents: 1212
diff changeset
   379
    int ret = -1;
1171
de880622f253 Alternative Pdo assignment for el3162.
Florian Pose <fp@igh-essen.com>
parents: 1082
diff changeset
   380
#if CONFIGURE_PDOS
792
3778920f61e4 Implemented most realtime interface changes for version 1.4, improved
Florian Pose <fp@igh-essen.com>
parents: 654
diff changeset
   381
    ec_slave_config_t *sc;
3778920f61e4 Implemented most realtime interface changes for version 1.4, improved
Florian Pose <fp@igh-essen.com>
parents: 654
diff changeset
   382
#endif
1171
de880622f253 Alternative Pdo assignment for el3162.
Florian Pose <fp@igh-essen.com>
parents: 1082
diff changeset
   383
#if EXTERNAL_MEMORY
809
ec4ef8911824 External domain memory.
Florian Pose <fp@igh-essen.com>
parents: 799
diff changeset
   384
    unsigned int size;
ec4ef8911824 External domain memory.
Florian Pose <fp@igh-essen.com>
parents: 799
diff changeset
   385
#endif
792
3778920f61e4 Implemented most realtime interface changes for version 1.4, improved
Florian Pose <fp@igh-essen.com>
parents: 654
diff changeset
   386
    
612
aede068f9a74 Introduced master status, ecrt_master_get_status(), tainted flag,
Florian Pose <fp@igh-essen.com>
parents: 551
diff changeset
   387
    printk(KERN_INFO PFX "Starting...\n");
220
342ad851ec78 Added examples directory.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   388
1239
b50b93faaf3e Used ERR_PTR() macro for return value of ecrt_request_master().
Florian Pose <fp@igh-essen.com>
parents: 1212
diff changeset
   389
    master = ecrt_request_master(0);
1378
1853f6c0b9b2 Removed IS_ERR() from minimal example.
Florian Pose <fp@igh-essen.com>
parents: 1363
diff changeset
   390
    if (!master) {
1853f6c0b9b2 Removed IS_ERR() from minimal example.
Florian Pose <fp@igh-essen.com>
parents: 1363
diff changeset
   391
        ret = -EBUSY; 
1239
b50b93faaf3e Used ERR_PTR() macro for return value of ecrt_request_master().
Florian Pose <fp@igh-essen.com>
parents: 1212
diff changeset
   392
        printk(KERN_ERR PFX "Requesting master 0 failed.\n");
220
342ad851ec78 Added examples directory.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   393
        goto out_return;
342ad851ec78 Added examples directory.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   394
    }
342ad851ec78 Added examples directory.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   395
1579
326d47aa986c applied komax patch to version r1822
Martin Troxler <martin.troxler@komaxgroup.com>
parents: 1501
diff changeset
   396
    sema_init(&master_sem, 1);
1513
60ca68d853b8 Re-added callback data pointer, because it is necessary for some applications.
Florian Pose <fp@igh-essen.com>
parents: 1501
diff changeset
   397
    ecrt_master_callbacks(master, send_callback, receive_callback, master);
220
342ad851ec78 Added examples directory.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   398
612
aede068f9a74 Introduced master status, ecrt_master_get_status(), tainted flag,
Florian Pose <fp@igh-essen.com>
parents: 551
diff changeset
   399
    printk(KERN_INFO PFX "Registering domain...\n");
509
87baea61d0c7 Adjusted examples to 1.2.0 interface changes.
Florian Pose <fp@igh-essen.com>
parents: 472
diff changeset
   400
    if (!(domain1 = ecrt_master_create_domain(master))) {
612
aede068f9a74 Introduced master status, ecrt_master_get_status(), tainted flag,
Florian Pose <fp@igh-essen.com>
parents: 551
diff changeset
   401
        printk(KERN_ERR PFX "Domain creation failed!\n");
aede068f9a74 Introduced master status, ecrt_master_get_status(), tainted flag,
Florian Pose <fp@igh-essen.com>
parents: 551
diff changeset
   402
        goto out_release_master;
aede068f9a74 Introduced master status, ecrt_master_get_status(), tainted flag,
Florian Pose <fp@igh-essen.com>
parents: 551
diff changeset
   403
    }
aede068f9a74 Introduced master status, ecrt_master_get_status(), tainted flag,
Florian Pose <fp@igh-essen.com>
parents: 551
diff changeset
   404
1022
8e49b519e6ba Implemented ecrt_slave_config_state(); minor changes in
Florian Pose <fp@igh-essen.com>
parents: 909
diff changeset
   405
    if (!(sc_ana_in = ecrt_master_slave_config(
1179
c0e6adec1aee Added analog output to minimal example.
Florian Pose <fp@igh-essen.com>
parents: 1171
diff changeset
   406
                    master, AnaInSlavePos, Beckhoff_EL3152))) {
1022
8e49b519e6ba Implemented ecrt_slave_config_state(); minor changes in
Florian Pose <fp@igh-essen.com>
parents: 909
diff changeset
   407
        printk(KERN_ERR PFX "Failed to get slave configuration.\n");
8e49b519e6ba Implemented ecrt_slave_config_state(); minor changes in
Florian Pose <fp@igh-essen.com>
parents: 909
diff changeset
   408
        goto out_release_master;
8e49b519e6ba Implemented ecrt_slave_config_state(); minor changes in
Florian Pose <fp@igh-essen.com>
parents: 909
diff changeset
   409
    }
8e49b519e6ba Implemented ecrt_slave_config_state(); minor changes in
Florian Pose <fp@igh-essen.com>
parents: 909
diff changeset
   410
1171
de880622f253 Alternative Pdo assignment for el3162.
Florian Pose <fp@igh-essen.com>
parents: 1082
diff changeset
   411
#if CONFIGURE_PDOS
1327
4d179b06dd3c merge -c1604 branches/stable-1.4: Fixed spelling of EtherCAT terms.
Florian Pose <fp@igh-essen.com>
parents: 1326
diff changeset
   412
    printk(KERN_INFO PFX "Configuring PDOs...\n");
1179
c0e6adec1aee Added analog output to minimal example.
Florian Pose <fp@igh-essen.com>
parents: 1171
diff changeset
   413
    if (ecrt_slave_config_pdos(sc_ana_in, EC_END, el3152_syncs)) {
1327
4d179b06dd3c merge -c1604 branches/stable-1.4: Fixed spelling of EtherCAT terms.
Florian Pose <fp@igh-essen.com>
parents: 1326
diff changeset
   414
        printk(KERN_ERR PFX "Failed to configure PDOs.\n");
1179
c0e6adec1aee Added analog output to minimal example.
Florian Pose <fp@igh-essen.com>
parents: 1171
diff changeset
   415
        goto out_release_master;
c0e6adec1aee Added analog output to minimal example.
Florian Pose <fp@igh-essen.com>
parents: 1171
diff changeset
   416
    }
c0e6adec1aee Added analog output to minimal example.
Florian Pose <fp@igh-essen.com>
parents: 1171
diff changeset
   417
c0e6adec1aee Added analog output to minimal example.
Florian Pose <fp@igh-essen.com>
parents: 1171
diff changeset
   418
    if (!(sc = ecrt_master_slave_config(
c0e6adec1aee Added analog output to minimal example.
Florian Pose <fp@igh-essen.com>
parents: 1171
diff changeset
   419
                    master, AnaOutSlavePos, Beckhoff_EL4102))) {
c0e6adec1aee Added analog output to minimal example.
Florian Pose <fp@igh-essen.com>
parents: 1171
diff changeset
   420
        printk(KERN_ERR PFX "Failed to get slave configuration.\n");
c0e6adec1aee Added analog output to minimal example.
Florian Pose <fp@igh-essen.com>
parents: 1171
diff changeset
   421
        goto out_release_master;
c0e6adec1aee Added analog output to minimal example.
Florian Pose <fp@igh-essen.com>
parents: 1171
diff changeset
   422
    }
c0e6adec1aee Added analog output to minimal example.
Florian Pose <fp@igh-essen.com>
parents: 1171
diff changeset
   423
c0e6adec1aee Added analog output to minimal example.
Florian Pose <fp@igh-essen.com>
parents: 1171
diff changeset
   424
    if (ecrt_slave_config_pdos(sc, EC_END, el4102_syncs)) {
1327
4d179b06dd3c merge -c1604 branches/stable-1.4: Fixed spelling of EtherCAT terms.
Florian Pose <fp@igh-essen.com>
parents: 1326
diff changeset
   425
        printk(KERN_ERR PFX "Failed to configure PDOs.\n");
809
ec4ef8911824 External domain memory.
Florian Pose <fp@igh-essen.com>
parents: 799
diff changeset
   426
        goto out_release_master;
ec4ef8911824 External domain memory.
Florian Pose <fp@igh-essen.com>
parents: 799
diff changeset
   427
    }
ec4ef8911824 External domain memory.
Florian Pose <fp@igh-essen.com>
parents: 799
diff changeset
   428
1080
088a61306930 Removed MSR example; adapted RTAI example; README files for examples.
Florian Pose <fp@igh-essen.com>
parents: 1061
diff changeset
   429
    if (!(sc = ecrt_master_slave_config(
088a61306930 Removed MSR example; adapted RTAI example; README files for examples.
Florian Pose <fp@igh-essen.com>
parents: 1061
diff changeset
   430
                    master, DigOutSlavePos, Beckhoff_EL2004))) {
809
ec4ef8911824 External domain memory.
Florian Pose <fp@igh-essen.com>
parents: 799
diff changeset
   431
        printk(KERN_ERR PFX "Failed to get slave configuration.\n");
ec4ef8911824 External domain memory.
Florian Pose <fp@igh-essen.com>
parents: 799
diff changeset
   432
        goto out_release_master;
ec4ef8911824 External domain memory.
Florian Pose <fp@igh-essen.com>
parents: 799
diff changeset
   433
    }
ec4ef8911824 External domain memory.
Florian Pose <fp@igh-essen.com>
parents: 799
diff changeset
   434
1082
ff06c58e269c Renamed ecrt_slave_config_sync_managers() to ecrt_slave_config_pdos();
Florian Pose <fp@igh-essen.com>
parents: 1080
diff changeset
   435
    if (ecrt_slave_config_pdos(sc, EC_END, el2004_syncs)) {
1327
4d179b06dd3c merge -c1604 branches/stable-1.4: Fixed spelling of EtherCAT terms.
Florian Pose <fp@igh-essen.com>
parents: 1326
diff changeset
   436
        printk(KERN_ERR PFX "Failed to configure PDOs.\n");
792
3778920f61e4 Implemented most realtime interface changes for version 1.4, improved
Florian Pose <fp@igh-essen.com>
parents: 654
diff changeset
   437
        goto out_release_master;
3778920f61e4 Implemented most realtime interface changes for version 1.4, improved
Florian Pose <fp@igh-essen.com>
parents: 654
diff changeset
   438
    }
3778920f61e4 Implemented most realtime interface changes for version 1.4, improved
Florian Pose <fp@igh-essen.com>
parents: 654
diff changeset
   439
#endif
3778920f61e4 Implemented most realtime interface changes for version 1.4, improved
Florian Pose <fp@igh-essen.com>
parents: 654
diff changeset
   440
1171
de880622f253 Alternative Pdo assignment for el3162.
Florian Pose <fp@igh-essen.com>
parents: 1082
diff changeset
   441
#if SDO_ACCESS
1327
4d179b06dd3c merge -c1604 branches/stable-1.4: Fixed spelling of EtherCAT terms.
Florian Pose <fp@igh-essen.com>
parents: 1326
diff changeset
   442
    printk(KERN_INFO PFX "Creating SDO requests...\n");
1026
021b8cdeb384 Minor changes to minimal example.
Florian Pose <fp@igh-essen.com>
parents: 1022
diff changeset
   443
    if (!(sdo = ecrt_slave_config_create_sdo_request(sc_ana_in, 0x3102, 2, 2))) {
1327
4d179b06dd3c merge -c1604 branches/stable-1.4: Fixed spelling of EtherCAT terms.
Florian Pose <fp@igh-essen.com>
parents: 1326
diff changeset
   444
        printk(KERN_ERR PFX "Failed to create SDO request.\n");
858
69122084d066 Basic reading realtime Sdo access working.
Florian Pose <fp@igh-essen.com>
parents: 851
diff changeset
   445
        goto out_release_master;
69122084d066 Basic reading realtime Sdo access working.
Florian Pose <fp@igh-essen.com>
parents: 851
diff changeset
   446
    }
1026
021b8cdeb384 Minor changes to minimal example.
Florian Pose <fp@igh-essen.com>
parents: 1022
diff changeset
   447
    ecrt_sdo_request_timeout(sdo, 500); // ms
858
69122084d066 Basic reading realtime Sdo access working.
Florian Pose <fp@igh-essen.com>
parents: 851
diff changeset
   448
#endif
69122084d066 Basic reading realtime Sdo access working.
Florian Pose <fp@igh-essen.com>
parents: 851
diff changeset
   449
1209
8be462afb7f4 Added VoE handler.
Florian Pose <fp@igh-essen.com>
parents: 1179
diff changeset
   450
#if VOE_ACCESS
8be462afb7f4 Added VoE handler.
Florian Pose <fp@igh-essen.com>
parents: 1179
diff changeset
   451
    printk(KERN_INFO PFX "Creating VoE handlers...\n");
8be462afb7f4 Added VoE handler.
Florian Pose <fp@igh-essen.com>
parents: 1179
diff changeset
   452
    if (!(voe = ecrt_slave_config_create_voe_handler(sc_ana_in, 1000))) {
8be462afb7f4 Added VoE handler.
Florian Pose <fp@igh-essen.com>
parents: 1179
diff changeset
   453
        printk(KERN_ERR PFX "Failed to create VoE handler.\n");
8be462afb7f4 Added VoE handler.
Florian Pose <fp@igh-essen.com>
parents: 1179
diff changeset
   454
        goto out_release_master;
8be462afb7f4 Added VoE handler.
Florian Pose <fp@igh-essen.com>
parents: 1179
diff changeset
   455
    }
8be462afb7f4 Added VoE handler.
Florian Pose <fp@igh-essen.com>
parents: 1179
diff changeset
   456
#endif
8be462afb7f4 Added VoE handler.
Florian Pose <fp@igh-essen.com>
parents: 1179
diff changeset
   457
1327
4d179b06dd3c merge -c1604 branches/stable-1.4: Fixed spelling of EtherCAT terms.
Florian Pose <fp@igh-essen.com>
parents: 1326
diff changeset
   458
    printk(KERN_INFO PFX "Registering PDO entries...\n");
792
3778920f61e4 Implemented most realtime interface changes for version 1.4, improved
Florian Pose <fp@igh-essen.com>
parents: 654
diff changeset
   459
    if (ecrt_domain_reg_pdo_entry_list(domain1, domain1_regs)) {
1327
4d179b06dd3c merge -c1604 branches/stable-1.4: Fixed spelling of EtherCAT terms.
Florian Pose <fp@igh-essen.com>
parents: 1326
diff changeset
   460
        printk(KERN_ERR PFX "PDO entry registration failed!\n");
792
3778920f61e4 Implemented most realtime interface changes for version 1.4, improved
Florian Pose <fp@igh-essen.com>
parents: 654
diff changeset
   461
        goto out_release_master;
3778920f61e4 Implemented most realtime interface changes for version 1.4, improved
Florian Pose <fp@igh-essen.com>
parents: 654
diff changeset
   462
    }
635
d304ef4af542 Implemented alternative PDO mapping configuration interface.
Florian Pose <fp@igh-essen.com>
parents: 612
diff changeset
   463
1171
de880622f253 Alternative Pdo assignment for el3162.
Florian Pose <fp@igh-essen.com>
parents: 1082
diff changeset
   464
#if EXTERNAL_MEMORY
809
ec4ef8911824 External domain memory.
Florian Pose <fp@igh-essen.com>
parents: 799
diff changeset
   465
    if ((size = ecrt_domain_size(domain1))) {
820
f8e6f5966cce Cleaned up mini module.
Florian Pose <fp@igh-essen.com>
parents: 818
diff changeset
   466
        if (!(domain1_pd = (uint8_t *) kmalloc(size, GFP_KERNEL))) {
809
ec4ef8911824 External domain memory.
Florian Pose <fp@igh-essen.com>
parents: 799
diff changeset
   467
            printk(KERN_ERR PFX "Failed to allocate %u bytes of process data"
ec4ef8911824 External domain memory.
Florian Pose <fp@igh-essen.com>
parents: 799
diff changeset
   468
                    " memory!\n", size);
ec4ef8911824 External domain memory.
Florian Pose <fp@igh-essen.com>
parents: 799
diff changeset
   469
            goto out_release_master;
ec4ef8911824 External domain memory.
Florian Pose <fp@igh-essen.com>
parents: 799
diff changeset
   470
        }
820
f8e6f5966cce Cleaned up mini module.
Florian Pose <fp@igh-essen.com>
parents: 818
diff changeset
   471
        ecrt_domain_external_memory(domain1, domain1_pd);
809
ec4ef8911824 External domain memory.
Florian Pose <fp@igh-essen.com>
parents: 799
diff changeset
   472
    }
ec4ef8911824 External domain memory.
Florian Pose <fp@igh-essen.com>
parents: 799
diff changeset
   473
#endif
ec4ef8911824 External domain memory.
Florian Pose <fp@igh-essen.com>
parents: 799
diff changeset
   474
612
aede068f9a74 Introduced master status, ecrt_master_get_status(), tainted flag,
Florian Pose <fp@igh-essen.com>
parents: 551
diff changeset
   475
    printk(KERN_INFO PFX "Activating master...\n");
220
342ad851ec78 Added examples directory.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   476
    if (ecrt_master_activate(master)) {
612
aede068f9a74 Introduced master status, ecrt_master_get_status(), tainted flag,
Florian Pose <fp@igh-essen.com>
parents: 551
diff changeset
   477
        printk(KERN_ERR PFX "Failed to activate master!\n");
1171
de880622f253 Alternative Pdo assignment for el3162.
Florian Pose <fp@igh-essen.com>
parents: 1082
diff changeset
   478
#if EXTERNAL_MEMORY
809
ec4ef8911824 External domain memory.
Florian Pose <fp@igh-essen.com>
parents: 799
diff changeset
   479
        goto out_free_process_data;
ec4ef8911824 External domain memory.
Florian Pose <fp@igh-essen.com>
parents: 799
diff changeset
   480
#else
ec4ef8911824 External domain memory.
Florian Pose <fp@igh-essen.com>
parents: 799
diff changeset
   481
        goto out_release_master;
ec4ef8911824 External domain memory.
Florian Pose <fp@igh-essen.com>
parents: 799
diff changeset
   482
#endif
ec4ef8911824 External domain memory.
Florian Pose <fp@igh-essen.com>
parents: 799
diff changeset
   483
    }
ec4ef8911824 External domain memory.
Florian Pose <fp@igh-essen.com>
parents: 799
diff changeset
   484
1171
de880622f253 Alternative Pdo assignment for el3162.
Florian Pose <fp@igh-essen.com>
parents: 1082
diff changeset
   485
#if !EXTERNAL_MEMORY
809
ec4ef8911824 External domain memory.
Florian Pose <fp@igh-essen.com>
parents: 799
diff changeset
   486
    // Get internal process data for domain
820
f8e6f5966cce Cleaned up mini module.
Florian Pose <fp@igh-essen.com>
parents: 818
diff changeset
   487
    domain1_pd = ecrt_domain_data(domain1);
809
ec4ef8911824 External domain memory.
Florian Pose <fp@igh-essen.com>
parents: 799
diff changeset
   488
#endif
612
aede068f9a74 Introduced master status, ecrt_master_get_status(), tainted flag,
Florian Pose <fp@igh-essen.com>
parents: 551
diff changeset
   489
aede068f9a74 Introduced master status, ecrt_master_get_status(), tainted flag,
Florian Pose <fp@igh-essen.com>
parents: 551
diff changeset
   490
    printk(KERN_INFO PFX "Starting cyclic sample thread.\n");
220
342ad851ec78 Added examples directory.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   491
    init_timer(&timer);
820
f8e6f5966cce Cleaned up mini module.
Florian Pose <fp@igh-essen.com>
parents: 818
diff changeset
   492
    timer.function = cyclic_task;
220
342ad851ec78 Added examples directory.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   493
    timer.expires = jiffies + 10;
342ad851ec78 Added examples directory.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   494
    add_timer(&timer);
342ad851ec78 Added examples directory.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   495
612
aede068f9a74 Introduced master status, ecrt_master_get_status(), tainted flag,
Florian Pose <fp@igh-essen.com>
parents: 551
diff changeset
   496
    printk(KERN_INFO PFX "Started.\n");
220
342ad851ec78 Added examples directory.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   497
    return 0;
342ad851ec78 Added examples directory.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   498
1171
de880622f253 Alternative Pdo assignment for el3162.
Florian Pose <fp@igh-essen.com>
parents: 1082
diff changeset
   499
#if EXTERNAL_MEMORY
809
ec4ef8911824 External domain memory.
Florian Pose <fp@igh-essen.com>
parents: 799
diff changeset
   500
out_free_process_data:
820
f8e6f5966cce Cleaned up mini module.
Florian Pose <fp@igh-essen.com>
parents: 818
diff changeset
   501
    kfree(domain1_pd);
809
ec4ef8911824 External domain memory.
Florian Pose <fp@igh-essen.com>
parents: 799
diff changeset
   502
#endif
ec4ef8911824 External domain memory.
Florian Pose <fp@igh-essen.com>
parents: 799
diff changeset
   503
out_release_master:
654
8278e1e27010 Minor changes in minimal example.
Florian Pose <fp@igh-essen.com>
parents: 643
diff changeset
   504
    printk(KERN_ERR PFX "Releasing master...\n");
220
342ad851ec78 Added examples directory.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   505
    ecrt_release_master(master);
809
ec4ef8911824 External domain memory.
Florian Pose <fp@igh-essen.com>
parents: 799
diff changeset
   506
out_return:
654
8278e1e27010 Minor changes in minimal example.
Florian Pose <fp@igh-essen.com>
parents: 643
diff changeset
   507
    printk(KERN_ERR PFX "Failed to load. Aborting.\n");
1239
b50b93faaf3e Used ERR_PTR() macro for return value of ecrt_request_master().
Florian Pose <fp@igh-essen.com>
parents: 1212
diff changeset
   508
    return ret;
220
342ad851ec78 Added examples directory.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   509
}
342ad851ec78 Added examples directory.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   510
342ad851ec78 Added examples directory.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   511
/*****************************************************************************/
342ad851ec78 Added examples directory.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   512
342ad851ec78 Added examples directory.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   513
void __exit cleanup_mini_module(void)
342ad851ec78 Added examples directory.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   514
{
612
aede068f9a74 Introduced master status, ecrt_master_get_status(), tainted flag,
Florian Pose <fp@igh-essen.com>
parents: 551
diff changeset
   515
    printk(KERN_INFO PFX "Stopping...\n");
220
342ad851ec78 Added examples directory.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   516
449
3caf8ff4d8a2 Moved functionality of ecrt_master_deactivate() (now deprecated) to ecrt_master_release().
Florian Pose <fp@igh-essen.com>
parents: 446
diff changeset
   517
    del_timer_sync(&timer);
809
ec4ef8911824 External domain memory.
Florian Pose <fp@igh-essen.com>
parents: 799
diff changeset
   518
1171
de880622f253 Alternative Pdo assignment for el3162.
Florian Pose <fp@igh-essen.com>
parents: 1082
diff changeset
   519
#if EXTERNAL_MEMORY
820
f8e6f5966cce Cleaned up mini module.
Florian Pose <fp@igh-essen.com>
parents: 818
diff changeset
   520
    kfree(domain1_pd);
809
ec4ef8911824 External domain memory.
Florian Pose <fp@igh-essen.com>
parents: 799
diff changeset
   521
#endif
ec4ef8911824 External domain memory.
Florian Pose <fp@igh-essen.com>
parents: 799
diff changeset
   522
612
aede068f9a74 Introduced master status, ecrt_master_get_status(), tainted flag,
Florian Pose <fp@igh-essen.com>
parents: 551
diff changeset
   523
    printk(KERN_INFO PFX "Releasing master...\n");
449
3caf8ff4d8a2 Moved functionality of ecrt_master_deactivate() (now deprecated) to ecrt_master_release().
Florian Pose <fp@igh-essen.com>
parents: 446
diff changeset
   524
    ecrt_release_master(master);
220
342ad851ec78 Added examples directory.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   525
654
8278e1e27010 Minor changes in minimal example.
Florian Pose <fp@igh-essen.com>
parents: 643
diff changeset
   526
    printk(KERN_INFO PFX "Unloading.\n");
220
342ad851ec78 Added examples directory.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   527
}
342ad851ec78 Added examples directory.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   528
342ad851ec78 Added examples directory.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   529
/*****************************************************************************/
342ad851ec78 Added examples directory.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   530
342ad851ec78 Added examples directory.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   531
MODULE_LICENSE("GPL");
512
24292123d174 Shorter critical sections in examples.
Florian Pose <fp@igh-essen.com>
parents: 509
diff changeset
   532
MODULE_AUTHOR("Florian Pose <fp@igh-essen.com>");
24292123d174 Shorter critical sections in examples.
Florian Pose <fp@igh-essen.com>
parents: 509
diff changeset
   533
MODULE_DESCRIPTION("EtherCAT minimal test environment");
220
342ad851ec78 Added examples directory.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   534
342ad851ec78 Added examples directory.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   535
module_init(init_mini_module);
342ad851ec78 Added examples directory.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   536
module_exit(cleanup_mini_module);
342ad851ec78 Added examples directory.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   537
342ad851ec78 Added examples directory.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   538
/*****************************************************************************/