uniset-algorithms 0.2
AutomatMode.h
00001 #ifndef AutomatMode_H_
00002 #define AutomatMode_H_
00003 // ------------------------------------------------------------------------------------------
00004 #include <string>
00005 #include <sstream>
00006 #include <UniSetObject.h>
00007 #include <ObjectsManager.h>
00008 #include <UniversalInterface.h>
00009 #include <MessageType.h>
00010 #include "AutomatMessages.h" 
00011 // ------------------------------------------------------------------------------------------
00012 class Automat;
00013 
00018 class AutomatMode
00019 {
00020     public:
00021         static AutomatMode* Instance();
00022         void Destroy();
00023         virtual ~AutomatMode();     
00024 
00025         virtual void timerInfo( UniSetTypes::TimerMessage *tm, Automat* am ){}
00026         virtual void sensorInfo( UniSetTypes::SensorMessage *sm, Automat* am  ){}
00027         virtual void sysCommand( UniSetTypes::SystemMessage* sm, Automat* am  ){}
00028         virtual void automatCommand( AutomatMessage* m, Automat* am  );
00029         virtual bool activate( Automat* am ){ return true; }
00030         virtual bool disactivate( Automat* am ){ return true; }
00031         virtual void step( Automat* am );
00032         
00033         virtual const string modeName(){ return "???Mode";}
00034         
00035     protected:
00036         AutomatMode();
00037 
00038         void changeMode( AutomatMode* m, Automat* am );
00039 //      bool set( bool state, Automat* am );
00040         
00041     private:
00042         static AutomatMode* inst;       
00043 };
00044 // ---------------------------------------------------------------------------
00055 class AutomatOffMode:
00056     public AutomatMode
00057 {
00058     public:
00059         static AutomatOffMode* Instance();
00060         void Destroy();
00061         virtual ~AutomatOffMode();      
00062 
00063         // --------
00064     
00065         virtual void sensorInfo( UniSetTypes::SensorMessage *sm, Automat* am  );
00066         virtual void automatCommand( AutomatMessage* m, Automat* am  );
00067 
00068         virtual bool activate( Automat* am );
00069         virtual bool disactivate( Automat* am );
00070         virtual const string modeName(){ return "AutomatOffMode"; }
00071 
00072     protected:
00073         AutomatOffMode();
00074 
00075     private:
00076         static AutomatOffMode* inst;        
00077 };
00078 // ---------------------------------------------------------------------------
00097 class AutomatOnMode:
00098     public AutomatMode
00099 {
00100     public:
00101         static AutomatOnMode* Instance();
00102         void Destroy();
00103         virtual ~AutomatOnMode();       
00104 
00105         // --------
00106         virtual void sensorInfo( UniSetTypes::SensorMessage *sm, Automat* am  );
00107         virtual void automatCommand( AutomatMessage* m, Automat* am  );
00108 
00109         virtual bool activate( Automat* am );
00110 //      virtual bool disactivate();
00111         virtual const string modeName(){ return "AutomatOnMode";}
00112 
00113     protected:
00114         AutomatOnMode();
00115 
00116     private:
00117         static AutomatOnMode* inst;     
00118 };
00119 
00120 // ---------------------------------------------------------------------------
00134 class AutomatProtectionMode:
00135     public AutomatMode
00136 {
00137     public:
00138         static AutomatProtectionMode* Instance();
00139         void Destroy();
00140         virtual ~AutomatProtectionMode();       
00141 
00142         // --------
00143         virtual void sensorInfo( UniSetTypes::SensorMessage *sm, Automat* am );
00144         virtual void timerInfo( UniSetTypes::TimerMessage *tm, Automat* am );
00145         virtual bool activate( Automat* am );
00146         virtual bool disactivate( Automat* am );
00147         virtual void automatCommand( AutomatMessage* m, Automat* am );
00148         virtual void step( Automat* am );
00149         virtual const string modeName(){ return "AutomatProtectionMode";}
00150 
00151         bool checkProtection( Automat* am );        
00152 
00153     protected:
00154         AutomatProtectionMode();
00155 
00156     private:
00157         static AutomatProtectionMode* inst;     
00158 };
00159 
00160 // ---------------------------------------------------------------------------
00161 
00173 // ---------------------------------------------------------------------------
00178 class AutomatWaitingMode:
00179     public AutomatMode
00180 {
00181     public:
00182 
00189         static AutomatWaitingMode* Instance( Automat* am,
00190                                             AutomatMessage::Commands to, 
00191                                             AutomatMode* back=AutomatProtectionMode::Instance(), 
00192                                             int atempt=0 );
00193 
00194         void Destroy();
00195         virtual ~AutomatWaitingMode();      
00196 
00197         // --------
00198     
00199         virtual void timerInfo( UniSetTypes::TimerMessage *tm, Automat* am  );
00200         virtual void sensorInfo( UniSetTypes::SensorMessage *sm, Automat* am  );
00201         virtual void automatCommand( AutomatMessage* m, Automat* am  );
00202 
00203         virtual bool activate( Automat* am );
00204         virtual bool disactivate( Automat* am );
00205         virtual const string modeName(){ return "AutomatWaitingMode";}
00206 
00207     protected:
00208         AutomatWaitingMode();
00209         void rollback( Automat* am );
00210 
00211     private:
00212         static AutomatWaitingMode* inst;        
00213 };
00214 // ---------------------------------------------------------------------------
00234 class AutomatInitMode:
00235     public AutomatMode
00236 {
00237     public:
00238         static AutomatInitMode* Instance();
00239         void Destroy();
00240         virtual ~AutomatInitMode();     
00241 
00242         // --------
00243         virtual void sensorInfo( UniSetTypes::SensorMessage *sm, Automat* am );
00244         virtual bool activate( Automat* am );
00245         virtual const string modeName(){ return "AutomatInitMode";}
00246 
00247     protected:
00248         AutomatInitMode();
00249 
00250     private:
00251         static AutomatInitMode* inst;       
00252 };
00253 
00254 
00255 // ---------------------------------------------------------------------------
00267 class AutomatSleepMode:
00268     public AutomatMode
00269 {
00270     public:
00271         static AutomatSleepMode* Instance();
00272         void Destroy();
00273         virtual ~AutomatSleepMode();        
00274 
00275         // --------
00276         virtual void sensorInfo( UniSetTypes::SensorMessage *sm, Automat* am );
00277         virtual void automatCommand( AutomatMessage* m, Automat* am );
00278         virtual bool activate( Automat* am );
00279         virtual const string modeName(){ return "AutomatSleepMode";}
00280         virtual void step( Automat* am ){};
00281 
00282     protected:
00283         AutomatSleepMode();
00284 
00285     private:
00286         static AutomatSleepMode* inst;      
00287 };
00288 
00289 // ---------------------------------------------------------------------------
00290 // ---------------------------------------------------------------------------
00301 class AutomatOffOnlyMode:
00302     public AutomatMode
00303 {
00304     public:
00305         static AutomatOffOnlyMode* Instance();
00306         void Destroy();
00307         virtual ~AutomatOffOnlyMode();      
00308 
00309         // --------
00310         virtual void sensorInfo( UniSetTypes::SensorMessage *sm, Automat* am );
00311         virtual void timerInfo( UniSetTypes::TimerMessage *tm, Automat* am );
00312         virtual void automatCommand( AutomatMessage* m, Automat* am );
00313         virtual bool activate( Automat* am );
00314         virtual bool disactivate( Automat* am );
00315         
00316         virtual const string modeName(){ return "AutomatOffOnlyMode";}
00317         virtual void step( Automat* am ){};
00318 
00319     protected:
00320         AutomatOffOnlyMode();
00321 
00322     private:
00323         static AutomatOffOnlyMode* inst;        
00324 };
00325 
00326 // ---------------------------------------------------------------------------
00327 #endif // AutomatMode_H_