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

This commit is contained in:
Florian Pose
2006-10-27 09:29:46 +00:00
parent 131589f534
commit 0573bbce4d
5 changed files with 26 additions and 29 deletions

View File

@@ -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");
}

View File

@@ -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();

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);
}
}
/*****************************************************************************/