X-Git-Url: http://sraa.de/git/?a=blobdiff_plain;f=dol%2Fsrc%2Fdol%2Fvisitor%2Fhdsd%2Fscd%2Ffsm%2Fscd_sts_done.cpp;fp=dol%2Fsrc%2Fdol%2Fvisitor%2Fhdsd%2Fscd%2Ffsm%2Fscd_sts_done.cpp;h=ddd820313501cc50e87afb5f2cde752ab154befe;hb=8c411cf24ed0eb889191aaeafd8fa1e69081df42;hp=0000000000000000000000000000000000000000;hpb=dea7a4fb1ed110d3ce6e6d9255103d724bd66c0e;p=jump.git diff --git a/dol/src/dol/visitor/hdsd/scd/fsm/scd_sts_done.cpp b/dol/src/dol/visitor/hdsd/scd/fsm/scd_sts_done.cpp new file mode 100644 index 0000000..ddd8203 --- /dev/null +++ b/dol/src/dol/visitor/hdsd/scd/fsm/scd_sts_done.cpp @@ -0,0 +1,58 @@ +#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); +}