EventHelix.com: CASE Tools; Real-time and Embedded System Design; Object Oriented Design EventStudio 2.0: System Engineering CASE ToolEventStudio 2.5
Sequence diagram based system design and modeling
Home   What's New   EventStudio 2.5   Real-time Mantra   Thought Projects   Contact Us
Main Page | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | File Members

Hierarchical_State_Machine.h

Go to the documentation of this file.
00001 
00002 class Message;
00009 
00010 
00011 
00031 
00032 class Hierarchical_State_Machine
00033 {
00037 
00038     class Unit_State
00039     {
00040     public:
00041 
00043         virtual void On_Switchover(Hierarchical_State_Machine &u, const Message *p_Message)  {} 
00044 
00046         virtual void On_Fault_Trigger(Hierarchical_State_Machine &u, const Message *p_Message) {}  
00047 
00049         virtual void On_Diagnostics_Failed(Hierarchical_State_Machine &u, const Message *p_Message) {}
00050 
00052         virtual void On_Diagnostics_Passed(Hierarchical_State_Machine &u, const Message *p_Message) {}
00053 
00055         virtual void On_Operator_Inservice(Hierarchical_State_Machine &u, const Message *p_Message) {}      
00056     };
00057     friend Unit_State;   
00058 
00059 
00062 
00063     class Inservice : public Unit_State
00064     {
00065     public:
00066         void On_Switchover(Hierarchical_State_Machine &u, const Message *p_Message);   
00067         void On_Fault_Trigger(Hierarchical_State_Machine &u, const Message *p_Message);
00068     };
00069     friend Inservice;   
00070 
00075 
00076     class Active : public Inservice
00077     {
00078     public:
00079         void On_Switchover(Hierarchical_State_Machine &u, const Message *p_Message);   
00080         void On_Fault_Trigger(Hierarchical_State_Machine &u, const Message *p_Message);
00081     };
00082     friend Active;    
00083 
00088 
00089     class Standby : public Inservice
00090     {
00091     public:
00092         void On_Switchover(Hierarchical_State_Machine &u, const Message *p_Message);   
00093     }; 
00094     friend Standby;   
00095 
00098 
00099     class Out_Of_Service : public Unit_State
00100     {
00101     public:
00102         void On_Operator_Inservice(Hierarchical_State_Machine &u, const Message *p_Message);
00103     };
00104     friend Out_Of_Service;    
00105 
00109     class Suspect : public Out_Of_Service
00110     {
00111     public:
00112         void On_Diagnostics_Failed(Hierarchical_State_Machine &u, const Message *p_Message);
00113         void On_Diagnostics_Passed(Hierarchical_State_Machine &u, const Message *p_Message);
00114         void On_Operator_Inservice(Hierarchical_State_Machine &u, const Message *p_Message);
00115     };
00116     friend Suspect;    
00117 
00121     class Failed : public Out_Of_Service
00122     {
00123     public:
00124         // No Need to Override any other method
00125     };
00126     friend Failed;    
00127 
00128 private:
00130     static Active Active_State; 
00131 
00133     static Standby Standby_State;
00134 
00136     static Suspect Suspect_State;
00137 
00139     static Failed Failed_State;  
00140 
00141     void Next_State(Unit_State &r_State);
00142     
00143 
00144     // Common Methods invoked from several states
00145     // (See article on FSM Inheritance for details)
00146     virtual void Send_Diagnostics_Request();
00147     virtual void Raise_Alarm(int reason);
00148     virtual void Clear_Alarm(int reason);
00149     virtual void Perform_Switchover();
00150     // . . .
00151     virtual void Send_Switchover_Response();
00152     virtual void Send_Operator_Inservice_Response();
00153     virtual void Send_Diagnostics_Failure_Report();
00154     virtual void Send_Diagnostics_Pass_Report();
00155     virtual void Abort_Diagnostics();
00156     virtual void Check_Mate_Status();
00157 
00159     Unit_State *p_Current_State;   
00160 
00161 public:
00162     void On_Message(const Message *p_Message);
00163 };
00164 
00168 
00169 void Hierarchical_State_Machine::Next_State(Unit_State &r_State)
00170 {
00171     p_Current_State = &r_State;
00172 }
00173 
00174 

Generated on Sun Feb 13 21:30:16 2005 for Object Oriented Design Examples by doxygen 1.3.4
 Home   What's New   EventStudio 2.5   Real-time Mantra   Thought Projects   Contact Us
Copyright © 2000-2005 EventHelix.com Inc. All Rights Reserved.