* Etherlab Asynchronous execution code
#include <native/timer.h>
// declaration of interface variables
%(located_variables_declaration)s
#define CONFIGURE_PDOS %(configure_pdos)d
static uint8_t *domain1_pd = NULL;
%(used_pdo_entry_offset_variables_declaration)s
const static ec_pdo_entry_reg_t domain1_regs[] = {
%(used_pdo_entry_configuration)s
/*****************************************************************************/
%(pdos_configuration_declaration)s
CstructMstrAttach MstrAttach;
long long wait_period_ns = 100000LL;
static ec_master_t *master = NULL;
static ec_domain_t *domain1 = NULL;
/* Beremiz plugin functions */
int __init_%(location)s(int argc,char **argv)
MstrAttach.masterindex = %(master_number)d;
master = ecrt_request_master(MstrAttach.masterindex);
domain1 = ecrt_master_create_domain(master);
if (ecrt_domain_reg_pdo_entry_list(domain1, domain1_regs)) {
fprintf(stderr, "PDO entry registration failed!\n");
sprintf(&rt_dev_file[0],"%%s%%u",EC_RTDM_DEV_FILE_NAME,0);
rt_fd = rt_dev_open( &rt_dev_file[0], 0);
printf("Can't open %%s\n", &rt_dev_file[0]);
// attach the master over rtdm driver
MstrAttach.domainindex = ecrt_domain_index(domain1);
rtstatus = ecrt_rtdm_master_attach(rt_fd, &MstrAttach);
printf("Cannot attach to master over rtdm\n");
if (ecrt_master_activate(master))
if (!(domain1_pd = ecrt_domain_data(domain1))) {
fprintf(stderr, "domain1_pd: 0x%%.6lx\n", (unsigned long)domain1_pd);
fprintf(stdout, "Master %(master_number)d activated...\n");
void __cleanup_%(location)s(void)
ecrt_release_master(master);
void __retrieve_%(location)s(void)
ecrt_rtdm_master_recieve(rt_fd);
ecrt_rtdm_domain_process(rt_fd);
rt_task_sleep(rt_timer_ns2tsc(wait_period_ns));
ecrt_rtdm_domain_queque(rt_fd);
ecrt_rtdm_master_send(rt_fd);
void __publish_%(location)s(void)