DelayTimer.h
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef DelayTimer_H_
00021 #define DelayTimer_H_
00022
00023 #include "PassiveTimer.h"
00024
00030 class DelayTimer
00031 {
00032 public:
00033 DelayTimer():prevState(false),state(false),
00034 onDelay(0),offDelay(0),waiting_on(false),waiting_off(false){}
00035
00036 DelayTimer( timeout_t on_msec, timeout_t off_msec ):prevState(false),state(false),
00037
00038 onDelay(on_msec),offDelay(off_msec),waiting_on(false),waiting_off(false)
00039 {
00040 }
00041
00042 ~DelayTimer(){}
00043
00044 inline void set( timeout_t on_msec, timeout_t off_msec )
00045 {
00046 onDelay = on_msec;
00047 offDelay = off_msec;
00048 waiting_on = false;
00049 waiting_off = false;
00050 state = false;
00051 }
00052
00053
00054 inline void reset()
00055 {
00056 pt.reset();
00057 waiting_on = false;
00058 waiting_off = false;
00059 state = false;
00060 }
00061
00062 inline bool check( bool st )
00063 {
00064 if( waiting_off )
00065 {
00066 if( pt.checkTime() )
00067 {
00068 waiting_off = false;
00069 if( !st )
00070 state = false;
00071
00072 return state;
00073 }
00074 else if( st != prevState && !st )
00075 pt.reset();
00076
00077 prevState = st;
00078 return state;
00079 }
00080
00081 if( waiting_on )
00082 {
00083 if( pt.checkTime() )
00084 {
00085 waiting_on = false;
00086 if( st )
00087 state = true;
00088
00089 return state;
00090 }
00091 else if( st != prevState && st )
00092 pt.reset();
00093
00094 prevState = st;
00095 return state;
00096 }
00097
00098 if( state != st )
00099 {
00100 prevState = st;
00101 if( st )
00102 {
00103 pt.setTiming(onDelay);
00104 waiting_on = true;
00105 }
00106 else
00107 {
00108 pt.setTiming(offDelay);
00109 waiting_off = true;
00110 }
00111
00112 if( pt.checkTime() )
00113 return st;
00114 }
00115
00116 return state;
00117 }
00118
00119 inline bool get(){ return state; }
00120
00121 protected:
00122 PassiveTimer pt;
00123 bool prevState;
00124 bool state;
00125 timeout_t onDelay;
00126 timeout_t offDelay;
00127 bool waiting_on;
00128 bool waiting_off;
00129 };
00130
00131 #endif
00132