00001 #ifndef APSControl_H_
00002 #define APSControl_H_
00003
00004 #include <map>
00005 #include <list>
00006 #include <UniSetObject_LT.h>
00007 #include <MessageType.h>
00008 #include <PassiveTimer.h>
00009 #include <Trigger.h>
00010 #include <extensions/SMInterface.h>
00011
00036 class APSControl:
00037 public UniSetObject_LT
00038 {
00039 public:
00040
00041 APSControl( UniSetTypes::ObjectId id, const std::string& name="APSControl" );
00042 ~APSControl();
00043
00044 static DebugStream dlog;
00045 static void init_dlog( DebugStream& dlog );
00046
00047 protected:
00048
00052 void processingMessage(UniSetTypes::VoidMessage *msg);
00053
00057 void askSensors(UniversalIO::UIOCommand cmd);
00058
00062 void sysCommand(UniSetTypes::SystemMessage *sm);
00063
00067 void sensorInfo(UniSetTypes::SensorMessage *sm);
00068
00072 void timerInfo(UniSetTypes::TimerMessage *tm);
00073
00078 void makeAPS(UniSetTypes::ObjectId id, bool state);
00079
00084 void makeAPSLamp( bool newAPS, bool isAnyAPS );
00085
00087 void makeNewAPSSensor( bool newAPS );
00088
00089
00090
00092 struct APSSensorInfo
00093 {
00094 UniSetTypes::ObjectId id;
00095 UniSetTypes::ObjectId apsId;
00096 UniSetTypes::ObjectId blockerId;
00099 bool state;
00100 bool no_apslamp;
00102 APSSensorInfo():
00103 id(UniSetTypes::DefaultObjectId),
00104 apsId(UniSetTypes::DefaultObjectId),
00105 blockerId(UniSetTypes::DefaultObjectId),
00106 state(false),
00107 no_apslamp(false)
00108 {};
00109 };
00110
00111 std::map<UniSetTypes::ObjectId,APSSensorInfo> sensorToAPS;
00112 std::map<UniSetTypes::ObjectId,UniSetTypes::ObjectId>blockedSensors;
00113
00115 struct APSGroupInfo
00116 {
00117 UniSetTypes::ObjectId apsId;
00118 bool apsState;
00119 std::list<UniSetTypes::ObjectId> sensIdList;
00120 APSGroupInfo():apsId(UniSetTypes::DefaultObjectId),
00121 apsState( false )
00122 {};
00123 };
00124
00125 typedef std::map<UniSetTypes::ObjectId,APSGroupInfo> APSGroupList;
00126 APSGroupList apsGroupsInfo;
00127
00128 bool initAPS(xmlNode*cnode);
00129
00130 SMInterface* smi;
00131 UniSetTypes::ObjectId testSensor;
00132 UniSetTypes::ObjectId nodeTestSensor;
00133 bool in_testSensor;
00134 bool in_nodeTestSensor;
00135
00136 UniSetTypes::ObjectId sidHeartBeat;
00137 int maxHeartBeat;
00138 timeout_t heartbeatTime;
00139
00140 UniSetTypes::ObjectId newaps_s;
00141 UniSetTypes::ObjectId confirm_s;
00142 bool confirmMode;
00143 UniSetTypes::ObjectId apsLamp_c;
00145 enum Timers
00146 {
00147 ptHeartBeat
00148 };
00149
00150 timeout_t smReadyTimeout;
00151
00152 virtual void sigterm( int signo );
00153 void offOutputs( bool all );
00154 bool TermOffAps;
00155 bool checkTestMode();
00156
00157 std::string f_field;
00158 std::string f_value;
00159 std::string f_group;
00160
00161 timeout_t apsMakePause;
00162 private:
00163 timeout_t askTimeout;
00164 timeout_t askPause;
00165 Trigger trTestMode;
00166 };
00167
00168 #endif // APSControl_H_