X-Git-Url: http://sraa.de/git/?a=blobdiff_plain;f=dol%2Fsrc%2Fdol%2Fvisitor%2Fhdsd%2Fscd%2Fscd_cont_man_master.h;fp=dol%2Fsrc%2Fdol%2Fvisitor%2Fhdsd%2Fscd%2Fscd_cont_man_master.h;h=f2403217c5029fbf16a032d4e7d62e48896935f9;hb=8c411cf24ed0eb889191aaeafd8fa1e69081df42;hp=0000000000000000000000000000000000000000;hpb=dea7a4fb1ed110d3ce6e6d9255103d724bd66c0e;p=jump.git diff --git a/dol/src/dol/visitor/hdsd/scd/scd_cont_man_master.h b/dol/src/dol/visitor/hdsd/scd/scd_cont_man_master.h new file mode 100644 index 0000000..f240321 --- /dev/null +++ b/dol/src/dol/visitor/hdsd/scd/scd_cont_man_master.h @@ -0,0 +1,86 @@ +#ifndef SCD_CONT_MAN_MASTER_H +#define SCD_CONT_MAN_MASTER_H + +#include + +#include "scd_simulator.h" +#include "scd_cont_man.h" +#include "scd_cont_slave_wrapper.h" +#include "fsm/scd_cont_fsm.h" + +#include "fsm/scd_stm_init.h" +#include "fsm/scd_stm_busy.h" +#include "fsm/scd_stm_idle.h" +#include "fsm/scd_stm_done.h" +#include "fsm/scd_stm_time_req.h" +#include "fsm/scd_stm_time.h" +#include "fsm/scd_stm_term_req.h" +#include "fsm/scd_stm_terminate.h" +#include "fsm/scd_stm_terminated.h" +#include "fsm/scd_stm_fail.h" +#include "fsm/scd_stm_failed.h" + +/** + * Control manager for the master. Waits for all slaves to connect. + * Synchronizes the global simulation state. + */ +class scd_cont_man_master : public scd_cont_man, public scd_cont_fsm +{ + friend class scd_stm_base; + +public: + /** + * Constructor. + * \param sim the simulation environment + */ + scd_cont_man_master(scd_simulator& sim); + + virtual ~scd_cont_man_master(); + + /** + * Connects a slave. Is called from an in-connector. + * \param c the register command that has been received by the in-connector + * (contains the slave name). + * \param sock the incomming connection + */ + void connect_slave(const scd_command& c, scd_socket* sock); + + /* scd_cont_man */ + void set_master(const std::string& host, uint16_t port); + void register_slave(const std::string& name); + + /* scd_cont_fsm_if */ + void set_idle(const sc_core::sc_time& t) { return _state->set_idle(t); } + void set_busy() { return _state->set_busy(); } + void set_done() { return _state->set_done(); } + void set_fail() { return _state->set_fail(); } + void process(); + bool active() const { return _state->active(); } + bool busy() const { return _state->busy(); } + bool failed() const { return _state->failed(); } + bool advance_time() const { return _state->advance_time(); } + const sc_core::sc_time& get_time_step() { return _state->get_time_step(); } + +private: + scd_simulator& _sim; + std::list _slaves; + sc_core::sc_time _time_step; + + /* states */ + scd_stm_init _st_init; + scd_stm_busy _st_busy; + scd_stm_idle _st_idle; + scd_stm_done _st_done; + scd_stm_time_req _st_time_req; + scd_stm_time _st_time; + scd_stm_term_req _st_term_req; + scd_stm_terminate _st_terminate; + scd_stm_terminated _st_terminated; + scd_stm_fail _st_fail; + scd_stm_failed _st_failed; + + /* member functions */ + scd_cont_slave_wrapper* _get_slave(const std::string& name); +}; + +#endif