IgH EtherCAT Master  1.5.2
slave.h
Go to the documentation of this file.
1/******************************************************************************
2 *
3 * $Id$
4 *
5 * Copyright (C) 2006-2012 Florian Pose, Ingenieurgemeinschaft IgH
6 *
7 * This file is part of the IgH EtherCAT Master.
8 *
9 * The IgH EtherCAT Master is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU General Public License version 2, as
11 * published by the Free Software Foundation.
12 *
13 * The IgH EtherCAT Master is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
16 * Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License along
19 * with the IgH EtherCAT Master; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
21 *
22 * ---
23 *
24 * The license mentioned above concerns the source code only. Using the
25 * EtherCAT technology and brand is only permitted in compliance with the
26 * industrial property and similar rights of Beckhoff Automation GmbH.
27 *
28 *****************************************************************************/
29
35/*****************************************************************************/
36
37#ifndef __EC_SLAVE_H__
38#define __EC_SLAVE_H__
39
40#include <linux/list.h>
41#include <linux/kobject.h>
42
43#include "globals.h"
44#include "datagram.h"
45#include "pdo.h"
46#include "sync.h"
47#include "sdo.h"
48#include "fsm_slave.h"
49
50/*****************************************************************************/
51
62#define EC_SLAVE_INFO(slave, fmt, args...) \
63 printk(KERN_INFO "EtherCAT %u-%u: " fmt, slave->master->index, \
64 slave->ring_position, ##args)
65
76#define EC_SLAVE_ERR(slave, fmt, args...) \
77 printk(KERN_ERR "EtherCAT ERROR %u-%u: " fmt, slave->master->index, \
78 slave->ring_position, ##args)
79
90#define EC_SLAVE_WARN(slave, fmt, args...) \
91 printk(KERN_WARNING "EtherCAT WARNING %u-%u: " fmt, \
92 slave->master->index, slave->ring_position, ##args)
93
106#define EC_SLAVE_DBG(slave, level, fmt, args...) \
107 do { \
108 if (slave->master->debug_level >= level) { \
109 printk(KERN_DEBUG "EtherCAT DEBUG %u-%u: " fmt, \
110 slave->master->index, slave->ring_position, ##args); \
111 } \
112 } while (0)
113
114/*****************************************************************************/
115
118typedef struct {
122 uint32_t receive_time;
127
128/*****************************************************************************/
129
132typedef struct {
133 // Non-category data
134 uint16_t alias;
135 uint32_t vendor_id;
136 uint32_t product_code;
138 uint32_t serial_number;
149 // Strings
150 char **strings;
151 unsigned int string_count;
153 // General
154 unsigned int has_general;
155 char *group;
156 char *image;
157 char *order;
158 char *name;
159 uint8_t physical_layer[EC_MAX_PORTS];
164 // SyncM
166 unsigned int sync_count;
168 // [RT]XPDO
169 struct list_head pdos;
170} ec_sii_t;
171
172/*****************************************************************************/
173
177{
182 // addresses
183 uint16_t ring_position;
189 // configuration
193 unsigned int error_flag;
194 unsigned int force_config;
203 // base data
204 uint8_t base_type;
206 uint16_t base_build;
218 // SII
219 uint16_t *sii_words;
220 size_t sii_nwords;
222 // Slave information interface
225 struct list_head sdo_dictionary;
227 unsigned long jiffies_preop;
229 struct list_head sdo_requests;
230 struct list_head reg_requests;
231 struct list_head foe_requests;
232 struct list_head soe_requests;
235};
236
237/*****************************************************************************/
238
239// slave construction/destruction
241 uint16_t, uint16_t);
243
245
248
249// SII categories
250int ec_slave_fetch_sii_strings(ec_slave_t *, const uint8_t *, size_t);
251int ec_slave_fetch_sii_general(ec_slave_t *, const uint8_t *, size_t);
252int ec_slave_fetch_sii_syncs(ec_slave_t *, const uint8_t *, size_t);
253int ec_slave_fetch_sii_pdos(ec_slave_t *, const uint8_t *, size_t,
255
256// misc.
258
260 unsigned int *, unsigned int *);
262const ec_sdo_t *ec_slave_get_sdo_const(const ec_slave_t *, uint16_t);
263const ec_sdo_t *ec_slave_get_sdo_by_pos_const(const ec_slave_t *, uint16_t);
264uint16_t ec_slave_sdo_count(const ec_slave_t *);
265const ec_pdo_t *ec_slave_find_pdo(const ec_slave_t *, uint16_t);
267
270
271/*****************************************************************************/
272
273#endif
EtherCAT datagram structure.
EtherCAT slave request state machine.
Global definitions and macros.
ec_slave_state_t
State of an EtherCAT slave.
Definition: globals.h:115
ec_slave_dc_range_t
EtherCAT slave distributed clocks range.
Definition: globals.h:163
ec_device_index_t
Master devices.
Definition: globals.h:189
ec_slave_port_desc_t
EtherCAT slave port descriptor.
Definition: ecrt.h:352
#define EC_MAX_PORTS
Maximum number of slave ports.
Definition: ecrt.h:222
ec_direction_t
Direction type for PDO assignment functions.
Definition: ecrt.h:430
EtherCAT Process data object structure.
EtherCAT CANopen SDO structure.
int ec_slave_fetch_sii_pdos(ec_slave_t *, const uint8_t *, size_t, ec_direction_t)
Fetches data from a [RT]xPDO category.
Definition: slave.c:485
void ec_slave_attach_pdo_names(ec_slave_t *)
Attach PDO names.
Definition: slave.c:781
uint16_t ec_slave_sdo_count(const ec_slave_t *)
Get the number of SDOs in the dictionary.
Definition: slave.c:706
int ec_slave_fetch_sii_syncs(ec_slave_t *, const uint8_t *, size_t)
Fetches data from a SYNC MANAGER category.
Definition: slave.c:419
const ec_pdo_t * ec_slave_find_pdo(const ec_slave_t *, uint16_t)
Finds a mapped PDO.
Definition: slave.c:725
const ec_sdo_t * ec_slave_get_sdo_const(const ec_slave_t *, uint16_t)
Get an SDO from the dictionary.
Definition: slave.c:662
ec_sdo_t * ec_slave_get_sdo(ec_slave_t *, uint16_t)
Get an SDO from the dictionary.
Definition: slave.c:636
void ec_slave_init(ec_slave_t *, ec_master_t *, ec_device_index_t, uint16_t, uint16_t)
Slave constructor.
Definition: slave.c:62
void ec_slave_sdo_dict_info(const ec_slave_t *, unsigned int *, unsigned int *)
Counts the total number of SDOs and entries in the dictionary.
Definition: slave.c:608
void ec_slave_clear_sync_managers(ec_slave_t *)
Clear the sync manager array.
Definition: slave.c:255
void ec_slave_request_state(ec_slave_t *, ec_slave_state_t)
Request a slave state and resets the error flag.
Definition: slave.c:296
int ec_slave_fetch_sii_strings(ec_slave_t *, const uint8_t *, size_t)
Fetches data from a STRING category.
Definition: slave.c:312
void ec_slave_calc_transmission_delays_rec(ec_slave_t *, uint32_t *)
Recursively calculates transmission delays.
Definition: slave.c:968
void ec_slave_set_state(ec_slave_t *, ec_slave_state_t)
Sets the application state of a slave.
Definition: slave.c:274
int ec_slave_fetch_sii_general(ec_slave_t *, const uint8_t *, size_t)
Fetches data from a GENERAL category.
Definition: slave.c:368
void ec_slave_calc_port_delays(ec_slave_t *)
Calculates the port transmission delays.
Definition: slave.c:922
void ec_slave_clear(ec_slave_t *)
Slave destructor.
Definition: slave.c:170
const ec_sdo_t * ec_slave_get_sdo_by_pos_const(const ec_slave_t *, uint16_t)
Get an SDO from the dictionary, given its position in the list.
Definition: slave.c:684
ec_sync_t * ec_slave_get_sync(ec_slave_t *, uint8_t)
Get the sync manager given an index.
Definition: slave.c:590
Finite state machine of an EtherCAT slave.
Definition: fsm_slave.h:54
EtherCAT master.
Definition: master.h:194
PDO description.
Definition: pdo.h:49
CANopen SDO.
Definition: sdo.h:49
Slave information interface CANopen over EtherCAT details flags.
Definition: globals.h:145
Slave information interface general flags.
Definition: globals.h:156
Slave information interface data.
Definition: slave.h:132
uint16_t std_rx_mailbox_offset
Standard receive mailbox address.
Definition: slave.h:143
char * group
Group name.
Definition: slave.h:155
ec_sync_t * syncs
SYNC MANAGER categories.
Definition: slave.h:165
uint16_t alias
Configured station alias.
Definition: slave.h:134
char * order
Order number.
Definition: slave.h:157
uint32_t serial_number
Serial number.
Definition: slave.h:138
uint16_t std_tx_mailbox_size
Standard transmit mailbox size.
Definition: slave.h:146
unsigned int string_count
Number of SII strings.
Definition: slave.h:151
char * image
Image name.
Definition: slave.h:156
uint16_t boot_tx_mailbox_size
Bootstrap transmit mailbox size.
Definition: slave.h:142
int16_t current_on_ebus
Power consumption in mA.
Definition: slave.h:162
uint32_t product_code
Vendor-specific product code.
Definition: slave.h:136
char ** strings
Strings in SII categories.
Definition: slave.h:150
uint16_t mailbox_protocols
Supported mailbox protocols.
Definition: slave.h:147
ec_sii_coe_details_t coe_details
CoE detail flags.
Definition: slave.h:160
ec_sii_general_flags_t general_flags
General flags.
Definition: slave.h:161
uint16_t boot_tx_mailbox_offset
Bootstrap transmit mailbox address.
Definition: slave.h:141
uint16_t std_tx_mailbox_offset
Standard transmit mailbox address.
Definition: slave.h:145
uint16_t boot_rx_mailbox_size
Bootstrap receive mailbox size.
Definition: slave.h:140
uint32_t revision_number
Revision number.
Definition: slave.h:137
uint16_t std_rx_mailbox_size
Standard receive mailbox size.
Definition: slave.h:144
uint16_t boot_rx_mailbox_offset
Bootstrap receive mailbox address.
Definition: slave.h:139
unsigned int has_general
General category present.
Definition: slave.h:154
uint32_t vendor_id
Vendor ID.
Definition: slave.h:135
unsigned int sync_count
Number of sync managers.
Definition: slave.h:166
char * name
Slave name.
Definition: slave.h:158
EtherCAT slave configuration.
Definition: slave_config.h:119
Slave port.
Definition: slave.h:118
uint32_t receive_time
Port receive times for delay measurement.
Definition: slave.h:122
ec_slave_t * next_slave
Connected slaves.
Definition: slave.h:121
ec_slave_port_link_t link
Port link status.
Definition: slave.h:120
uint32_t delay_to_next_dc
Delay to next slave with DC support behind this port [ns].
Definition: slave.h:124
ec_slave_port_desc_t desc
Port descriptors.
Definition: slave.h:119
EtherCAT slave.
Definition: slave.h:177
uint16_t configured_rx_mailbox_size
Configured receive mailbox size.
Definition: slave.h:197
ec_sii_t sii
Extracted SII data.
Definition: slave.h:223
unsigned int force_config
Force (re-)configuration.
Definition: slave.h:194
ec_slave_port_t ports[EC_MAX_PORTS]
Ports.
Definition: slave.h:187
uint32_t transmission_delay
DC system time transmission delay (offset from reference clock).
Definition: slave.h:215
struct list_head sdo_dictionary
SDO dictionary list.
Definition: slave.h:225
uint8_t base_dc_supported
Distributed clocks are supported.
Definition: slave.h:210
uint16_t ring_position
Ring position.
Definition: slave.h:183
ec_slave_config_t * config
Current configuration.
Definition: slave.h:190
uint16_t configured_tx_mailbox_offset
Configured send mailbox offset.
Definition: slave.h:199
struct list_head foe_requests
FoE write requests.
Definition: slave.h:231
uint16_t * sii_words
Complete SII image.
Definition: slave.h:219
uint8_t base_fmmu_bit_operation
FMMU bit operation is supported.
Definition: slave.h:209
uint8_t base_fmmu_count
Number of supported FMMUs.
Definition: slave.h:207
uint8_t base_revision
Revision.
Definition: slave.h:205
struct list_head reg_requests
Register access requests.
Definition: slave.h:230
ec_slave_state_t current_state
Current application state.
Definition: slave.h:192
uint8_t has_dc_system_time
The slave supports the DC system time register.
Definition: slave.h:212
struct list_head sdo_requests
SDO access requests.
Definition: slave.h:229
uint16_t configured_tx_mailbox_size
Configured send mailbox size.
Definition: slave.h:201
struct list_head soe_requests
SoE write requests.
Definition: slave.h:232
uint16_t configured_rx_mailbox_offset
Configured receive mailbox offset.
Definition: slave.h:195
ec_slave_dc_range_t base_dc_range
DC range.
Definition: slave.h:211
uint8_t base_type
Slave type.
Definition: slave.h:204
uint8_t sdo_dictionary_fetched
Dictionary has been fetched.
Definition: slave.h:226
uint16_t effective_alias
Effective alias address.
Definition: slave.h:185
size_t sii_nwords
Size of the SII contents in words.
Definition: slave.h:220
uint8_t base_sync_count
Number of supported sync managers.
Definition: slave.h:208
ec_device_index_t device_index
Index of device the slave responds on.
Definition: slave.h:179
ec_master_t * master
Master owning the slave.
Definition: slave.h:178
uint16_t station_address
Configured station address.
Definition: slave.h:184
ec_fsm_slave_t fsm
Slave state machine.
Definition: slave.h:234
unsigned int error_flag
Stop processing after an error.
Definition: slave.h:193
unsigned long jiffies_preop
Time, the slave went to PREOP.
Definition: slave.h:227
ec_slave_state_t requested_state
Requested application state.
Definition: slave.h:191
uint16_t base_build
Build number.
Definition: slave.h:206
Sync manager.
Definition: sync.h:47
EtherCAT sync manager.