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 
190 /*****************************************************************************/
191 
196 #define EC_END ~0U
197 
200 #define EC_MAX_SYNC_MANAGERS 16
201 
206 #define EC_MAX_STRING_LENGTH 64
207 
209 #define EC_MAX_PORTS 4
210 
219 #define EC_TIMEVAL2NANO(TV) \
220  (((TV).tv_sec - 946684800ULL) * 1000000000ULL + (TV).tv_usec * 1000ULL)
221 
226 #define EC_COE_EMERGENCY_MSG_SIZE 8
227 
228 /******************************************************************************
229  * Data types
230  *****************************************************************************/
231 
232 struct ec_master;
233 typedef struct ec_master ec_master_t;
235 struct ec_slave_config;
238 struct ec_domain;
239 typedef struct ec_domain ec_domain_t;
241 struct ec_sdo_request;
244 struct ec_voe_handler;
247 struct ec_reg_request;
250 /*****************************************************************************/
251 
258 typedef struct {
259  unsigned int slaves_responding;
261  unsigned int al_states : 4;
270  unsigned int link_up : 1;
273 
274 /*****************************************************************************/
275 
282 typedef struct {
283  unsigned int slaves_responding;
285  unsigned int al_states : 4;
294  unsigned int link_up : 1;
297 
298 /*****************************************************************************/
299 
306 typedef struct {
307  unsigned int online : 1;
308  unsigned int operational : 1;
310  unsigned int al_state : 4;
319 
320 /*****************************************************************************/
321 
328 typedef struct {
329  unsigned int slave_count;
330  unsigned int link_up : 1;
331  uint8_t scan_busy;
332  uint64_t app_time;
334 
335 /*****************************************************************************/
336 
339 typedef enum {
345 
346 /*****************************************************************************/
347 
350 typedef struct {
351  uint8_t link_up;
352  uint8_t loop_closed;
353  uint8_t signal_detected;
355 
356 /*****************************************************************************/
357 
364 typedef struct {
365  uint16_t position;
366  uint32_t vendor_id;
367  uint32_t product_code;
368  uint32_t revision_number;
369  uint32_t serial_number;
370  uint16_t alias;
371  int16_t current_on_ebus;
372  struct {
375  uint32_t receive_time;
377  uint16_t next_slave;
379  uint32_t delay_to_next_dc;
380  } ports[EC_MAX_PORTS];
381  uint8_t al_state;
382  uint8_t error_flag;
383  uint8_t sync_count;
384  uint16_t sdo_count;
385  char name[EC_MAX_STRING_LENGTH];
387 
388 /*****************************************************************************/
389 
394 typedef enum {
399 } ec_wc_state_t;
400 
401 /*****************************************************************************/
402 
407 typedef struct {
408  unsigned int working_counter;
410  unsigned int redundancy_active;
412 
413 /*****************************************************************************/
414 
417 typedef enum {
423 
424 /*****************************************************************************/
425 
430 typedef enum {
435 
436 /*****************************************************************************/
437 
444 typedef struct {
445  uint16_t index;
446  uint8_t subindex;
447  uint8_t bit_length;
449 
450 /*****************************************************************************/
451 
458 typedef struct {
459  uint16_t index;
460  unsigned int n_entries;
467 } ec_pdo_info_t;
468 
469 /*****************************************************************************/
470 
477 typedef struct {
478  uint8_t index;
482  unsigned int n_pdos;
487 
488 /*****************************************************************************/
489 
495 typedef struct {
496  uint16_t alias;
497  uint16_t position;
498  uint32_t vendor_id;
499  uint32_t product_code;
500  uint16_t index;
501  uint8_t subindex;
502  unsigned int *offset;
504  unsigned int *bit_position;
509 
510 /*****************************************************************************/
511 
517 typedef enum {
523 
524 /*****************************************************************************/
525 
528 typedef enum {
533 } ec_al_state_t;
534 
535 /******************************************************************************
536  * Global functions
537  *****************************************************************************/
538 
539 #ifdef __cplusplus
540 extern "C" {
541 #endif
542 
547 unsigned int ecrt_version_magic(void);
548 
565  unsigned int master_index
566  );
567 
568 #ifndef __KERNEL__
569 
581 ec_master_t *ecrt_open_master(
582  unsigned int master_index
583  );
584 
585 #endif // #ifndef __KERNEL__
586 
598  ec_master_t *master
599  );
600 
601 /******************************************************************************
602  * Master methods
603  *****************************************************************************/
604 
605 #ifndef __KERNEL__
606 
614 int ecrt_master_reserve(
615  ec_master_t *master
616  );
617 
618 #endif // #ifndef __KERNEL__
619 
620 #ifdef __KERNEL__
621 
640  ec_master_t *master,
641  void (*send_cb)(void *),
642  void (*receive_cb)(void *),
643  void *cb_data
645  );
646 
647 #endif /* __KERNEL__ */
648 
662  ec_master_t *master
663  );
664 
696  ec_master_t *master,
697  uint16_t alias,
698  uint16_t position,
699  uint32_t vendor_id,
700  uint32_t product_code
701  );
702 
712  ec_master_t *master,
713  ec_slave_config_t *sc
715  );
716 
726 int ecrt_master(
727  ec_master_t *master,
728  ec_master_info_t *master_info
730  );
731 
743  ec_master_t *master,
744  uint16_t slave_position,
745  ec_slave_info_t *slave_info
747  );
748 
749 #ifndef __KERNEL__
750 
759 int ecrt_master_get_sync_manager(
760  ec_master_t *master,
761  uint16_t slave_position,
762  uint8_t sync_index,
764  ec_sync_info_t *sync
765  );
766 
776 int ecrt_master_get_pdo(
777  ec_master_t *master,
778  uint16_t slave_position,
779  uint8_t sync_index,
781  uint16_t pos,
782  ec_pdo_info_t *pdo
783  );
784 
792 int ecrt_master_get_pdo_entry(
793  ec_master_t *master,
794  uint16_t slave_position,
795  uint8_t sync_index,
797  uint16_t pdo_pos,
798  uint16_t entry_pos,
799  ec_pdo_entry_info_t *entry
800  );
801 
802 #endif /* #ifndef __KERNEL__ */
803 
814  ec_master_t *master,
815  uint16_t slave_position,
816  uint16_t index,
817  uint8_t subindex,
818  uint8_t *data,
819  size_t data_size,
820  uint32_t *abort_code
821  );
822 
834  ec_master_t *master,
835  uint16_t slave_position,
836  uint16_t index,
837  uint8_t *data,
838  size_t data_size,
839  uint32_t *abort_code
840  );
841 
852  ec_master_t *master,
853  uint16_t slave_position,
854  uint16_t index,
855  uint8_t subindex,
856  uint8_t *target,
857  size_t target_size,
858  size_t *result_size,
859  uint32_t *abort_code
860  );
861 
871  ec_master_t *master,
872  uint16_t slave_position,
873  uint8_t drive_no,
874  uint16_t idn,
875  uint8_t *data,
876  size_t data_size,
877  uint16_t *error_code
879  );
880 
890  ec_master_t *master,
891  uint16_t slave_position,
892  uint8_t drive_no,
893  uint16_t idn,
894  uint8_t *target,
896  size_t target_size,
897  size_t *result_size,
898  uint16_t *error_code
900  );
901 
920  ec_master_t *master
921  );
922 
934  ec_master_t *master
935  );
936 
948  ec_master_t *master,
949  size_t send_interval
950  );
951 
960 void ecrt_master_send(
961  ec_master_t *master
962  );
963 
975  ec_master_t *master
976  );
977 
984  ec_master_t *master
985  );
986 
994 void ecrt_master_state(
995  const ec_master_t *master,
996  ec_master_state_t *state
997  );
998 
1006  const ec_master_t *master,
1007  unsigned int dev_idx,
1009  ec_master_link_state_t *state
1011  );
1012 
1034  ec_master_t *master,
1035  uint64_t app_time
1036  );
1037 
1044  ec_master_t *master
1045  );
1046 
1052  ec_master_t *master
1053  );
1054 
1072  ec_master_t *master,
1073  uint32_t *time
1074  );
1075 
1083  ec_master_t *master
1084  );
1085 
1095  ec_master_t *master
1096  );
1097 
1105 void ecrt_master_reset(
1106  ec_master_t *master
1107  );
1108 
1109 /******************************************************************************
1110  * Slave configuration methods
1111  *****************************************************************************/
1112 
1124  ec_slave_config_t *sc,
1125  uint8_t sync_index,
1127  ec_direction_t direction,
1128  ec_watchdog_mode_t watchdog_mode
1129  );
1130 
1137  ec_slave_config_t *sc,
1138  uint16_t watchdog_divider,
1142  uint16_t watchdog_intervals
1146  );
1147 
1157  ec_slave_config_t *sc,
1158  uint8_t sync_index,
1160  uint16_t index
1161  );
1162 
1175  ec_slave_config_t *sc,
1176  uint8_t sync_index
1178  );
1179 
1189  ec_slave_config_t *sc,
1190  uint16_t pdo_index,
1191  uint16_t entry_index,
1193  uint8_t entry_subindex,
1195  uint8_t entry_bit_length
1196  );
1197 
1209  ec_slave_config_t *sc,
1210  uint16_t pdo_index
1211  );
1212 
1285  ec_slave_config_t *sc,
1286  unsigned int n_syncs,
1288  const ec_sync_info_t syncs[]
1290  );
1291 
1311  ec_slave_config_t *sc,
1312  uint16_t entry_index,
1313  uint8_t entry_subindex,
1314  ec_domain_t *domain,
1315  unsigned int *bit_position
1317  );
1318 
1333  ec_slave_config_t *sc,
1334  uint8_t sync_index,
1335  unsigned int pdo_pos,
1336  unsigned int entry_pos,
1337  ec_domain_t *domain,
1338  unsigned int *bit_position
1340  );
1341 
1357  ec_slave_config_t *sc,
1358  uint16_t assign_activate,
1359  uint32_t sync0_cycle,
1360  int32_t sync0_shift,
1361  uint32_t sync1_cycle,
1362  int32_t sync1_shift
1363  );
1364 
1391  ec_slave_config_t *sc,
1392  uint16_t index,
1393  uint8_t subindex,
1394  const uint8_t *data,
1395  size_t size
1396  );
1397 
1409  ec_slave_config_t *sc,
1410  uint16_t sdo_index,
1411  uint8_t sdo_subindex,
1412  uint8_t value
1413  );
1414 
1426  ec_slave_config_t *sc,
1427  uint16_t sdo_index,
1428  uint8_t sdo_subindex,
1429  uint16_t value
1430  );
1431 
1443  ec_slave_config_t *sc,
1444  uint16_t sdo_index,
1445  uint8_t sdo_subindex,
1446  uint32_t value
1447  );
1448 
1463  ec_slave_config_t *sc,
1464  uint16_t index,
1465  const uint8_t *data,
1466  size_t size
1467  );
1468 
1480  ec_slave_config_t *sc,
1481  size_t elements
1482  );
1483 
1496  ec_slave_config_t *sc,
1497  uint8_t *target
1499  );
1500 
1506  ec_slave_config_t *sc
1507  );
1508 
1518  ec_slave_config_t *sc
1519  );
1520 
1532  ec_slave_config_t *sc,
1533  uint16_t index,
1534  uint8_t subindex,
1535  size_t size
1536  );
1537 
1554  ec_slave_config_t *sc,
1555  size_t size
1556  );
1557 
1573  ec_slave_config_t *sc,
1574  size_t size
1575  );
1576 
1587  const ec_slave_config_t *sc,
1588  ec_slave_config_state_t *state
1589  );
1590 
1614  ec_slave_config_t *sc,
1615  uint8_t drive_no,
1616  uint16_t idn,
1617  ec_al_state_t state,
1619  const uint8_t *data,
1620  size_t size
1621  );
1622 
1623 /******************************************************************************
1624  * Domain methods
1625  *****************************************************************************/
1626 
1639  ec_domain_t *domain,
1640  const ec_pdo_entry_reg_t *pdo_entry_regs
1642  );
1643 
1648 size_t ecrt_domain_size(
1649  const ec_domain_t *domain
1650  );
1651 
1652 #ifdef __KERNEL__
1653 
1667  ec_domain_t *domain,
1668  uint8_t *memory
1670  );
1671 
1672 #endif /* __KERNEL__ */
1673 
1687 uint8_t *ecrt_domain_data(
1688  ec_domain_t *domain
1689  );
1690 
1698 void ecrt_domain_process(
1699  ec_domain_t *domain
1700  );
1701 
1707 void ecrt_domain_queue(
1708  ec_domain_t *domain
1709  );
1710 
1717 void ecrt_domain_state(
1718  const ec_domain_t *domain,
1719  ec_domain_state_t *state
1721  );
1722 
1723 /*****************************************************************************
1724  * SDO request methods.
1725  ****************************************************************************/
1726 
1734  ec_sdo_request_t *req,
1735  uint16_t index,
1736  uint8_t subindex
1737  );
1738 
1748  ec_sdo_request_t *req,
1749  uint32_t timeout
1751  );
1752 
1776 uint8_t *ecrt_sdo_request_data(
1777  ec_sdo_request_t *req
1778  );
1779 
1789  const ec_sdo_request_t *req
1790  );
1791 
1796 #ifdef __KERNEL__
1798  const ec_sdo_request_t *req
1799  );
1800 #else
1802  ec_sdo_request_t *req
1803  );
1804 #endif
1805 
1812  ec_sdo_request_t *req
1813  );
1814 
1825  ec_sdo_request_t *req
1826  );
1827 
1828 /*****************************************************************************
1829  * VoE handler methods.
1830  ****************************************************************************/
1831 
1840  ec_voe_handler_t *voe,
1841  uint32_t vendor_id,
1842  uint16_t vendor_type
1843  );
1844 
1854  const ec_voe_handler_t *voe,
1855  uint32_t *vendor_id,
1856  uint16_t *vendor_type
1857  );
1858 
1879 uint8_t *ecrt_voe_handler_data(
1880  ec_voe_handler_t *voe
1881  );
1882 
1896  const ec_voe_handler_t *voe
1897  );
1898 
1906  ec_voe_handler_t *voe,
1907  size_t size
1908  );
1909 
1925  ec_voe_handler_t *voe
1926  );
1927 
1944  ec_voe_handler_t *voe
1945  );
1946 
1955  ec_voe_handler_t *voe
1956  );
1957 
1958 /*****************************************************************************
1959  * Register request methods.
1960  ****************************************************************************/
1961 
1981 uint8_t *ecrt_reg_request_data(
1982  ec_reg_request_t *req
1983  );
1984 
1989 #ifdef __KERNEL__
1991  const ec_reg_request_t *req
1992  );
1993 #else
1995  ec_reg_request_t *req
1996  );
1997 #endif
1998 
2008  ec_reg_request_t *req,
2009  uint16_t address,
2010  size_t size
2011  );
2012 
2022  ec_reg_request_t *req,
2023  uint16_t address,
2024  size_t size
2025  );
2026 
2027 /*****************************************************************************/
2028 
2029 #ifdef __cplusplus
2030 }
2031 #endif
2032 
2033 /******************************************************************************
2034  * Bitwise read/write macros
2035  *****************************************************************************/
2036 
2042 #define EC_READ_BIT(DATA, POS) ((*((uint8_t *) (DATA)) >> (POS)) & 0x01)
2043 
2050 #define EC_WRITE_BIT(DATA, POS, VAL) \
2051  do { \
2052  if (VAL) *((uint8_t *) (DATA)) |= (1 << (POS)); \
2053  else *((uint8_t *) (DATA)) &= ~(1 << (POS)); \
2054  } while (0)
2055 
2056 /******************************************************************************
2057  * Byte-swapping functions for user space
2058  *****************************************************************************/
2059 
2060 #ifndef __KERNEL__
2061 
2062 #if __BYTE_ORDER == __LITTLE_ENDIAN
2063 
2064 #define le16_to_cpu(x) x
2065 #define le32_to_cpu(x) x
2066 #define le64_to_cpu(x) x
2067 
2068 #define cpu_to_le16(x) x
2069 #define cpu_to_le32(x) x
2070 #define cpu_to_le64(x) x
2071 
2072 #elif __BYTE_ORDER == __BIG_ENDIAN
2073 
2074 #define swap16(x) \
2075  ((uint16_t)( \
2076  (((uint16_t)(x) & 0x00ffU) << 8) | \
2077  (((uint16_t)(x) & 0xff00U) >> 8) ))
2078 #define swap32(x) \
2079  ((uint32_t)( \
2080  (((uint32_t)(x) & 0x000000ffUL) << 24) | \
2081  (((uint32_t)(x) & 0x0000ff00UL) << 8) | \
2082  (((uint32_t)(x) & 0x00ff0000UL) >> 8) | \
2083  (((uint32_t)(x) & 0xff000000UL) >> 24) ))
2084 #define swap64(x) \
2085  ((uint64_t)( \
2086  (((uint64_t)(x) & 0x00000000000000ffULL) << 56) | \
2087  (((uint64_t)(x) & 0x000000000000ff00ULL) << 40) | \
2088  (((uint64_t)(x) & 0x0000000000ff0000ULL) << 24) | \
2089  (((uint64_t)(x) & 0x00000000ff000000ULL) << 8) | \
2090  (((uint64_t)(x) & 0x000000ff00000000ULL) >> 8) | \
2091  (((uint64_t)(x) & 0x0000ff0000000000ULL) >> 24) | \
2092  (((uint64_t)(x) & 0x00ff000000000000ULL) >> 40) | \
2093  (((uint64_t)(x) & 0xff00000000000000ULL) >> 56) ))
2094 
2095 #define le16_to_cpu(x) swap16(x)
2096 #define le32_to_cpu(x) swap32(x)
2097 #define le64_to_cpu(x) swap64(x)
2098 
2099 #define cpu_to_le16(x) swap16(x)
2100 #define cpu_to_le32(x) swap32(x)
2101 #define cpu_to_le64(x) swap64(x)
2102 
2103 #endif
2104 
2105 #define le16_to_cpup(x) le16_to_cpu(*((uint16_t *)(x)))
2106 #define le32_to_cpup(x) le32_to_cpu(*((uint32_t *)(x)))
2107 #define le64_to_cpup(x) le64_to_cpu(*((uint64_t *)(x)))
2108 
2109 #endif /* ifndef __KERNEL__ */
2110 
2111 /******************************************************************************
2112  * Read macros
2113  *****************************************************************************/
2114 
2119 #define EC_READ_U8(DATA) \
2120  ((uint8_t) *((uint8_t *) (DATA)))
2121 
2127 #define EC_READ_S8(DATA) \
2128  ((int8_t) *((uint8_t *) (DATA)))
2129 
2135 #define EC_READ_U16(DATA) \
2136  ((uint16_t) le16_to_cpup((void *) (DATA)))
2137 
2143 #define EC_READ_S16(DATA) \
2144  ((int16_t) le16_to_cpup((void *) (DATA)))
2145 
2151 #define EC_READ_U32(DATA) \
2152  ((uint32_t) le32_to_cpup((void *) (DATA)))
2153 
2159 #define EC_READ_S32(DATA) \
2160  ((int32_t) le32_to_cpup((void *) (DATA)))
2161 
2167 #define EC_READ_U64(DATA) \
2168  ((uint64_t) le64_to_cpup((void *) (DATA)))
2169 
2175 #define EC_READ_S64(DATA) \
2176  ((int64_t) le64_to_cpup((void *) (DATA)))
2177 
2178 /******************************************************************************
2179  * Write macros
2180  *****************************************************************************/
2181 
2187 #define EC_WRITE_U8(DATA, VAL) \
2188  do { \
2189  *((uint8_t *)(DATA)) = ((uint8_t) (VAL)); \
2190  } while (0)
2191 
2197 #define EC_WRITE_S8(DATA, VAL) EC_WRITE_U8(DATA, VAL)
2198 
2204 #define EC_WRITE_U16(DATA, VAL) \
2205  do { \
2206  *((uint16_t *) (DATA)) = cpu_to_le16((uint16_t) (VAL)); \
2207  } while (0)
2208 
2214 #define EC_WRITE_S16(DATA, VAL) EC_WRITE_U16(DATA, VAL)
2215 
2221 #define EC_WRITE_U32(DATA, VAL) \
2222  do { \
2223  *((uint32_t *) (DATA)) = cpu_to_le32((uint32_t) (VAL)); \
2224  } while (0)
2225 
2231 #define EC_WRITE_S32(DATA, VAL) EC_WRITE_U32(DATA, VAL)
2232 
2238 #define EC_WRITE_U64(DATA, VAL) \
2239  do { \
2240  *((uint64_t *) (DATA)) = cpu_to_le64((uint64_t) (VAL)); \
2241  } while (0)
2242 
2248 #define EC_WRITE_S64(DATA, VAL) EC_WRITE_U64(DATA, VAL)
2249 
2250 /*****************************************************************************/
2251 
2254 #endif
unsigned int working_counter
Value of the last working counter.
Definition: ecrt.h:408
size_t ecrt_domain_size(const ec_domain_t *domain)
Returns the current size of the domain'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:369
ec_slave_port_desc_t desc
Physical port type.
Definition: ecrt.h:373
uint8_t subindex
PDO entry subindex.
Definition: ecrt.h:501
Pre-operational.
Definition: ecrt.h:530
uint16_t position
Slave position.
Definition: ecrt.h:497
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:2823
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:383
unsigned int n_entries
Number of PDO entries in entries to map.
Definition: ecrt.h:460
uint8_t bit_length
Size of the PDO entry in bit.
Definition: ecrt.h:447
ec_direction_t dir
Sync manager direction.
Definition: ecrt.h:481
uint8_t error_flag
Error flag for that slave.
Definition: ecrt.h:382
ec_watchdog_mode_t
Watchdog mode for sync manager configuration.
Definition: ecrt.h:430
void ecrt_master_sync_slave_clocks(ec_master_t *master)
Queues the DC clock drift compensation datagram for sending.
Definition: master.c:2805
ec_slave_port_desc_t
EtherCAT slave port descriptor.
Definition: ecrt.h:339
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:878
ec_al_state_t
Application-layer state.
Definition: ecrt.h:528
ec_pdo_info_t * pdos
Array with PDOs to assign.
Definition: ecrt.h:483
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'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:2748
void ecrt_master_application_time(ec_master_t *master, uint64_t app_time)
Sets the application time.
Definition: master.c:2764
unsigned int redundancy_active
Redundant link is in use.
Definition: ecrt.h:410
CANopen SDO request.
Definition: sdo_request.h:48
unsigned int slave_count
Number of slaves in the bus.
Definition: ecrt.h:329
uint16_t index
PDO entry index.
Definition: ecrt.h:500
Operational.
Definition: ecrt.h:532
uint32_t vendor_id
Vendor-ID stored on the slave.
Definition: ecrt.h:366
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:2918
Register request.
Definition: reg_request.h:48
ec_slave_port_link_t link
Port link state.
Definition: ecrt.h:374
Safe-operational.
Definition: ecrt.h:531
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:2711
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:2649
Disable the watchdog.
Definition: ecrt.h:433
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:794
uint32_t delay_to_next_dc
Delay [ns] to next DC slave.
Definition: ecrt.h:379
void ecrt_master_send_ext(ec_master_t *master)
Sends non-application datagrams.
Definition: master.c:2529
Enable the watchdog.
Definition: ecrt.h:432
ec_wc_state_t wc_state
Working counter interpretation.
Definition: ecrt.h:409
PDO configuration information.
Definition: ecrt.h:458
ec_domain_t * ecrt_master_create_domain(ec_master_t *master)
Creates a new process data domain.
Definition: master.c:2278
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:477
ec_wc_state_t
Domain working counter interpretation.
Definition: ecrt.h:394
unsigned int slaves_responding
Sum of responding slaves on all Ethernet devices.
Definition: ecrt.h:259
void ecrt_master_state(const ec_master_t *master, ec_master_state_t *state)
Reads the current master state.
Definition: master.c:2725
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's process data.
Definition: domain.c:434
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
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:859
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:933
Some of the registered process data were exchanged.
Definition: ecrt.h:396
uint32_t revision_number
Revision-Number stored on the slave.
Definition: ecrt.h:368
uint8_t * ecrt_sdo_request_data(ec_sdo_request_t *req)
Access to the SDO request's data.
Definition: sdo_request.c:203
Use the default setting of the sync manager.
Definition: ecrt.h:431
uint16_t alias
Slave alias address.
Definition: ecrt.h:496
Not requested.
Definition: ecrt.h:518
uint16_t index
PDO index.
Definition: ecrt.h:459
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:258
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:963
Slave configuration state.
Definition: ecrt.h:306
Request is being processed.
Definition: ecrt.h:519
uint64_t app_time
Application time.
Definition: ecrt.h:332
ec_watchdog_mode_t watchdog_mode
Watchdog mode.
Definition: ecrt.h:485
unsigned int n_pdos
Number of PDOs in pdos.
Definition: ecrt.h:482
Domain state.
Definition: ecrt.h:407
uint32_t vendor_id
Slave vendor ID.
Definition: ecrt.h:498
unsigned int * bit_position
Pointer to a variable to store a bit position (0-7) within the offset.
Definition: ecrt.h:504
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:2834
Port is an E-Bus.
Definition: ecrt.h:342
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:2615
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:417
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:343
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:948
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:3004
Values read by the master.
Definition: ecrt.h:420
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
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:3247
Port is not configured.
Definition: ecrt.h:341
Port is not implemented.
Definition: ecrt.h:340
Slave information.
Definition: ecrt.h:364
void ecrt_master_sync_monitor_queue(ec_master_t *master)
Queues the DC synchrony monitoring datagram for sending.
Definition: master.c:2815
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:918
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'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:739
uint16_t index
PDO entry index.
Definition: ecrt.h:445
uint8_t al_state
Current state of the slave.
Definition: ecrt.h:381
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:2604
uint8_t scan_busy
true, while the master is scanning the bus
Definition: ecrt.h:331
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:3163
int ecrt_master_activate(ec_master_t *master)
Finishes the configuration phase and prepares for cyclic operation.
Definition: master.c:2288
int16_t current_on_ebus
Used current in mA.
Definition: ecrt.h:371
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:418
#define EC_MAX_PORTS
Maximum number of slave ports.
Definition: ecrt.h:209
Number of directions.
Definition: ecrt.h:421
uint16_t sdo_count
Number of SDOs.
Definition: ecrt.h:384
#define EC_MAX_STRING_LENGTH
Maximum string length.
Definition: ecrt.h:206
uint8_t * ecrt_domain_data(ec_domain_t *domain)
Returns the domain's process data.
Definition: domain.c:451
List record type for PDO entry mass-registration.
Definition: ecrt.h:495
uint16_t next_slave
Ring position of next DC slave on that port.
Definition: ecrt.h:377
No registered process data were exchanged.
Definition: ecrt.h:395
All registered process data were exchanged.
Definition: ecrt.h:398
void ecrt_slave_config_watchdog(ec_slave_config_t *sc, uint16_t watchdog_divider, uint16_t watchdog_intervals)
Configure a slave's watchdog times.
Definition: slave_config.c:551
void ecrt_master_deactivate(ec_master_t *master)
Deactivates the master.
Definition: master.c:2362
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:370
int ecrt_master(ec_master_t *master, ec_master_info_t *master_info)
Obtains master information.
Definition: master.c:2635
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:3087
EtherCAT slave configuration.
Definition: slave_config.h:118
uint32_t product_code
Product-Code stored on the slave.
Definition: ecrt.h:367
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:520
unsigned int * offset
Pointer to a variable to store the PDO entry's (byte-)offset in the process data. ...
Definition: ecrt.h:502
ec_request_state_t
Request state.
Definition: ecrt.h:517
uint8_t * ecrt_reg_request_data(ec_reg_request_t *req)
Access to the register request'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:2776
Master information.
Definition: ecrt.h:328
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:444
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's PDO assignment.
Definition: slave_config.c:593
void ecrt_domain_process(ec_domain_t *domain)
Determines the states of the domain's datagrams.
Definition: domain.c:458
uint8_t index
Sync manager index.
Definition: ecrt.h:478
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:419
Init.
Definition: ecrt.h:529
void ecrt_domain_queue(ec_domain_t *domain)
(Re-)queues all domain datagrams in the master's datagram queue.
Definition: domain.c:648
uint16_t position
Offset of the slave in the ring.
Definition: ecrt.h:365
uint32_t receive_time
Receive time on DC transmission delay measurement.
Definition: ecrt.h:375
uint32_t product_code
Slave product code.
Definition: ecrt.h:499
EtherCAT master.
Definition: master.h:194
Request processing failed.
Definition: ecrt.h:521
void ecrt_master_sync_reference_clock(ec_master_t *master)
Queues the DC reference clock drift compensation datagram for sending.
Definition: master.c:2795
uint8_t subindex
PDO entry subindex.
Definition: ecrt.h:446
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'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:464
void ecrt_master_receive(ec_master_t *master)
Fetches received frames from the hardware and processes the datagrams.
Definition: master.c:2477
void ecrt_master_send(ec_master_t *master)
Sends all datagrams in the queue.
Definition: master.c:2433