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 
123 /*****************************************************************************/
124 
125 #ifndef __ECRT_H__
126 #define __ECRT_H__
127 
128 #ifdef __KERNEL__
129 #include <asm/byteorder.h>
130 #include <linux/types.h>
131 #include <linux/time.h>
132 #else
133 #include <stdlib.h> // for size_t
134 #include <stdint.h>
135 #include <sys/time.h> // for struct timeval
136 #endif
137 
138 /******************************************************************************
139  * Global definitions
140  *****************************************************************************/
141 
144 #define ECRT_VER_MAJOR 1
145 
148 #define ECRT_VER_MINOR 5
149 
152 #define ECRT_VERSION(a, b) (((a) << 8) + (b))
153 
156 #define ECRT_VERSION_MAGIC ECRT_VERSION(ECRT_VER_MAJOR, ECRT_VER_MINOR)
157 
158 /******************************************************************************
159  * Feature flags
160  *****************************************************************************/
161 
167 #define EC_HAVE_REDUNDANCY
168 
173 #define EC_HAVE_EMERGENCY
174 
181 #define EC_HAVE_REG_ACCESS
182 
185 #define EC_HAVE_SELECT_REF_CLOCK
186 
189 #define EC_HAVE_REF_CLOCK_TIME
190 
193 #define EC_HAVE_REG_BY_POS
194 
197 #define EC_HAVE_SYNC_TO
198 
201 #define EC_HAVE_FLAGS
202 
203 /*****************************************************************************/
204 
209 #define EC_END ~0U
210 
213 #define EC_MAX_SYNC_MANAGERS 16
214 
219 #define EC_MAX_STRING_LENGTH 64
220 
222 #define EC_MAX_PORTS 4
223 
232 #define EC_TIMEVAL2NANO(TV) \
233  (((TV).tv_sec - 946684800ULL) * 1000000000ULL + (TV).tv_usec * 1000ULL)
234 
239 #define EC_COE_EMERGENCY_MSG_SIZE 8
240 
241 /******************************************************************************
242  * Data types
243  *****************************************************************************/
244 
245 struct ec_master;
246 typedef struct ec_master ec_master_t;
248 struct ec_slave_config;
251 struct ec_domain;
252 typedef struct ec_domain ec_domain_t;
254 struct ec_sdo_request;
257 struct ec_voe_handler;
260 struct ec_reg_request;
263 /*****************************************************************************/
264 
271 typedef struct {
272  unsigned int slaves_responding;
274  unsigned int al_states : 4;
283  unsigned int link_up : 1;
286 
287 /*****************************************************************************/
288 
295 typedef struct {
296  unsigned int slaves_responding;
298  unsigned int al_states : 4;
307  unsigned int link_up : 1;
310 
311 /*****************************************************************************/
312 
319 typedef struct {
320  unsigned int online : 1;
321  unsigned int operational : 1;
323  unsigned int al_state : 4;
332 
333 /*****************************************************************************/
334 
341 typedef struct {
342  unsigned int slave_count;
343  unsigned int link_up : 1;
344  uint8_t scan_busy;
345  uint64_t app_time;
347 
348 /*****************************************************************************/
349 
352 typedef enum {
358 
359 /*****************************************************************************/
360 
363 typedef struct {
364  uint8_t link_up;
365  uint8_t loop_closed;
366  uint8_t signal_detected;
368 
369 /*****************************************************************************/
370 
377 typedef struct {
378  uint16_t position;
379  uint32_t vendor_id;
380  uint32_t product_code;
381  uint32_t revision_number;
382  uint32_t serial_number;
383  uint16_t alias;
384  int16_t current_on_ebus;
385  struct {
388  uint32_t receive_time;
390  uint16_t next_slave;
392  uint32_t delay_to_next_dc;
393  } ports[EC_MAX_PORTS];
394  uint8_t al_state;
395  uint8_t error_flag;
396  uint8_t sync_count;
397  uint16_t sdo_count;
398  char name[EC_MAX_STRING_LENGTH];
400 
401 /*****************************************************************************/
402 
407 typedef enum {
412 } ec_wc_state_t;
413 
414 /*****************************************************************************/
415 
420 typedef struct {
421  unsigned int working_counter;
423  unsigned int redundancy_active;
425 
426 /*****************************************************************************/
427 
430 typedef enum {
436 
437 /*****************************************************************************/
438 
443 typedef enum {
448 
449 /*****************************************************************************/
450 
457 typedef struct {
458  uint16_t index;
459  uint8_t subindex;
460  uint8_t bit_length;
462 
463 /*****************************************************************************/
464 
471 typedef struct {
472  uint16_t index;
473  unsigned int n_entries;
480 } ec_pdo_info_t;
481 
482 /*****************************************************************************/
483 
490 typedef struct {
491  uint8_t index;
495  unsigned int n_pdos;
500 
501 /*****************************************************************************/
502 
508 typedef struct {
509  uint16_t alias;
510  uint16_t position;
511  uint32_t vendor_id;
512  uint32_t product_code;
513  uint16_t index;
514  uint8_t subindex;
515  unsigned int *offset;
517  unsigned int *bit_position;
522 
523 /*****************************************************************************/
524 
530 typedef enum {
536 
537 /*****************************************************************************/
538 
541 typedef enum {
546 } ec_al_state_t;
547 
548 /******************************************************************************
549  * Global functions
550  *****************************************************************************/
551 
552 #ifdef __cplusplus
553 extern "C" {
554 #endif
555 
560 unsigned int ecrt_version_magic(void);
561 
578  unsigned int master_index
579  );
580 
581 #ifndef __KERNEL__
582 
594 ec_master_t *ecrt_open_master(
595  unsigned int master_index
596  );
597 
598 #endif // #ifndef __KERNEL__
599 
611  ec_master_t *master
612  );
613 
614 /******************************************************************************
615  * Master methods
616  *****************************************************************************/
617 
618 #ifndef __KERNEL__
619 
627 int ecrt_master_reserve(
628  ec_master_t *master
629  );
630 
631 #endif // #ifndef __KERNEL__
632 
633 #ifdef __KERNEL__
634 
653  ec_master_t *master,
654  void (*send_cb)(void *),
655  void (*receive_cb)(void *),
656  void *cb_data
658  );
659 
660 #endif /* __KERNEL__ */
661 
675  ec_master_t *master
676  );
677 
709  ec_master_t *master,
710  uint16_t alias,
711  uint16_t position,
712  uint32_t vendor_id,
713  uint32_t product_code
714  );
715 
725  ec_master_t *master,
726  ec_slave_config_t *sc
728  );
729 
739 int ecrt_master(
740  ec_master_t *master,
741  ec_master_info_t *master_info
743  );
744 
756  ec_master_t *master,
757  uint16_t slave_position,
758  ec_slave_info_t *slave_info
760  );
761 
762 #ifndef __KERNEL__
763 
772 int ecrt_master_get_sync_manager(
773  ec_master_t *master,
774  uint16_t slave_position,
775  uint8_t sync_index,
777  ec_sync_info_t *sync
778  );
779 
789 int ecrt_master_get_pdo(
790  ec_master_t *master,
791  uint16_t slave_position,
792  uint8_t sync_index,
794  uint16_t pos,
795  ec_pdo_info_t *pdo
796  );
797 
805 int ecrt_master_get_pdo_entry(
806  ec_master_t *master,
807  uint16_t slave_position,
808  uint8_t sync_index,
810  uint16_t pdo_pos,
811  uint16_t entry_pos,
812  ec_pdo_entry_info_t *entry
813  );
814 
815 #endif /* #ifndef __KERNEL__ */
816 
827  ec_master_t *master,
828  uint16_t slave_position,
829  uint16_t index,
830  uint8_t subindex,
831  uint8_t *data,
832  size_t data_size,
833  uint32_t *abort_code
834  );
835 
847  ec_master_t *master,
848  uint16_t slave_position,
849  uint16_t index,
850  uint8_t *data,
851  size_t data_size,
852  uint32_t *abort_code
853  );
854 
865  ec_master_t *master,
866  uint16_t slave_position,
867  uint16_t index,
868  uint8_t subindex,
869  uint8_t *target,
870  size_t target_size,
871  size_t *result_size,
872  uint32_t *abort_code
873  );
874 
884  ec_master_t *master,
885  uint16_t slave_position,
886  uint8_t drive_no,
887  uint16_t idn,
888  uint8_t *data,
889  size_t data_size,
890  uint16_t *error_code
892  );
893 
903  ec_master_t *master,
904  uint16_t slave_position,
905  uint8_t drive_no,
906  uint16_t idn,
907  uint8_t *target,
909  size_t target_size,
910  size_t *result_size,
911  uint16_t *error_code
913  );
914 
933  ec_master_t *master
934  );
935 
947  ec_master_t *master
948  );
949 
961  ec_master_t *master,
962  size_t send_interval
963  );
964 
973 void ecrt_master_send(
974  ec_master_t *master
975  );
976 
988  ec_master_t *master
989  );
990 
997  ec_master_t *master
998  );
999 
1007 void ecrt_master_state(
1008  const ec_master_t *master,
1009  ec_master_state_t *state
1010  );
1011 
1019  const ec_master_t *master,
1020  unsigned int dev_idx,
1022  ec_master_link_state_t *state
1024  );
1025 
1047  ec_master_t *master,
1048  uint64_t app_time
1049  );
1050 
1057  ec_master_t *master
1058  );
1059 
1066  ec_master_t *master,
1067  uint64_t sync_time
1068  );
1069 
1075  ec_master_t *master
1076  );
1077 
1095  ec_master_t *master,
1096  uint32_t *time
1097  );
1098 
1106  ec_master_t *master
1107  );
1108 
1118  ec_master_t *master
1119  );
1120 
1128 void ecrt_master_reset(
1129  ec_master_t *master
1130  );
1131 
1132 /******************************************************************************
1133  * Slave configuration methods
1134  *****************************************************************************/
1135 
1147  ec_slave_config_t *sc,
1148  uint8_t sync_index,
1150  ec_direction_t direction,
1151  ec_watchdog_mode_t watchdog_mode
1152  );
1153 
1160  ec_slave_config_t *sc,
1161  uint16_t watchdog_divider,
1166  uint16_t watchdog_intervals
1170  );
1171 
1181  ec_slave_config_t *sc,
1182  uint8_t sync_index,
1184  uint16_t index
1185  );
1186 
1199  ec_slave_config_t *sc,
1200  uint8_t sync_index
1202  );
1203 
1213  ec_slave_config_t *sc,
1214  uint16_t pdo_index,
1215  uint16_t entry_index,
1217  uint8_t entry_subindex,
1219  uint8_t entry_bit_length
1220  );
1221 
1233  ec_slave_config_t *sc,
1234  uint16_t pdo_index
1235  );
1236 
1309  ec_slave_config_t *sc,
1310  unsigned int n_syncs,
1312  const ec_sync_info_t syncs[]
1314  );
1315 
1335  ec_slave_config_t *sc,
1336  uint16_t entry_index,
1337  uint8_t entry_subindex,
1338  ec_domain_t *domain,
1339  unsigned int *bit_position
1341  );
1342 
1357  ec_slave_config_t *sc,
1358  uint8_t sync_index,
1359  unsigned int pdo_pos,
1360  unsigned int entry_pos,
1361  ec_domain_t *domain,
1362  unsigned int *bit_position
1364  );
1365 
1381  ec_slave_config_t *sc,
1382  uint16_t assign_activate,
1383  uint32_t sync0_cycle,
1384  int32_t sync0_shift,
1385  uint32_t sync1_cycle,
1386  int32_t sync1_shift
1387  );
1388 
1415  ec_slave_config_t *sc,
1416  uint16_t index,
1417  uint8_t subindex,
1418  const uint8_t *data,
1419  size_t size
1420  );
1421 
1433  ec_slave_config_t *sc,
1434  uint16_t sdo_index,
1435  uint8_t sdo_subindex,
1436  uint8_t value
1437  );
1438 
1450  ec_slave_config_t *sc,
1451  uint16_t sdo_index,
1452  uint8_t sdo_subindex,
1453  uint16_t value
1454  );
1455 
1467  ec_slave_config_t *sc,
1468  uint16_t sdo_index,
1469  uint8_t sdo_subindex,
1470  uint32_t value
1471  );
1472 
1487  ec_slave_config_t *sc,
1488  uint16_t index,
1489  const uint8_t *data,
1490  size_t size
1491  );
1492 
1504  ec_slave_config_t *sc,
1505  size_t elements
1506  );
1507 
1520  ec_slave_config_t *sc,
1521  uint8_t *target
1523  );
1524 
1530  ec_slave_config_t *sc
1531  );
1532 
1542  ec_slave_config_t *sc
1543  );
1544 
1556  ec_slave_config_t *sc,
1557  uint16_t index,
1558  uint8_t subindex,
1559  size_t size
1560  );
1561 
1578  ec_slave_config_t *sc,
1579  size_t size
1580  );
1581 
1597  ec_slave_config_t *sc,
1598  size_t size
1599  );
1600 
1611  const ec_slave_config_t *sc,
1612  ec_slave_config_state_t *state
1613  );
1614 
1638  ec_slave_config_t *sc,
1639  uint8_t drive_no,
1640  uint16_t idn,
1641  ec_al_state_t state,
1643  const uint8_t *data,
1644  size_t size
1645  );
1646 
1667  ec_slave_config_t *sc,
1668  const char *key,
1669  int32_t value
1670  );
1671 
1672 /******************************************************************************
1673  * Domain methods
1674  *****************************************************************************/
1675 
1688  ec_domain_t *domain,
1689  const ec_pdo_entry_reg_t *pdo_entry_regs
1691  );
1692 
1697 size_t ecrt_domain_size(
1698  const ec_domain_t *domain
1699  );
1700 
1701 #ifdef __KERNEL__
1702 
1716  ec_domain_t *domain,
1717  uint8_t *memory
1719  );
1720 
1721 #endif /* __KERNEL__ */
1722 
1736 uint8_t *ecrt_domain_data(
1737  ec_domain_t *domain
1738  );
1739 
1747 void ecrt_domain_process(
1748  ec_domain_t *domain
1749  );
1750 
1756 void ecrt_domain_queue(
1757  ec_domain_t *domain
1758  );
1759 
1766 void ecrt_domain_state(
1767  const ec_domain_t *domain,
1768  ec_domain_state_t *state
1770  );
1771 
1772 /*****************************************************************************
1773  * SDO request methods.
1774  ****************************************************************************/
1775 
1783  ec_sdo_request_t *req,
1784  uint16_t index,
1785  uint8_t subindex
1786  );
1787 
1797  ec_sdo_request_t *req,
1798  uint32_t timeout
1800  );
1801 
1825 uint8_t *ecrt_sdo_request_data(
1826  ec_sdo_request_t *req
1827  );
1828 
1838  const ec_sdo_request_t *req
1839  );
1840 
1845 #ifdef __KERNEL__
1847  const ec_sdo_request_t *req
1848  );
1849 #else
1851  ec_sdo_request_t *req
1852  );
1853 #endif
1854 
1861  ec_sdo_request_t *req
1862  );
1863 
1874  ec_sdo_request_t *req
1875  );
1876 
1877 /*****************************************************************************
1878  * VoE handler methods.
1879  ****************************************************************************/
1880 
1889  ec_voe_handler_t *voe,
1890  uint32_t vendor_id,
1891  uint16_t vendor_type
1892  );
1893 
1903  const ec_voe_handler_t *voe,
1904  uint32_t *vendor_id,
1905  uint16_t *vendor_type
1906  );
1907 
1928 uint8_t *ecrt_voe_handler_data(
1929  ec_voe_handler_t *voe
1930  );
1931 
1945  const ec_voe_handler_t *voe
1946  );
1947 
1955  ec_voe_handler_t *voe,
1956  size_t size
1957  );
1958 
1974  ec_voe_handler_t *voe
1975  );
1976 
1993  ec_voe_handler_t *voe
1994  );
1995 
2004  ec_voe_handler_t *voe
2005  );
2006 
2007 /*****************************************************************************
2008  * Register request methods.
2009  ****************************************************************************/
2010 
2030 uint8_t *ecrt_reg_request_data(
2031  ec_reg_request_t *req
2032  );
2033 
2038 #ifdef __KERNEL__
2040  const ec_reg_request_t *req
2041  );
2042 #else
2044  ec_reg_request_t *req
2045  );
2046 #endif
2047 
2057  ec_reg_request_t *req,
2058  uint16_t address,
2059  size_t size
2060  );
2061 
2071  ec_reg_request_t *req,
2072  uint16_t address,
2073  size_t size
2074  );
2075 
2076 /******************************************************************************
2077  * Bitwise read/write macros
2078  *****************************************************************************/
2079 
2085 #define EC_READ_BIT(DATA, POS) ((*((uint8_t *) (DATA)) >> (POS)) & 0x01)
2086 
2093 #define EC_WRITE_BIT(DATA, POS, VAL) \
2094  do { \
2095  if (VAL) *((uint8_t *) (DATA)) |= (1 << (POS)); \
2096  else *((uint8_t *) (DATA)) &= ~(1 << (POS)); \
2097  } while (0)
2098 
2099 /******************************************************************************
2100  * Byte-swapping functions for user space
2101  *****************************************************************************/
2102 
2103 #ifndef __KERNEL__
2104 
2105 #if __BYTE_ORDER == __LITTLE_ENDIAN
2106 
2107 #define le16_to_cpu(x) x
2108 #define le32_to_cpu(x) x
2109 #define le64_to_cpu(x) x
2110 
2111 #define cpu_to_le16(x) x
2112 #define cpu_to_le32(x) x
2113 #define cpu_to_le64(x) x
2114 
2115 #elif __BYTE_ORDER == __BIG_ENDIAN
2116 
2117 #define swap16(x) \
2118  ((uint16_t)( \
2119  (((uint16_t)(x) & 0x00ffU) << 8) | \
2120  (((uint16_t)(x) & 0xff00U) >> 8) ))
2121 #define swap32(x) \
2122  ((uint32_t)( \
2123  (((uint32_t)(x) & 0x000000ffUL) << 24) | \
2124  (((uint32_t)(x) & 0x0000ff00UL) << 8) | \
2125  (((uint32_t)(x) & 0x00ff0000UL) >> 8) | \
2126  (((uint32_t)(x) & 0xff000000UL) >> 24) ))
2127 #define swap64(x) \
2128  ((uint64_t)( \
2129  (((uint64_t)(x) & 0x00000000000000ffULL) << 56) | \
2130  (((uint64_t)(x) & 0x000000000000ff00ULL) << 40) | \
2131  (((uint64_t)(x) & 0x0000000000ff0000ULL) << 24) | \
2132  (((uint64_t)(x) & 0x00000000ff000000ULL) << 8) | \
2133  (((uint64_t)(x) & 0x000000ff00000000ULL) >> 8) | \
2134  (((uint64_t)(x) & 0x0000ff0000000000ULL) >> 24) | \
2135  (((uint64_t)(x) & 0x00ff000000000000ULL) >> 40) | \
2136  (((uint64_t)(x) & 0xff00000000000000ULL) >> 56) ))
2137 
2138 #define le16_to_cpu(x) swap16(x)
2139 #define le32_to_cpu(x) swap32(x)
2140 #define le64_to_cpu(x) swap64(x)
2141 
2142 #define cpu_to_le16(x) swap16(x)
2143 #define cpu_to_le32(x) swap32(x)
2144 #define cpu_to_le64(x) swap64(x)
2145 
2146 #endif
2147 
2148 #define le16_to_cpup(x) le16_to_cpu(*((uint16_t *)(x)))
2149 #define le32_to_cpup(x) le32_to_cpu(*((uint32_t *)(x)))
2150 #define le64_to_cpup(x) le64_to_cpu(*((uint64_t *)(x)))
2151 
2152 #endif /* ifndef __KERNEL__ */
2153 
2154 /******************************************************************************
2155  * Read macros
2156  *****************************************************************************/
2157 
2162 #define EC_READ_U8(DATA) \
2163  ((uint8_t) *((uint8_t *) (DATA)))
2164 
2170 #define EC_READ_S8(DATA) \
2171  ((int8_t) *((uint8_t *) (DATA)))
2172 
2178 #define EC_READ_U16(DATA) \
2179  ((uint16_t) le16_to_cpup((void *) (DATA)))
2180 
2186 #define EC_READ_S16(DATA) \
2187  ((int16_t) le16_to_cpup((void *) (DATA)))
2188 
2194 #define EC_READ_U32(DATA) \
2195  ((uint32_t) le32_to_cpup((void *) (DATA)))
2196 
2202 #define EC_READ_S32(DATA) \
2203  ((int32_t) le32_to_cpup((void *) (DATA)))
2204 
2210 #define EC_READ_U64(DATA) \
2211  ((uint64_t) le64_to_cpup((void *) (DATA)))
2212 
2218 #define EC_READ_S64(DATA) \
2219  ((int64_t) le64_to_cpup((void *) (DATA)))
2220 
2221 /******************************************************************************
2222  * Floating-point read functions and macros (userspace only)
2223  *****************************************************************************/
2224 
2225 #ifndef __KERNEL__
2226 
2232 float ecrt_read_real(const void *data);
2233 
2239 #define EC_READ_REAL(DATA) ecrt_read_real(DATA)
2240 
2246 double ecrt_read_lreal(const void *data);
2247 
2253 #define EC_READ_LREAL(DATA) ecrt_read_lreal(DATA)
2254 
2255 #endif // ifndef __KERNEL__
2256 
2257 /******************************************************************************
2258  * Write macros
2259  *****************************************************************************/
2260 
2266 #define EC_WRITE_U8(DATA, VAL) \
2267  do { \
2268  *((uint8_t *)(DATA)) = ((uint8_t) (VAL)); \
2269  } while (0)
2270 
2276 #define EC_WRITE_S8(DATA, VAL) EC_WRITE_U8(DATA, VAL)
2277 
2283 #define EC_WRITE_U16(DATA, VAL) \
2284  do { \
2285  *((uint16_t *) (DATA)) = cpu_to_le16((uint16_t) (VAL)); \
2286  } while (0)
2287 
2293 #define EC_WRITE_S16(DATA, VAL) EC_WRITE_U16(DATA, VAL)
2294 
2300 #define EC_WRITE_U32(DATA, VAL) \
2301  do { \
2302  *((uint32_t *) (DATA)) = cpu_to_le32((uint32_t) (VAL)); \
2303  } while (0)
2304 
2310 #define EC_WRITE_S32(DATA, VAL) EC_WRITE_U32(DATA, VAL)
2311 
2317 #define EC_WRITE_U64(DATA, VAL) \
2318  do { \
2319  *((uint64_t *) (DATA)) = cpu_to_le64((uint64_t) (VAL)); \
2320  } while (0)
2321 
2327 #define EC_WRITE_S64(DATA, VAL) EC_WRITE_U64(DATA, VAL)
2328 
2329 /******************************************************************************
2330  * Floating-point write functions and macros (userspace only)
2331  *****************************************************************************/
2332 
2333 #ifndef __KERNEL__
2334 
2340 void ecrt_write_real(void *data, float value);
2341 
2347 #define EC_WRITE_REAL(DATA, VAL) ecrt_write_real(DATA, VAL)
2348 
2354 void ecrt_write_lreal(void *data, double value);
2355 
2361 #define EC_WRITE_LREAL(DATA, VAL) ecrt_write_lreal(DATA, VAL)
2362 
2363 #endif // ifndef __KERNEL__
2364 
2365 /*****************************************************************************/
2366 
2367 #ifdef __cplusplus
2368 }
2369 #endif
2370 
2371 /*****************************************************************************/
2372 
2375 #endif
unsigned int working_counter
Value of the last working counter.
Definition: ecrt.h:421
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:382
ec_slave_port_desc_t desc
Physical port type.
Definition: ecrt.h:386
uint8_t subindex
PDO entry subindex.
Definition: ecrt.h:514
Pre-operational.
Definition: ecrt.h:543
uint16_t position
Slave position.
Definition: ecrt.h:510
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:2867
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:132
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:152
void ecrt_release_master(ec_master_t *master)
Releases a requested EtherCAT master.
Definition: module.c:625
uint8_t sync_count
Number of sync managers.
Definition: ecrt.h:396
unsigned int n_entries
Number of PDO entries in entries to map.
Definition: ecrt.h:473
uint8_t bit_length
Size of the PDO entry in bit.
Definition: ecrt.h:460
ec_direction_t dir
Sync manager direction.
Definition: ecrt.h:494
uint8_t error_flag
Error flag for that slave.
Definition: ecrt.h:395
ec_watchdog_mode_t
Watchdog mode for sync manager configuration.
Definition: ecrt.h:443
void ecrt_master_sync_slave_clocks(ec_master_t *master)
Queues the DC clock drift compensation datagram for sending.
Definition: master.c:2849
ec_slave_port_desc_t
EtherCAT slave port descriptor.
Definition: ecrt.h:352
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:956
ec_al_state_t
Application-layer state.
Definition: ecrt.h:541
ec_pdo_info_t * pdos
Array with PDOs to assign.
Definition: ecrt.h:496
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:640
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:2780
void ecrt_master_application_time(ec_master_t *master, uint64_t app_time)
Sets the application time.
Definition: master.c:2796
unsigned int redundancy_active
Redundant link is in use.
Definition: ecrt.h:423
CANopen SDO request.
Definition: sdo_request.h:48
unsigned int slave_count
Number of slaves in the bus.
Definition: ecrt.h:342
uint16_t index
PDO entry index.
Definition: ecrt.h:513
Operational.
Definition: ecrt.h:545
uint32_t vendor_id
Vendor-ID stored on the slave.
Definition: ecrt.h:379
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:2957
Register request.
Definition: reg_request.h:48
ec_slave_port_link_t link
Port link state.
Definition: ecrt.h:387
Safe-operational.
Definition: ecrt.h:544
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:2743
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:2681
Disable the watchdog.
Definition: ecrt.h:446
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:872
uint32_t delay_to_next_dc
Delay [ns] to next DC slave.
Definition: ecrt.h:392
void ecrt_master_send_ext(ec_master_t *master)
Sends non-application datagrams.
Definition: master.c:2561
Enable the watchdog.
Definition: ecrt.h:445
ec_wc_state_t wc_state
Working counter interpretation.
Definition: ecrt.h:422
PDO configuration information.
Definition: ecrt.h:471
ec_domain_t * ecrt_master_create_domain(ec_master_t *master)
Creates a new process data domain.
Definition: master.c:2311
void ecrt_voe_handler_read(ec_voe_handler_t *voe)
Start a VoE read operation.
Definition: voe_handler.c:159
Sync manager configuration information.
Definition: ecrt.h:490
ec_wc_state_t
Domain working counter interpretation.
Definition: ecrt.h:407
unsigned int slaves_responding
Sum of responding slaves on all Ethernet devices.
Definition: ecrt.h:272
void ecrt_master_state(const ec_master_t *master, ec_master_state_t *state)
Reads the current master state.
Definition: master.c:2757
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:168
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_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:2836
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. ...
int ecrt_slave_config_flag(ec_slave_config_t *sc, const char *key, int32_t value)
Adds a feature flag to a slave configuration.
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:937
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.
Some of the registered process data were exchanged.
Definition: ecrt.h:409
uint32_t revision_number
Revision-Number stored on the slave.
Definition: ecrt.h:381
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:444
uint16_t alias
Slave alias address.
Definition: ecrt.h:509
Not requested.
Definition: ecrt.h:531
uint16_t index
PDO index.
Definition: ecrt.h:472
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:617
Master state.
Definition: ecrt.h:271
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.
Slave configuration state.
Definition: ecrt.h:319
Request is being processed.
Definition: ecrt.h:532
uint64_t app_time
Application time.
Definition: ecrt.h:345
ec_watchdog_mode_t watchdog_mode
Watchdog mode.
Definition: ecrt.h:498
unsigned int n_pdos
Number of PDOs in pdos.
Definition: ecrt.h:495
Domain state.
Definition: ecrt.h:420
uint32_t vendor_id
Slave vendor ID.
Definition: ecrt.h:511
unsigned int * bit_position
Pointer to a variable to store a bit position (0-7) within the offset.
Definition: ecrt.h:517
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:2878
Port is an E-Bus.
Definition: ecrt.h:355
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:2647
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:430
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:651
Port is a MII.
Definition: ecrt.h:356
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:187
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.
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:3038
Values read by the master.
Definition: ecrt.h:433
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:3281
Port is not configured.
Definition: ecrt.h:354
Port is not implemented.
Definition: ecrt.h:353
Slave information.
Definition: ecrt.h:377
void ecrt_master_sync_monitor_queue(ec_master_t *master)
Queues the DC synchrony monitoring datagram for sending.
Definition: master.c:2859
void ecrt_voe_handler_write(ec_voe_handler_t *voe, size_t size)
Start a VoE write operation.
Definition: voe_handler.c:177
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:996
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:688
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:817
uint16_t index
PDO entry index.
Definition: ecrt.h:458
uint8_t al_state
Current state of the slave.
Definition: ecrt.h:394
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:2636
uint8_t scan_busy
true, while the master is scanning the bus
Definition: ecrt.h:344
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:750
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:3197
int ecrt_master_activate(ec_master_t *master)
Finishes the configuration phase and prepares for cyclic operation.
Definition: master.c:2321
int16_t current_on_ebus
Used current in mA.
Definition: ecrt.h:384
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:725
Invalid direction.
Definition: ecrt.h:431
#define EC_MAX_PORTS
Maximum number of slave ports.
Definition: ecrt.h:222
Number of directions.
Definition: ecrt.h:434
uint16_t sdo_count
Number of SDOs.
Definition: ecrt.h:397
#define EC_MAX_STRING_LENGTH
Maximum string length.
Definition: ecrt.h:219
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:508
uint16_t next_slave
Ring position of next DC slave on that port.
Definition: ecrt.h:390
No registered process data were exchanged.
Definition: ecrt.h:408
All registered process data were exchanged.
Definition: ecrt.h:411
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:628
void ecrt_master_deactivate(ec_master_t *master)
Deactivates the master.
Definition: master.c:2395
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:601
uint16_t alias
The slaves alias if not equal to 0.
Definition: ecrt.h:383
int ecrt_master(ec_master_t *master, ec_master_info_t *master_info)
Obtains master information.
Definition: master.c:2667
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:3121
EtherCAT slave configuration.
Definition: slave_config.h:119
uint32_t product_code
Product-Code stored on the slave.
Definition: ecrt.h:380
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:123
Request was processed successfully.
Definition: ecrt.h:533
unsigned int * offset
Pointer to a variable to store the PDO entry's (byte-)offset in the process data. ...
Definition: ecrt.h:515
ec_request_state_t
Request state.
Definition: ecrt.h:530
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:2807
Master information.
Definition: ecrt.h:341
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:457
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:670
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:491
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:432
Init.
Definition: ecrt.h:542
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:378
uint32_t receive_time
Receive time on DC transmission delay measurement.
Definition: ecrt.h:388
uint32_t product_code
Slave product code.
Definition: ecrt.h:512
EtherCAT master.
Definition: master.h:194
Request processing failed.
Definition: ecrt.h:534
void ecrt_master_sync_reference_clock(ec_master_t *master)
Queues the DC reference clock drift compensation datagram for sending.
Definition: master.c:2826
uint8_t subindex
PDO entry subindex.
Definition: ecrt.h:459
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:145
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:477
void ecrt_master_receive(ec_master_t *master)
Fetches received frames from the hardware and processes the datagrams.
Definition: master.c:2509
void ecrt_master_send(ec_master_t *master)
Sends all datagrams in the queue.
Definition: master.c:2465