uniset-algorithms 0.2
SEESMode.h
00001 #ifndef SEESMode_H_
00002 #define SEESMode_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 "ObjectMode.h"
00011 #include "SEESMessages.h"
00012 #include "AutomatMessages.h"
00013 #include "QG/QG.h"
00014 #include "Diesel/Diesel.h"
00015 #include "Generator/Generator.h"
00016 #include "SEESTypes.h"
00017 // -----------------------------------------------------------------------------
00018 class SEES;
00019 class SEESControl;
00020 
00025 class SEESMode
00026 {
00027     public:
00028         static SEESMode* Instance();
00029         virtual ~SEESMode();
00030         void Destroy();
00031 
00032         virtual void step( SEES* sc ){}
00033 
00034         virtual void timerInfo( UniSetTypes::TimerMessage *tm, SEES* sc){}
00035         virtual void sysCommand( UniSetTypes::SystemMessage* sm, SEES* sc){}
00036         virtual void sensorInfo( UniSetTypes::SensorMessage *sm, SEES* sc);
00037         virtual void seesInfo( SEESMessage *sm, SEES* sc ){}
00038 
00039         virtual bool activate( SEES* sc){ return true; }
00040         virtual bool disactivate( SEES* sc){ return true; }
00041         
00042         virtual const string modeName(){ return "???Mode";}
00043         virtual std::ostringstream& modeInfo( std::ostringstream& os){ return os;}
00044 
00045         virtual SEESMessage::SEESMode getMode(){ return SEESMessage::InitMode; }
00046 
00047         void protection();
00048         
00049     protected:
00050         SEESMode();
00051         void changeMode( SEESMode* m, SEES* sc );
00052 
00053         void askTimer( SEES* sc, short timerid, long timeMS, short ticks=-1 );
00054         void resetModeTimer( SEES* sc );
00055         void setMyControlMode( SEES* sc, unsigned int control_mode );
00056         void updateReservNeeded( SEES* sc );
00057 
00058     private:
00059         static SEESMode* inst;
00060 };
00061 // ---------------------------------------------------------------------------
00072 class SEESOffMode:
00073     public SEESMode
00074 {
00075     public:
00076         static SEESOffMode* Instance();
00077         void Destroy();
00078         virtual ~SEESOffMode();
00079 
00080         // --------
00081     
00082         virtual void sensorInfo( UniSetTypes::SensorMessage *sm, SEES* sc);
00083         virtual void sysCommand( UniSetTypes::SystemMessage* sm, SEES* sc);
00084 //      virtual void timerInfo( UniSetTypes::TimerMessage *tm, SEES* sc);
00085         
00086         virtual bool activate(SEES* sc);
00087         virtual const string modeName(){ return "SEESOffMode";}
00088         virtual SEESMessage::SEESMode getMode(){ return SEESMessage::OffMode; }
00089 //      virtual std::ostringstream& modeInfo( std::ostringstream& os);
00090 
00091 
00092     protected:
00093         SEESOffMode();
00094 
00095     private:
00096         static SEESOffMode* inst;
00097 };
00098 // ---------------------------------------------------------------------------
00112 // ---------------------------------------------------------------------------
00117 class SEESOnMode:
00118     public SEESMode
00119 {
00120     public:
00121         static SEESOnMode* Instance();
00122         void Destroy();
00123         virtual ~SEESOnMode();
00124 
00125         // --------
00126     
00127         virtual void sensorInfo( UniSetTypes::SensorMessage *sm, SEES* sc);
00128         virtual void sysCommand( UniSetTypes::SystemMessage* sm, SEES* sc);
00129         
00130         virtual bool activate( SEES* sc );
00131         virtual const string modeName(){ return "SEESOnMode";}
00132         virtual SEESMessage::SEESMode getMode(){ return SEESMessage::OnMode; }
00133 
00134     protected:
00135         SEESOnMode();
00136         void init( SEES* sc );
00137         
00138     private:
00139         static SEESOnMode* inst;
00140 };
00141 // ---------------------------------------------------------------------------
00146 class SEESRunningMode:
00147     public SEESMode
00148 {
00149     public:
00150         static SEESRunningMode* Instance();
00151         void Destroy();
00152         virtual ~SEESRunningMode();
00153 
00154         // --------
00155         virtual void sensorInfo( UniSetTypes::SensorMessage *sm, SEES* sc);
00156         virtual bool activate( SEES* sc );
00157         virtual const string modeName(){ return "SEESRunningMode";}
00158         virtual SEESMessage::SEESMode getMode(){ return SEESMessage::RunningMode; }
00159 
00160     protected:
00161         SEESRunningMode();
00162         
00163     private:
00164         static SEESRunningMode* inst;
00165 };
00166 
00167 // ---------------------------------------------------------------------------
00180 class SEESOnReservMode:
00181     public SEESOnMode
00182 {
00183     public:
00184         static SEESOnReservMode* Instance();
00185         void Destroy();
00186         virtual ~SEESOnReservMode();
00187 
00188         // --------
00189         virtual bool activate( SEES* sc );
00190         virtual void sensorInfo( UniSetTypes::SensorMessage *sm, SEES* sc);
00191         virtual const string modeName(){ return "SEESOnReservMode";}
00192         virtual SEESMessage::SEESMode getMode(){ return SEESMessage::ReservMode; }
00193 
00194     protected:
00195         SEESOnReservMode();
00196 
00197         
00198     private:
00199         static SEESOnReservMode* inst;
00200 };
00201 // ---------------------------------------------------------------------------
00210 class SEESOnAutoMode:
00211     public SEESOnReservMode
00212 {
00213     public:
00214         static SEESOnAutoMode* Instance();
00215         void Destroy();
00216         virtual ~SEESOnAutoMode();
00217 
00218         // --------
00219         virtual bool activate( SEES* sc );
00220         virtual bool disactivate( SEES* sc );
00221         virtual void sensorInfo( UniSetTypes::SensorMessage *sm, SEES* sc);
00222         virtual void timerInfo( UniSetTypes::TimerMessage *tm, SEES* sc);
00223 
00224         virtual const string modeName(){ return "SEESOnAutoMode";}
00225         virtual SEESMessage::SEESMode getMode(){ return SEESMessage::AutoMode; }
00226 
00227     protected:
00228         SEESOnAutoMode();
00229 
00230         
00231     private:
00232         static SEESOnAutoMode* inst;
00233 };
00234 
00235 
00236 // ---------------------------------------------------------------------------
00250 class SEESReservMode:
00251     public SEESMode
00252 {
00253     public:
00254         static SEESReservMode* Instance();
00255         void Destroy();
00256         virtual ~SEESReservMode();
00257 
00258         // --------
00259         virtual void sensorInfo( UniSetTypes::SensorMessage *sm, SEES* sc);
00260         virtual void timerInfo( UniSetTypes::TimerMessage *tm, SEES* sc);
00261 
00262         virtual bool activate(SEES* sc);
00263         virtual bool disactivate(SEES* sc);
00264         virtual const string modeName(){ return "SEESReservMode";}
00265 
00266         virtual SEESMessage::SEESMode getMode(){ return SEESMessage::ReservMode; }
00267 
00268     protected:
00269         SEESReservMode();
00270 
00271         
00272     private:
00273         static SEESReservMode* inst;
00274 };
00275 
00276 // ---------------------------------------------------------------------------
00285 class SEESAutoMode:
00286     public SEESReservMode
00287 {
00288     public:
00289         static SEESAutoMode* Instance();
00290         void Destroy();
00291         virtual ~SEESAutoMode();
00292 
00293         // --------
00294         virtual void sensorInfo( UniSetTypes::SensorMessage *sm, SEES* sc);
00295         virtual void timerInfo( UniSetTypes::TimerMessage *tm, SEES* sc );
00296 
00297         virtual bool activate(SEES* sc);
00298         virtual bool disactivate(SEES* sc);
00299         virtual const string modeName(){ return "SEESAutoMode"; }
00300 
00301         virtual SEESMessage::SEESMode getMode(){ return SEESMessage::AutoMode; }
00302 
00303     protected:
00304         SEESAutoMode();
00305 
00306         
00307     private:
00308         static SEESAutoMode* inst;
00309 };
00310 
00311 
00312 // ---------------------------------------------------------------------------
00326 class SEESProtectionMode:
00327     public SEESMode
00328 {
00329     public:
00330         static SEESProtectionMode* Instance();
00331         void Destroy();
00332         virtual ~SEESProtectionMode();
00333 
00334         // --------
00335     
00336         virtual void sensorInfo( UniSetTypes::SensorMessage *sm, SEES* sc);
00337         virtual void sysCommand( UniSetTypes::SystemMessage* sm, SEES* sc);
00338         virtual void timerInfo( UniSetTypes::TimerMessage *tm, SEES* sc);
00339         
00340         virtual bool activate(SEES* sc);
00341         virtual bool disactivate(SEES* sc);
00342         virtual const string modeName(){ return "SEESProtectionMode"; }
00343         virtual SEESMessage::SEESMode getMode(){ return SEESMessage::ProtectionMode; }
00344 
00345     protected:
00346         SEESProtectionMode();
00347         bool updateLamp( SEES* sc );
00348 
00349     
00350     private:
00351         static SEESProtectionMode* inst;
00352 };
00353 
00354 // ---------------------------------------------------------------------------
00372 class SEESInitMode:
00373     public SEESMode
00374 {
00375     public:
00376         static SEESInitMode* Instance();
00377         void Destroy();
00378         virtual ~SEESInitMode();
00379 
00380         // --------
00381     
00382         virtual bool activate(SEES* sc);
00383         virtual const string modeName(){ return "SEESInitMode"; }
00384         virtual SEESMessage::SEESMode getMode(){ return SEESMessage::InitMode; }
00385         
00386         bool checkMode( SEES* sc );
00387 
00388     protected:
00389         SEESInitMode();
00390     
00391     private:
00392         static SEESInitMode* inst;
00393 };
00394 
00395 // ---------------------------------------------------------------------------
00411 class SEESWaitingMode:
00412     public SEESMode
00413 {
00414     public:
00415 
00422         static SEESWaitingMode* Instance( SEES* sc,
00423                                             SEESMessage::SEESMode to, 
00424                                             SEESMode* back=SEESProtectionMode::Instance(), 
00425                                             int atempt=0 );
00426 
00427         void Destroy();
00428         virtual ~SEESWaitingMode();
00429 
00430         // --------
00431     
00432         virtual void timerInfo( UniSetTypes::TimerMessage *tm, SEES* sc);
00433         virtual void sensorInfo( UniSetTypes::SensorMessage *sm, SEES* sc );
00434         virtual void seesInfo( SEESMessage *sm, SEES* sc );
00435 
00436         virtual bool activate( SEES* sc);
00437         virtual bool disactivate( SEES* sc);
00438         virtual const string modeName(){ return "SEESWaitingMode";}
00439         virtual SEESMessage::SEESMode getMode(){ return SEESMessage::WaitingMode; }
00440 
00441     protected:
00442         SEESWaitingMode();
00443         void rollback( SEES* sc );
00444         void commandFailed( SEES* sc );
00445 
00446     private:
00447         static SEESWaitingMode* inst;
00448 };
00449 // ---------------------------------------------------------------------------
00465 class SEESAutoWaitingMode:
00466     public SEESMode
00467 {
00468     public:
00469 
00476         static SEESAutoWaitingMode* Instance( SEES* sc,
00477                                             SEESMessage::SEESMode to, 
00478                                             SEESMode* back=SEESProtectionMode::Instance(), 
00479                                             int atempt=0 );
00480 
00481         void Destroy();
00482         virtual ~SEESAutoWaitingMode();
00483 
00484         // --------
00485     
00486         virtual void timerInfo( UniSetTypes::TimerMessage *tm, SEES* sc);
00487         virtual void sensorInfo( UniSetTypes::SensorMessage *sm, SEES* sc );
00488 
00489         virtual bool activate( SEES* sc);
00490         virtual bool disactivate( SEES* sc);
00491         virtual const string modeName(){ return "SEESAutoWaitingMode";}
00492         virtual SEESMessage::SEESMode getMode(){ return SEESMessage::AutoWaitingMode; }
00493 
00494     protected:
00495         SEESAutoWaitingMode();
00496         void rollback( SEES* sc );
00497 
00498     private:
00499         static SEESAutoWaitingMode* inst;
00500 };
00501 // ---------------------------------------------------------------------------
00502 
00515 class SEESSleepMode:
00516     public SEESMode
00517 {
00518     public:
00519         static SEESSleepMode* Instance();
00520         void Destroy();
00521         virtual ~SEESSleepMode();
00522 
00523         // --------
00524         virtual void sensorInfo( UniSetTypes::SensorMessage* sm, SEES* sc);
00525         virtual void timerInfo( UniSetTypes::TimerMessage *tm, SEES* sc);
00526         virtual bool activate(SEES* sc);
00527         virtual bool disactivate( SEES* sc);
00528         
00529         virtual const string modeName(){ return "SEESSleepMode";}
00530         virtual SEESMessage::SEESMode getMode(){ return SEESMessage::SleepMode; }
00531 
00532     protected:
00533         SEESSleepMode();
00534         void checkState( SEES* sc );
00535 
00536     private:
00537         static SEESSleepMode* inst;
00538 };
00539 // ---------------------------------------------------------------------------
00546 class SEESUndefinedMode:
00547     public SEESMode
00548 {
00549     public:
00550         static SEESUndefinedMode* Instance();
00551         void Destroy();
00552         virtual ~SEESUndefinedMode();
00553 
00554         // --------
00555         virtual void sensorInfo( UniSetTypes::SensorMessage *sm, SEES* sc);
00556         virtual bool activate(SEES* sc);
00557         virtual const string modeName(){ return "SEESUndefinedMode";}
00558         virtual SEESMessage::SEESMode getMode(){ return SEESMessage::UdefinedMode; }
00559 
00560 
00561     protected:
00562         SEESUndefinedMode();
00563 
00564     private:
00565         static SEESUndefinedMode* inst;
00566 };
00567 // ---------------------------------------------------------------------------
00568 #endif // SEESMode_H_