Fixed reset of allow_scanning flag if ecrt_master_activate() was not called.

This commit is contained in:
Florian Pose 2012-01-13 11:27:20 +01:00
parent c9447c2ba0
commit d88ab15d42
1 changed files with 12 additions and 3 deletions

View File

@ -605,7 +605,7 @@ int ec_master_enter_operation_phase(ec_master_t *master /**< EtherCAT master */)
if (ret) {
EC_MASTER_INFO(master, "Finishing slave configuration"
" interrupted by signal.\n");
goto out_allow;
goto out_return;
}
EC_MASTER_DBG(master, 1, "Waiting for pending slave"
@ -656,6 +656,7 @@ int ec_master_enter_operation_phase(ec_master_t *master /**< EtherCAT master */)
out_allow:
master->allow_scan = 1;
out_return:
return ret;
}
@ -673,6 +674,9 @@ void ec_master_leave_operation_phase(
ec_master_clear_config(master);
}
/* Re-allow scanning for IDLE phase. */
master->allow_scan = 1;
EC_MASTER_DBG(master, 1, "OPERATION -> IDLE.\n");
master->phase = EC_IDLE;
@ -2016,7 +2020,9 @@ int ecrt_master_activate(ec_master_t *master)
return ret;
}
master->allow_scan = 1; // allow re-scanning on topology change
/* Allow scanning after a topology change. */
master->allow_scan = 1;
master->active = 1;
// notify state machine, that the configuration shall now be applied
@ -2088,7 +2094,10 @@ void ecrt_master_deactivate(ec_master_t *master)
"EtherCAT-IDLE"))
EC_MASTER_WARN(master, "Failed to restart master thread!\n");
master->allow_scan = 1;
/* Disallow scanning to get into the same state like after a master
* request (after ec_master_enter_operation_phase() is called). */
master->allow_scan = 0;
master->active = 0;
}