IgH EtherCAT Master  1.5.2
ecrt.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 userspace library.
8  *
9  * The IgH EtherCAT master userspace library is free software; you can
10  * redistribute it and/or modify it under the terms of the GNU Lesser General
11  * Public License as published by the Free Software Foundation; version 2.1
12  * of the License.
13  *
14  * The IgH EtherCAT master userspace library is distributed in the hope that
15  * it will be useful, but WITHOUT ANY WARRANTY; without even the implied
16  * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17  * GNU Lesser General Public License for more details.
18  *
19  * You should have received a copy of the GNU Lesser General Public License
20  * along with the IgH EtherCAT master userspace library. If not, see
21  * <http://www.gnu.org/licenses/>.
22  *
23  * ---
24  *
25  * The license mentioned above concerns the source code only. Using the
26  * EtherCAT technology and brand is only permitted in compliance with the
27  * industrial property and similar rights of Beckhoff Automation GmbH.
28  *
29  *****************************************************************************/
30 
118 /*****************************************************************************/
119 
120 #ifndef __ECRT_H__
121 #define __ECRT_H__
122 
123 #ifdef __KERNEL__
124 #include <asm/byteorder.h>
125 #include <linux/types.h>
126 #include <linux/time.h>
127 #else
128 #include <stdlib.h> // for size_t
129 #include <stdint.h>
130 #include <sys/time.h> // for struct timeval
131 #endif
132 
133 /******************************************************************************
134  * Global definitions
135  *****************************************************************************/
136 
139 #define ECRT_VER_MAJOR 1
140 
143 #define ECRT_VER_MINOR 5
144 
147 #define ECRT_VERSION(a, b) (((a) << 8) + (b))
148 
151 #define ECRT_VERSION_MAGIC ECRT_VERSION(ECRT_VER_MAJOR, ECRT_VER_MINOR)
152 
153 /******************************************************************************
154  * Feature flags
155  *****************************************************************************/
156 
162 #define EC_HAVE_REDUNDANCY
163 
168 #define EC_HAVE_EMERGENCY
169 
176 #define EC_HAVE_REG_ACCESS
177 
180 #define EC_HAVE_SELECT_REF_CLOCK
181 
184 #define EC_HAVE_REF_CLOCK_TIME
185 
188 #define EC_HAVE_REG_BY_POS
189 
192 #define EC_HAVE_SYNC_TO
193 
194 /*****************************************************************************/
195 
200 #define EC_END ~0U
201 
204 #define EC_MAX_SYNC_MANAGERS 16
205 
210 #define EC_MAX_STRING_LENGTH 64
211 
213 #define EC_MAX_PORTS 4
214 
223 #define EC_TIMEVAL2NANO(TV) \
224  (((TV).tv_sec - 946684800ULL) * 1000000000ULL + (TV).tv_usec * 1000ULL)
225 
230 #define EC_COE_EMERGENCY_MSG_SIZE 8
231 
232 /******************************************************************************
233  * Data types
234  *****************************************************************************/
235 
236 struct ec_master;
237 typedef struct ec_master ec_master_t;
239 struct ec_slave_config;
242 struct ec_domain;
243 typedef struct ec_domain ec_domain_t;
245 struct ec_sdo_request;
248 struct ec_voe_handler;
251 struct ec_reg_request;
254 /*****************************************************************************/
255 
262 typedef struct {
263  unsigned int slaves_responding;
265  unsigned int al_states : 4;
274  unsigned int link_up : 1;
277 
278 /*****************************************************************************/
279 
286 typedef struct {
287  unsigned int slaves_responding;
289  unsigned int al_states : 4;
298  unsigned int link_up : 1;
301 
302 /*****************************************************************************/
303 
310 typedef struct {
311  unsigned int online : 1;
312  unsigned int operational : 1;
314  unsigned int al_state : 4;
323 
324 /*****************************************************************************/
325 
332 typedef struct {
333  unsigned int slave_count;
334  unsigned int link_up : 1;
335  uint8_t scan_busy;
336  uint64_t app_time;
338 
339 /*****************************************************************************/
340 
343 typedef enum {
349 
350 /*****************************************************************************/
351 
354 typedef struct {
355  uint8_t link_up;
356  uint8_t loop_closed;
357  uint8_t signal_detected;
359 
360 /*****************************************************************************/
361 
368 typedef struct {
369  uint16_t position;
370  uint32_t vendor_id;
371  uint32_t product_code;
372  uint32_t revision_number;
373  uint32_t serial_number;
374  uint16_t alias;
375  int16_t current_on_ebus;
376  struct {
379  uint32_t receive_time;
381  uint16_t next_slave;
383  uint32_t delay_to_next_dc;
384  } ports[EC_MAX_PORTS];
385  uint8_t al_state;
386  uint8_t error_flag;
387  uint8_t sync_count;
388  uint16_t sdo_count;
389  char name[EC_MAX_STRING_LENGTH];
391 
392 /*****************************************************************************/
393 
398 typedef enum {
403 } ec_wc_state_t;
404 
405 /*****************************************************************************/
406 
411 typedef struct {
412  unsigned int working_counter;
414  unsigned int redundancy_active;
416 
417 /*****************************************************************************/
418 
421 typedef enum {
427 
428 /*****************************************************************************/
429 
434 typedef enum {
439 
440 /*****************************************************************************/
441 
448 typedef struct {
449  uint16_t index;
450  uint8_t subindex;
451  uint8_t bit_length;
453 
454 /*****************************************************************************/
455 
462 typedef struct {
463  uint16_t index;
464  unsigned int n_entries;
471 } ec_pdo_info_t;
472 
473 /*****************************************************************************/
474 
481 typedef struct {
482  uint8_t index;
486  unsigned int n_pdos;
491 
492 /*****************************************************************************/
493 
499 typedef struct {
500  uint16_t alias;
501  uint16_t position;
502  uint32_t vendor_id;
503  uint32_t product_code;
504  uint16_t index;
505  uint8_t subindex;
506  unsigned int *offset;
508  unsigned int *bit_position;
513 
514 /*****************************************************************************/
515 
521 typedef enum {
527 
528 /*****************************************************************************/
529 
532 typedef enum {
537 } ec_al_state_t;
538 
539 /******************************************************************************
540  * Global functions
541  *****************************************************************************/
542 
543 #ifdef __cplusplus
544 extern "C" {
545 #endif
546 
551 unsigned int ecrt_version_magic(void);
552 
569  unsigned int master_index
570  );
571 
572 #ifndef __KERNEL__
573 
585 ec_master_t *ecrt_open_master(
586  unsigned int master_index
587  );
588 
589 #endif // #ifndef __KERNEL__
590 
602  ec_master_t *master
603  );
604 
605 /******************************************************************************
606  * Master methods
607  *****************************************************************************/
608 
609 #ifndef __KERNEL__
610 
618 int ecrt_master_reserve(
619  ec_master_t *master
620  );
621 
622 #endif // #ifndef __KERNEL__
623 
624 #ifdef __KERNEL__
625 
644  ec_master_t *master,
645  void (*send_cb)(void *),
646  void (*receive_cb)(void *),
647  void *cb_data
649  );
650 
651 #endif /* __KERNEL__ */
652 
666  ec_master_t *master
667  );
668 
700  ec_master_t *master,
701  uint16_t alias,
702  uint16_t position,
703  uint32_t vendor_id,
704  uint32_t product_code
705  );
706 
716  ec_master_t *master,
717  ec_slave_config_t *sc
719  );
720 
730 int ecrt_master(
731  ec_master_t *master,
732  ec_master_info_t *master_info
734  );
735 
747  ec_master_t *master,
748  uint16_t slave_position,
749  ec_slave_info_t *slave_info
751  );
752 
753 #ifndef __KERNEL__
754 
763 int ecrt_master_get_sync_manager(
764  ec_master_t *master,
765  uint16_t slave_position,
766  uint8_t sync_index,
768  ec_sync_info_t *sync
769  );
770 
780 int ecrt_master_get_pdo(
781  ec_master_t *master,
782  uint16_t slave_position,
783  uint8_t sync_index,
785  uint16_t pos,
786  ec_pdo_info_t *pdo
787  );
788 
796 int ecrt_master_get_pdo_entry(
797  ec_master_t *master,
798  uint16_t slave_position,
799  uint8_t sync_index,
801  uint16_t pdo_pos,
802  uint16_t entry_pos,
803  ec_pdo_entry_info_t *entry
804  );
805 
806 #endif /* #ifndef __KERNEL__ */
807 
818  ec_master_t *master,
819  uint16_t slave_position,
820  uint16_t index,
821  uint8_t subindex,
822  uint8_t *data,
823  size_t data_size,
824  uint32_t *abort_code
825  );
826 
838  ec_master_t *master,
839  uint16_t slave_position,
840  uint16_t index,
841  uint8_t *data,
842  size_t data_size,
843  uint32_t *abort_code
844  );
845 
856  ec_master_t *master,
857  uint16_t slave_position,
858  uint16_t index,
859  uint8_t subindex,
860  uint8_t *target,
861  size_t target_size,
862  size_t *result_size,
863  uint32_t *abort_code
864  );
865 
875  ec_master_t *master,
876  uint16_t slave_position,
877  uint8_t drive_no,
878  uint16_t idn,
879  uint8_t *data,
880  size_t data_size,
881  uint16_t *error_code
883  );
884 
894  ec_master_t *master,
895  uint16_t slave_position,
896  uint8_t drive_no,
897  uint16_t idn,
898  uint8_t *target,
900  size_t target_size,
901  size_t *result_size,
902  uint16_t *error_code
904  );
905 
924  ec_master_t *master
925  );
926 
938  ec_master_t *master
939  );
940 
952  ec_master_t *master,
953  size_t send_interval
954  );
955 
964 void ecrt_master_send(
965  ec_master_t *master
966  );
967 
979  ec_master_t *master
980  );
981 
988  ec_master_t *master
989  );
990 
998 void ecrt_master_state(
999  const ec_master_t *master,
1000  ec_master_state_t *state
1001  );
1002 
1010  const ec_master_t *master,
1011  unsigned int dev_idx,
1013  ec_master_link_state_t *state
1015  );
1016 
1038  ec_master_t *master,
1039  uint64_t app_time
1040  );
1041 
1048  ec_master_t *master
1049  );
1050 
1057  ec_master_t *master,
1058  uint64_t sync_time
1059  );
1060 
1066  ec_master_t *master
1067  );
1068 
1086  ec_master_t *master,
1087  uint32_t *time
1088  );
1089 
1097  ec_master_t *master
1098  );
1099 
1109  ec_master_t *master
1110  );
1111 
1119 void ecrt_master_reset(
1120  ec_master_t *master
1121  );
1122 
1123 /******************************************************************************
1124  * Slave configuration methods
1125  *****************************************************************************/
1126 
1138  ec_slave_config_t *sc,
1139  uint8_t sync_index,
1141  ec_direction_t direction,
1142  ec_watchdog_mode_t watchdog_mode
1143  );
1144 
1151  ec_slave_config_t *sc,
1152  uint16_t watchdog_divider,
1156  uint16_t watchdog_intervals
1160  );
1161 
1171  ec_slave_config_t *sc,
1172  uint8_t sync_index,
1174  uint16_t index
1175  );
1176 
1189  ec_slave_config_t *sc,
1190  uint8_t sync_index
1192  );
1193 
1203  ec_slave_config_t *sc,
1204  uint16_t pdo_index,
1205  uint16_t entry_index,
1207  uint8_t entry_subindex,
1209  uint8_t entry_bit_length
1210  );
1211 
1223  ec_slave_config_t *sc,
1224  uint16_t pdo_index
1225  );
1226 
1299  ec_slave_config_t *sc,
1300  unsigned int n_syncs,
1302  const ec_sync_info_t syncs[]
1304  );
1305 
1325  ec_slave_config_t *sc,
1326  uint16_t entry_index,
1327  uint8_t entry_subindex,
1328  ec_domain_t *domain,
1329  unsigned int *bit_position
1331  );
1332 
1347  ec_slave_config_t *sc,
1348  uint8_t sync_index,
1349  unsigned int pdo_pos,
1350  unsigned int entry_pos,
1351  ec_domain_t *domain,
1352  unsigned int *bit_position
1354  );
1355 
1371  ec_slave_config_t *sc,
1372  uint16_t assign_activate,
1373  uint32_t sync0_cycle,
1374  int32_t sync0_shift,
1375  uint32_t sync1_cycle,
1376  int32_t sync1_shift
1377  );
1378 
1405  ec_slave_config_t *sc,
1406  uint16_t index,
1407  uint8_t subindex,
1408  const uint8_t *data,
1409  size_t size
1410  );
1411 
1423  ec_slave_config_t *sc,
1424  uint16_t sdo_index,
1425  uint8_t sdo_subindex,
1426  uint8_t value
1427  );
1428 
1440  ec_slave_config_t *sc,
1441  uint16_t sdo_index,
1442  uint8_t sdo_subindex,
1443  uint16_t value
1444  );
1445 
1457  ec_slave_config_t *sc,
1458  uint16_t sdo_index,
1459  uint8_t sdo_subindex,
1460  uint32_t value
1461  );
1462 
1477  ec_slave_config_t *sc,
1478  uint16_t index,
1479  const uint8_t *data,
1480  size_t size
1481  );
1482 
1494  ec_slave_config_t *sc,
1495  size_t elements
1496  );
1497 
1510  ec_slave_config_t *sc,
1511  uint8_t *target
1513  );
1514 
1520  ec_slave_config_t *sc
1521  );
1522 
1532  ec_slave_config_t *sc
1533  );
1534 
1546  ec_slave_config_t *sc,
1547  uint16_t index,
1548  uint8_t subindex,
1549  size_t size
1550  );
1551 
1568  ec_slave_config_t *sc,
1569  size_t size
1570  );
1571 
1587  ec_slave_config_t *sc,
1588  size_t size
1589  );
1590 
1601  const ec_slave_config_t *sc,
1602  ec_slave_config_state_t *state
1603  );
1604 
1628  ec_slave_config_t *sc,
1629  uint8_t drive_no,
1630  uint16_t idn,
1631  ec_al_state_t state,
1633  const uint8_t *data,
1634  size_t size
1635  );
1636 
1637 /******************************************************************************
1638  * Domain methods
1639  *****************************************************************************/
1640 
1653  ec_domain_t *domain,
1654  const ec_pdo_entry_reg_t *pdo_entry_regs
1656  );
1657 
1662 size_t ecrt_domain_size(
1663  const ec_domain_t *domain
1664  );
1665 
1666 #ifdef __KERNEL__
1667 
1681  ec_domain_t *domain,
1682  uint8_t *memory
1684  );
1685 
1686 #endif /* __KERNEL__ */
1687 
1701 uint8_t *ecrt_domain_data(
1702  ec_domain_t *domain
1703  );
1704 
1712 void ecrt_domain_process(
1713  ec_domain_t *domain
1714  );
1715 
1721 void ecrt_domain_queue(
1722  ec_domain_t *domain
1723  );
1724 
1731 void ecrt_domain_state(
1732  const ec_domain_t *domain,
1733  ec_domain_state_t *state
1735  );
1736 
1737 /*****************************************************************************
1738  * SDO request methods.
1739  ****************************************************************************/
1740 
1748  ec_sdo_request_t *req,
1749  uint16_t index,
1750  uint8_t subindex
1751  );
1752 
1762  ec_sdo_request_t *req,
1763  uint32_t timeout
1765  );
1766 
1790 uint8_t *ecrt_sdo_request_data(
1791  ec_sdo_request_t *req
1792  );
1793 
1803  const ec_sdo_request_t *req
1804  );
1805 
1810 #ifdef __KERNEL__
1812  const ec_sdo_request_t *req
1813  );
1814 #else
1816  ec_sdo_request_t *req
1817  );
1818 #endif
1819 
1826  ec_sdo_request_t *req
1827  );
1828 
1839  ec_sdo_request_t *req
1840  );
1841 
1842 /*****************************************************************************
1843  * VoE handler methods.
1844  ****************************************************************************/
1845 
1854  ec_voe_handler_t *voe,
1855  uint32_t vendor_id,
1856  uint16_t vendor_type
1857  );
1858 
1868  const ec_voe_handler_t *voe,
1869  uint32_t *vendor_id,
1870  uint16_t *vendor_type
1871  );
1872 
1893 uint8_t *ecrt_voe_handler_data(
1894  ec_voe_handler_t *voe
1895  );
1896 
1910  const ec_voe_handler_t *voe
1911  );
1912 
1920  ec_voe_handler_t *voe,
1921  size_t size
1922  );
1923 
1939  ec_voe_handler_t *voe
1940  );
1941 
1958  ec_voe_handler_t *voe
1959  );
1960 
1969  ec_voe_handler_t *voe
1970  );
1971 
1972 /*****************************************************************************
1973  * Register request methods.
1974  ****************************************************************************/
1975 
1995 uint8_t *ecrt_reg_request_data(
1996  ec_reg_request_t *req
1997  );
1998 
2003 #ifdef __KERNEL__
2005  const ec_reg_request_t *req
2006  );
2007 #else
2009  ec_reg_request_t *req
2010  );
2011 #endif
2012 
2022  ec_reg_request_t *req,
2023  uint16_t address,
2024  size_t size
2025  );
2026 
2036  ec_reg_request_t *req,
2037  uint16_t address,
2038  size_t size
2039  );
2040 
2041 /******************************************************************************
2042  * Bitwise read/write macros
2043  *****************************************************************************/
2044 
2050 #define EC_READ_BIT(DATA, POS) ((*((uint8_t *) (DATA)) >> (POS)) & 0x01)
2051 
2058 #define EC_WRITE_BIT(DATA, POS, VAL) \
2059  do { \
2060  if (VAL) *((uint8_t *) (DATA)) |= (1 << (POS)); \
2061  else *((uint8_t *) (DATA)) &= ~(1 << (POS)); \
2062  } while (0)
2063 
2064 /******************************************************************************
2065  * Byte-swapping functions for user space
2066  *****************************************************************************/
2067 
2068 #ifndef __KERNEL__
2069 
2070 #if __BYTE_ORDER == __LITTLE_ENDIAN
2071 
2072 #define le16_to_cpu(x) x
2073 #define le32_to_cpu(x) x
2074 #define le64_to_cpu(x) x
2075 
2076 #define cpu_to_le16(x) x
2077 #define cpu_to_le32(x) x
2078 #define cpu_to_le64(x) x
2079 
2080 #elif __BYTE_ORDER == __BIG_ENDIAN
2081 
2082 #define swap16(x) \
2083  ((uint16_t)( \
2084  (((uint16_t)(x) & 0x00ffU) << 8) | \
2085  (((uint16_t)(x) & 0xff00U) >> 8) ))
2086 #define swap32(x) \
2087  ((uint32_t)( \
2088  (((uint32_t)(x) & 0x000000ffUL) << 24) | \
2089  (((uint32_t)(x) & 0x0000ff00UL) << 8) | \
2090  (((uint32_t)(x) & 0x00ff0000UL) >> 8) | \
2091  (((uint32_t)(x) & 0xff000000UL) >> 24) ))
2092 #define swap64(x) \
2093  ((uint64_t)( \
2094  (((uint64_t)(x) & 0x00000000000000ffULL) << 56) | \
2095  (((uint64_t)(x) & 0x000000000000ff00ULL) << 40) | \
2096  (((uint64_t)(x) & 0x0000000000ff0000ULL) << 24) | \
2097  (((uint64_t)(x) & 0x00000000ff000000ULL) << 8) | \
2098  (((uint64_t)(x) & 0x000000ff00000000ULL) >> 8) | \
2099  (((uint64_t)(x) & 0x0000ff0000000000ULL) >> 24) | \
2100  (((uint64_t)(x) & 0x00ff000000000000ULL) >> 40) | \
2101  (((uint64_t)(x) & 0xff00000000000000ULL) >> 56) ))
2102 
2103 #define le16_to_cpu(x) swap16(x)
2104 #define le32_to_cpu(x) swap32(x)
2105 #define le64_to_cpu(x) swap64(x)
2106 
2107 #define cpu_to_le16(x) swap16(x)
2108 #define cpu_to_le32(x) swap32(x)
2109 #define cpu_to_le64(x) swap64(x)
2110 
2111 #endif
2112 
2113 #define le16_to_cpup(x) le16_to_cpu(*((uint16_t *)(x)))
2114 #define le32_to_cpup(x) le32_to_cpu(*((uint32_t *)(x)))
2115 #define le64_to_cpup(x) le64_to_cpu(*((uint64_t *)(x)))
2116 
2117 #endif /* ifndef __KERNEL__ */
2118 
2119 /******************************************************************************
2120  * Read macros
2121  *****************************************************************************/
2122 
2127 #define EC_READ_U8(DATA) \
2128  ((uint8_t) *((uint8_t *) (DATA)))
2129 
2135 #define EC_READ_S8(DATA) \
2136  ((int8_t) *((uint8_t *) (DATA)))
2137 
2143 #define EC_READ_U16(DATA) \
2144  ((uint16_t) le16_to_cpup((void *) (DATA)))
2145 
2151 #define EC_READ_S16(DATA) \
2152  ((int16_t) le16_to_cpup((void *) (DATA)))
2153 
2159 #define EC_READ_U32(DATA) \
2160  ((uint32_t) le32_to_cpup((void *) (DATA)))
2161 
2167 #define EC_READ_S32(DATA) \
2168  ((int32_t) le32_to_cpup((void *) (DATA)))
2169 
2175 #define EC_READ_U64(DATA) \
2176  ((uint64_t) le64_to_cpup((void *) (DATA)))
2177 
2183 #define EC_READ_S64(DATA) \
2184  ((int64_t) le64_to_cpup((void *) (DATA)))
2185 
2186 /******************************************************************************
2187  * Floating-point read functions and macros (userspace only)
2188  *****************************************************************************/
2189 
2190 #ifndef __KERNEL__
2191 
2197 float ecrt_read_real(const void *data);
2198 
2204 #define EC_READ_REAL(DATA) ecrt_read_real(DATA)
2205 
2211 double ecrt_read_lreal(const void *data);
2212 
2218 #define EC_READ_LREAL(DATA) ecrt_read_lreal(DATA)
2219 
2220 #endif // ifndef __KERNEL__
2221 
2222 /******************************************************************************
2223  * Write macros
2224  *****************************************************************************/
2225 
2231 #define EC_WRITE_U8(DATA, VAL) \
2232  do { \
2233  *((uint8_t *)(DATA)) = ((uint8_t) (VAL)); \
2234  } while (0)
2235 
2241 #define EC_WRITE_S8(DATA, VAL) EC_WRITE_U8(DATA, VAL)
2242 
2248 #define EC_WRITE_U16(DATA, VAL) \
2249  do { \
2250  *((uint16_t *) (DATA)) = cpu_to_le16((uint16_t) (VAL)); \
2251  } while (0)
2252 
2258 #define EC_WRITE_S16(DATA, VAL) EC_WRITE_U16(DATA, VAL)
2259 
2265 #define EC_WRITE_U32(DATA, VAL) \
2266  do { \
2267  *((uint32_t *) (DATA)) = cpu_to_le32((uint32_t) (VAL)); \
2268  } while (0)
2269 
2275 #define EC_WRITE_S32(DATA, VAL) EC_WRITE_U32(DATA, VAL)
2276 
2282 #define EC_WRITE_U64(DATA, VAL) \
2283  do { \
2284  *((uint64_t *) (DATA)) = cpu_to_le64((uint64_t) (VAL)); \
2285  } while (0)
2286 
2292 #define EC_WRITE_S64(DATA, VAL) EC_WRITE_U64(DATA, VAL)
2293 
2294 /******************************************************************************
2295  * Floating-point write functions and macros (userspace only)
2296  *****************************************************************************/
2297 
2298 #ifndef __KERNEL__
2299 
2305 void ecrt_write_real(void *data, float value);
2306 
2312 #define EC_WRITE_REAL(DATA, VAL) ecrt_write_real(DATA, VAL)
2313 
2319 void ecrt_write_lreal(void *data, double value);
2320 
2326 #define EC_WRITE_LREAL(DATA, VAL) ecrt_write_lreal(DATA, VAL)
2327 
2328 #endif // ifndef __KERNEL__
2329 
2330 /*****************************************************************************/
2331 
2332 #ifdef __cplusplus
2333 }
2334 #endif
2335 
2336 /*****************************************************************************/
2337 
2340 #endif
unsigned int working_counter
Value of the last working counter.
Definition: ecrt.h:412
size_t ecrt_domain_size(const ec_domain_t *domain)
Returns the current size of the domain&#39;s process data.
Definition: domain.c:427
void ecrt_reg_request_write(ec_reg_request_t *req, uint16_t address, size_t size)
Schedule an register write operation.
Definition: reg_request.c:100
uint32_t serial_number
Serial-Number stored on the slave.
Definition: ecrt.h:373
ec_slave_port_desc_t desc
Physical port type.
Definition: ecrt.h:377
uint8_t subindex
PDO entry subindex.
Definition: ecrt.h:505
Pre-operational.
Definition: ecrt.h:534
uint16_t position
Slave position.
Definition: ecrt.h:501
int ecrt_slave_config_emerg_size(ec_slave_config_t *sc, size_t elements)
Set the size of the CoE emergency ring buffer.
uint32_t ecrt_master_sync_monitor_process(ec_master_t *master)
Processes the DC synchrony monitoring datagram.
Definition: master.c:2853
void ecrt_voe_handler_received_header(const ec_voe_handler_t *voe, uint32_t *vendor_id, uint16_t *vendor_type)
Reads the header data of a received VoE message.
Definition: voe_handler.c:136
void ecrt_reg_request_read(ec_reg_request_t *req, uint16_t address, size_t size)
Schedule a register read operation.
Definition: reg_request.c:111
size_t ecrt_voe_handler_data_size(const ec_voe_handler_t *voe)
Returns the current data size.
Definition: voe_handler.c:156
void ecrt_release_master(ec_master_t *master)
Releases a requested EtherCAT master.
Definition: module.c:614
uint8_t sync_count
Number of sync managers.
Definition: ecrt.h:387
unsigned int n_entries
Number of PDO entries in entries to map.
Definition: ecrt.h:464
uint8_t bit_length
Size of the PDO entry in bit.
Definition: ecrt.h:451
ec_direction_t dir
Sync manager direction.
Definition: ecrt.h:485
uint8_t error_flag
Error flag for that slave.
Definition: ecrt.h:386
ec_watchdog_mode_t
Watchdog mode for sync manager configuration.
Definition: ecrt.h:434
void ecrt_master_sync_slave_clocks(ec_master_t *master)
Queues the DC clock drift compensation datagram for sending.
Definition: master.c:2835
ec_slave_port_desc_t
EtherCAT slave port descriptor.
Definition: ecrt.h:343
int ecrt_slave_config_sdo(ec_slave_config_t *sc, uint16_t index, uint8_t subindex, const uint8_t *data, size_t size)
Add an SDO configuration.
Definition: slave_config.c:879
ec_al_state_t
Application-layer state.
Definition: ecrt.h:532
ec_pdo_info_t * pdos
Array with PDOs to assign.
Definition: ecrt.h:487
int ecrt_slave_config_pdo_assign_add(ec_slave_config_t *sc, uint8_t sync_index, uint16_t index)
Add a PDO to a sync manager&#39;s PDO assignment.
Definition: slave_config.c:563
int ecrt_master_link_state(const ec_master_t *master, unsigned int dev_idx, ec_master_link_state_t *state)
Reads the current state of a redundant link.
Definition: master.c:2766
void ecrt_master_application_time(ec_master_t *master, uint64_t app_time)
Sets the application time.
Definition: master.c:2782
unsigned int redundancy_active
Redundant link is in use.
Definition: ecrt.h:414
CANopen SDO request.
Definition: sdo_request.h:48
unsigned int slave_count
Number of slaves in the bus.
Definition: ecrt.h:333
uint16_t index
PDO entry index.
Definition: ecrt.h:504
Operational.
Definition: ecrt.h:536
uint32_t vendor_id
Vendor-ID stored on the slave.
Definition: ecrt.h:370
int ecrt_master_sdo_download_complete(ec_master_t *master, uint16_t slave_position, uint16_t index, uint8_t *data, size_t data_size, uint32_t *abort_code)
Executes an SDO download request to write data to a slave via complete access.
Definition: master.c:2948
Register request.
Definition: reg_request.h:48
ec_slave_port_link_t link
Port link state.
Definition: ecrt.h:378
Safe-operational.
Definition: ecrt.h:535
int ecrt_domain_reg_pdo_entry_list(ec_domain_t *domain, const ec_pdo_entry_reg_t *pdo_entry_regs)
Registers a bunch of PDO entries for a domain.
Definition: domain.c:398
void ecrt_master_callbacks(ec_master_t *master, void(*send_cb)(void *), void(*receive_cb)(void *), void *cb_data)
Sets the locking callbacks.
Definition: master.c:2729
int ecrt_master_get_slave(ec_master_t *master, uint16_t slave_position, ec_slave_info_t *slave_info)
Obtains slave information.
Definition: master.c:2667
Disable the watchdog.
Definition: ecrt.h:437
int ecrt_slave_config_reg_pdo_entry_pos(ec_slave_config_t *sc, uint8_t sync_index, unsigned int pdo_pos, unsigned int entry_pos, ec_domain_t *domain, unsigned int *bit_position)
Registers a PDO entry using its position.
Definition: slave_config.c:795
uint32_t delay_to_next_dc
Delay [ns] to next DC slave.
Definition: ecrt.h:383
void ecrt_master_send_ext(ec_master_t *master)
Sends non-application datagrams.
Definition: master.c:2547
Enable the watchdog.
Definition: ecrt.h:436
ec_wc_state_t wc_state
Working counter interpretation.
Definition: ecrt.h:413
PDO configuration information.
Definition: ecrt.h:462
ec_domain_t * ecrt_master_create_domain(ec_master_t *master)
Creates a new process data domain.
Definition: master.c:2297
void ecrt_voe_handler_read(ec_voe_handler_t *voe)
Start a VoE read operation.
Definition: voe_handler.c:163
Sync manager configuration information.
Definition: ecrt.h:481
ec_wc_state_t
Domain working counter interpretation.
Definition: ecrt.h:398
unsigned int slaves_responding
Sum of responding slaves on all Ethernet devices.
Definition: ecrt.h:263
void ecrt_master_state(const ec_master_t *master, ec_master_state_t *state)
Reads the current master state.
Definition: master.c:2743
void ecrt_voe_handler_read_nosync(ec_voe_handler_t *voe)
Start a VoE read operation without querying the sync manager status.
Definition: voe_handler.c:172
int ecrt_slave_config_emerg_clear(ec_slave_config_t *sc)
Clears CoE emergency ring buffer and the overrun counter.
void ecrt_domain_external_memory(ec_domain_t *domain, uint8_t *memory)
Provide external memory to store the domain&#39;s process data.
Definition: domain.c:434
void ecrt_master_sync_reference_clock_to(ec_master_t *master, uint64_t sync_time)
Queues the DC reference clock drift compensation datagram for sending.
Definition: master.c:2822
void ecrt_sdo_request_timeout(ec_sdo_request_t *req, uint32_t timeout)
Set the timeout for an SDO request.
Definition: sdo_request.c:196
unsigned int link_up
true, if the network link is up.
Definition: ecrt.h:334
ec_voe_handler_t * ecrt_slave_config_create_voe_handler(ec_slave_config_t *sc, size_t size)
Create an VoE handler to exchange vendor-specific data during realtime operation. ...
void ecrt_slave_config_dc(ec_slave_config_t *sc, uint16_t assign_activate, uint32_t sync0_cycle, int32_t sync0_shift, uint32_t sync1_cycle, int32_t sync1_shift)
Configure distributed clocks.
Definition: slave_config.c:860
int ecrt_slave_config_sdo16(ec_slave_config_t *sc, uint16_t sdo_index, uint8_t sdo_subindex, uint16_t value)
Add a configuration value for a 16-bit SDO.
Definition: slave_config.c:934
Some of the registered process data were exchanged.
Definition: ecrt.h:400
uint32_t revision_number
Revision-Number stored on the slave.
Definition: ecrt.h:372
uint8_t * ecrt_sdo_request_data(ec_sdo_request_t *req)
Access to the SDO request&#39;s data.
Definition: sdo_request.c:203
Use the default setting of the sync manager.
Definition: ecrt.h:435
uint16_t alias
Slave alias address.
Definition: ecrt.h:500
Not requested.
Definition: ecrt.h:522
uint16_t index
PDO index.
Definition: ecrt.h:463
void ecrt_sdo_request_read(ec_sdo_request_t *req)
Schedule an SDO read operation.
Definition: sdo_request.c:224
ec_master_t * ecrt_request_master(unsigned int master_index)
Requests an EtherCAT master for realtime operation.
Definition: module.c:606
Master state.
Definition: ecrt.h:262
int ecrt_slave_config_complete_sdo(ec_slave_config_t *sc, uint16_t index, const uint8_t *data, size_t size)
Add configuration data for a complete SDO.
Definition: slave_config.c:964
Slave configuration state.
Definition: ecrt.h:310
Request is being processed.
Definition: ecrt.h:523
uint64_t app_time
Application time.
Definition: ecrt.h:336
ec_watchdog_mode_t watchdog_mode
Watchdog mode.
Definition: ecrt.h:489
unsigned int n_pdos
Number of PDOs in pdos.
Definition: ecrt.h:486
Domain state.
Definition: ecrt.h:411
uint32_t vendor_id
Slave vendor ID.
Definition: ecrt.h:502
unsigned int al_state
The application-layer state of the slave.
Definition: ecrt.h:314
unsigned int * bit_position
Pointer to a variable to store a bit position (0-7) within the offset.
Definition: ecrt.h:508
int ecrt_master_sdo_download(ec_master_t *master, uint16_t slave_position, uint16_t index, uint8_t subindex, uint8_t *data, size_t data_size, uint32_t *abort_code)
Executes an SDO download request to write data to a slave.
Definition: master.c:2864
Port is an E-Bus.
Definition: ecrt.h:346
unsigned int operational
The slave was brought into OP state using the specified configuration.
Definition: ecrt.h:312
int ecrt_master_select_reference_clock(ec_master_t *master, ec_slave_config_t *sc)
Selects the reference clock for distributed clocks.
Definition: master.c:2633
ec_reg_request_t * ecrt_slave_config_create_reg_request(ec_slave_config_t *sc, size_t size)
Create a register request to exchange EtherCAT register contents during realtime operation.
ec_direction_t
Direction type for PDO assignment functions.
Definition: ecrt.h:421
int ecrt_master_set_send_interval(ec_master_t *master, size_t send_interval)
Set interval between calls to ecrt_master_send().
unsigned int ecrt_version_magic(void)
Returns the version magic of the realtime interface.
Definition: module.c:640
Port is a MII.
Definition: ecrt.h:347
Vendor specific over EtherCAT handler.
Definition: voe_handler.h:49
ec_request_state_t ecrt_voe_handler_execute(ec_voe_handler_t *voe)
Execute the handler.
Definition: voe_handler.c:191
int ecrt_slave_config_sdo32(ec_slave_config_t *sc, uint16_t sdo_index, uint8_t sdo_subindex, uint32_t value)
Add a configuration value for a 32-bit SDO.
Definition: slave_config.c:949
int ecrt_master_sdo_upload(ec_master_t *master, uint16_t slave_position, uint16_t index, uint8_t subindex, uint8_t *target, size_t target_size, size_t *result_size, uint32_t *abort_code)
Executes an SDO upload request to read data from a slave.
Definition: master.c:3034
Values read by the master.
Definition: ecrt.h:424
ec_request_state_t ecrt_sdo_request_state(const ec_sdo_request_t *req)
Get the current state of the SDO request.
Definition: sdo_request.c:217
unsigned int online
The slave is online.
Definition: ecrt.h:311
int ecrt_slave_config_idn(ec_slave_config_t *sc, uint8_t drive_no, uint16_t idn, ec_al_state_t state, const uint8_t *data, size_t size)
Add an SoE IDN configuration.
void ecrt_master_reset(ec_master_t *master)
Retry configuring slaves.
Definition: master.c:3277
Port is not configured.
Definition: ecrt.h:345
Port is not implemented.
Definition: ecrt.h:344
Slave information.
Definition: ecrt.h:368
void ecrt_master_sync_monitor_queue(ec_master_t *master)
Queues the DC synchrony monitoring datagram for sending.
Definition: master.c:2845
void ecrt_voe_handler_write(ec_voe_handler_t *voe, size_t size)
Start a VoE write operation.
Definition: voe_handler.c:181
int ecrt_slave_config_sdo8(ec_slave_config_t *sc, uint16_t sdo_index, uint8_t sdo_subindex, uint8_t value)
Add a configuration value for an 8-bit SDO.
Definition: slave_config.c:919
int ecrt_slave_config_pdo_mapping_add(ec_slave_config_t *sc, uint16_t pdo_index, uint16_t entry_index, uint8_t entry_subindex, uint8_t entry_bit_length)
Add a PDO entry to the given PDO&#39;s mapping.
Definition: slave_config.c:611
int ecrt_slave_config_reg_pdo_entry(ec_slave_config_t *sc, uint16_t entry_index, uint8_t entry_subindex, ec_domain_t *domain, unsigned int *bit_position)
Registers a PDO entry for process data exchange in a domain.
Definition: slave_config.c:740
uint16_t index
PDO entry index.
Definition: ecrt.h:449
uint8_t al_state
Current state of the slave.
Definition: ecrt.h:385
ec_slave_config_t * ecrt_master_slave_config(ec_master_t *master, uint16_t alias, uint16_t position, uint32_t vendor_id, uint32_t product_code)
Obtains a slave configuration.
Definition: master.c:2622
uint8_t scan_busy
true, while the master is scanning the bus
Definition: ecrt.h:335
int ecrt_slave_config_pdos(ec_slave_config_t *sc, unsigned int n_syncs, const ec_sync_info_t syncs[])
Specify a complete PDO configuration.
Definition: slave_config.c:673
int ecrt_master_read_idn(ec_master_t *master, uint16_t slave_position, uint8_t drive_no, uint16_t idn, uint8_t *target, size_t target_size, size_t *result_size, uint16_t *error_code)
Executes an SoE read request.
Definition: master.c:3193
int ecrt_master_activate(ec_master_t *master)
Finishes the configuration phase and prepares for cyclic operation.
Definition: master.c:2307
int16_t current_on_ebus
Used current in mA.
Definition: ecrt.h:375
size_t ecrt_sdo_request_data_size(const ec_sdo_request_t *req)
Returns the current SDO data size.
Definition: sdo_request.c:210
void ecrt_slave_config_pdo_mapping_clear(ec_slave_config_t *sc, uint16_t pdo_index)
Clear the mapping of a given PDO.
Definition: slave_config.c:648
Invalid direction.
Definition: ecrt.h:422
#define EC_MAX_PORTS
Maximum number of slave ports.
Definition: ecrt.h:213
Number of directions.
Definition: ecrt.h:425
uint16_t sdo_count
Number of SDOs.
Definition: ecrt.h:388
#define EC_MAX_STRING_LENGTH
Maximum string length.
Definition: ecrt.h:210
uint8_t * ecrt_domain_data(ec_domain_t *domain)
Returns the domain&#39;s process data.
Definition: domain.c:451
List record type for PDO entry mass-registration.
Definition: ecrt.h:499
unsigned int link_up
true, if at least one Ethernet link is up.
Definition: ecrt.h:274
uint16_t next_slave
Ring position of next DC slave on that port.
Definition: ecrt.h:381
No registered process data were exchanged.
Definition: ecrt.h:399
All registered process data were exchanged.
Definition: ecrt.h:402
void ecrt_slave_config_watchdog(ec_slave_config_t *sc, uint16_t watchdog_divider, uint16_t watchdog_intervals)
Configure a slave&#39;s watchdog times.
Definition: slave_config.c:551
void ecrt_master_deactivate(ec_master_t *master)
Deactivates the master.
Definition: master.c:2381
unsigned int al_states
Application-layer states of all slaves.
Definition: ecrt.h:265
int ecrt_slave_config_sync_manager(ec_slave_config_t *sc, uint8_t sync_index, ec_direction_t direction, ec_watchdog_mode_t watchdog_mode)
Configure a sync manager.
Definition: slave_config.c:524
uint16_t alias
The slaves alias if not equal to 0.
Definition: ecrt.h:374
int ecrt_master(ec_master_t *master, ec_master_info_t *master_info)
Obtains master information.
Definition: master.c:2653
int ecrt_master_write_idn(ec_master_t *master, uint16_t slave_position, uint8_t drive_no, uint16_t idn, uint8_t *data, size_t data_size, uint16_t *error_code)
Executes an SoE write request.
Definition: master.c:3117
EtherCAT slave configuration.
Definition: slave_config.h:118
uint32_t product_code
Product-Code stored on the slave.
Definition: ecrt.h:371
void ecrt_voe_handler_send_header(ec_voe_handler_t *voe, uint32_t vendor_id, uint16_t vendor_type)
Sets the VoE header for future send operations.
Definition: voe_handler.c:127
Request was processed successfully.
Definition: ecrt.h:524
unsigned int * offset
Pointer to a variable to store the PDO entry&#39;s (byte-)offset in the process data. ...
Definition: ecrt.h:506
ec_request_state_t
Request state.
Definition: ecrt.h:521
uint8_t * ecrt_reg_request_data(ec_reg_request_t *req)
Access to the register request&#39;s data.
Definition: reg_request.c:86
int ecrt_master_reference_clock_time(ec_master_t *master, uint32_t *time)
Get the lower 32 bit of the reference clock system time.
Definition: master.c:2793
Master information.
Definition: ecrt.h:332
void ecrt_domain_state(const ec_domain_t *domain, ec_domain_state_t *state)
Reads the state of a domain.
Definition: domain.c:678
PDO entry configuration information.
Definition: ecrt.h:448
int ecrt_slave_config_emerg_pop(ec_slave_config_t *sc, uint8_t *target)
Read and remove one record from the CoE emergency ring buffer.
void ecrt_slave_config_pdo_assign_clear(ec_slave_config_t *sc, uint8_t sync_index)
Clear a sync manager&#39;s PDO assignment.
Definition: slave_config.c:593
void ecrt_domain_process(ec_domain_t *domain)
Determines the states of the domain&#39;s datagrams.
Definition: domain.c:458
uint8_t index
Sync manager index.
Definition: ecrt.h:482
void ecrt_slave_config_state(const ec_slave_config_t *sc, ec_slave_config_state_t *state)
Outputs the state of the slave configuration.
Values written by the master.
Definition: ecrt.h:423
Init.
Definition: ecrt.h:533
void ecrt_domain_queue(ec_domain_t *domain)
(Re-)queues all domain datagrams in the master&#39;s datagram queue.
Definition: domain.c:648
uint16_t position
Offset of the slave in the ring.
Definition: ecrt.h:369
uint32_t receive_time
Receive time on DC transmission delay measurement.
Definition: ecrt.h:379
uint32_t product_code
Slave product code.
Definition: ecrt.h:503
EtherCAT master.
Definition: master.h:194
Request processing failed.
Definition: ecrt.h:525
void ecrt_master_sync_reference_clock(ec_master_t *master)
Queues the DC reference clock drift compensation datagram for sending.
Definition: master.c:2812
uint8_t subindex
PDO entry subindex.
Definition: ecrt.h:450
ec_sdo_request_t * ecrt_slave_config_create_sdo_request(ec_slave_config_t *sc, uint16_t index, uint8_t subindex, size_t size)
Create an SDO request to exchange SDOs during realtime operation.
uint8_t * ecrt_voe_handler_data(ec_voe_handler_t *voe)
Access to the VoE handler&#39;s data.
Definition: voe_handler.c:149
void ecrt_sdo_request_write(ec_sdo_request_t *req)
Schedule an SDO write operation.
Definition: sdo_request.c:235
int ecrt_slave_config_emerg_overruns(ec_slave_config_t *sc)
Read the number of CoE emergency overruns.
ec_request_state_t ecrt_reg_request_state(const ec_reg_request_t *req)
Get the current state of the register request.
Definition: reg_request.c:93
EtherCAT domain.
Definition: domain.h:54
void ecrt_sdo_request_index(ec_sdo_request_t *req, uint16_t index, uint8_t subindex)
Set the SDO index and subindex.
Definition: sdo_request.c:187
ec_pdo_entry_info_t * entries
Array of PDO entries to map.
Definition: ecrt.h:468
void ecrt_master_receive(ec_master_t *master)
Fetches received frames from the hardware and processes the datagrams.
Definition: master.c:2495
void ecrt_master_send(ec_master_t *master)
Sends all datagrams in the queue.
Definition: master.c:2451