Skip to content
Snippets Groups Projects
Commit add980b5 authored by Florian Pose's avatar Florian Pose
Browse files

Moved functionality of ecrt_master_deactivate() (now deprecated) to ecrt_master_release().

parent 6842ec13
No related branches found
No related tags found
No related merge requests found
...@@ -201,12 +201,9 @@ void __exit cleanup_mini_module(void) ...@@ -201,12 +201,9 @@ void __exit cleanup_mini_module(void)
{ {
printk(KERN_INFO "=== Stopping Minimal EtherCAT environment... ===\n"); printk(KERN_INFO "=== Stopping Minimal EtherCAT environment... ===\n");
if (master) { del_timer_sync(&timer);
del_timer_sync(&timer); printk(KERN_INFO "Releasing master...\n");
printk(KERN_INFO "Deactivating master...\n"); ecrt_release_master(master);
ecrt_master_deactivate(master);
ecrt_release_master(master);
}
printk(KERN_INFO "=== Minimal EtherCAT environment stopped. ===\n"); printk(KERN_INFO "=== Minimal EtherCAT environment stopped. ===\n");
} }
......
...@@ -214,7 +214,6 @@ void __exit cleanup_mod(void) ...@@ -214,7 +214,6 @@ void __exit cleanup_mod(void)
rt_task_delete(&task); rt_task_delete(&task);
stop_rt_timer(); stop_rt_timer();
ecrt_master_deactivate(master);
ecrt_release_master(master); ecrt_release_master(master);
rt_sem_delete(&master_sem); rt_sem_delete(&master_sem);
msr_rtlib_cleanup(); msr_rtlib_cleanup();
......
...@@ -202,7 +202,6 @@ void __exit cleanup_mod(void) ...@@ -202,7 +202,6 @@ void __exit cleanup_mod(void)
rt_task_delete(&task); rt_task_delete(&task);
stop_rt_timer(); stop_rt_timer();
ecrt_master_deactivate(master);
ecrt_release_master(master); ecrt_release_master(master);
rt_sem_delete(&master_sem); rt_sem_delete(&master_sem);
......
...@@ -109,7 +109,7 @@ void ecrt_master_callbacks(ec_master_t *master, int (*request_cb)(void *), ...@@ -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); ec_domain_t *ecrt_master_create_domain(ec_master_t *master);
int ecrt_master_activate(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); void ecrt_master_prepare(ec_master_t *master);
......
...@@ -417,6 +417,25 @@ void ec_master_leave_operation_mode(ec_master_t *master ...@@ -417,6 +417,25 @@ void ec_master_leave_operation_mode(ec_master_t *master
/**< EtherCAT master */) /**< EtherCAT master */)
{ {
ec_slave_t *slave; 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); ec_master_destroy_domains(master);
...@@ -1325,31 +1344,14 @@ int ecrt_master_activate(ec_master_t *master /**< EtherCAT master */) ...@@ -1325,31 +1344,14 @@ int ecrt_master_activate(ec_master_t *master /**< EtherCAT master */)
/** /**
Resets all slaves to INIT state. 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 \ingroup RealtimeInterface
*/ */
void ecrt_master_deactivate(ec_master_t *master /**< EtherCAT master */) 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);
}
} }
/*****************************************************************************/ /*****************************************************************************/
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment