--- /dev/null
+#include "fsm/scd_stm_term_req.h"
+
+#include "scd_logging.h"
+#include "scd_exception.h"
+#include "scd_cont_man_master.h"
+
+
+void scd_stm_term_req::set_busy()
+{
+ _send_term_nack();
+ _fsm.load_state();
+}
+
+
+void scd_stm_term_req::set_idle(const sc_core::sc_time& time)
+{
+ _send_term_nack();
+ _fsm.load_state();
+}
+
+
+void scd_stm_term_req::process()
+{
+ if (!_check_slaves())
+ return;
+
+ std::list<scd_cont_slave_wrapper*>::iterator iter;
+
+ for (iter = _slaves.begin(); iter != _slaves.end(); iter++)
+ {
+ if ( !(*iter)->term_req() && !(*iter)->term_ack() )
+ {
+ // received term_nack from this slave
+ _send_term_nack();
+ _fsm.load_state();
+ return;
+ }
+ else if ( !(*iter)->term_ack() )
+ {
+ // this slave did not respond yet
+ return;
+ }
+ }
+
+ // all slaves acknkowledged
+ for (iter = _slaves.begin(); iter != _slaves.end(); iter++)
+ (*iter)->send_term();
+
+ _fsm.set_state(_st_terminate);
+}
+
+
+void scd_stm_term_req::_send_term_nack()
+{
+ std::list<scd_cont_slave_wrapper*>::iterator iter;
+
+ for (iter = _slaves.begin(); iter != _slaves.end(); iter++)
+ (*iter)->send_term_nack();
+}