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
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
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_