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