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_VER_PATCH 10
148 
151 #define ECRT_VERSION(a, b, c) (((a) << 16) + ((b) << 8) + (c))
152 
155 #define ECRT_VERSION_MAGIC ECRT_VERSION(ECRT_VER_MAJOR, ECRT_VER_MINOR, ECRT_VER_PATCH)
156 
157 /******************************************************************************
158  * Feature flags
159  *****************************************************************************/
160 
166 #define EC_HAVE_REDUNDANCY
167 
172 #define EC_HAVE_EMERGENCY
173 
180 #define EC_HAVE_REG_ACCESS
181 
184 #define EC_HAVE_SELECT_REF_CLOCK
185 
188 #define EC_HAVE_REF_CLOCK_TIME
189 
192 #define EC_HAVE_REG_BY_POS
193 
196 #define EC_HAVE_SYNC_TO
197 
198 /*****************************************************************************/
199 
204 #define EC_END ~0U
205 
208 #define EC_MAX_SYNC_MANAGERS 16
209 
214 #define EC_MAX_STRING_LENGTH 64
215 
217 #define EC_MAX_PORTS 4
218 
227 #define EC_TIMEVAL2NANO(TV) \
228  (((TV).tv_sec - 946684800ULL) * 1000000000ULL + (TV).tv_usec * 1000ULL)
229 
234 #define EC_COE_EMERGENCY_MSG_SIZE 8
235 
236 /******************************************************************************
237  * Data types
238  *****************************************************************************/
239 
240 struct ec_master;
241 typedef struct ec_master ec_master_t;
243 struct ec_slave_config;
246 struct ec_domain;
247 typedef struct ec_domain ec_domain_t;
249 struct ec_sdo_request;
252 struct ec_foe_request;
255 struct ec_voe_handler;
258 struct ec_reg_request;
261 /*****************************************************************************/
262 
269 typedef struct {
270  unsigned int slaves_responding;
272  unsigned int al_states : 4;
281  unsigned int link_up : 1;
283  unsigned int scan_busy : 1;
285 
286 /*****************************************************************************/
287 
294 typedef struct {
295  unsigned int slaves_responding;
297  unsigned int al_states : 4;
306  unsigned int link_up : 1;
309 
310 /*****************************************************************************/
311 
318 typedef struct {
319  unsigned int online : 1;
320  unsigned int operational : 1;
322  unsigned int al_state : 4;
330  unsigned int error_flag : 1;
331  unsigned int ready : 1;
332  uint16_t position;
334 
335 /*****************************************************************************/
336 
343 typedef struct {
344  unsigned int slave_count;
345  unsigned int link_up : 1;
346  uint8_t scan_busy;
347  uint64_t app_time;
349 
350 /*****************************************************************************/
351 
354 typedef enum {
360 
361 /*****************************************************************************/
362 
365 typedef struct {
366  uint8_t link_up;
367  uint8_t loop_closed;
368  uint8_t signal_detected;
369  uint8_t bypassed;
371 
372 /*****************************************************************************/
373 
380 typedef struct {
381  uint16_t position;
382  uint32_t vendor_id;
383  uint32_t product_code;
384  uint32_t revision_number;
385  uint32_t serial_number;
386  uint16_t alias;
387  int16_t current_on_ebus;
388  struct {
391  uint32_t receive_time;
393  uint16_t next_slave;
395  uint32_t delay_to_next_dc;
396  } ports[EC_MAX_PORTS];
397  uint8_t upstream_port;
398  uint8_t al_state;
399  uint8_t error_flag;
400  uint8_t scan_required;
401  uint8_t ready;
402  uint8_t sync_count;
403  uint16_t sdo_count;
404  char name[EC_MAX_STRING_LENGTH];
406 
407 /*****************************************************************************/
408 
413 typedef enum {
418 } ec_wc_state_t;
419 
420 /*****************************************************************************/
421 
426 typedef struct {
427  unsigned int working_counter;
429  unsigned int redundancy_active;
431 
432 /*****************************************************************************/
433 
436 typedef enum {
443 
444 /*****************************************************************************/
445 
450 typedef enum {
455 
456 /*****************************************************************************/
457 
464 typedef struct {
465  uint16_t index;
466  uint8_t subindex;
467  uint8_t bit_length;
469 
470 /*****************************************************************************/
471 
478 typedef struct {
479  uint16_t index;
480  unsigned int n_entries;
487 } ec_pdo_info_t;
488 
489 /*****************************************************************************/
490 
497 typedef struct {
498  uint8_t index;
502  unsigned int n_pdos;
507 
508 /*****************************************************************************/
509 
515 typedef struct {
516  uint16_t alias;
517  uint16_t position;
518  uint32_t vendor_id;
519  uint32_t product_code;
520  uint16_t index;
521  uint8_t subindex;
522  unsigned int *offset;
524  unsigned int *bit_position;
529 
530 /*****************************************************************************/
531 
537 typedef enum {
543 
544 /*****************************************************************************/
545 
548 typedef enum {
549  FOE_BUSY = 0,
550  FOE_READY = 1,
551  FOE_IDLE = 2,
567 
568 /*****************************************************************************/
569 
572 typedef enum {
577 } ec_al_state_t;
578 
579 /******************************************************************************
580  * Global functions
581  *****************************************************************************/
582 
583 #ifdef __cplusplus
584 extern "C" {
585 #endif
586 
591 unsigned int ecrt_version_magic(void);
592 
609  unsigned int master_index
610  );
611 
612 #ifndef __KERNEL__
613 
625 ec_master_t *ecrt_open_master(
626  unsigned int master_index
627  );
628 
629 #endif // #ifndef __KERNEL__
630 
642  ec_master_t *master
643  );
644 
645 /******************************************************************************
646  * Master methods
647  *****************************************************************************/
648 
649 #ifndef __KERNEL__
650 
658 int ecrt_master_reserve(
659  ec_master_t *master
660  );
661 
662 #endif // #ifndef __KERNEL__
663 
664 #ifdef __KERNEL__
665 
684  ec_master_t *master,
685  void (*send_cb)(void *),
686  void (*receive_cb)(void *),
687  void *cb_data
689  );
690 
691 #endif /* __KERNEL__ */
692 
706  ec_master_t *master
707  );
708 
720  ec_master_t *master
721  );
722 
754  ec_master_t *master,
755  uint16_t alias,
756  uint16_t position,
757  uint32_t vendor_id,
758  uint32_t product_code
759  );
760 
770  ec_master_t *master,
771  ec_slave_config_t *sc
773  );
774 
784 int ecrt_master(
785  ec_master_t *master,
786  ec_master_info_t *master_info
788  );
789 
801  ec_master_t *master,
802  uint16_t slave_position,
803  ec_slave_info_t *slave_info
805  );
806 
807 #ifndef __KERNEL__
808 
817 int ecrt_master_get_sync_manager(
818  ec_master_t *master,
819  uint16_t slave_position,
820  uint8_t sync_index,
822  ec_sync_info_t *sync
823  );
824 
834 int ecrt_master_get_pdo(
835  ec_master_t *master,
836  uint16_t slave_position,
837  uint8_t sync_index,
839  uint16_t pos,
840  ec_pdo_info_t *pdo
841  );
842 
850 int ecrt_master_get_pdo_entry(
851  ec_master_t *master,
852  uint16_t slave_position,
853  uint8_t sync_index,
855  uint16_t pdo_pos,
856  uint16_t entry_pos,
857  ec_pdo_entry_info_t *entry
858  );
859 
860 #endif /* #ifndef __KERNEL__ */
861 
872  ec_master_t *master,
873  uint16_t slave_position,
874  uint16_t index,
875  uint8_t subindex,
876  const uint8_t *data,
877  size_t data_size,
878  uint32_t *abort_code
879  );
880 
892  ec_master_t *master,
893  uint16_t slave_position,
894  uint16_t index,
895  const uint8_t *data,
896  size_t data_size,
897  uint32_t *abort_code
898  );
899 
910  ec_master_t *master,
911  uint16_t slave_position,
912  uint16_t index,
913  uint8_t subindex,
914  uint8_t *target,
915  size_t target_size,
916  size_t *result_size,
917  uint32_t *abort_code
918  );
919 
930  ec_master_t *master,
931  uint16_t slave_position,
932  uint16_t index,
933  uint8_t *target,
934  size_t target_size,
935  size_t *result_size,
936  uint32_t *abort_code
937  );
938 
948  ec_master_t *master,
949  uint16_t slave_position,
950  uint8_t drive_no,
951  uint16_t idn,
952  uint8_t *data,
953  size_t data_size,
954  uint16_t *error_code
956  );
957 
967  ec_master_t *master,
968  uint16_t slave_position,
969  uint8_t drive_no,
970  uint16_t idn,
971  uint8_t *target,
973  size_t target_size,
974  size_t *result_size,
975  uint16_t *error_code
977  );
978 
997  ec_master_t *master
998  );
999 
1010  ec_master_t *master
1011  );
1012 
1024  ec_master_t *master
1025  );
1026 
1038  ec_master_t *master,
1039  size_t send_interval
1040  );
1041 
1052 size_t ecrt_master_send(
1053  ec_master_t *master
1054  );
1055 
1066 void ecrt_master_receive(
1067  ec_master_t *master
1068  );
1069 
1077 size_t ecrt_master_send_ext(
1078  ec_master_t *master
1079  );
1080 
1081 #if !defined(__KERNEL__) && defined(EC_RTDM) && (EC_EOE)
1082 
1090 int ecrt_master_eoe_is_open(
1091  ec_master_t *master
1092  );
1093 
1097 #define EOE_STH_TO_SEND 1
1098 
1105 #define EOE_STH_PENDING 2
1106 
1114 int ecrt_master_eoe_process(
1115  ec_master_t *master
1116  );
1117 
1118 #endif /* !defined(__KERNEL__) && defined(EC_RTDM) && (EC_EOE) */
1119 
1120 #ifdef EC_EOE
1121 
1126 int ecrt_master_eoe_addif(
1127  ec_master_t *master,
1128  uint16_t alias,
1129  uint16_t posn
1130  );
1131 
1136 int ecrt_master_eoe_delif(
1137  ec_master_t *master,
1138  uint16_t alias,
1139  uint16_t posn
1140  );
1141 
1142 #endif /* EC_EOE */
1143 
1151 void ecrt_master_state(
1152  const ec_master_t *master,
1154  );
1155 
1163  const ec_master_t *master,
1164  unsigned int dev_idx,
1166  ec_master_link_state_t *state
1168  );
1169 
1191  ec_master_t *master,
1192  uint64_t app_time
1193  );
1194 
1201  ec_master_t *master
1202  );
1203 
1210  ec_master_t *master,
1211  uint64_t sync_time
1212  );
1213 
1219  ec_master_t *master
1220  );
1221 
1239  ec_master_t *master,
1240  uint32_t *time
1241  );
1242 
1250  ec_master_t *master
1251  );
1252 
1266  ec_master_t *master,
1267  uint64_t *time
1268  );
1269 
1277  ec_master_t *master
1278  );
1279 
1289  ec_master_t *master
1290  );
1291 
1301  ec_master_t *master,
1302  unsigned int rt_slave_requests
1306  );
1307 
1317  ec_master_t *master
1318  );
1319 
1327 void ecrt_master_reset(
1328  ec_master_t *master
1329  );
1330 
1331 /******************************************************************************
1332  * Slave configuration methods
1333  *****************************************************************************/
1334 
1346  ec_slave_config_t *sc,
1347  uint8_t sync_index,
1349  ec_direction_t direction,
1350  ec_watchdog_mode_t watchdog_mode
1351  );
1352 
1359  ec_slave_config_t *sc,
1360  uint16_t watchdog_divider,
1364  uint16_t watchdog_intervals
1368  );
1369 
1376  ec_slave_config_t *sc,
1377  uint8_t allow_overlapping_pdos
1378  );
1379 
1380 
1390  ec_slave_config_t *sc,
1391  uint8_t sync_index,
1393  uint16_t index
1394  );
1395 
1408  ec_slave_config_t *sc,
1409  uint8_t sync_index
1411  );
1412 
1422  ec_slave_config_t *sc,
1423  uint16_t pdo_index,
1424  uint16_t entry_index,
1426  uint8_t entry_subindex,
1428  uint8_t entry_bit_length
1429  );
1430 
1442  ec_slave_config_t *sc,
1443  uint16_t pdo_index
1444  );
1445 
1518  ec_slave_config_t *sc,
1519  unsigned int n_syncs,
1521  const ec_sync_info_t syncs[]
1523  );
1524 
1544  ec_slave_config_t *sc,
1545  uint16_t entry_index,
1546  uint8_t entry_subindex,
1547  ec_domain_t *domain,
1548  unsigned int *bit_position
1550  );
1551 
1566  ec_slave_config_t *sc,
1567  uint8_t sync_index,
1568  unsigned int pdo_pos,
1569  unsigned int entry_pos,
1570  ec_domain_t *domain,
1571  unsigned int *bit_position
1573  );
1574 
1590  ec_slave_config_t *sc,
1591  uint16_t assign_activate,
1592  uint32_t sync0_cycle,
1593  int32_t sync0_shift,
1594  uint32_t sync1_cycle,
1595  int32_t sync1_shift
1596  );
1597 
1624  ec_slave_config_t *sc,
1625  uint16_t index,
1626  uint8_t subindex,
1627  const uint8_t *data,
1628  size_t size
1629  );
1630 
1642  ec_slave_config_t *sc,
1643  uint16_t sdo_index,
1644  uint8_t sdo_subindex,
1645  uint8_t value
1646  );
1647 
1659  ec_slave_config_t *sc,
1660  uint16_t sdo_index,
1661  uint8_t sdo_subindex,
1662  uint16_t value
1663  );
1664 
1676  ec_slave_config_t *sc,
1677  uint16_t sdo_index,
1678  uint8_t sdo_subindex,
1679  uint32_t value
1680  );
1681 
1696  ec_slave_config_t *sc,
1697  uint16_t index,
1698  const uint8_t *data,
1699  size_t size
1700  );
1701 
1713  ec_slave_config_t *sc,
1714  size_t elements
1715  );
1716 
1729  ec_slave_config_t *sc,
1730  uint8_t *target
1732  );
1733 
1739  ec_slave_config_t *sc
1740  );
1741 
1751  ec_slave_config_t *sc
1752  );
1753 
1765  ec_slave_config_t *sc,
1766  uint16_t index,
1767  uint8_t subindex,
1768  size_t size
1769  );
1770 
1783  ec_slave_config_t *sc,
1784  uint16_t index,
1785  size_t size
1786  );
1787 
1799  ec_slave_config_t *sc,
1800  size_t size
1801  );
1802 
1819  ec_slave_config_t *sc,
1820  size_t size
1821  );
1822 
1838  ec_slave_config_t *sc,
1839  size_t size
1840  );
1841 
1852  const ec_slave_config_t *sc,
1853  ec_slave_config_state_t *state
1854  );
1855 
1879  ec_slave_config_t *sc,
1880  uint8_t drive_no,
1881  uint16_t idn,
1882  ec_al_state_t state,
1884  const uint8_t *data,
1885  size_t size
1886  );
1887 
1888 /******************************************************************************
1889  * Domain methods
1890  *****************************************************************************/
1891 
1904  ec_domain_t *domain,
1905  const ec_pdo_entry_reg_t *pdo_entry_regs
1907  );
1908 
1913 size_t ecrt_domain_size(
1914  const ec_domain_t *domain
1915  );
1916 
1917 #ifdef __KERNEL__
1918 
1932  ec_domain_t *domain,
1933  uint8_t *memory
1935  );
1936 
1937 #endif /* __KERNEL__ */
1938 
1952 uint8_t *ecrt_domain_data(
1953  ec_domain_t *domain
1954  );
1955 
1963 void ecrt_domain_process(
1964  ec_domain_t *domain
1965  );
1966 
1972 void ecrt_domain_queue(
1973  ec_domain_t *domain
1974  );
1975 
1982 void ecrt_domain_state(
1983  const ec_domain_t *domain,
1984  ec_domain_state_t *state
1986  );
1987 
1988 /*****************************************************************************
1989  * SDO request methods.
1990  ****************************************************************************/
1991 
2001  ec_sdo_request_t *req,
2002  uint16_t index,
2003  uint8_t subindex
2004  );
2005 
2014  ec_sdo_request_t *req,
2015  uint16_t index
2016  );
2017 
2027  ec_sdo_request_t *req,
2028  uint32_t timeout
2030  );
2031 
2055 uint8_t *ecrt_sdo_request_data(
2056  ec_sdo_request_t *req
2057  );
2058 
2068  const ec_sdo_request_t *req
2069  );
2070 
2075 #ifdef __KERNEL__
2077  const ec_sdo_request_t *req
2078  );
2079 #else
2081  ec_sdo_request_t *req
2082  );
2083 #endif
2084 
2091  ec_sdo_request_t *req
2092  );
2093 
2103  ec_sdo_request_t *req,
2104  size_t size
2105  );
2106 
2117  ec_sdo_request_t *req
2118  );
2119 
2120 /*****************************************************************************
2121  * FoE request methods.
2122  ****************************************************************************/
2123 
2127  ec_foe_request_t *req,
2128  const char *file_name,
2129  uint32_t password
2130  );
2131 
2141  ec_foe_request_t *req,
2142  uint32_t timeout
2144  );
2145 
2162 uint8_t *ecrt_foe_request_data(
2163  ec_foe_request_t *req
2164  );
2165 
2176  const ec_foe_request_t *req
2177  );
2178 
2183 #ifdef __KERNEL__
2185  const ec_foe_request_t *req
2186  );
2187 #else
2189  ec_foe_request_t *req
2190  );
2191 #endif
2192 
2201  const ec_foe_request_t *req
2202  );
2203 
2214  const ec_foe_request_t *req
2215  );
2216 
2224  const ec_foe_request_t *req
2225  );
2226 
2236  ec_foe_request_t *req,
2237  size_t size
2238  );
2239 
2250  ec_foe_request_t *req
2251  );
2252 
2253 /*****************************************************************************
2254  * VoE handler methods.
2255  ****************************************************************************/
2256 
2265  ec_voe_handler_t *voe,
2266  uint32_t vendor_id,
2267  uint16_t vendor_type
2268  );
2269 
2279  const ec_voe_handler_t *voe,
2280  uint32_t *vendor_id,
2281  uint16_t *vendor_type
2282  );
2283 
2304 uint8_t *ecrt_voe_handler_data(
2305  ec_voe_handler_t *voe
2306  );
2307 
2321  const ec_voe_handler_t *voe
2322  );
2323 
2331  ec_voe_handler_t *voe,
2332  size_t size
2333  );
2334 
2350  ec_voe_handler_t *voe
2351  );
2352 
2369  ec_voe_handler_t *voe
2370  );
2371 
2380  ec_voe_handler_t *voe
2381  );
2382 
2383 /*****************************************************************************
2384  * Register request methods.
2385  ****************************************************************************/
2386 
2406 uint8_t *ecrt_reg_request_data(
2407  ec_reg_request_t *req
2408  );
2409 
2414 #ifdef __KERNEL__
2416  const ec_reg_request_t *req
2417  );
2418 #else
2420  ec_reg_request_t *req
2421  );
2422 #endif
2423 
2433  ec_reg_request_t *req,
2434  uint16_t address,
2435  size_t size
2436  );
2437 
2447  ec_reg_request_t *req,
2448  uint16_t address,
2449  size_t size
2450  );
2451 
2452 /******************************************************************************
2453  * Bitwise read/write macros
2454  *****************************************************************************/
2455 
2461 #define EC_READ_BIT(DATA, POS) ((*((uint8_t *) (DATA)) >> (POS)) & 0x01)
2462 
2469 #define EC_WRITE_BIT(DATA, POS, VAL) \
2470  do { \
2471  if (VAL) *((uint8_t *) (DATA)) |= (1 << (POS)); \
2472  else *((uint8_t *) (DATA)) &= ~(1 << (POS)); \
2473  } while (0)
2474 
2475 /******************************************************************************
2476  * Byte-swapping functions for user space
2477  *****************************************************************************/
2478 
2479 #ifndef __KERNEL__
2480 
2481 #if __BYTE_ORDER == __LITTLE_ENDIAN
2482 
2483 #define le16_to_cpu(x) x
2484 #define le32_to_cpu(x) x
2485 #define le64_to_cpu(x) x
2486 
2487 #define cpu_to_le16(x) x
2488 #define cpu_to_le32(x) x
2489 #define cpu_to_le64(x) x
2490 
2491 #elif __BYTE_ORDER == __BIG_ENDIAN
2492 
2493 #define swap16(x) \
2494  ((uint16_t)( \
2495  (((uint16_t)(x) & 0x00ffU) << 8) | \
2496  (((uint16_t)(x) & 0xff00U) >> 8) ))
2497 #define swap32(x) \
2498  ((uint32_t)( \
2499  (((uint32_t)(x) & 0x000000ffUL) << 24) | \
2500  (((uint32_t)(x) & 0x0000ff00UL) << 8) | \
2501  (((uint32_t)(x) & 0x00ff0000UL) >> 8) | \
2502  (((uint32_t)(x) & 0xff000000UL) >> 24) ))
2503 #define swap64(x) \
2504  ((uint64_t)( \
2505  (((uint64_t)(x) & 0x00000000000000ffULL) << 56) | \
2506  (((uint64_t)(x) & 0x000000000000ff00ULL) << 40) | \
2507  (((uint64_t)(x) & 0x0000000000ff0000ULL) << 24) | \
2508  (((uint64_t)(x) & 0x00000000ff000000ULL) << 8) | \
2509  (((uint64_t)(x) & 0x000000ff00000000ULL) >> 8) | \
2510  (((uint64_t)(x) & 0x0000ff0000000000ULL) >> 24) | \
2511  (((uint64_t)(x) & 0x00ff000000000000ULL) >> 40) | \
2512  (((uint64_t)(x) & 0xff00000000000000ULL) >> 56) ))
2513 
2514 #define le16_to_cpu(x) swap16(x)
2515 #define le32_to_cpu(x) swap32(x)
2516 #define le64_to_cpu(x) swap64(x)
2517 
2518 #define cpu_to_le16(x) swap16(x)
2519 #define cpu_to_le32(x) swap32(x)
2520 #define cpu_to_le64(x) swap64(x)
2521 
2522 #endif
2523 
2524 #define le16_to_cpup(x) le16_to_cpu(*((uint16_t *)(x)))
2525 #define le32_to_cpup(x) le32_to_cpu(*((uint32_t *)(x)))
2526 #define le64_to_cpup(x) le64_to_cpu(*((uint64_t *)(x)))
2527 
2528 #endif /* ifndef __KERNEL__ */
2529 
2530 /******************************************************************************
2531  * Read macros
2532  *****************************************************************************/
2533 
2538 #define EC_READ_U8(DATA) \
2539  ((uint8_t) *((uint8_t *) (DATA)))
2540 
2546 #define EC_READ_S8(DATA) \
2547  ((int8_t) *((uint8_t *) (DATA)))
2548 
2554 #define EC_READ_U16(DATA) \
2555  ((uint16_t) le16_to_cpup((void *) (DATA)))
2556 
2562 #define EC_READ_S16(DATA) \
2563  ((int16_t) le16_to_cpup((void *) (DATA)))
2564 
2570 #define EC_READ_U32(DATA) \
2571  ((uint32_t) le32_to_cpup((void *) (DATA)))
2572 
2578 #define EC_READ_S32(DATA) \
2579  ((int32_t) le32_to_cpup((void *) (DATA)))
2580 
2586 #define EC_READ_U64(DATA) \
2587  ((uint64_t) le64_to_cpup((void *) (DATA)))
2588 
2594 #define EC_READ_S64(DATA) \
2595  ((int64_t) le64_to_cpup((void *) (DATA)))
2596 
2597 /******************************************************************************
2598  * Floating-point read functions and macros (userspace only)
2599  *****************************************************************************/
2600 
2601 #ifndef __KERNEL__
2602 
2608 float ecrt_read_real(const void *data);
2609 
2615 #define EC_READ_REAL(DATA) ecrt_read_real(DATA)
2616 
2622 double ecrt_read_lreal(const void *data);
2623 
2629 #define EC_READ_LREAL(DATA) ecrt_read_lreal(DATA)
2630 
2631 #endif // ifndef __KERNEL__
2632 
2633 /******************************************************************************
2634  * Write macros
2635  *****************************************************************************/
2636 
2642 #define EC_WRITE_U8(DATA, VAL) \
2643  do { \
2644  *((uint8_t *)(DATA)) = ((uint8_t) (VAL)); \
2645  } while (0)
2646 
2652 #define EC_WRITE_S8(DATA, VAL) EC_WRITE_U8(DATA, VAL)
2653 
2659 #define EC_WRITE_U16(DATA, VAL) \
2660  do { \
2661  *((uint16_t *) (DATA)) = cpu_to_le16((uint16_t) (VAL)); \
2662  } while (0)
2663 
2669 #define EC_WRITE_S16(DATA, VAL) EC_WRITE_U16(DATA, VAL)
2670 
2676 #define EC_WRITE_U32(DATA, VAL) \
2677  do { \
2678  *((uint32_t *) (DATA)) = cpu_to_le32((uint32_t) (VAL)); \
2679  } while (0)
2680 
2686 #define EC_WRITE_S32(DATA, VAL) EC_WRITE_U32(DATA, VAL)
2687 
2693 #define EC_WRITE_U64(DATA, VAL) \
2694  do { \
2695  *((uint64_t *) (DATA)) = cpu_to_le64((uint64_t) (VAL)); \
2696  } while (0)
2697 
2703 #define EC_WRITE_S64(DATA, VAL) EC_WRITE_U64(DATA, VAL)
2704 
2705 /******************************************************************************
2706  * Floating-point write functions and macros (userspace only)
2707  *****************************************************************************/
2708 
2709 #ifndef __KERNEL__
2710 
2716 void ecrt_write_real(void *data, float value);
2717 
2723 #define EC_WRITE_REAL(DATA, VAL) ecrt_write_real(DATA, VAL)
2724 
2730 void ecrt_write_lreal(void *data, double value);
2731 
2737 #define EC_WRITE_LREAL(DATA, VAL) ecrt_write_lreal(DATA, VAL)
2738 
2739 #endif // ifndef __KERNEL__
2740 
2750  ec_reg_request_t *req,
2751  uint16_t address,
2752  size_t size
2753  );
2754 
2755 /*****************************************************************************/
2756 
2757 #ifdef __cplusplus
2758 }
2759 #endif
2760 
2761 /*****************************************************************************/
2762 
2765 #endif
unsigned int working_counter
Value of the last working counter.
Definition: ecrt.h:427
ec_request_state_t ecrt_foe_request_state(const ec_foe_request_t *req)
Get the current state of the FoE request.
Definition: foe_request.c:229
size_t ecrt_domain_size(const ec_domain_t *domain)
Returns the current size of the domain&#39;s process data.
Definition: domain.c:503
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:385
ec_internal_request_state_t state
Request state.
Definition: reg_request.h:56
ec_slave_port_desc_t desc
Physical port type.
Definition: ecrt.h:389
uint8_t subindex
PDO entry subindex.
Definition: ecrt.h:521
Pre-operational.
Definition: ecrt.h:574
uint16_t position
Slave position.
Definition: ecrt.h:517
void ecrt_sdo_request_index_complete(ec_sdo_request_t *req, uint16_t index)
Set the SDO index and prepare for complete-access.
Definition: sdo_request.c:195
int ecrt_slave_config_emerg_size(ec_slave_config_t *sc, size_t elements)
Set the size of the CoE emergency ring buffer.
ec_foe_request_t * ecrt_slave_config_create_foe_request(ec_slave_config_t *sc, size_t size)
Create an FoE request to exchange files during realtime operation.
uint32_t ecrt_master_sync_monitor_process(ec_master_t *master)
Processes the DC synchrony monitoring datagram.
Definition: master.c:3448
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:133
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
Ready.
Definition: ecrt.h:550
size_t ecrt_voe_handler_data_size(const ec_voe_handler_t *voe)
Returns the current data size.
Definition: voe_handler.c:153
void ecrt_release_master(ec_master_t *master)
Releases a requested EtherCAT master.
Definition: module.c:628
uint8_t sync_count
Number of sync managers.
Definition: ecrt.h:402
size_t ecrt_foe_request_data_size(const ec_foe_request_t *req)
Returns the current FoE data size.
Definition: foe_request.c:220
unsigned int n_entries
Number of PDO entries in entries to map.
Definition: ecrt.h:480
uint8_t bit_length
Size of the PDO entry in bit.
Definition: ecrt.h:467
ec_direction_t dir
Sync manager direction.
Definition: ecrt.h:501
uint8_t error_flag
Error flag for that slave.
Definition: ecrt.h:399
ec_watchdog_mode_t
Watchdog mode for sync manager configuration.
Definition: ecrt.h:450
void ecrt_master_sync_slave_clocks(ec_master_t *master)
Queues the DC clock drift compensation datagram for sending.
Definition: master.c:3397
ec_slave_port_desc_t
EtherCAT slave port descriptor.
Definition: ecrt.h:354
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.
Packet number error.
Definition: ecrt.h:556
ec_al_state_t
Application-layer state.
Definition: ecrt.h:572
ec_pdo_info_t * pdos
Array with PDOs to assign.
Definition: ecrt.h:503
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:693
Mailbox protocol error.
Definition: ecrt.h:564
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:3324
ec_foe_error_t
FoE error enumeration type.
Definition: ecrt.h:548
void ecrt_master_application_time(ec_master_t *master, uint64_t app_time)
Sets the application time.
Definition: master.c:3340
unsigned int redundancy_active
Redundant link is in use.
Definition: ecrt.h:429
CANopen SDO request.
Definition: sdo_request.h:48
unsigned int slave_count
Number of slaves in the bus.
Definition: ecrt.h:344
uint16_t index
PDO entry index.
Definition: ecrt.h:520
Error acknowledging received data.
Definition: ecrt.h:560
Operational.
Definition: ecrt.h:576
uint16_t address
Register address.
Definition: reg_request.h:54
uint32_t vendor_id
Vendor-ID stored on the slave.
Definition: ecrt.h:382
Register request.
Definition: reg_request.h:48
uint32_t ecrt_foe_request_error_code(const ec_foe_request_t *req)
Get the FoE error code from the FoE request.
Definition: foe_request.c:243
ec_slave_port_link_t link
Port link state.
Definition: ecrt.h:390
Safe-operational.
Definition: ecrt.h:575
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:474
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:3286
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:3214
size_t ecrt_master_send_ext(ec_master_t *master)
Sends non-application datagrams.
Definition: master.c:3087
Disable the watchdog.
Definition: ecrt.h:453
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:925
uint32_t delay_to_next_dc
Delay [ns] to next DC slave.
Definition: ecrt.h:395
Enable the watchdog.
Definition: ecrt.h:452
ec_wc_state_t wc_state
Working counter interpretation.
Definition: ecrt.h:428
PDO configuration information.
Definition: ecrt.h:478
ec_domain_t * ecrt_master_create_domain(ec_master_t *master)
Creates a new process data domain.
Definition: master.c:2796
unsigned int ready
The slave is ready for external requests.
Definition: ecrt.h:331
void ecrt_voe_handler_read(ec_voe_handler_t *voe)
Start a VoE read operation.
Definition: voe_handler.c:160
int ecrt_master_setup_domain_memory(ec_master_t *master)
setup the domain&#39;s process data memory.
Definition: master.c:2806
Sync manager configuration information.
Definition: ecrt.h:497
ec_wc_state_t
Domain working counter interpretation.
Definition: ecrt.h:413
void ecrt_foe_request_timeout(ec_foe_request_t *req, uint32_t timeout)
Set the timeout for an FoE request.
Definition: foe_request.c:179
void ecrt_foe_request_write(ec_foe_request_t *req, size_t size)
Schedule an FoE write operation.
Definition: foe_request.c:281
unsigned int slaves_responding
Sum of responding slaves on all Ethernet devices.
Definition: ecrt.h:270
void ecrt_master_state(const ec_master_t *master, ec_master_state_t *state)
Reads the current master state.
Definition: master.c:3300
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:169
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:510
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:3384
void ecrt_sdo_request_timeout(ec_sdo_request_t *req, uint32_t timeout)
Set the timeout for an SDO request.
Definition: sdo_request.c:204
unsigned int link_up
true, if the network link is up.
Definition: ecrt.h:345
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. ...
OpCode error.
Definition: ecrt.h:557
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:990
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.
No data while reading.
Definition: ecrt.h:563
Some of the registered process data were exchanged.
Definition: ecrt.h:415
uint32_t revision_number
Revision-Number stored on the slave.
Definition: ecrt.h:384
uint8_t * ecrt_sdo_request_data(ec_sdo_request_t *req)
Access to the SDO request&#39;s data.
Definition: sdo_request.c:211
size_t ecrt_foe_request_progress(const ec_foe_request_t *req)
Returns the progress of the current transfer.
Definition: foe_request.c:254
Use the default setting of the sync manager.
Definition: ecrt.h:451
int ecrt_master_64bit_reference_clock_time(ec_master_t *master, uint64_t *time)
Get the 64bit dc reference slave clock time.
Definition: master.c:3417
uint16_t alias
Slave alias address.
Definition: ecrt.h:516
Not requested.
Definition: ecrt.h:538
int ecrt_master_sdo_upload_complete(ec_master_t *master, uint16_t slave_position, uint16_t index, 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 via complete access.
Definition: master.c:3711
ec_sdo_request_t * ecrt_slave_config_create_sdo_request_complete(ec_slave_config_t *sc, uint16_t index, size_t size)
Create an SDO request to exchange SDOs during realtime operation using complete access.
uint16_t index
PDO index.
Definition: ecrt.h:479
void ecrt_sdo_request_read(ec_sdo_request_t *req)
Schedule an SDO read operation.
Definition: sdo_request.c:232
ec_master_t * ecrt_request_master(unsigned int master_index)
Requests an EtherCAT master for realtime operation.
Definition: module.c:620
Idle.
Definition: ecrt.h:551
Master state.
Definition: ecrt.h:269
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:318
Request is being processed.
Definition: ecrt.h:539
uint64_t app_time
Application time.
Definition: ecrt.h:347
ec_watchdog_mode_t watchdog_mode
Watchdog mode.
Definition: ecrt.h:505
void ecrt_foe_request_read(ec_foe_request_t *req)
Schedule an FoE read operation.
Definition: foe_request.c:265
unsigned int n_pdos
Number of PDOs in pdos.
Definition: ecrt.h:502
void ecrt_sdo_request_write_with_size(ec_sdo_request_t *req, size_t size)
Schedule an SDO write operation.
Definition: sdo_request.c:254
Domain state.
Definition: ecrt.h:426
uint32_t vendor_id
Slave vendor ID.
Definition: ecrt.h:518
unsigned int al_state
The application-layer state of the slave.
Definition: ecrt.h:322
unsigned int * bit_position
Pointer to a variable to store a bit position (0-7) within the offset.
Definition: ecrt.h:524
uint8_t * ecrt_foe_request_data(ec_foe_request_t *req)
Access to the FoE request&#39;s data.
Definition: foe_request.c:207
Port is an E-Bus.
Definition: ecrt.h:357
unsigned int error_flag
The slave has an unrecoverable error.
Definition: ecrt.h:330
unsigned int operational
The slave was brought into OP state using the specified configuration.
Definition: ecrt.h:320
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:3176
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:436
int ecrt_master_set_send_interval(ec_master_t *master, size_t send_interval)
Set interval between calls to ecrt_master_send().
void ecrt_reg_request_readwrite(ec_reg_request_t *req, uint16_t address, size_t size)
Schedule a register read-write operation.
Definition: reg_request.c:122
Read buffer overflow.
Definition: ecrt.h:565
unsigned int ecrt_version_magic(void)
Returns the version magic of the realtime interface.
Definition: module.c:654
Port is a MII.
Definition: ecrt.h:358
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:188
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.
void ecrt_master_exec_slave_requests(ec_master_t *master)
Explicit call to process slave requests.
Definition: master.c:3975
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:3628
Values read and written by the master.
Definition: ecrt.h:440
uint16_t position
Offset of the slave in the ring.
Definition: ecrt.h:332
void ecrt_foe_request_file(ec_foe_request_t *req, const char *file_name, uint32_t password)
Select the filename to use for the next FoE operation.
Definition: foe_request.c:191
Values read by the master.
Definition: ecrt.h:439
unsigned int scan_busy
true, if a slave rescan is in progress
Definition: ecrt.h:283
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:225
unsigned int online
The slave is online.
Definition: ecrt.h:319
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:4641
Port is not configured.
Definition: ecrt.h:356
Port is not implemented.
Definition: ecrt.h:355
Slave information.
Definition: ecrt.h:380
void ecrt_master_sync_monitor_queue(ec_master_t *master)
Queues the DC synchrony monitoring datagram for sending.
Definition: master.c:3440
void ecrt_master_deactivate_slaves(ec_master_t *master)
Deactivates the slaves distributed clocks and sends the slaves into PREOP.
Definition: master.c:2889
void ecrt_voe_handler_write(ec_voe_handler_t *voe, size_t size)
Start a VoE write operation.
Definition: voe_handler.c:178
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.
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:741
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:870
uint16_t index
PDO entry index.
Definition: ecrt.h:465
uint8_t al_state
Current state of the slave.
Definition: ecrt.h:398
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:3165
uint8_t ready
The slave is ready for external requests.
Definition: ecrt.h:401
uint8_t scan_busy
true, while the master is scanning the bus
Definition: ecrt.h:346
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:803
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:3870
int ecrt_master_activate(ec_master_t *master)
Finishes the configuration phase and prepares for cyclic operation.
Definition: master.c:2814
int16_t current_on_ebus
Used current in mA.
Definition: ecrt.h:387
Error fetching data from mailbox.
Definition: ecrt.h:562
size_t ecrt_sdo_request_data_size(const ec_sdo_request_t *req)
Returns the current SDO data size.
Definition: sdo_request.c:218
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:778
Busy.
Definition: ecrt.h:549
size_t ecrt_master_send(ec_master_t *master)
Sends all datagrams in the queue.
Definition: master.c:2986
uint8_t scan_required
The slave is being scanned.
Definition: ecrt.h:400
Invalid direction.
Definition: ecrt.h:437
uint8_t * data
Pointer to data memory.
Definition: reg_request.h:51
#define EC_MAX_PORTS
Maximum number of slave ports.
Definition: ecrt.h:217
Number of directions.
Definition: ecrt.h:441
uint16_t sdo_count
Number of SDOs.
Definition: ecrt.h:403
Acknowledge error.
Definition: ecrt.h:561
#define EC_MAX_STRING_LENGTH
Maximum string length.
Definition: ecrt.h:214
int ecrt_master_sdo_download(ec_master_t *master, uint16_t slave_position, uint16_t index, uint8_t subindex, const 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:3459
uint8_t * ecrt_domain_data(ec_domain_t *domain)
Returns the domain&#39;s process data.
Definition: domain.c:527
List record type for PDO entry mass-registration.
Definition: ecrt.h:515
unsigned int link_up
true, if at least one Ethernet link is up.
Definition: ecrt.h:281
Receive error.
Definition: ecrt.h:553
uint16_t next_slave
Ring position of next DC slave on that port.
Definition: ecrt.h:393
No registered process data were exchanged.
Definition: ecrt.h:414
No data error.
Definition: ecrt.h:555
All registered process data were exchanged.
Definition: ecrt.h:417
Timeout error.
Definition: ecrt.h:558
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:670
void ecrt_master_deactivate(ec_master_t *master)
Deactivates the master.
Definition: master.c:2926
unsigned int al_states
Application-layer states of all slaves.
Definition: ecrt.h:272
uint8_t upstream_port
Index of upstream (master facing) port.
Definition: ecrt.h:397
void ecrt_slave_config_overlapping_pdos(ec_slave_config_t *sc, uint8_t allow_overlapping_pdos)
Configure whether a slave allows overlapping PDOs.
Definition: slave_config.c:682
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:643
uint16_t alias
The slaves alias if not equal to 0.
Definition: ecrt.h:386
int ecrt_master(ec_master_t *master, ec_master_info_t *master_info)
Obtains master information.
Definition: master.c:3200
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:3794
EtherCAT slave configuration.
Definition: slave_config.h:118
uint32_t product_code
Product-Code stored on the slave.
Definition: ecrt.h:383
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:124
Request was processed successfully.
Definition: ecrt.h:540
ec_foe_error_t ecrt_foe_request_result(const ec_foe_request_t *req)
Get the result of the FoE request.
Definition: foe_request.c:236
FoE request.
Definition: foe_request.h:50
unsigned int * offset
Pointer to a variable to store the PDO entry&#39;s (byte-)offset in the process data. ...
Definition: ecrt.h:522
ec_request_state_t
Request state.
Definition: ecrt.h:537
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:3351
Master information.
Definition: ecrt.h:343
void ecrt_domain_state(const ec_domain_t *domain, ec_domain_state_t *state)
Reads the state of a domain.
Definition: domain.c:752
Working counter error.
Definition: ecrt.h:552
void ecrt_master_64bit_reference_clock_time_queue(ec_master_t *master)
Queues the 64bit dc reference slave clock time value datagram for sending.
Definition: master.c:3407
PDO entry configuration information.
Definition: ecrt.h:464
Protocol error.
Definition: ecrt.h:554
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:723
void ecrt_domain_process(ec_domain_t *domain)
Determines the states of the domain&#39;s datagrams.
Definition: domain.c:534
uint8_t index
Sync manager index.
Definition: ecrt.h:498
void ecrt_slave_config_state(const ec_slave_config_t *sc, ec_slave_config_state_t *state)
Outputs the state of the slave configuration.
int ecrt_master_sdo_download_complete(ec_master_t *master, uint16_t slave_position, uint16_t index, const 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:3543
Values written by the master.
Definition: ecrt.h:438
Init.
Definition: ecrt.h:573
void ecrt_domain_queue(ec_domain_t *domain)
(Re-)queues all domain datagrams in the master&#39;s datagram queue.
Definition: domain.c:722
uint16_t position
Offset of the slave in the ring.
Definition: ecrt.h:381
uint32_t receive_time
Receive time on DC transmission delay measurement.
Definition: ecrt.h:391
uint32_t product_code
Slave product code.
Definition: ecrt.h:519
EtherCAT master.
Definition: master.h:202
Request processing failed.
Definition: ecrt.h:541
void ecrt_master_sync_reference_clock(ec_master_t *master)
Queues the DC reference clock drift compensation datagram for sending.
Definition: master.c:3374
uint8_t subindex
PDO entry subindex.
Definition: ecrt.h:466
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:146
void ecrt_sdo_request_write(ec_sdo_request_t *req)
Schedule an SDO write operation.
Definition: sdo_request.c:243
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 and prepare for non-complete-access.
Definition: sdo_request.c:187
Error sending received data.
Definition: ecrt.h:559
ec_pdo_entry_info_t * entries
Array of PDO entries to map.
Definition: ecrt.h:484
int ecrt_master_rt_slave_requests(ec_master_t *master, unsigned int rt_slave_requests)
Selects whether to process slave requests by the application or the master.
Definition: master.c:3954
void ecrt_master_receive(ec_master_t *master)
Fetches received frames from the hardware and processes the datagrams.
Definition: master.c:3035