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
00085
00086 virtual bool activate(SEES* sc);
00087 virtual const string modeName(){ return "SEESOffMode";}
00088 virtual SEESMessage::SEESMode getMode(){ return SEESMessage::OffMode; }
00089
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_