libethercat - an embeddable realtime EtherCAT-master library
Communicate with EtherCAT slaves attached to a Network interface.
Loading...
Searching...
No Matches
common.h
Go to the documentation of this file.
1
13/*
14 * This file is part of libethercat.
15 *
16 * libethercat is free software; you can redistribute it and/or
17 * modify it under the terms of the GNU Lesser General Public
18 * License as published by the Free Software Foundation; either
19 * version 3 of the License, or (at your option) any later version.
20 *
21 * libethercat is distributed in the hope that it will be useful,
22 * but WITHOUT ANY WARRANTY; without even the implied warranty of
23 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
24 * Lesser General Public License for more details.
25 *
26 * You should have received a copy of the GNU Lesser General Public
27 * License along with libethercat (LICENSE.LGPL-V3); if not, write
28 * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
29 * Floor, Boston, MA 02110-1301, USA.
30 *
31 * Please note that the use of the EtherCAT technology, the EtherCAT
32 * brand name and the EtherCAT logo is only permitted if the property
33 * rights of Beckhoff Automation GmbH are observed. For further
34 * information please contact Beckhoff Automation GmbH & Co. KG,
35 * Hülshorstweg 20, D-33415 Verl, Germany (www.beckhoff.com) or the
36 * EtherCAT Technology Group, Ostendstraße 196, D-90482 Nuremberg,
37 * Germany (ETG, www.ethercat.org).
38 *
39 */
40
41#ifndef LIBETHERCAT_COMMON_H
42#define LIBETHERCAT_COMMON_H
43
44#ifdef HAVE_CONFIG_H
45#include <libethercat/config.h>
46#endif
47
48#include <libosal/types.h>
49
50#include <stdint.h>
51
52#ifdef LIBETHERCAT_MAX_SLAVES
54#define LEC_MAX_SLAVES ( (osal_size_t)LIBETHERCAT_MAX_SLAVES )
55#else
57#define LEC_MAX_SLAVES ( (osal_size_t) 256u)
58#endif
59
60#ifdef LIBETHERCAT_MAX_GROUPS
62#define LEC_MAX_GROUPS ( (osal_size_t)LIBETHERCAT_MAX_GROUPS )
63#else
65#define LEC_MAX_GROUPS ( (osal_size_t) 8u)
66#endif
67
68#ifdef LIBETHERCAT_MAX_PDLEN
70#define LEC_MAX_PDLEN ( (osal_size_t)LIBETHERCAT_MAX_PDLEN )
71#else
73#define LEC_MAX_PDLEN ( (osal_size_t)(2u * 1518u))
74#endif
75
76#ifdef LIBETHERCAT_MAX_MBX_ENTRIES
78#define LEC_MAX_MBX_ENTRIES ( (osal_size_t)LIBETHERCAT_MAX_MBX_ENTRIES )
79#else
81#define LEC_MAX_MBX_ENTRIES ( (osal_size_t) 16u)
82#endif
83
84#ifdef LIBETHERCAT_MAX_INIT_CMD_DATA
86#define LEC_MAX_INIT_CMD_DATA ( (osal_size_t)LIBETHERCAT_MAX_INIT_CMD_DATA )
87#else
89#define LEC_MAX_INIT_CMD_DATA ( (osal_size_t) 2048u)
90#endif
91
92#ifdef LIBETHERCAT_MAX_SLAVE_FMMU
94#define LEC_MAX_SLAVE_FMMU ( (osal_size_t)LIBETHERCAT_MAX_SLAVE_FMMU )
95#else
97#define LEC_MAX_SLAVE_FMMU ( (osal_size_t) 8u)
98#endif
99
100#ifdef LIBETHERCAT_MAX_SLAVE_SM
102#define LEC_MAX_SLAVE_SM ( (osal_size_t)LIBETHERCAT_MAX_SLAVE_SM )
103#else
105#define LEC_MAX_SLAVE_SM ( (osal_size_t) 8u)
106#endif
107
108#ifdef LIBETHERCAT_MAX_DATAGRAMS
110#define LEC_MAX_DATAGRAMS ( (osal_size_t)LIBETHERCAT_MAX_DATAGRAMS )
111#else
113#define LEC_MAX_DATAGRAMS ( (osal_size_t) 100u)
114#endif
115
116#ifdef LIBETHERCAT_MAX_EEPROM_CAT_SM
118#define LEC_MAX_EEPROM_CAT_SM ( (osal_size_t)LIBETHERCAT_MAX_EEPROM_CAT_SM )
119#else
121#define LEC_MAX_EEPROM_CAT_SM ( (osal_size_t)LEC_MAX_SLAVE_SM)
122#endif
123
124#ifdef LIBETHERCAT_MAX_EEPROM_CAT_FMMU
126#define LEC_MAX_EEPROM_CAT_FMMU ( (osal_size_t)LIBETHERCAT_MAX_EEPROM_CAT_FMMU )
127#else
129#define LEC_MAX_EEPROM_CAT_FMMU ( (osal_size_t)LEC_MAX_SLAVE_FMMU)
130#endif
131
132#ifdef LIBETHERCAT_MAX_EEPROM_CAT_PDO
134#define LEC_MAX_EEPROM_CAT_PDO ( (osal_size_t)LIBETHERCAT_MAX_EEPROM_CAT_PDO )
135#else
137#define LEC_MAX_EEPROM_CAT_PDO ( (osal_size_t) 128u)
138#endif
139
140#ifdef LIBETHERCAT_MAX_EEPROM_CAT_PDO_ENTRIES
142#define LEC_MAX_EEPROM_CAT_PDO_ENTRIES ( (osal_size_t)LIBETHERCAT_MAX_EEPROM_CAT_PDO_ENTRIES )
143#else
145#define LEC_MAX_EEPROM_CAT_PDO_ENTRIES ( (osal_size_t) 32u)
146#endif
147
148#ifdef LIBETHERCAT_MAX_EEPROM_CAT_STRINGS
150#define LEC_MAX_EEPROM_CAT_STRINGS ( (osal_size_t)LIBETHERCAT_MAX_EEPROM_CAT_STRINGS )
151#else
153#define LEC_MAX_EEPROM_CAT_STRINGS ( (osal_size_t) 128u)
154#endif
155
156#ifdef LIBETHERCAT_MAX_EEPROM_CAT_DC
158#define LEC_MAX_EEPROM_CAT_DC ( (osal_size_t)LIBETHERCAT_MAX_EEPROM_CAT_DC )
159#else
161#define LEC_MAX_EEPROM_CAT_DC ( (osal_size_t) 8u)
162#endif
163
164#ifdef LIBETHERCAT_MAX_STRING_LEN
166#define LEC_MAX_STRING_LEN ( (osal_size_t)LIBETHERCAT_MAX_STRING_LEN )
167#else
169#define LEC_MAX_STRING_LEN ( (osal_size_t) 128u)
170#endif
171
172#ifdef LIBETHERCAT_MAX_DATA
174#define LEC_MAX_DATA ( (osal_size_t)LIBETHERCAT_MAX_DATA )
175#else
177#define LEC_MAX_DATA ( (osal_size_t) 4096u)
178#endif
179
180#ifdef LIBETHERCAT_MAX_DS402_SUBDEVS
182#define LEC_MAX_DS402_SUBDEVS ( (osal_size_t)LIBETHERCAT_MAX_DS402_SUBDEVS )
183#else
185#define LEC_MAX_DS402_SUBDEVS ( (osal_size_t) 4u)
186#endif
187
188#ifdef LIBETHERCAT_MAX_COE_EMERGENCIES
190#define LEC_MAX_COE_EMERGENCIES ( (osal_size_t)LIBETHERCAT_MAX_COE_EMERGENCIES )
191#else
193#define LEC_MAX_COE_EMERGENCIES ( (osal_size_t) 10u)
194#endif
195
196#ifdef LIBETHERCAT_MAX_COE_EMERGENCY_MSG_LEN
198#define LEC_MAX_COE_EMERGENCY_MSG_LEN ( (osal_size_t)LIBETHERCAT_MAX_COE_EMERGENCY_MSG_LEN )
199#else
201#define LEC_MAX_COE_EMERGENCY_MSG_LEN ( (osal_size_t) 32u)
202#endif
203
204#define PACKED __attribute__((__packed__))
205
206#ifndef min
207#define min(a, b) ((a) < (b) ? (a) : (b))
208#endif
209
210typedef osal_uint8_t ec_data_t[LEC_MAX_DATA]; /* variants for easy data access */
211
213typedef struct ec_pd {
214 osal_uint8_t *pd;
215 osal_size_t len;
217
218typedef osal_uint16_t ec_state_t;
219#define EC_STATE_UNKNOWN ((osal_uint16_t)(0x0000u))
220#define EC_STATE_INIT ((osal_uint16_t)(0x0001u))
221#define EC_STATE_PREOP ((osal_uint16_t)(0x0002u))
222#define EC_STATE_BOOT ((osal_uint16_t)(0x0003u))
223#define EC_STATE_SAFEOP ((osal_uint16_t)(0x0004u))
224#define EC_STATE_OP ((osal_uint16_t)(0x0008u))
225#define EC_STATE_MASK ((osal_uint16_t)(0x000Fu))
226#define EC_STATE_ERROR ((osal_uint16_t)(0x0010u))
227#define EC_STATE_RESET ((osal_uint16_t)(0x0010u))
228
229#endif // LIBETHERCAT_COMMON_H
230
#define LEC_MAX_DATA
Maximum data length.
Definition common.h:177
struct ec_pd ec_pd_t
process data structure
process data structure
Definition common.h:213
osal_size_t len
process data length
Definition common.h:215
osal_uint8_t * pd
pointer to process data
Definition common.h:214