--- /dev/null
+#include "fsm/scd_sts_done.h"
+
+#include "scd_logging.h"
+#include "scd_exception.h"
+#include "scd_cont_man_slave.h"
+#include "scd_cont_man.h"
+
+
+void scd_sts_done::recv_time_req()
+{
+ if (_sim.get_poller().wait(SCD_CONT_DELAY))
+ {
+ // had activity on sockets => we might be receiving data
+ scd_command* cmd = new scd_command(SCD_CM_CONTROL, SCD_CM_TIME_NACK);
+ _fsm.send_command(cmd);
+ }
+ else
+ {
+ scd_command* cmd = new scd_command(SCD_CM_CONTROL, SCD_CM_TIME_ACK);
+ _fsm.send_command(cmd);
+ _fsm.save_state();
+ _fsm.set_state(_st_time_ack);
+ }
+}
+
+
+void scd_sts_done::recv_term_req()
+{
+ if (_sim.get_poller().wait(SCD_CONT_DELAY))
+ {
+ // had activity on sockets => we might be receiving data
+ scd_command* cmd = new scd_command(SCD_CM_CONTROL, SCD_CM_TERM_NACK);
+ _fsm.send_command(cmd);
+ }
+ else
+ {
+ scd_command* cmd = new scd_command(SCD_CM_CONTROL, SCD_CM_TERM_ACK);
+ _fsm.send_command(cmd);
+ _fsm.save_state();
+ _fsm.set_state(_st_term_ack);
+ }
+}
+
+
+void scd_sts_done::set_idle(const sc_core::sc_time& time)
+{
+ scd_command* cmd = new scd_command(SCD_CM_CONTROL, SCD_CM_IDLE, time);
+ _fsm.send_command(cmd);
+ _fsm.set_state(_st_idle);
+}
+
+
+void scd_sts_done::set_busy()
+{
+ scd_command* cmd = new scd_command(SCD_CM_CONTROL, SCD_CM_BUSY);
+ _fsm.send_command(cmd);
+ _fsm.set_state(_st_busy);
+}