00001 /*************************************************************************** 00002 LOW_compTwinSwitch.h - description 00003 ------------------- 00004 begin : Sat Jan 4 2003 00005 copyright : (C) 2003 by Harald Roelle 00006 email : roelle@informatik.uni-muenchen.de 00007 ***************************************************************************/ 00008 00009 /*************************************************************************** 00010 * * 00011 * This program is free software; you can redistribute it and/or modify * 00012 * it under the terms of the GNU General Public License as published by * 00013 * the Free Software Foundation; either version 2 of the License, or * 00014 * (at your option) any later version. * 00015 * * 00016 ***************************************************************************/ 00017 00018 #ifndef LOW_COMPTWINSWITCH_H 00019 #define LOW_COMPTWINSWITCH_H 00020 00021 00022 #include "LOW_component.h" 00023 #include "LOW_devDS2406.h" 00024 00025 00026 /** 00027 @todo Documentation of class. 00028 00029 *@author Harald Roelle 00030 */ 00031 class LOW_compTwinSwitch : public LOW_component { 00032 00033 //======================================================================================= 00034 public: 00035 00036 //===================================================================================== 00037 // 00038 // exceptions 00039 // 00040 00041 class_DERIVE_FROM_EXCEPTION( compTwinSwitch_error, component_error); 00042 00043 00044 00045 //===================================================================================== 00046 // 00047 // type definitions 00048 // 00049 00050 typedef std::vector<LOW_compTwinSwitch*> compTwinSwitchPtrVec_t; 00051 00052 00053 00054 //===================================================================================== 00055 // 00056 // classes 00057 // 00058 00059 class actionReceiver { 00060 //--------------------------------------------------------------------------------------- 00061 public: 00062 //--------------------------------------------------------------------------------------- 00063 // constructors 00064 actionReceiver(); 00065 00066 //--------------------------------------------------------------------------------------- 00067 // methods 00068 virtual void switchAction( LOW_compTwinSwitch *inCaller, const unsigned int inSwitchNum, const bool inValue) = 0; 00069 virtual void shortSwitchAction( LOW_compTwinSwitch *inCaller, const unsigned int inSwitchNum) = 0; 00070 }; 00071 00072 00073 00074 //===================================================================================== 00075 // 00076 // constructors 00077 // 00078 00079 LOW_compTwinSwitch( const LOW_devDS2406 &inPIODevice, actionReceiver &inActionRcv, const bool inDetectShortClicks); 00080 00081 virtual ~LOW_compTwinSwitch(); 00082 00083 00084 00085 //===================================================================================== 00086 // 00087 // methods 00088 // 00089 00090 virtual void handleAlarm(); 00091 00092 void alarmPollLoop(); 00093 00094 bool getDetectShortClicks(); 00095 00096 const LOW_devDS2406& getPioDevice() const; 00097 00098 00099 //======================================================================================= 00100 private: 00101 00102 //===================================================================================== 00103 // 00104 // attributes 00105 // 00106 00107 const LOW_devDS2406 &pioDevice; 00108 actionReceiver &actionRcv; 00109 const bool detectShortClicks; 00110 std::vector<bool> switchStatesVec; 00111 00112 00113 00114 //===================================================================================== 00115 // 00116 // methods 00117 // 00118 00119 void setAlarmCondition(); 00120 00121 void readStatus(LOW_devDS2406::cmd_ChannelAccess::channelInfo_t &outChannelInfo); 00122 00123 void resetLatches( LOW_devDS2406::cmd_ChannelAccess::channelInfo_t &outChannelInfo); 00124 00125 void doSwitchAction( const unsigned int inSwitchNum, const bool inSensedLevel); 00126 }; 00127 00128 #endif 00129 00130