equal
deleted
inserted
replaced
323 if (!master->thread_id) { |
323 if (!master->thread_id) { |
324 EC_WARN("ec_master_thread_stop: Already finished!\n"); |
324 EC_WARN("ec_master_thread_stop: Already finished!\n"); |
325 return; |
325 return; |
326 } |
326 } |
327 |
327 |
|
328 if (master->debug_level) |
|
329 EC_DBG("Stopping master thread.\n"); |
|
330 |
328 kill_proc(master->thread_id, SIGTERM, 1); |
331 kill_proc(master->thread_id, SIGTERM, 1); |
329 wait_for_completion(&master->thread_exit); |
332 wait_for_completion(&master->thread_exit); |
330 EC_INFO("Master thread exited.\n"); |
333 EC_INFO("Master thread exited.\n"); |
331 |
334 |
332 if (master->fsm_datagram.state != EC_DATAGRAM_SENT) return; |
335 if (master->fsm_datagram.state != EC_DATAGRAM_SENT) return; |
345 { |
348 { |
346 master->request_cb = ec_master_request_cb; |
349 master->request_cb = ec_master_request_cb; |
347 master->release_cb = ec_master_release_cb; |
350 master->release_cb = ec_master_release_cb; |
348 master->cb_data = master; |
351 master->cb_data = master; |
349 |
352 |
|
353 if (master->debug_level) |
|
354 EC_DBG("ORPHANED -> IDLE.\n"); |
|
355 |
350 master->mode = EC_MASTER_MODE_IDLE; |
356 master->mode = EC_MASTER_MODE_IDLE; |
351 if (ec_master_thread_start(master, ec_master_idle_thread)) { |
357 if (ec_master_thread_start(master, ec_master_idle_thread)) { |
352 master->mode = EC_MASTER_MODE_ORPHANED; |
358 master->mode = EC_MASTER_MODE_ORPHANED; |
353 return -1; |
359 return -1; |
354 } |
360 } |
360 |
366 |
361 /** Transition function from IDLE to ORPHANED mode. |
367 /** Transition function from IDLE to ORPHANED mode. |
362 */ |
368 */ |
363 void ec_master_leave_idle_mode(ec_master_t *master /**< EtherCAT master */) |
369 void ec_master_leave_idle_mode(ec_master_t *master /**< EtherCAT master */) |
364 { |
370 { |
|
371 if (master->debug_level) |
|
372 EC_DBG("IDLE -> ORPHANED.\n"); |
|
373 |
365 master->mode = EC_MASTER_MODE_ORPHANED; |
374 master->mode = EC_MASTER_MODE_ORPHANED; |
366 |
375 |
367 #ifdef EC_EOE |
376 #ifdef EC_EOE |
368 ec_master_eoe_stop(master); |
377 ec_master_eoe_stop(master); |
369 #endif |
378 #endif |
379 { |
388 { |
380 ec_slave_t *slave; |
389 ec_slave_t *slave; |
381 #ifdef EC_EOE |
390 #ifdef EC_EOE |
382 ec_eoe_t *eoe; |
391 ec_eoe_t *eoe; |
383 #endif |
392 #endif |
|
393 |
|
394 if (master->debug_level) |
|
395 EC_DBG("IDLE -> OPERATION.\n"); |
384 |
396 |
385 down(&master->config_sem); |
397 down(&master->config_sem); |
386 master->allow_config = 0; // temporarily disable slave configuration |
398 master->allow_config = 0; // temporarily disable slave configuration |
387 if (master->config_busy) { |
399 if (master->config_busy) { |
388 up(&master->config_sem); |
400 up(&master->config_sem); |
456 ec_slave_t *slave; |
468 ec_slave_t *slave; |
457 #ifdef EC_EOE |
469 #ifdef EC_EOE |
458 ec_eoe_t *eoe; |
470 ec_eoe_t *eoe; |
459 #endif |
471 #endif |
460 |
472 |
|
473 if (master->debug_level) |
|
474 EC_DBG("OPERATION -> IDLE.\n"); |
|
475 |
461 master->mode = EC_MASTER_MODE_IDLE; |
476 master->mode = EC_MASTER_MODE_IDLE; |
462 |
477 |
463 #ifdef EC_EOE |
478 #ifdef EC_EOE |
464 ec_master_eoe_stop(master); |
479 ec_master_eoe_stop(master); |
465 #endif |
480 #endif |