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.cpp

Go to the documentation of this file.
00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 #include "Hierarchical_State_Machine.h"
00009 #include "Unit_Messages.h"
00010 #include "assert.h"
00011 
00016 
00017 void Hierarchical_State_Machine::On_Message(const Message *p_Message)
00018 {
00019     switch (p_Message->GetType())
00020     {
00021     case Message::FAULT_TRIGGER:
00022         p_Current_State->On_Fault_Trigger(*this, p_Message);
00023         break;
00024 
00025     case Message::SWITCHOVER:
00026         p_Current_State->On_Switchover(*this, p_Message);
00027         break;
00028 
00029     case Message::DIAGNOSTICS_PASSED:
00030         p_Current_State->On_Diagnostics_Passed(*this, p_Message);
00031         break;
00032 
00033     case Message::DIAGNOSTICS_FAILED:
00034         p_Current_State->On_Diagnostics_Failed(*this, p_Message);
00035         break;
00036 
00037     case Message::OPERATOR_INSERVICE:
00038         p_Current_State->On_Operator_Inservice(*this, p_Message);
00039         break;
00040 
00041     default:
00042         assert(false);
00043         break;
00044     }
00045 }
00046 
00055 
00056 void Hierarchical_State_Machine::Inservice::On_Fault_Trigger(Hierarchical_State_Machine &u, const Message *p_Message)
00057 {
00058     u.Next_State(u.Suspect_State);
00059     u.Send_Diagnostics_Request();
00060     u.Raise_Alarm(LOSS_OF_REDUNDANCY);
00061 }
00062 
00070 
00071 void Hierarchical_State_Machine::Inservice::On_Switchover(Hierarchical_State_Machine &u, const Message *p_Message)
00072 {
00073     u.Perform_Switchover();
00074     u.Check_Mate_Status();
00075     u.Send_Switchover_Response();
00076 }
00077 
00088 
00089 void Hierarchical_State_Machine::Active::On_Fault_Trigger(Hierarchical_State_Machine &u, const Message *p_Message)
00090 {
00091     u.Perform_Switchover();
00092     Inservice::On_Fault_Trigger(u, p_Message);  
00093 }
00094 
00100 
00101 void Hierarchical_State_Machine::Active::On_Switchover(Hierarchical_State_Machine &u, const Message *p_Message)
00102 {
00103     Inservice::On_Switchover(u, p_Message);
00104     u.Next_State(u.Standby_State);
00105 }
00106 
00112 
00113 void Hierarchical_State_Machine::Standby::On_Switchover(Hierarchical_State_Machine &u, const Message *p_Message)
00114 {
00115     Inservice::On_Switchover(u, p_Message);
00116     u.Next_State(u.Active_State);
00117 }
00118 
00127 
00128 void Hierarchical_State_Machine::Out_Of_Service::On_Operator_Inservice(Hierarchical_State_Machine &u, const Message *p_Message)
00129 {
00130     // Operator has replaced the card, so abort the current diagnostics
00131     // and restart new diagnostics on the replaced card.  
00132     u.Send_Diagnostics_Request();
00133     u.Send_Operator_Inservice_Response();
00134     u.Next_State(u.Suspect_State);
00135 }
00136 
00142 
00143 void Hierarchical_State_Machine::Suspect::On_Diagnostics_Failed(Hierarchical_State_Machine &u, const Message *p_Message)
00144 {
00145     u.Send_Diagnostics_Failure_Report();
00146     u.Next_State(u.Failed_State);
00147 }
00148 
00155 
00156 void Hierarchical_State_Machine::Suspect::On_Diagnostics_Passed(Hierarchical_State_Machine &u, const Message *p_Message)
00157 {
00158     u.Send_Diagnostics_Pass_Report();
00159     u.Clear_Alarm(LOSS_OF_REDUNDANCY);
00160     u.Next_State(u.Standby_State);
00161 }
00162 
00167 
00168 void Hierarchical_State_Machine::Suspect::On_Operator_Inservice(Hierarchical_State_Machine &u, const Message *p_Message)
00169 {
00170     u.Abort_Diagnostics();
00171     Out_Of_Service::On_Operator_Inservice(u, p_Message); 
00172 }

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.