changeset 88 | 98335157e54e |
parent 85 | eb24637883ef |
child 91 | 0120d6214948 |
87:4c18218d8fd0 | 88:98335157e54e |
---|---|
236 |
236 |
237 ec_master_t *EtherCAT_rt_request_master(unsigned int index) |
237 ec_master_t *EtherCAT_rt_request_master(unsigned int index) |
238 { |
238 { |
239 ec_master_t *master; |
239 ec_master_t *master; |
240 |
240 |
241 EC_INFO("===== Starting master %i... =====\n", index); |
|
242 |
|
241 if (index < 0 || index >= ec_master_count) { |
243 if (index < 0 || index >= ec_master_count) { |
242 EC_ERR("Master %i does not exist!\n", index); |
244 EC_ERR("Master %i does not exist!\n", index); |
243 goto req_return; |
245 goto req_return; |
244 } |
246 } |
245 |
247 |
269 EC_ERR("Bus scan failed!\n"); |
271 EC_ERR("Bus scan failed!\n"); |
270 goto req_close; |
272 goto req_close; |
271 } |
273 } |
272 |
274 |
273 ec_masters_reserved[index] = 1; |
275 ec_masters_reserved[index] = 1; |
274 EC_INFO("Reserved master %i.\n", index); |
276 EC_INFO("===== Master %i ready. =====\n", index); |
275 |
277 |
276 return master; |
278 return master; |
277 |
279 |
278 req_close: |
280 req_close: |
279 ec_master_close(master); |
281 ec_master_close(master); |
281 req_module_put: |
283 req_module_put: |
282 module_put(master->device.module); |
284 module_put(master->device.module); |
283 ec_master_reset(master); |
285 ec_master_reset(master); |
284 |
286 |
285 req_return: |
287 req_return: |
288 EC_INFO("===== Failed to start master %i =====\n", index); |
|
286 return NULL; |
289 return NULL; |
287 } |
290 } |
288 |
291 |
289 /*****************************************************************************/ |
292 /*****************************************************************************/ |
290 |
293 |
294 @param master Zeiger auf den freizugebenden EtherCAT-Master. |
297 @param master Zeiger auf den freizugebenden EtherCAT-Master. |
295 */ |
298 */ |
296 |
299 |
297 void EtherCAT_rt_release_master(ec_master_t *master) |
300 void EtherCAT_rt_release_master(ec_master_t *master) |
298 { |
301 { |
299 unsigned int i; |
302 unsigned int i, found; |
300 |
303 |
301 for (i = 0; i < ec_master_count; i++) |
304 found = 0; |
302 { |
305 for (i = 0; i < ec_master_count; i++) { |
303 if (&ec_masters[i] == master) |
306 if (&ec_masters[i] == master) { |
304 { |
307 found = 1; |
305 if (!master->device_registered) { |
308 break; |
306 EC_WARN("Failed to release device module: No device!\n"); |
|
307 return; |
|
308 } |
|
309 |
|
310 ec_master_close(master); |
|
311 ec_master_reset(master); |
|
312 |
|
313 module_put(master->device.module); |
|
314 ec_masters_reserved[i] = 0; |
|
315 |
|
316 EC_INFO("Released master %i.\n", i); |
|
317 |
|
318 return; |
|
319 } |
309 } |
320 } |
310 } |
321 |
311 |
322 EC_WARN("Master %X was never requested!\n", (u32) master); |
312 if (!found) { |
313 EC_WARN("Master %X was never requested!\n", (u32) master); |
|
314 return; |
|
315 } |
|
316 |
|
317 EC_INFO("===== Stopping master %i... =====\n", i); |
|
318 |
|
319 ec_master_close(master); |
|
320 ec_master_reset(master); |
|
321 |
|
322 module_put(master->device.module); |
|
323 ec_masters_reserved[i] = 0; |
|
324 |
|
325 EC_INFO("===== Master %i stopped. =====\n", i); |
|
326 return; |
|
323 } |
327 } |
324 |
328 |
325 /*****************************************************************************/ |
329 /*****************************************************************************/ |
326 |
330 |
327 module_init(ec_init_module); |
331 module_init(ec_init_module); |