equal
deleted
inserted
replaced
51 } |
51 } |
52 } |
52 } |
53 |
53 |
54 /*****************************************************************************/ |
54 /*****************************************************************************/ |
55 |
55 |
|
56 void ec_master_clear(ec_master_t *master) |
|
57 { |
|
58 ec_domain_t *d, *next_d; |
|
59 ec_slave_config_t *c, *next_c; |
|
60 |
|
61 if (master->process_data) { |
|
62 munmap(master->process_data, master->process_data_size); |
|
63 } |
|
64 |
|
65 d = master->first_domain; |
|
66 while (d) { |
|
67 next_d = d->next; |
|
68 ec_domain_clear(d); |
|
69 d = next_d; |
|
70 } |
|
71 |
|
72 c = master->first_config; |
|
73 while (c) { |
|
74 next_c = c->next; |
|
75 ec_slave_config_clear(c); |
|
76 c = next_c; |
|
77 } |
|
78 |
|
79 if (master->fd != -1) { |
|
80 close(master->fd); |
|
81 } |
|
82 } |
|
83 |
|
84 /*****************************************************************************/ |
|
85 |
|
86 void ec_master_add_domain(ec_master_t *master, ec_domain_t *domain) |
|
87 { |
|
88 if (master->first_domain) { |
|
89 ec_domain_t *d = master->first_domain; |
|
90 while (d->next) { |
|
91 d = d->next; |
|
92 } |
|
93 d->next = domain; |
|
94 } else { |
|
95 master->first_domain = domain; |
|
96 } |
|
97 } |
|
98 |
|
99 /*****************************************************************************/ |
|
100 |
56 ec_domain_t *ecrt_master_create_domain(ec_master_t *master) |
101 ec_domain_t *ecrt_master_create_domain(ec_master_t *master) |
57 { |
102 { |
58 ec_domain_t *domain; |
103 ec_domain_t *domain; |
59 int index; |
104 int index; |
60 |
105 |
69 fprintf(stderr, "Failed to create domain: %s\n", strerror(errno)); |
114 fprintf(stderr, "Failed to create domain: %s\n", strerror(errno)); |
70 free(domain); |
115 free(domain); |
71 return 0; |
116 return 0; |
72 } |
117 } |
73 |
118 |
|
119 domain->next = NULL; |
74 domain->index = (unsigned int) index; |
120 domain->index = (unsigned int) index; |
75 domain->master = master; |
121 domain->master = master; |
76 domain->process_data = NULL; |
122 domain->process_data = NULL; |
|
123 |
|
124 ec_master_add_domain(master, domain); |
|
125 |
77 return domain; |
126 return domain; |
|
127 } |
|
128 |
|
129 /*****************************************************************************/ |
|
130 |
|
131 void ec_master_add_slave_config(ec_master_t *master, ec_slave_config_t *sc) |
|
132 { |
|
133 if (master->first_config) { |
|
134 ec_slave_config_t *c = master->first_config; |
|
135 while (c->next) { |
|
136 c = c->next; |
|
137 } |
|
138 c->next = sc; |
|
139 } else { |
|
140 master->first_config = sc; |
|
141 } |
78 } |
142 } |
79 |
143 |
80 /*****************************************************************************/ |
144 /*****************************************************************************/ |
81 |
145 |
82 ec_slave_config_t *ecrt_master_slave_config(ec_master_t *master, |
146 ec_slave_config_t *ecrt_master_slave_config(ec_master_t *master, |
103 strerror(errno)); |
167 strerror(errno)); |
104 free(sc); |
168 free(sc); |
105 return 0; |
169 return 0; |
106 } |
170 } |
107 |
171 |
|
172 sc->next = NULL; |
108 sc->master = master; |
173 sc->master = master; |
109 sc->index = data.config_index; |
174 sc->index = data.config_index; |
110 sc->alias = alias; |
175 sc->alias = alias; |
111 sc->position = position; |
176 sc->position = position; |
|
177 sc->first_sdo_request = NULL; |
|
178 sc->first_voe_handler = NULL; |
|
179 |
|
180 ec_master_add_slave_config(master, sc); |
|
181 |
112 return sc; |
182 return sc; |
113 } |
183 } |
114 |
184 |
115 /*****************************************************************************/ |
185 /*****************************************************************************/ |
116 |
186 |