48 return ECRT_VERSION_MAGIC; |
48 return ECRT_VERSION_MAGIC; |
49 } |
49 } |
50 |
50 |
51 /*****************************************************************************/ |
51 /*****************************************************************************/ |
52 |
52 |
|
53 #define MAX_PATH_LEN 64 |
|
54 |
53 ec_master_t *ecrt_request_master(unsigned int master_index) |
55 ec_master_t *ecrt_request_master(unsigned int master_index) |
54 { |
56 { |
55 ec_master_t *master = ecrt_open_master(master_index); |
57 char path[MAX_PATH_LEN]; |
56 if (master) { |
58 ec_master_t *master; |
57 if (ecrt_master_reserve(master) < 0) { |
59 |
58 close(master->fd); |
60 master = malloc(sizeof(ec_master_t)); |
59 free(master); |
61 if (!master) { |
60 master = 0; |
62 fprintf(stderr, "Failed to allocate memory.\n"); |
61 } |
63 return 0; |
|
64 } |
|
65 |
|
66 master->process_data = NULL; |
|
67 master->process_data_size = 0; |
|
68 |
|
69 snprintf(path, MAX_PATH_LEN - 1, "/dev/EtherCAT%u", master_index); |
|
70 |
|
71 master->fd = open(path, O_RDWR); |
|
72 if (master->fd == -1) { |
|
73 fprintf(stderr, "Failed to open %s: %s\n", path, strerror(errno)); |
|
74 free(master); |
|
75 return 0; |
|
76 } |
|
77 |
|
78 if (ioctl(master->fd, EC_IOCTL_REQUEST, NULL) == -1) { |
|
79 fprintf(stderr, "Failed to request master %u: %s\n", |
|
80 master_index, strerror(errno)); |
|
81 close(master->fd); |
|
82 free(master); |
|
83 return 0; |
62 } |
84 } |
63 |
85 |
64 return master; |
86 return master; |
65 } |
|
66 |
|
67 /*****************************************************************************/ |
|
68 |
|
69 #define MAX_PATH_LEN 64 |
|
70 |
|
71 ec_master_t *ecrt_open_master(unsigned int master_index) |
|
72 { |
|
73 char path[MAX_PATH_LEN]; |
|
74 ec_master_t *master; |
|
75 |
|
76 master = malloc(sizeof(ec_master_t)); |
|
77 if (!master) { |
|
78 fprintf(stderr, "Failed to allocate memory.\n"); |
|
79 return 0; |
|
80 } |
|
81 |
|
82 master->process_data = NULL; |
|
83 master->process_data_size = 0; |
|
84 |
|
85 snprintf(path, MAX_PATH_LEN - 1, "/dev/EtherCAT%u", master_index); |
|
86 |
|
87 master->fd = open(path, O_RDWR); |
|
88 if (master->fd == -1) { |
|
89 fprintf(stderr, "Failed to open %s: %s\n", path, strerror(errno)); |
|
90 free(master); |
|
91 return 0; |
|
92 } |
|
93 |
|
94 return master; |
|
95 } |
87 } |
96 |
88 |
97 /*****************************************************************************/ |
89 /*****************************************************************************/ |
98 |
90 |
99 void ecrt_release_master(ec_master_t *master) |
91 void ecrt_release_master(ec_master_t *master) |