master/master.c
changeset 1006 90db4c3de57b
parent 1004 990b89d8ad03
child 1009 6012e1414bec
equal deleted inserted replaced
1005:5af7ab9a98b1 1006:90db4c3de57b
   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