IgH EtherCAT Master  1.7.0
slave.h
Go to the documentation of this file.
1 /*****************************************************************************
2  *
3  * Copyright (C) 2006-2026 Florian Pose, Ingenieurgemeinschaft IgH
4  *
5  * This file is part of the IgH EtherCAT Master.
6  *
7  * The IgH EtherCAT Master is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License version 2, as
9  * published by the Free Software Foundation.
10  *
11  * The IgH EtherCAT Master is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
14  * Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License along
17  * with the IgH EtherCAT Master; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19  *
20  ****************************************************************************/
21 
27 /****************************************************************************/
28 
29 #ifndef __EC_SLAVE_H__
30 #define __EC_SLAVE_H__
31 
32 #include <linux/list.h>
33 #include <linux/kobject.h>
34 
35 #include "globals.h"
36 #include "datagram.h"
37 #include "pdo.h"
38 #include "sync.h"
39 #include "sdo.h"
40 #include "fsm_slave.h"
41 #include "sii_page.h"
42 
43 /****************************************************************************/
44 
55 #define EC_SLAVE_INFO(slave, fmt, args...) \
56  printk(KERN_INFO "EtherCAT %u-%u: " fmt, slave->master->index, \
57  slave->ring_position, ##args)
58 
69 #define EC_SLAVE_ERR(slave, fmt, args...) \
70  printk(KERN_ERR "EtherCAT ERROR %u-%u: " fmt, slave->master->index, \
71  slave->ring_position, ##args)
72 
83 #define EC_SLAVE_WARN(slave, fmt, args...) \
84  printk(KERN_WARNING "EtherCAT WARNING %u-%u: " fmt, \
85  slave->master->index, slave->ring_position, ##args)
86 
99 #define EC_SLAVE_DBG(slave, level, fmt, args...) \
100  do { \
101  if (slave->master->debug_level >= level) { \
102  printk(KERN_DEBUG "EtherCAT DEBUG %u-%u: " fmt, \
103  slave->master->index, slave->ring_position, ##args); \
104  } \
105  } while (0)
106 
107 /****************************************************************************/
108 
111 typedef struct {
115  uint32_t receive_time;
117  uint32_t delay_to_next_dc;
120 
121 /****************************************************************************/
122 
125 typedef struct {
126  // Non-category data
127  uint16_t alias;
128  uint32_t vendor_id;
129  uint32_t product_code;
130  uint32_t revision_number;
131  uint32_t serial_number;
140  uint16_t mailbox_protocols;
142  // Strings
143  char **strings;
144  unsigned int string_count;
146  // General
147  unsigned int has_general;
148  char *group;
149  char *image;
150  char *order;
151  char *name;
152  uint8_t physical_layer[EC_MAX_PORTS];
155  int16_t current_on_ebus;
157  // SyncM
159  unsigned int sync_count;
161  // [RT]XPDO
162  struct list_head pdos;
163 } ec_sii_t;
164 
165 /****************************************************************************/
166 
169 struct ec_slave
170 {
175  // addresses
176  uint16_t ring_position;
177  uint16_t station_address;
178  uint16_t effective_alias;
182  // configuration
186  unsigned int error_flag;
187  unsigned int force_config;
196  // base data
197  uint8_t base_type;
198  uint8_t base_revision;
199  uint16_t base_build;
200  uint8_t base_fmmu_count;
201  uint8_t base_sync_count;
211  // Slave information interface (SII)
214  unsigned int sii_parallel_words;
219  struct list_head sdo_dictionary;
221  unsigned long jiffies_preop;
223  struct list_head sdo_requests;
224  struct list_head reg_requests;
225  struct list_head foe_requests;
226  struct list_head soe_requests;
227  struct list_head eoe_requests;
230 };
231 
232 /****************************************************************************/
233 
234 // slave construction/destruction
236  uint16_t, uint16_t);
237 void ec_slave_clear(ec_slave_t *);
238 
240 
243 
244 // SII
246 
247 // misc.
249 
251  unsigned int *, unsigned int *);
252 ec_sdo_t *ec_slave_get_sdo(ec_slave_t *, uint16_t);
253 const ec_sdo_t *ec_slave_get_sdo_const(const ec_slave_t *, uint16_t);
254 const ec_sdo_t *ec_slave_get_sdo_by_pos_const(const ec_slave_t *, uint16_t);
255 uint16_t ec_slave_sdo_count(const ec_slave_t *);
256 const ec_pdo_t *ec_slave_find_pdo(const ec_slave_t *, uint16_t);
258 
261 
262 /****************************************************************************/
263 
264 #endif
ec_sii_general_flags_t general_flags
General flags.
Definition: slave.h:154
Slave information interface general flags.
Definition: globals.h:171
uint16_t ring_position
Ring position.
Definition: slave.h:176
uint32_t revision_number
Revision number.
Definition: slave.h:130
uint16_t boot_rx_mailbox_offset
Bootstrap rx mailbox address.
Definition: slave.h:132
ec_sii_t sii
Extracted SII data.
Definition: slave.h:217
void ec_slave_set_state(ec_slave_t *, ec_slave_state_t)
Sets the application state of a slave.
Definition: slave.c:286
uint16_t configured_tx_mailbox_size
Configured send mailbox size.
Definition: slave.h:194
uint16_t base_build
Build number.
Definition: slave.h:199
ec_slave_port_desc_t
EtherCAT slave port descriptor.
Definition: ecrt.h:444
void ec_slave_request_state(ec_slave_t *, ec_slave_state_t)
Request a slave state and resets the error flag.
Definition: slave.c:308
uint16_t configured_tx_mailbox_offset
Configured send mailbox offset.
Definition: slave.h:192
int ec_slave_analyze_sii_data(ec_slave_t *)
Analyzes SII data.
Definition: slave.c:323
ec_slave_port_t ports[EC_MAX_PORTS]
Ports.
Definition: slave.h:180
ec_slave_state_t current_state
Current application state.
Definition: slave.h:185
ec_sync_t * ec_slave_get_sync(ec_slave_t *, uint8_t)
Get the sync manager given an index.
Definition: slave.c:815
ec_slave_port_link_t link
Port link status.
Definition: slave.h:113
uint32_t serial_number
Serial number.
Definition: slave.h:131
const ec_pdo_t * ec_slave_find_pdo(const ec_slave_t *, uint16_t)
Finds a mapped PDO.
Definition: slave.c:950
ec_sii_coe_details_t coe_details
CoE detail flags.
Definition: slave.h:153
char * order
Order number.
Definition: slave.h:150
Finite state machine of an EtherCAT slave.
Definition: fsm_slave.h:52
ec_fsm_slave_t fsm
Slave state machine.
Definition: slave.h:229
struct list_head reg_requests
Register access requests.
Definition: slave.h:224
CANopen SDO.
Definition: sdo.h:41
int16_t current_on_ebus
Power consumption in mA.
Definition: slave.h:155
uint16_t boot_tx_mailbox_size
Bootstrap transmit mailbox size.
Definition: slave.h:135
EtherCAT SII/Eeprom memory contents.
uint16_t station_address
Configured station address.
Definition: slave.h:177
unsigned int sync_count
Number of sync managers.
Definition: slave.h:159
struct list_head sdo_dictionary
SDO dictionary list.
Definition: slave.h:219
uint16_t std_rx_mailbox_size
Standard receive mailbox size.
Definition: slave.h:137
uint8_t base_type
Slave type.
Definition: slave.h:197
const ec_sdo_t * ec_slave_get_sdo_const(const ec_slave_t *, uint16_t)
Get an SDO from the dictionary.
Definition: slave.c:887
Global definitions and macros.
uint16_t std_tx_mailbox_offset
Standard transmit mailbox address.
Definition: slave.h:138
uint16_t boot_tx_mailbox_offset
Bootstrap tx mailbox address.
Definition: slave.h:134
void ec_slave_init(ec_slave_t *, ec_master_t *, ec_device_index_t, uint16_t, uint16_t)
Slave constructor.
Definition: slave.c:65
EtherCAT slave.
Definition: slave.h:169
uint16_t ec_slave_sdo_count(const ec_slave_t *)
Get the number of SDOs in the dictionary.
Definition: slave.c:931
struct list_head sdo_requests
SDO access requests.
Definition: slave.h:223
struct list_head soe_requests
SoE requests.
Definition: slave.h:226
Slave information interface CANopen over EtherCAT details flags.
Definition: globals.h:160
ec_slave_config_t * config
Current configuration.
Definition: slave.h:183
Slave information interface memory page.
Definition: sii_page.h:47
PDO description.
Definition: pdo.h:41
uint8_t sdo_dictionary_fetched
Dictionary has been fetched.
Definition: slave.h:220
uint16_t mailbox_protocols
Supported mailbox protocols.
Definition: slave.h:140
ec_slave_dc_range_t base_dc_range
DC range.
Definition: slave.h:204
Sync manager.
Definition: sync.h:39
uint16_t std_rx_mailbox_offset
Standard receive mailbox address.
Definition: slave.h:136
uint8_t base_fmmu_bit_operation
FMMU bit operation is supported.
Definition: slave.h:202
uint32_t transmission_delay
DC system time transmission delay (offset from reference clock).
Definition: slave.h:208
ec_device_index_t
Master devices.
Definition: globals.h:203
void ec_slave_calc_port_delays(ec_slave_t *)
Calculates the port transmission delays.
Definition: slave.c:1147
uint16_t alias
Configured station alias.
Definition: slave.h:127
uint8_t base_fmmu_count
Number of supported FMMUs.
Definition: slave.h:200
uint16_t configured_rx_mailbox_offset
Configured receive mailbox offset.
Definition: slave.h:188
void ec_slave_clear_sync_managers(ec_slave_t *)
Clear the sync manager array.
Definition: slave.c:267
ec_slave_dc_range_t
EtherCAT slave distributed clocks range.
Definition: globals.h:178
ec_slave_port_desc_t desc
Port descriptors.
Definition: slave.h:112
unsigned int string_count
Number of SII strings.
Definition: slave.h:144
ec_master_t * master
Master owning the slave.
Definition: slave.h:171
uint8_t has_dc_system_time
The slave supports the DC system time register.
Definition: slave.h:205
char ** strings
Strings in SII categories.
Definition: slave.h:143
ec_slave_state_t
State of an EtherCAT slave.
Definition: globals.h:127
void ec_slave_clear(ec_slave_t *)
Slave destructor.
Definition: slave.c:174
EtherCAT datagram structure.
void ec_slave_calc_transmission_delays_rec(ec_slave_t *, uint32_t *)
Recursively calculates transmission delays.
Definition: slave.c:1193
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:833
uint8_t base_revision
Revision.
Definition: slave.h:198
uint16_t effective_alias
Effective alias address.
Definition: slave.h:178
struct list_head foe_requests
FoE requests.
Definition: slave.h:225
uint16_t boot_rx_mailbox_size
Bootstrap receive mailbox size.
Definition: slave.h:133
#define EC_MAX_PORTS
Maximum number of slave ports.
Definition: ecrt.h:294
EtherCAT slave request state machine.
ec_slave_t * next_slave
Connected slaves.
Definition: slave.h:114
ec_sii_page_t sii_page
The SII contents, either fetched or taken from the cache.
Definition: slave.h:212
uint32_t receive_time
Port receive times for delay measurement.
Definition: slave.h:115
EtherCAT sync manager.
Slave port.
Definition: slave.h:111
char * image
Image name.
Definition: slave.h:149
unsigned long jiffies_preop
Time, the slave went to PREOP.
Definition: slave.h:221
uint16_t configured_rx_mailbox_size
Configured receive mailbox size.
Definition: slave.h:190
uint8_t base_dc_supported
Distributed clocks are supported.
Definition: slave.h:203
Slave information interface data.
Definition: slave.h:125
char * group
Group name.
Definition: slave.h:148
void ec_slave_attach_pdo_names(ec_slave_t *)
Attach PDO names.
Definition: slave.c:1006
uint8_t base_sync_count
Number of supported sync managers.
Definition: slave.h:201
EtherCAT slave configuration.
Definition: slave_config.h:111
ec_device_index_t device_index
Index of device the slave responds on.
Definition: slave.h:172
uint32_t product_code
Vendor-specific product code.
Definition: slave.h:129
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:909
unsigned int error_flag
Stop processing after an error.
Definition: slave.h:186
ec_sync_t * syncs
SYNC MANAGER categories.
Definition: slave.h:158
uint16_t std_tx_mailbox_size
Standard transmit mailbox size.
Definition: slave.h:139
EtherCAT master.
Definition: master.h:187
ec_slave_state_t requested_state
Requested application state.
Definition: slave.h:184
struct list_head eoe_requests
EoE set IP parameter requests.
Definition: slave.h:227
EtherCAT CANopen SDO structure.
char * name
Slave name.
Definition: slave.h:151
uint32_t vendor_id
Vendor ID.
Definition: slave.h:128
uint32_t delay_to_next_dc
Delay to next slave with DC support behind this port [ns].
Definition: slave.h:117
unsigned int force_config
Force (re-)configuration.
Definition: slave.h:187
unsigned int has_general
General category present.
Definition: slave.h:147
ec_sdo_t * ec_slave_get_sdo(ec_slave_t *, uint16_t)
Get an SDO from the dictionary.
Definition: slave.c:861
unsigned int sii_parallel_words
How many SII words the slave can read at once.
Definition: slave.h:214
EtherCAT Process data object structure.