From add980b522a8b4faa10175bb1aa1acab8af58721 Mon Sep 17 00:00:00 2001 From: Florian Pose <fp@igh-essen.com> Date: Fri, 27 Oct 2006 09:29:46 +0000 Subject: [PATCH] Moved functionality of ecrt_master_deactivate() (now deprecated) to ecrt_master_release(). --- examples/mini/mini.c | 9 +++----- examples/msr/msr_sample.c | 1 - examples/rtai/rtai_sample.c | 1 - include/ecrt.h | 2 +- master/master.c | 42 +++++++++++++++++++------------------ 5 files changed, 26 insertions(+), 29 deletions(-) diff --git a/examples/mini/mini.c b/examples/mini/mini.c index 2eed05ac..cb62a70b 100644 --- a/examples/mini/mini.c +++ b/examples/mini/mini.c @@ -201,12 +201,9 @@ void __exit cleanup_mini_module(void) { printk(KERN_INFO "=== Stopping Minimal EtherCAT environment... ===\n"); - if (master) { - del_timer_sync(&timer); - printk(KERN_INFO "Deactivating master...\n"); - ecrt_master_deactivate(master); - ecrt_release_master(master); - } + del_timer_sync(&timer); + printk(KERN_INFO "Releasing master...\n"); + ecrt_release_master(master); printk(KERN_INFO "=== Minimal EtherCAT environment stopped. ===\n"); } diff --git a/examples/msr/msr_sample.c b/examples/msr/msr_sample.c index 82b3fbce..0d148216 100644 --- a/examples/msr/msr_sample.c +++ b/examples/msr/msr_sample.c @@ -214,7 +214,6 @@ void __exit cleanup_mod(void) rt_task_delete(&task); stop_rt_timer(); - ecrt_master_deactivate(master); ecrt_release_master(master); rt_sem_delete(&master_sem); msr_rtlib_cleanup(); diff --git a/examples/rtai/rtai_sample.c b/examples/rtai/rtai_sample.c index aa536517..79889a35 100644 --- a/examples/rtai/rtai_sample.c +++ b/examples/rtai/rtai_sample.c @@ -202,7 +202,6 @@ void __exit cleanup_mod(void) rt_task_delete(&task); stop_rt_timer(); - ecrt_master_deactivate(master); ecrt_release_master(master); rt_sem_delete(&master_sem); diff --git a/include/ecrt.h b/include/ecrt.h index d6120e9e..b1c14f5c 100644 --- a/include/ecrt.h +++ b/include/ecrt.h @@ -109,7 +109,7 @@ void ecrt_master_callbacks(ec_master_t *master, int (*request_cb)(void *), ec_domain_t *ecrt_master_create_domain(ec_master_t *master); int ecrt_master_activate(ec_master_t *master); -void ecrt_master_deactivate(ec_master_t *master); +void ecrt_master_deactivate(ec_master_t *master); // deprecated! void ecrt_master_prepare(ec_master_t *master); diff --git a/master/master.c b/master/master.c index 388118d0..98d158aa 100644 --- a/master/master.c +++ b/master/master.c @@ -417,6 +417,25 @@ void ec_master_leave_operation_mode(ec_master_t *master /**< EtherCAT master */) { ec_slave_t *slave; + ec_fsm_t *fsm = &master->fsm; + ec_datagram_t *datagram = &master->fsm.datagram; + + // wait for FSM datagram + if (datagram->state == EC_DATAGRAM_SENT) { + while (get_cycles() - datagram->cycles_sent + < (cycles_t) EC_IO_TIMEOUT /* us */ * (cpu_khz / 1000)) {} + ecrt_master_receive(master); + } + + // set states for all slaves + list_for_each_entry(slave, &master->slaves, list) { + ec_slave_request_state(slave, EC_SLAVE_STATE_PREOP); + } + + // execute master FSM to deactivate slaves + while (ec_fsm_exec(fsm)) { + ec_master_sync_io(master); + } ec_master_destroy_domains(master); @@ -1325,31 +1344,14 @@ int ecrt_master_activate(ec_master_t *master /**< EtherCAT master */) /** Resets all slaves to INIT state. + This method is deprecated and will disappear in the next version + of the realtime interface. The functionality is moved to + ecrt_master_release(). \ingroup RealtimeInterface */ void ecrt_master_deactivate(ec_master_t *master /**< EtherCAT master */) { - ec_fsm_t *fsm = &master->fsm; - ec_slave_t *slave; - ec_datagram_t *datagram = &master->fsm.datagram; - - // wait for FSM datagram - if (datagram->state == EC_DATAGRAM_SENT) { - while (get_cycles() - datagram->cycles_sent - < (cycles_t) EC_IO_TIMEOUT /* us */ * (cpu_khz / 1000)) {} - ecrt_master_receive(master); - } - - // set states for all slaves - list_for_each_entry(slave, &master->slaves, list) { - ec_slave_request_state(slave, EC_SLAVE_STATE_PREOP); - } - - // execute master FSM to deactivate slaves - while (ec_fsm_exec(fsm)) { - ec_master_sync_io(master); - } } /*****************************************************************************/ -- GitLab