dol: initial dol commit
[jump.git] / dol / src / dol / visitor / hdsd / scd / scd_cont_man_master.h
1 #ifndef SCD_CONT_MAN_MASTER_H
2 #define SCD_CONT_MAN_MASTER_H
3
4 #include <list>
5
6 #include "scd_simulator.h"
7 #include "scd_cont_man.h"
8 #include "scd_cont_slave_wrapper.h"
9 #include "fsm/scd_cont_fsm.h"
10
11 #include "fsm/scd_stm_init.h"
12 #include "fsm/scd_stm_busy.h"
13 #include "fsm/scd_stm_idle.h"
14 #include "fsm/scd_stm_done.h"
15 #include "fsm/scd_stm_time_req.h"
16 #include "fsm/scd_stm_time.h"
17 #include "fsm/scd_stm_term_req.h"
18 #include "fsm/scd_stm_terminate.h"
19 #include "fsm/scd_stm_terminated.h"
20 #include "fsm/scd_stm_fail.h"
21 #include "fsm/scd_stm_failed.h"
22
23 /**
24  * Control manager for the master. Waits for all slaves to connect.
25  * Synchronizes the global simulation state.
26  */
27 class scd_cont_man_master : public scd_cont_man, public scd_cont_fsm
28 {
29     friend class scd_stm_base;
30
31 public:
32     /**
33      * Constructor.
34      * \param sim the simulation environment
35      */
36     scd_cont_man_master(scd_simulator& sim);
37
38     virtual ~scd_cont_man_master();
39
40     /**
41      * Connects a slave. Is called from an in-connector.
42      * \param c the register command that has been received by the in-connector
43      * (contains the slave name).
44      * \param sock the incomming connection
45      */
46     void connect_slave(const scd_command& c, scd_socket* sock);
47
48     /* scd_cont_man */
49     void set_master(const std::string& host, uint16_t port);
50     void register_slave(const std::string& name);
51
52     /* scd_cont_fsm_if */
53     void set_idle(const sc_core::sc_time& t) { return _state->set_idle(t); }
54     void set_busy() { return _state->set_busy(); }
55     void set_done() { return _state->set_done(); }
56     void set_fail() { return _state->set_fail(); }
57     void process();
58     bool active() const { return _state->active(); }
59     bool busy() const { return _state->busy(); }
60     bool failed() const { return _state->failed(); }
61     bool advance_time() const { return _state->advance_time(); }
62     const sc_core::sc_time& get_time_step() { return _state->get_time_step(); }
63
64 private:
65     scd_simulator& _sim;
66     std::list<scd_cont_slave_wrapper*> _slaves;
67     sc_core::sc_time _time_step;
68     
69     /* states */
70     scd_stm_init _st_init;
71     scd_stm_busy _st_busy;
72     scd_stm_idle _st_idle;
73     scd_stm_done _st_done;
74     scd_stm_time_req _st_time_req;
75     scd_stm_time _st_time;
76     scd_stm_term_req _st_term_req;
77     scd_stm_terminate _st_terminate;
78     scd_stm_terminated _st_terminated;
79     scd_stm_fail _st_fail;
80     scd_stm_failed _st_failed;
81
82     /* member functions */
83     scd_cont_slave_wrapper* _get_slave(const std::string& name);
84 };
85
86 #endif