1 #include "fsm/scd_stm_done.h"
3 #include "scd_logging.h"
4 #include "scd_exception.h"
5 #include "scd_cont_man_master.h"
8 void scd_stm_done::set_busy()
10 _fsm.set_state(_st_busy);
14 void scd_stm_done::set_idle(const sc_core::sc_time& time)
17 _fsm.set_state(_st_idle);
21 void scd_stm_done::process()
26 std::list<scd_cont_slave_wrapper*>::iterator iter;
27 bool terminate = true;
29 for (iter = _slaves.begin(); iter != _slaves.end(); iter++)
31 if (!(*iter)->idle() && !(*iter)->done())
33 // this slave is not ready yet
41 /* all slaves seem idle or done. wait a short moment, to prevent
42 * race conditions (channel data in transit but both endpoints done).
43 * if no socket activity occured we can move on, else we cancel.
45 if (_sim.get_poller().wait(SCD_CONT_DELAY))
50 // all slaves seem to be done
51 for (iter = _slaves.begin(); iter != _slaves.end(); iter++)
52 (*iter)->send_term_req();
54 _fsm.set_state(_st_term_req);
58 // some slaves are not done yet
59 for (iter = _slaves.begin(); iter != _slaves.end(); iter++)
60 (*iter)->send_time_req();
62 _fsm.set_state(_st_time_req);