IgH EtherCAT Master  1.5.3
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 
118 typedef struct {
122  uint32_t receive_time;
124  uint32_t delay_to_next_dc;
127 
128 /*****************************************************************************/
129 
132 typedef struct {
133  // Non-category data
134  uint16_t alias;
135  uint32_t vendor_id;
136  uint32_t product_code;
137  uint32_t revision_number;
138  uint32_t serial_number;
147  uint16_t mailbox_protocols;
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];
162  int16_t current_on_ebus;
164  // SyncM
166  unsigned int sync_count;
168  // [RT]XPDO
169  struct list_head pdos;
170 } ec_sii_t;
171 
172 /*****************************************************************************/
173 
176 struct ec_slave
177 {
182  // addresses
183  uint16_t ring_position;
184  uint16_t station_address;
185  uint16_t effective_alias;
189  // configuration
193  unsigned int error_flag;
194  unsigned int force_config;
203  // base data
204  uint8_t base_type;
205  uint8_t base_revision;
206  uint16_t base_build;
207  uint8_t base_fmmu_count;
208  uint8_t base_sync_count;
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);
242 void ec_slave_clear(ec_slave_t *);
243 
245 
248 
249 // SII categories
250 int ec_slave_fetch_sii_strings(ec_slave_t *, const uint8_t *, size_t);
251 int ec_slave_fetch_sii_general(ec_slave_t *, const uint8_t *, size_t);
252 int ec_slave_fetch_sii_syncs(ec_slave_t *, const uint8_t *, size_t);
253 int ec_slave_fetch_sii_pdos(ec_slave_t *, const uint8_t *, size_t,
255 
256 // misc.
258 
260  unsigned int *, unsigned int *);
261 ec_sdo_t *ec_slave_get_sdo(ec_slave_t *, uint16_t);
262 const ec_sdo_t *ec_slave_get_sdo_const(const ec_slave_t *, uint16_t);
263 const ec_sdo_t *ec_slave_get_sdo_by_pos_const(const ec_slave_t *, uint16_t);
264 uint16_t ec_slave_sdo_count(const ec_slave_t *);
265 const ec_pdo_t *ec_slave_find_pdo(const ec_slave_t *, uint16_t);
267 
270 
271 /*****************************************************************************/
272 
273 #endif
ec_sii_general_flags_t general_flags
General flags.
Definition: slave.h:161
Slave information interface general flags.
Definition: globals.h:156
uint16_t ring_position
Ring position.
Definition: slave.h:183
uint32_t revision_number
Revision number.
Definition: slave.h:137
uint16_t boot_rx_mailbox_offset
Bootstrap receive mailbox address.
Definition: slave.h:139
ec_sii_t sii
Extracted SII data.
Definition: slave.h:223
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_syncs(ec_slave_t *, const uint8_t *, size_t)
Fetches data from a SYNC MANAGER category.
Definition: slave.c:419
uint16_t configured_tx_mailbox_size
Configured send mailbox size.
Definition: slave.h:201
uint16_t base_build
Build number.
Definition: slave.h:206
ec_slave_port_desc_t
EtherCAT slave port descriptor.
Definition: ecrt.h:368
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
uint16_t configured_tx_mailbox_offset
Configured send mailbox offset.
Definition: slave.h:199
ec_slave_port_t ports[EC_MAX_PORTS]
Ports.
Definition: slave.h:187
ec_slave_state_t current_state
Current application state.
Definition: slave.h:192
ec_sync_t * ec_slave_get_sync(ec_slave_t *, uint8_t)
Get the sync manager given an index.
Definition: slave.c:590
ec_slave_port_link_t link
Port link status.
Definition: slave.h:120
uint32_t serial_number
Serial number.
Definition: slave.h:138
const ec_pdo_t * ec_slave_find_pdo(const ec_slave_t *, uint16_t)
Finds a mapped PDO.
Definition: slave.c:725
ec_sii_coe_details_t coe_details
CoE detail flags.
Definition: slave.h:160
char * order
Order number.
Definition: slave.h:157
int ec_slave_fetch_sii_general(ec_slave_t *, const uint8_t *, size_t)
Fetches data from a GENERAL category.
Definition: slave.c:368
Finite state machine of an EtherCAT slave.
Definition: fsm_slave.h:54
ec_fsm_slave_t fsm
Slave state machine.
Definition: slave.h:234
struct list_head reg_requests
Register access requests.
Definition: slave.h:230
CANopen SDO.
Definition: sdo.h:49
int16_t current_on_ebus
Power consumption in mA.
Definition: slave.h:162
uint16_t boot_tx_mailbox_size
Bootstrap transmit mailbox size.
Definition: slave.h:142
uint16_t station_address
Configured station address.
Definition: slave.h:184
unsigned int sync_count
Number of sync managers.
Definition: slave.h:166
struct list_head sdo_dictionary
SDO dictionary list.
Definition: slave.h:225
uint16_t std_rx_mailbox_size
Standard receive mailbox size.
Definition: slave.h:144
uint8_t base_type
Slave type.
Definition: slave.h:204
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
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
Global definitions and macros.
uint16_t std_tx_mailbox_offset
Standard transmit mailbox address.
Definition: slave.h:145
uint16_t boot_tx_mailbox_offset
Bootstrap transmit mailbox address.
Definition: slave.h:141
void ec_slave_init(ec_slave_t *, ec_master_t *, ec_device_index_t, uint16_t, uint16_t)
Slave constructor.
Definition: slave.c:62
EtherCAT slave.
Definition: slave.h:176
uint16_t ec_slave_sdo_count(const ec_slave_t *)
Get the number of SDOs in the dictionary.
Definition: slave.c:706
struct list_head sdo_requests
SDO access requests.
Definition: slave.h:229
struct list_head soe_requests
SoE write requests.
Definition: slave.h:232
Slave information interface CANopen over EtherCAT details flags.
Definition: globals.h:145
ec_slave_config_t * config
Current configuration.
Definition: slave.h:190
PDO description.
Definition: pdo.h:49
uint8_t sdo_dictionary_fetched
Dictionary has been fetched.
Definition: slave.h:226
uint16_t * sii_words
Complete SII image.
Definition: slave.h:219
uint16_t mailbox_protocols
Supported mailbox protocols.
Definition: slave.h:147
ec_slave_dc_range_t base_dc_range
DC range.
Definition: slave.h:211
Sync manager.
Definition: sync.h:47
uint16_t std_rx_mailbox_offset
Standard receive mailbox address.
Definition: slave.h:143
uint8_t base_fmmu_bit_operation
FMMU bit operation is supported.
Definition: slave.h:209
uint32_t transmission_delay
DC system time transmission delay (offset from reference clock).
Definition: slave.h:215
ec_device_index_t
Master devices.
Definition: globals.h:189
void ec_slave_calc_port_delays(ec_slave_t *)
Calculates the port transmission delays.
Definition: slave.c:922
uint16_t alias
Configured station alias.
Definition: slave.h:134
ec_direction_t
Direction type for PDO assignment functions.
Definition: ecrt.h:446
uint8_t base_fmmu_count
Number of supported FMMUs.
Definition: slave.h:207
uint16_t configured_rx_mailbox_offset
Configured receive mailbox offset.
Definition: slave.h:195
void ec_slave_clear_sync_managers(ec_slave_t *)
Clear the sync manager array.
Definition: slave.c:255
ec_slave_dc_range_t
EtherCAT slave distributed clocks range.
Definition: globals.h:163
ec_slave_port_desc_t desc
Port descriptors.
Definition: slave.h:119
unsigned int string_count
Number of SII strings.
Definition: slave.h:151
ec_master_t * master
Master owning the slave.
Definition: slave.h:178
uint8_t has_dc_system_time
The slave supports the DC system time register.
Definition: slave.h:212
char ** strings
Strings in SII categories.
Definition: slave.h:150
ec_slave_state_t
State of an EtherCAT slave.
Definition: globals.h:115
void ec_slave_clear(ec_slave_t *)
Slave destructor.
Definition: slave.c:170
EtherCAT datagram structure.
void ec_slave_calc_transmission_delays_rec(ec_slave_t *, uint32_t *)
Recursively calculates transmission delays.
Definition: slave.c:968
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
uint8_t base_revision
Revision.
Definition: slave.h:205
uint16_t effective_alias
Effective alias address.
Definition: slave.h:185
struct list_head foe_requests
FoE write requests.
Definition: slave.h:231
uint16_t boot_rx_mailbox_size
Bootstrap receive mailbox size.
Definition: slave.h:140
#define EC_MAX_PORTS
Maximum number of slave ports.
Definition: ecrt.h:235
EtherCAT slave request state machine.
ec_slave_t * next_slave
Connected slaves.
Definition: slave.h:121
uint32_t receive_time
Port receive times for delay measurement.
Definition: slave.h:122
EtherCAT sync manager.
Slave port.
Definition: slave.h:118
char * image
Image name.
Definition: slave.h:156
unsigned long jiffies_preop
Time, the slave went to PREOP.
Definition: slave.h:227
uint16_t configured_rx_mailbox_size
Configured receive mailbox size.
Definition: slave.h:197
uint8_t base_dc_supported
Distributed clocks are supported.
Definition: slave.h:210
Slave information interface data.
Definition: slave.h:132
size_t sii_nwords
Size of the SII contents in words.
Definition: slave.h:220
char * group
Group name.
Definition: slave.h:155
void ec_slave_attach_pdo_names(ec_slave_t *)
Attach PDO names.
Definition: slave.c:781
uint8_t base_sync_count
Number of supported sync managers.
Definition: slave.h:208
EtherCAT slave configuration.
Definition: slave_config.h:117
ec_device_index_t device_index
Index of device the slave responds on.
Definition: slave.h:179
uint32_t product_code
Vendor-specific product code.
Definition: slave.h:136
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
unsigned int error_flag
Stop processing after an error.
Definition: slave.h:193
ec_sync_t * syncs
SYNC MANAGER categories.
Definition: slave.h:165
uint16_t std_tx_mailbox_size
Standard transmit mailbox size.
Definition: slave.h:146
EtherCAT master.
Definition: master.h:194
ec_slave_state_t requested_state
Requested application state.
Definition: slave.h:191
int ec_slave_fetch_sii_strings(ec_slave_t *, const uint8_t *, size_t)
Fetches data from a STRING category.
Definition: slave.c:312
EtherCAT CANopen SDO structure.
char * name
Slave name.
Definition: slave.h:158
uint32_t vendor_id
Vendor ID.
Definition: slave.h:135
uint32_t delay_to_next_dc
Delay to next slave with DC support behind this port [ns].
Definition: slave.h:124
unsigned int force_config
Force (re-)configuration.
Definition: slave.h:194
unsigned int has_general
General category present.
Definition: slave.h:154
ec_sdo_t * ec_slave_get_sdo(ec_slave_t *, uint16_t)
Get an SDO from the dictionary.
Definition: slave.c:636
EtherCAT Process data object structure.