IgH EtherCAT Master  1.6.0
ecrt.h
Go to the documentation of this file.
1 /*****************************************************************************
2  *
3  * Copyright (C) 2006-2024 Florian Pose, Ingenieurgemeinschaft IgH
4  *
5  * This file is part of the IgH EtherCAT master userspace library.
6  *
7  * The IgH EtherCAT master userspace library is free software; you can
8  * redistribute it and/or modify it under the terms of the GNU Lesser General
9  * Public License as published by the Free Software Foundation; version 2.1
10  * of the License.
11  *
12  * The IgH EtherCAT master userspace library is distributed in the hope that
13  * it will be useful, but WITHOUT ANY WARRANTY; without even the implied
14  * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public License
18  * along with the IgH EtherCAT master userspace library. If not, see
19  * <http://www.gnu.org/licenses/>.
20  *
21  ****************************************************************************/
22 
149 /****************************************************************************/
150 
151 #ifndef __ECRT_H__
152 #define __ECRT_H__
153 
154 #ifdef __KERNEL__
155 #include <asm/byteorder.h>
156 #include <linux/types.h>
157 #include <linux/time.h>
158 #else
159 #include <stdlib.h> // for size_t
160 #include <stdint.h>
161 #include <sys/time.h> // for struct timeval
162 #endif
163 
164 /*****************************************************************************
165  * Global definitions
166  ****************************************************************************/
167 
170 #define ECRT_VER_MAJOR 1
171 
174 #define ECRT_VER_MINOR 6
175 
178 #define ECRT_VERSION(a, b) (((a) << 8) + (b))
179 
182 #define ECRT_VERSION_MAGIC ECRT_VERSION(ECRT_VER_MAJOR, ECRT_VER_MINOR)
183 
184 /*****************************************************************************
185  * Feature flags
186  ****************************************************************************/
187 
193 #define EC_HAVE_REDUNDANCY
194 
199 #define EC_HAVE_EMERGENCY
200 
207 #define EC_HAVE_REG_ACCESS
208 
211 #define EC_HAVE_SELECT_REF_CLOCK
212 
215 #define EC_HAVE_REF_CLOCK_TIME
216 
219 #define EC_HAVE_REG_BY_POS
220 
223 #define EC_HAVE_SYNC_TO
224 
227 #define EC_HAVE_FLAGS
228 
235 #define EC_HAVE_SOE_REQUESTS
236 
240 #define EC_HAVE_SCAN_PROGRESS
241 
242 /****************************************************************************/
243 
246 #ifndef EC_PUBLIC_API
247 # if defined(ethercat_EXPORTS) && !defined(__KERNEL__)
248 # define EC_PUBLIC_API __attribute__ ((visibility ("default")))
249 # else
250 # define EC_PUBLIC_API
251 # endif
252 #endif
253 
254 /****************************************************************************/
255 
260 #define EC_END ~0U
261 
264 #define EC_MAX_SYNC_MANAGERS 16
265 
270 #define EC_MAX_STRING_LENGTH 64
271 
273 #define EC_MAX_PORTS 4
274 
283 #define EC_TIMEVAL2NANO(TV) \
284  (((TV).tv_sec - 946684800ULL) * 1000000000ULL + (TV).tv_usec * 1000ULL)
285 
290 #define EC_COE_EMERGENCY_MSG_SIZE 8
291 
292 /*****************************************************************************
293  * Data types
294  ****************************************************************************/
295 
296 struct ec_master;
297 typedef struct ec_master ec_master_t;
299 struct ec_slave_config;
302 struct ec_domain;
303 typedef struct ec_domain ec_domain_t;
305 struct ec_sdo_request;
308 struct ec_soe_request;
311 struct ec_voe_handler;
314 struct ec_reg_request;
317 /****************************************************************************/
318 
325 typedef struct {
326  unsigned int slaves_responding;
328  unsigned int al_states : 4;
337  unsigned int link_up : 1;
340 
341 /****************************************************************************/
342 
349 typedef struct {
350  unsigned int slaves_responding;
352  unsigned int al_states : 4;
361  unsigned int link_up : 1;
364 
365 /****************************************************************************/
366 
373 typedef struct {
374  unsigned int online : 1;
375  unsigned int operational : 1;
377  unsigned int al_state : 4;
386 
387 /****************************************************************************/
388 
395 typedef struct {
396  unsigned int slave_count;
397  unsigned int link_up : 1;
398  uint8_t scan_busy;
400  uint64_t app_time;
402 
403 /****************************************************************************/
404 
411 typedef struct {
412  unsigned int slave_count;
413  unsigned int scan_index;
418 
419 /****************************************************************************/
420 
423 typedef enum {
429 
430 /****************************************************************************/
431 
434 typedef struct {
435  uint8_t link_up;
436  uint8_t loop_closed;
437  uint8_t signal_detected;
439 
440 /****************************************************************************/
441 
448 typedef struct {
449  uint16_t position;
450  uint32_t vendor_id;
451  uint32_t product_code;
452  uint32_t revision_number;
453  uint32_t serial_number;
454  uint16_t alias;
455  int16_t current_on_ebus;
456  struct {
459  uint32_t receive_time;
461  uint16_t next_slave;
463  uint32_t delay_to_next_dc;
464  } ports[EC_MAX_PORTS];
465  uint8_t al_state;
466  uint8_t error_flag;
467  uint8_t sync_count;
468  uint16_t sdo_count;
469  char name[EC_MAX_STRING_LENGTH];
471 
472 /****************************************************************************/
473 
478 typedef enum {
483 } ec_wc_state_t;
484 
485 /****************************************************************************/
486 
491 typedef struct {
492  unsigned int working_counter;
494  unsigned int redundancy_active;
496 
497 /****************************************************************************/
498 
501 typedef enum {
507 
508 /****************************************************************************/
509 
514 typedef enum {
519 
520 /****************************************************************************/
521 
528 typedef struct {
529  uint16_t index;
530  uint8_t subindex;
531  uint8_t bit_length;
533 
534 /****************************************************************************/
535 
542 typedef struct {
543  uint16_t index;
544  unsigned int n_entries;
551 } ec_pdo_info_t;
552 
553 /****************************************************************************/
554 
561 typedef struct {
562  uint8_t index;
566  unsigned int n_pdos;
571 
572 /****************************************************************************/
573 
579 typedef struct {
580  uint16_t alias;
581  uint16_t position;
582  uint32_t vendor_id;
583  uint32_t product_code;
584  uint16_t index;
585  uint8_t subindex;
586  unsigned int *offset;
588  unsigned int *bit_position;
593 
594 /****************************************************************************/
595 
601 typedef enum {
607 
608 /****************************************************************************/
609 
612 typedef enum {
617 } ec_al_state_t;
618 
619 /*****************************************************************************
620  * Global functions
621  ****************************************************************************/
622 
623 #ifdef __cplusplus
624 extern "C" {
625 #endif
626 
631 EC_PUBLIC_API unsigned int ecrt_version_magic(void);
632 
649  unsigned int master_index
650  );
651 
652 #ifndef __KERNEL__
653 
665 EC_PUBLIC_API ec_master_t *ecrt_open_master(
666  unsigned int master_index
667  );
668 
669 #endif // #ifndef __KERNEL__
670 
682  ec_master_t *master
683  );
684 
685 /*****************************************************************************
686  * Master methods
687  ****************************************************************************/
688 
689 #ifndef __KERNEL__
690 
698 EC_PUBLIC_API int ecrt_master_reserve(
699  ec_master_t *master
700  );
701 
702 #endif // #ifndef __KERNEL__
703 
704 #ifdef __KERNEL__
705 
724  ec_master_t *master,
725  void (*send_cb)(void *),
726  void (*receive_cb)(void *),
727  void *cb_data
729  );
730 
731 #endif /* __KERNEL__ */
732 
746  ec_master_t *master
747  );
748 
780  ec_master_t *master,
781  uint16_t alias,
782  uint16_t position,
783  uint32_t vendor_id,
784  uint32_t product_code
785  );
786 
796  ec_master_t *master,
797  ec_slave_config_t *sc
799  );
800 
811  ec_master_t *master,
812  ec_master_info_t *master_info
814  );
815 
825  ec_master_t *master,
826  ec_master_scan_progress_t *progress
828  );
829 
841  ec_master_t *master,
842  uint16_t slave_position,
843  ec_slave_info_t *slave_info
845  );
846 
847 #ifndef __KERNEL__
848 
857 EC_PUBLIC_API int ecrt_master_get_sync_manager(
858  ec_master_t *master,
859  uint16_t slave_position,
860  uint8_t sync_index,
862  ec_sync_info_t *sync
863  );
864 
874 EC_PUBLIC_API int ecrt_master_get_pdo(
875  ec_master_t *master,
876  uint16_t slave_position,
877  uint8_t sync_index,
879  uint16_t pos,
880  ec_pdo_info_t *pdo
881  );
882 
890 EC_PUBLIC_API int ecrt_master_get_pdo_entry(
891  ec_master_t *master,
892  uint16_t slave_position,
893  uint8_t sync_index,
895  uint16_t pdo_pos,
896  uint16_t entry_pos,
897  ec_pdo_entry_info_t *entry
898  );
899 
900 #endif /* #ifndef __KERNEL__ */
901 
912  ec_master_t *master,
913  uint16_t slave_position,
914  uint16_t index,
915  uint8_t subindex,
916  const uint8_t *data,
917  size_t data_size,
918  uint32_t *abort_code
919  );
920 
932  ec_master_t *master,
933  uint16_t slave_position,
934  uint16_t index,
935  const uint8_t *data,
936  size_t data_size,
937  uint32_t *abort_code
938  );
939 
950  ec_master_t *master,
951  uint16_t slave_position,
952  uint16_t index,
953  uint8_t subindex,
954  uint8_t *target,
955  size_t target_size,
956  size_t *result_size,
957  uint32_t *abort_code
958  );
959 
969  ec_master_t *master,
970  uint16_t slave_position,
971  uint8_t drive_no,
972  uint16_t idn,
973  const uint8_t *data,
974  size_t data_size,
975  uint16_t *error_code
977  );
978 
988  ec_master_t *master,
989  uint16_t slave_position,
990  uint8_t drive_no,
991  uint16_t idn,
992  uint8_t *target,
994  size_t target_size,
995  size_t *result_size,
996  uint16_t *error_code
998  );
999 
1018  ec_master_t *master
1019  );
1020 
1035  ec_master_t *master
1036  );
1037 
1049  ec_master_t *master,
1050  size_t send_interval
1051  );
1052 
1065  ec_master_t *master
1066  );
1067 
1082  ec_master_t *master
1083  );
1084 
1085 #ifdef __KERNEL__
1086 
1093  ec_master_t *master
1094  );
1095 #endif
1096 
1106  const ec_master_t *master,
1107  ec_master_state_t *state
1108  );
1109 
1117  const ec_master_t *master,
1118  unsigned int dev_idx,
1120  ec_master_link_state_t *state
1122  );
1123 
1148  ec_master_t *master,
1149  uint64_t app_time
1150  );
1151 
1163  ec_master_t *master
1164  );
1165 
1180  ec_master_t *master,
1181  uint64_t sync_time
1182  );
1183 
1197  ec_master_t *master
1198  );
1199 
1221  const ec_master_t *master,
1222  uint32_t *time
1223  );
1224 
1234  ec_master_t *master
1235  );
1236 
1248  const ec_master_t *master
1249  );
1250 
1265  ec_master_t *master
1266  );
1267 
1268 /*****************************************************************************
1269  * Slave configuration methods
1270  ****************************************************************************/
1271 
1283  ec_slave_config_t *sc,
1284  uint8_t sync_index,
1286  ec_direction_t direction,
1287  ec_watchdog_mode_t watchdog_mode
1288  );
1289 
1298  ec_slave_config_t *sc,
1299  uint16_t watchdog_divider,
1304  uint16_t watchdog_intervals
1308  );
1309 
1319  ec_slave_config_t *sc,
1320  uint8_t sync_index,
1322  uint16_t index
1323  );
1324 
1338  ec_slave_config_t *sc,
1339  uint8_t sync_index
1341  );
1342 
1352  ec_slave_config_t *sc,
1353  uint16_t pdo_index,
1354  uint16_t entry_index,
1356  uint8_t entry_subindex,
1358  uint8_t entry_bit_length
1359  );
1360 
1373  ec_slave_config_t *sc,
1374  uint16_t pdo_index
1375  );
1376 
1449  ec_slave_config_t *sc,
1450  unsigned int n_syncs,
1452  const ec_sync_info_t syncs[]
1454  );
1455 
1475  ec_slave_config_t *sc,
1476  uint16_t entry_index,
1477  uint8_t entry_subindex,
1478  ec_domain_t *domain,
1479  unsigned int *bit_position
1481  );
1482 
1497  ec_slave_config_t *sc,
1498  uint8_t sync_index,
1499  unsigned int pdo_pos,
1500  unsigned int entry_pos,
1501  ec_domain_t *domain,
1502  unsigned int *bit_position
1504  );
1505 
1522  ec_slave_config_t *sc,
1523  uint16_t assign_activate,
1524  uint32_t sync0_cycle,
1525  int32_t sync0_shift,
1526  uint32_t sync1_cycle,
1527  int32_t sync1_shift
1528  );
1529 
1556  ec_slave_config_t *sc,
1557  uint16_t index,
1558  uint8_t subindex,
1559  const uint8_t *data,
1560  size_t size
1561  );
1562 
1574  ec_slave_config_t *sc,
1575  uint16_t sdo_index,
1576  uint8_t sdo_subindex,
1577  uint8_t value
1578  );
1579 
1591  ec_slave_config_t *sc,
1592  uint16_t sdo_index,
1593  uint8_t sdo_subindex,
1594  uint16_t value
1595  );
1596 
1608  ec_slave_config_t *sc,
1609  uint16_t sdo_index,
1610  uint8_t sdo_subindex,
1611  uint32_t value
1612  );
1613 
1628  ec_slave_config_t *sc,
1629  uint16_t index,
1630  const uint8_t *data,
1631  size_t size
1632  );
1633 
1645  ec_slave_config_t *sc,
1646  size_t elements
1647  );
1648 
1666  ec_slave_config_t *sc,
1667  uint8_t *target
1669  );
1670 
1681  ec_slave_config_t *sc
1682  );
1683 
1698  const ec_slave_config_t *sc
1699  );
1700 
1712  ec_slave_config_t *sc,
1713  uint16_t index,
1714  uint8_t subindex,
1715  size_t size
1716  );
1717 
1729  ec_slave_config_t *sc,
1730  uint8_t drive_no,
1731  uint16_t idn,
1732  size_t size
1733  );
1734 
1751  ec_slave_config_t *sc,
1752  size_t size
1753  );
1754 
1770  ec_slave_config_t *sc,
1771  size_t size
1772  );
1773 
1789  const ec_slave_config_t *sc,
1790  ec_slave_config_state_t *state
1791  );
1792 
1816  ec_slave_config_t *sc,
1817  uint8_t drive_no,
1818  uint16_t idn,
1819  ec_al_state_t state,
1821  const uint8_t *data,
1822  size_t size
1823  );
1824 
1848  ec_slave_config_t *sc,
1849  const char *key,
1850  int32_t value
1851  );
1852 
1853 /*****************************************************************************
1854  * Domain methods
1855  ****************************************************************************/
1856 
1869  ec_domain_t *domain,
1870  const ec_pdo_entry_reg_t *pdo_entry_regs
1872  );
1873 
1879  const ec_domain_t *domain
1880  );
1881 
1882 #ifdef __KERNEL__
1883 
1897  ec_domain_t *domain,
1898  uint8_t *memory
1900  );
1901 
1902 #endif /* __KERNEL__ */
1903 
1918  const ec_domain_t *domain
1919  );
1920 
1932  ec_domain_t *domain
1933  );
1934 
1944  ec_domain_t *domain
1945  );
1946 
1957  const ec_domain_t *domain,
1958  ec_domain_state_t *state
1960  );
1961 
1962 /*****************************************************************************
1963  * SDO request methods.
1964  ****************************************************************************/
1965 
1980  ec_sdo_request_t *req,
1981  uint16_t index,
1982  uint8_t subindex
1983  );
1984 
1998  ec_sdo_request_t *req,
1999  uint32_t timeout
2001  );
2002 
2032  const ec_sdo_request_t *req
2033  );
2034 
2049  const ec_sdo_request_t *req
2050  );
2051 
2065 #ifdef __KERNEL__
2066  const
2067 #endif
2068  ec_sdo_request_t *req
2069  );
2070 
2086  ec_sdo_request_t *req
2087  );
2088 
2105  ec_sdo_request_t *req
2106  );
2107 
2108 /*****************************************************************************
2109  * SoE request methods.
2110  ****************************************************************************/
2111 
2126  ec_soe_request_t *req,
2127  uint8_t drive_no,
2128  uint16_t idn
2129  );
2130 
2144  ec_soe_request_t *req,
2145  uint32_t timeout
2147  );
2148 
2178  const ec_soe_request_t *req
2179  );
2180 
2190  const ec_soe_request_t *req
2191  );
2192 
2206 #ifdef __KERNEL__
2207  const
2208 #endif
2209  ec_soe_request_t *req
2210  );
2211 
2227  ec_soe_request_t *req
2228  );
2229 
2246  ec_soe_request_t *req
2247  );
2248 
2249 /*****************************************************************************
2250  * VoE handler methods.
2251  ****************************************************************************/
2252 
2268  ec_voe_handler_t *voe,
2269  uint32_t vendor_id,
2270  uint16_t vendor_type
2271  );
2272 
2288  const ec_voe_handler_t *voe,
2289  uint32_t *vendor_id,
2290  uint16_t *vendor_type
2291  );
2292 
2314  const ec_voe_handler_t *voe
2315  );
2316 
2330  const ec_voe_handler_t *voe
2331  );
2332 
2349  ec_voe_handler_t *voe,
2350  size_t size
2351  );
2352 
2375  ec_voe_handler_t *voe
2376  );
2377 
2401  ec_voe_handler_t *voe
2402  );
2403 
2417  ec_voe_handler_t *voe
2418  );
2419 
2420 /*****************************************************************************
2421  * Register request methods.
2422  ****************************************************************************/
2423 
2449  const ec_reg_request_t *req
2450  );
2451 
2462  const ec_reg_request_t *req
2463  );
2464 
2482  ec_reg_request_t *req,
2483  uint16_t address,
2484  size_t size
2485  );
2486 
2504  ec_reg_request_t *req,
2505  uint16_t address,
2506  size_t size
2507  );
2508 
2509 /*****************************************************************************
2510  * Bitwise read/write macros
2511  ****************************************************************************/
2512 
2518 #define EC_READ_BIT(DATA, POS) ((*((uint8_t *) (DATA)) >> (POS)) & 0x01)
2519 
2526 #define EC_WRITE_BIT(DATA, POS, VAL) \
2527  do { \
2528  if (VAL) *((uint8_t *) (DATA)) |= (1 << (POS)); \
2529  else *((uint8_t *) (DATA)) &= ~(1 << (POS)); \
2530  } while (0)
2531 
2532 /*****************************************************************************
2533  * Byte-swapping functions for user space
2534  ****************************************************************************/
2535 
2536 #ifndef __KERNEL__
2537 
2538 #if __BYTE_ORDER == __LITTLE_ENDIAN
2539 
2540 #define le16_to_cpu(x) x
2541 #define le32_to_cpu(x) x
2542 #define le64_to_cpu(x) x
2543 
2544 #define cpu_to_le16(x) x
2545 #define cpu_to_le32(x) x
2546 #define cpu_to_le64(x) x
2547 
2548 #elif __BYTE_ORDER == __BIG_ENDIAN
2549 
2550 #define swap16(x) \
2551  ((uint16_t)( \
2552  (((uint16_t)(x) & 0x00ffU) << 8) | \
2553  (((uint16_t)(x) & 0xff00U) >> 8) ))
2554 #define swap32(x) \
2555  ((uint32_t)( \
2556  (((uint32_t)(x) & 0x000000ffUL) << 24) | \
2557  (((uint32_t)(x) & 0x0000ff00UL) << 8) | \
2558  (((uint32_t)(x) & 0x00ff0000UL) >> 8) | \
2559  (((uint32_t)(x) & 0xff000000UL) >> 24) ))
2560 #define swap64(x) \
2561  ((uint64_t)( \
2562  (((uint64_t)(x) & 0x00000000000000ffULL) << 56) | \
2563  (((uint64_t)(x) & 0x000000000000ff00ULL) << 40) | \
2564  (((uint64_t)(x) & 0x0000000000ff0000ULL) << 24) | \
2565  (((uint64_t)(x) & 0x00000000ff000000ULL) << 8) | \
2566  (((uint64_t)(x) & 0x000000ff00000000ULL) >> 8) | \
2567  (((uint64_t)(x) & 0x0000ff0000000000ULL) >> 24) | \
2568  (((uint64_t)(x) & 0x00ff000000000000ULL) >> 40) | \
2569  (((uint64_t)(x) & 0xff00000000000000ULL) >> 56) ))
2570 
2571 #define le16_to_cpu(x) swap16(x)
2572 #define le32_to_cpu(x) swap32(x)
2573 #define le64_to_cpu(x) swap64(x)
2574 
2575 #define cpu_to_le16(x) swap16(x)
2576 #define cpu_to_le32(x) swap32(x)
2577 #define cpu_to_le64(x) swap64(x)
2578 
2579 #endif
2580 
2581 #define le16_to_cpup(x) le16_to_cpu(*((uint16_t *)(x)))
2582 #define le32_to_cpup(x) le32_to_cpu(*((uint32_t *)(x)))
2583 #define le64_to_cpup(x) le64_to_cpu(*((uint64_t *)(x)))
2584 
2585 #endif /* ifndef __KERNEL__ */
2586 
2587 /*****************************************************************************
2588  * Read macros
2589  ****************************************************************************/
2590 
2595 #define EC_READ_U8(DATA) \
2596  ((uint8_t) *((uint8_t *) (DATA)))
2597 
2603 #define EC_READ_S8(DATA) \
2604  ((int8_t) *((uint8_t *) (DATA)))
2605 
2611 #define EC_READ_U16(DATA) \
2612  ((uint16_t) le16_to_cpup((void *) (DATA)))
2613 
2619 #define EC_READ_S16(DATA) \
2620  ((int16_t) le16_to_cpup((void *) (DATA)))
2621 
2627 #define EC_READ_U32(DATA) \
2628  ((uint32_t) le32_to_cpup((void *) (DATA)))
2629 
2635 #define EC_READ_S32(DATA) \
2636  ((int32_t) le32_to_cpup((void *) (DATA)))
2637 
2643 #define EC_READ_U64(DATA) \
2644  ((uint64_t) le64_to_cpup((void *) (DATA)))
2645 
2651 #define EC_READ_S64(DATA) \
2652  ((int64_t) le64_to_cpup((void *) (DATA)))
2653 
2654 /*****************************************************************************
2655  * Floating-point read functions and macros (userspace only)
2656  ****************************************************************************/
2657 
2658 #ifndef __KERNEL__
2659 
2665 EC_PUBLIC_API float ecrt_read_real(const void *data);
2666 
2672 #define EC_READ_REAL(DATA) ecrt_read_real(DATA)
2673 
2679 EC_PUBLIC_API double ecrt_read_lreal(const void *data);
2680 
2686 #define EC_READ_LREAL(DATA) ecrt_read_lreal(DATA)
2687 
2688 #endif // ifndef __KERNEL__
2689 
2690 /*****************************************************************************
2691  * Write macros
2692  ****************************************************************************/
2693 
2699 #define EC_WRITE_U8(DATA, VAL) \
2700  do { \
2701  *((uint8_t *)(DATA)) = ((uint8_t) (VAL)); \
2702  } while (0)
2703 
2709 #define EC_WRITE_S8(DATA, VAL) EC_WRITE_U8(DATA, VAL)
2710 
2716 #define EC_WRITE_U16(DATA, VAL) \
2717  do { \
2718  *((uint16_t *) (DATA)) = cpu_to_le16((uint16_t) (VAL)); \
2719  } while (0)
2720 
2726 #define EC_WRITE_S16(DATA, VAL) EC_WRITE_U16(DATA, VAL)
2727 
2733 #define EC_WRITE_U32(DATA, VAL) \
2734  do { \
2735  *((uint32_t *) (DATA)) = cpu_to_le32((uint32_t) (VAL)); \
2736  } while (0)
2737 
2743 #define EC_WRITE_S32(DATA, VAL) EC_WRITE_U32(DATA, VAL)
2744 
2750 #define EC_WRITE_U64(DATA, VAL) \
2751  do { \
2752  *((uint64_t *) (DATA)) = cpu_to_le64((uint64_t) (VAL)); \
2753  } while (0)
2754 
2760 #define EC_WRITE_S64(DATA, VAL) EC_WRITE_U64(DATA, VAL)
2761 
2762 /*****************************************************************************
2763  * Floating-point write functions and macros (userspace only)
2764  ****************************************************************************/
2765 
2766 #ifndef __KERNEL__
2767 
2773 EC_PUBLIC_API void ecrt_write_real(void *data, float value);
2774 
2780 #define EC_WRITE_REAL(DATA, VAL) ecrt_write_real(DATA, VAL)
2781 
2787 EC_PUBLIC_API void ecrt_write_lreal(void *data, double value);
2788 
2794 #define EC_WRITE_LREAL(DATA, VAL) ecrt_write_lreal(DATA, VAL)
2795 
2796 #endif // ifndef __KERNEL__
2797 
2798 /****************************************************************************/
2799 
2800 #ifdef __cplusplus
2801 }
2802 #endif
2803 
2804 /****************************************************************************/
2805 
2808 #endif
unsigned int working_counter
Value of the last working counter.
Definition: ecrt.h:492
uint32_t serial_number
Serial-Number stored on the slave.
Definition: ecrt.h:453
ec_slave_port_desc_t desc
Physical port type.
Definition: ecrt.h:457
uint8_t subindex
PDO entry subindex.
Definition: ecrt.h:585
EC_PUBLIC_API int ecrt_slave_config_emerg_clear(ec_slave_config_t *sc)
Clears CoE emergency ring buffer and the overrun counter.
Pre-operational.
Definition: ecrt.h:614
uint16_t position
Slave position.
Definition: ecrt.h:581
EC_PUBLIC_API int ecrt_master_deactivate(ec_master_t *master)
Deactivates the master.
Definition: master.c:2353
uint8_t sync_count
Number of sync managers.
Definition: ecrt.h:467
EC_PUBLIC_API int 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:693
EC_PUBLIC_API 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:2757
unsigned int n_entries
Number of PDO entries in entries to map.
Definition: ecrt.h:544
#define EC_PUBLIC_API
Symbol visibility control macro.
Definition: ecrt.h:250
uint8_t bit_length
Size of the PDO entry in bit.
Definition: ecrt.h:531
ec_direction_t dir
Sync manager direction.
Definition: ecrt.h:565
uint8_t error_flag
Error flag for that slave.
Definition: ecrt.h:466
EC_PUBLIC_API size_t ecrt_sdo_request_data_size(const ec_sdo_request_t *req)
Returns the current SDO data size.
Definition: sdo_request.c:206
ec_watchdog_mode_t
Watchdog mode for sync manager configuration.
Definition: ecrt.h:514
EC_PUBLIC_API int 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:2818
ec_slave_port_desc_t
EtherCAT slave port descriptor.
Definition: ecrt.h:423
ec_pdo_info_t const * pdos
Array with PDOs to assign.
Definition: ecrt.h:567
EC_PUBLIC_API 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.
ec_al_state_t
Application-layer state.
Definition: ecrt.h:612
EC_PUBLIC_API int ecrt_sdo_request_timeout(ec_sdo_request_t *req, uint32_t timeout)
Set the timeout for an SDO request.
Definition: sdo_request.c:191
EC_PUBLIC_API int ecrt_slave_config_state(const ec_slave_config_t *sc, ec_slave_config_state_t *state)
Outputs the state of the slave configuration.
EC_PUBLIC_API int ecrt_master_scan_progress(ec_master_t *master, ec_master_scan_progress_t *progress)
Obtains network scan progress information.
Definition: master.c:2644
EC_PUBLIC_API int ecrt_reg_request_write(ec_reg_request_t *req, uint16_t address, size_t size)
Schedule an register write operation.
Definition: reg_request.c:92
EC_PUBLIC_API int ecrt_voe_handler_write(ec_voe_handler_t *voe, size_t size)
Start a VoE write operation.
Definition: voe_handler.c:173
EC_PUBLIC_API int ecrt_voe_handler_read(ec_voe_handler_t *voe)
Start a VoE read operation.
Definition: voe_handler.c:153
EC_PUBLIC_API int ecrt_soe_request_timeout(ec_soe_request_t *req, uint32_t timeout)
Set the timeout for an SoE request.
Definition: soe_request.c:278
unsigned int redundancy_active
Redundant link is in use.
Definition: ecrt.h:494
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:213
EC_PUBLIC_API int 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:650
CANopen SDO request.
Definition: sdo_request.h:40
unsigned int slave_count
Number of slaves in the network.
Definition: ecrt.h:396
EC_PUBLIC_API 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:390
EC_PUBLIC_API 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:2946
EC_PUBLIC_API ec_domain_t * ecrt_master_create_domain(ec_master_t *master)
Creates a new process data domain.
Definition: master.c:2269
uint16_t index
PDO entry index.
Definition: ecrt.h:584
EC_PUBLIC_API int ecrt_master_send(ec_master_t *master)
Sends all datagrams in the queue.
Definition: master.c:2424
EC_PUBLIC_API 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:842
EC_PUBLIC_API int ecrt_reg_request_read(ec_reg_request_t *req, uint16_t address, size_t size)
Schedule a register read operation.
Definition: reg_request.c:104
EC_PUBLIC_API uint8_t * ecrt_soe_request_data(const ec_soe_request_t *req)
Access to the SoE request&#39;s data.
Definition: soe_request.c:286
Operational.
Definition: ecrt.h:616
uint32_t vendor_id
Vendor-ID stored on the slave.
Definition: ecrt.h:450
Register request.
Definition: reg_request.h:40
ec_slave_port_link_t link
Port link state.
Definition: ecrt.h:458
Safe-operational.
Definition: ecrt.h:615
EC_PUBLIC_API 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:982
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:2719
EC_PUBLIC_API 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:623
Master scan progress information.
Definition: ecrt.h:411
Disable the watchdog.
Definition: ecrt.h:517
uint32_t delay_to_next_dc
Delay [ns] to next DC slave.
Definition: ecrt.h:463
EC_PUBLIC_API int ecrt_soe_request_idn(ec_soe_request_t *req, uint8_t drive_no, uint16_t idn)
Set the request&#39;s drive and Sercos ID numbers.
Definition: soe_request.c:268
EC_PUBLIC_API 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.
Enable the watchdog.
Definition: ecrt.h:516
ec_wc_state_t wc_state
Working counter interpretation.
Definition: ecrt.h:493
PDO configuration information.
Definition: ecrt.h:542
Sync manager configuration information.
Definition: ecrt.h:561
ec_wc_state_t
Domain working counter interpretation.
Definition: ecrt.h:478
EC_PUBLIC_API 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:897
unsigned int slaves_responding
Sum of responding slaves on all Ethernet devices.
Definition: ecrt.h:326
EC_PUBLIC_API int ecrt_master_sync_slave_clocks(ec_master_t *master)
Queues the DC clock drift compensation datagram for sending.
Definition: master.c:2834
EC_PUBLIC_API 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.
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:426
EC_PUBLIC_API 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. ...
unsigned int link_up
true, if the network link is up.
Definition: ecrt.h:397
EC_PUBLIC_API int ecrt_master_write_idn(ec_master_t *master, uint16_t slave_position, uint8_t drive_no, uint16_t idn, const uint8_t *data, size_t data_size, uint16_t *error_code)
Executes an SoE write request.
Definition: master.c:3110
Some of the registered process data were exchanged.
Definition: ecrt.h:480
EC_PUBLIC_API unsigned int ecrt_version_magic(void)
Returns the version magic of the realtime interface.
Definition: module.c:645
uint32_t revision_number
Revision-Number stored on the slave.
Definition: ecrt.h:452
EC_PUBLIC_API int ecrt_master_sync_monitor_queue(ec_master_t *master)
Queues the DC synchrony monitoring datagram for sending.
Definition: master.c:2847
Use the default setting of the sync manager.
Definition: ecrt.h:515
EC_PUBLIC_API 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.
EC_PUBLIC_API uint8_t * ecrt_domain_data(const ec_domain_t *domain)
Returns the domain&#39;s process data.
Definition: domain.c:443
uint16_t alias
Slave alias address.
Definition: ecrt.h:580
EC_PUBLIC_API int ecrt_master_reference_clock_time(const ec_master_t *master, uint32_t *time)
Get the lower 32 bit of the reference clock system time.
Definition: master.c:2785
Not requested.
Definition: ecrt.h:602
EC_PUBLIC_API ec_request_state_t ecrt_voe_handler_execute(ec_voe_handler_t *voe)
Execute the handler.
Definition: voe_handler.c:184
uint16_t index
PDO index.
Definition: ecrt.h:543
Master state.
Definition: ecrt.h:325
EC_PUBLIC_API uint8_t * ecrt_reg_request_data(const ec_reg_request_t *req)
Access to the register request&#39;s data.
Definition: reg_request.c:78
Slave configuration state.
Definition: ecrt.h:373
Request is being processed.
Definition: ecrt.h:603
uint64_t app_time
Application time.
Definition: ecrt.h:400
ec_watchdog_mode_t watchdog_mode
Watchdog mode.
Definition: ecrt.h:569
unsigned int n_pdos
Number of PDOs in pdos.
Definition: ecrt.h:566
EC_PUBLIC_API int 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:181
Domain state.
Definition: ecrt.h:491
EC_PUBLIC_API int ecrt_slave_config_emerg_overruns(const ec_slave_config_t *sc)
Read the number of CoE emergency overruns.
uint32_t vendor_id
Slave vendor ID.
Definition: ecrt.h:582
unsigned int al_state
The application-layer state of the slave.
Definition: ecrt.h:377
unsigned int * bit_position
Pointer to a variable to store a bit position (0-7) within the offset.
Definition: ecrt.h:588
EC_PUBLIC_API int ecrt_master_reset(ec_master_t *master)
Retry configuring slaves.
Definition: master.c:3270
EC_PUBLIC_API size_t ecrt_domain_size(const ec_domain_t *domain)
Returns the current size of the domain&#39;s process data.
Definition: domain.c:419
Port is an E-Bus.
Definition: ecrt.h:426
unsigned int operational
The slave was brought into OP state using the specified configuration.
Definition: ecrt.h:375
EC_PUBLIC_API uint8_t * ecrt_sdo_request_data(const ec_sdo_request_t *req)
Access to the SDO request&#39;s data.
Definition: sdo_request.c:199
EC_PUBLIC_API int ecrt_sdo_request_write(ec_sdo_request_t *req)
Schedule an SDO write operation.
Definition: sdo_request.c:232
EC_PUBLIC_API 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:3186
ec_direction_t
Direction type for PDO assignment functions.
Definition: ecrt.h:501
EC_PUBLIC_API int ecrt_domain_queue(ec_domain_t *domain)
(Re-)queues all domain datagrams in the master&#39;s datagram queue.
Definition: domain.c:641
EC_PUBLIC_API 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:2599
EC_PUBLIC_API int ecrt_master_sync_reference_clock(ec_master_t *master)
Queues the DC reference clock drift compensation datagram for sending.
Definition: master.c:2805
Port is a MII.
Definition: ecrt.h:427
EC_PUBLIC_API int ecrt_slave_config_flag(ec_slave_config_t *sc, const char *key, int32_t value)
Adds a feature flag to a slave configuration.
EC_PUBLIC_API 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.
Vendor specific over EtherCAT handler.
Definition: voe_handler.h:41
EC_PUBLIC_API size_t ecrt_soe_request_data_size(const ec_soe_request_t *req)
Returns the current IDN data size.
Definition: soe_request.c:293
ec_pdo_entry_info_t const * entries
Array of PDO entries to map.
Definition: ecrt.h:548
EC_PUBLIC_API 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:663
EC_PUBLIC_API int 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:962
EC_PUBLIC_API 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.
int ecrt_master_send_ext(ec_master_t *master)
Sends non-application datagrams.
Definition: master.c:2522
EC_PUBLIC_API 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:2610
Values read by the master.
Definition: ecrt.h:504
EC_PUBLIC_API int 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:125
unsigned int online
The slave is online.
Definition: ecrt.h:374
EC_PUBLIC_API int ecrt_domain_process(ec_domain_t *domain)
Determines the states of the domain&#39;s datagrams.
Definition: domain.c:450
EC_PUBLIC_API int ecrt_master_application_time(ec_master_t *master, uint64_t app_time)
Sets the application time.
Definition: master.c:2773
Port is not configured.
Definition: ecrt.h:425
EC_PUBLIC_API int ecrt_master(ec_master_t *master, ec_master_info_t *master_info)
Obtains master information.
Definition: master.c:2630
Port is not implemented.
Definition: ecrt.h:424
Slave information.
Definition: ecrt.h:448
EC_PUBLIC_API int ecrt_soe_request_write(ec_soe_request_t *req)
Schedule an SoE IDN write operation.
Definition: soe_request.c:314
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:85
EC_PUBLIC_API int 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:749
EC_PUBLIC_API uint32_t ecrt_master_sync_monitor_process(const ec_master_t *master)
Processes the DC synchrony monitoring datagram.
Definition: master.c:2856
EC_PUBLIC_API 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:2657
uint16_t index
PDO entry index.
Definition: ecrt.h:529
uint8_t al_state
Current state of the slave.
Definition: ecrt.h:465
uint8_t scan_busy
true, while the master is scanning the network.
Definition: ecrt.h:398
EC_PUBLIC_API ec_master_t * ecrt_request_master(unsigned int master_index)
Requests an EtherCAT master for realtime operation.
Definition: module.c:611
int16_t current_on_ebus
Used current in mA.
Definition: ecrt.h:455
EC_PUBLIC_API int ecrt_soe_request_read(ec_soe_request_t *req)
Schedule an SoE IDN read operation.
Definition: soe_request.c:307
Invalid direction.
Definition: ecrt.h:502
#define EC_MAX_PORTS
Maximum number of slave ports.
Definition: ecrt.h:273
EC_PUBLIC_API 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:2867
EC_PUBLIC_API uint8_t * ecrt_voe_handler_data(const ec_voe_handler_t *voe)
Access to the VoE handler&#39;s data.
Definition: voe_handler.c:139
Number of directions.
Definition: ecrt.h:505
EC_PUBLIC_API ec_soe_request_t * ecrt_slave_config_create_soe_request(ec_slave_config_t *sc, uint8_t drive_no, uint16_t idn, size_t size)
Create an SoE request to exchange SoE IDNs during realtime operation.
EC_PUBLIC_API 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.
uint16_t sdo_count
Number of SDOs.
Definition: ecrt.h:468
#define EC_MAX_STRING_LENGTH
Maximum string length.
Definition: ecrt.h:270
EC_PUBLIC_API int ecrt_sdo_request_read(ec_sdo_request_t *req)
Schedule an SDO read operation.
Definition: sdo_request.c:220
List record type for PDO entry mass-registration.
Definition: ecrt.h:579
unsigned int link_up
true, if at least one Ethernet link is up.
Definition: ecrt.h:337
EC_PUBLIC_API 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:775
EC_PUBLIC_API ec_request_state_t ecrt_soe_request_state(const ec_soe_request_t *req)
Get the current state of the SoE request.
Definition: soe_request.c:300
unsigned int scan_index
Index of the slave that is currently scanned.
Definition: ecrt.h:413
uint16_t next_slave
Ring position of next DC slave on that port.
Definition: ecrt.h:461
EC_PUBLIC_API int ecrt_domain_state(const ec_domain_t *domain, ec_domain_state_t *state)
Reads the state of a domain.
Definition: domain.c:672
No registered process data were exchanged.
Definition: ecrt.h:479
All registered process data were exchanged.
Definition: ecrt.h:482
unsigned int al_states
Application-layer states of all slaves.
Definition: ecrt.h:328
EC_PUBLIC_API int ecrt_master_activate(ec_master_t *master)
Finishes the configuration phase and prepares for cyclic operation.
Definition: master.c:2279
EC_PUBLIC_API size_t ecrt_voe_handler_data_size(const ec_voe_handler_t *voe)
Returns the current data size.
Definition: voe_handler.c:146
uint16_t alias
The slaves alias if not equal to 0.
Definition: ecrt.h:454
EtherCAT slave configuration.
Definition: slave_config.h:111
uint32_t product_code
Product-Code stored on the slave.
Definition: ecrt.h:451
unsigned int slave_count
Number of slaves detected.
Definition: ecrt.h:412
Request was processed successfully.
Definition: ecrt.h:604
EC_PUBLIC_API int ecrt_master_receive(ec_master_t *master)
Fetches received frames from the hardware and processes the datagrams.
Definition: master.c:2469
unsigned int * offset
Pointer to a variable to store the PDO entry&#39;s (byte-)offset in the process data. ...
Definition: ecrt.h:586
ec_request_state_t
Request state.
Definition: ecrt.h:601
Master information.
Definition: ecrt.h:395
PDO entry configuration information.
Definition: ecrt.h:528
uint8_t index
Sync manager index.
Definition: ecrt.h:562
Values written by the master.
Definition: ecrt.h:503
Init.
Definition: ecrt.h:613
EC_PUBLIC_API 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.
EC_PUBLIC_API 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:712
EC_PUBLIC_API int ecrt_slave_config_emerg_size(ec_slave_config_t *sc, size_t elements)
Set the size of the CoE emergency ring buffer.
uint16_t position
Offset of the slave in the ring.
Definition: ecrt.h:449
uint32_t receive_time
Receive time on DC transmission delay measurement.
Definition: ecrt.h:459
uint32_t product_code
Slave product code.
Definition: ecrt.h:583
EtherCAT master.
Definition: master.h:183
Request processing failed.
Definition: ecrt.h:605
EC_PUBLIC_API int ecrt_master_set_send_interval(ec_master_t *master, size_t send_interval)
Set interval between calls to ecrt_master_send().
uint8_t subindex
PDO entry subindex.
Definition: ecrt.h:530
EC_PUBLIC_API int ecrt_master_state(const ec_master_t *master, ec_master_state_t *state)
Reads the current master state.
Definition: master.c:2733
Sercos-over-EtherCAT request.
Definition: soe_request.h:40
EC_PUBLIC_API void ecrt_release_master(ec_master_t *master)
Releases a requested EtherCAT master.
Definition: module.c:619
EtherCAT domain.
Definition: domain.h:46
EC_PUBLIC_API 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:3027
EC_PUBLIC_API int 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:115
EC_PUBLIC_API int 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:163