mirror of
https://gitlab.com/etherlab.org/ethercat.git
synced 2026-02-08 04:41:44 +08:00
Moved functionality of ecrt_master_deactivate() (now deprecated) to ecrt_master_release().
This commit is contained in:
@@ -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");
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
Reference in New Issue
Block a user