X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;ds=sidebyside;f=source%2Flibmarklin%2Fsensor.cpp;h=6c213651e668c69929181dff42818c3ca22fbd66;hb=52cbe8d99669f843f8f75c51128e2748584dd03a;hp=f6913ba1b05a3173069a4cc63b5ba7f94537d097;hpb=36beacc579d3132642ed4d98ce5a6d99842b5812;p=r2c2.git diff --git a/source/libmarklin/sensor.cpp b/source/libmarklin/sensor.cpp index f6913ba..6c21365 100644 --- a/source/libmarklin/sensor.cpp +++ b/source/libmarklin/sensor.cpp @@ -1,6 +1,10 @@ +#include +#include #include "control.h" #include "sensor.h" +using namespace Msp; + namespace Marklin { Sensor::Sensor(Control &c, unsigned a): @@ -8,16 +12,42 @@ Sensor::Sensor(Control &c, unsigned a): addr(a), state(false) { - control.add_sensor(this); + control.add_sensor(*this); control.signal_sensor_event.connect(sigc::mem_fun(this, &Sensor::sensor_event)); } void Sensor::sensor_event(unsigned a, bool s) { - if(a==addr && s!=state) + if(a==addr) + { + if(s) + { + off_timeout=Time::TimeStamp(); + if(s!=state) + { + state=s; + signal_state_changed.emit(state); + } + } + else + off_timeout=Time::now()+Time::sec; + } +} + +void Sensor::tick() +{ + if(off_timeout) { - state=s; - signal_state_changed.emit(state); + const Time::TimeStamp t=Time::now(); + if(t>off_timeout) + { + off_timeout=Time::TimeStamp(); + if(state) + { + state=false; + signal_state_changed.emit(state); + } + } } }