X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;ds=inline;f=source%2Flibr2c2%2Fsensor.cpp;fp=source%2Flibr2c2%2Fsensor.cpp;h=1b7e8cc10c08881a49a22743684046b64683a9fe;hb=59bae8acd679127602cf35d22bcd37e316a5a056;hp=0000000000000000000000000000000000000000;hpb=5c1ddd2f213af3fea15237e02f7da112c0abba36;p=r2c2.git diff --git a/source/libr2c2/sensor.cpp b/source/libr2c2/sensor.cpp new file mode 100644 index 0000000..1b7e8cc --- /dev/null +++ b/source/libr2c2/sensor.cpp @@ -0,0 +1,61 @@ +#include "driver.h" +#include "layout.h" +#include "sensor.h" + +using namespace Msp; + +namespace R2C2 { + +Sensor::Sensor(Layout &l): + layout(l), + address(0), + state(INACTIVE) +{ + if(layout.has_driver()) + layout.get_driver().signal_sensor.connect(sigc::mem_fun(this, &Sensor::event)); + + layout.add_sensor(*this); +} + +Sensor::~Sensor() +{ + layout.remove_sensor(*this); +} + +void Sensor::tick(const Time::TimeDelta &dt) +{ + if(state_confirm_timeout) + { + state_confirm_timeout -= dt; + if(state_confirm_timeout<=Time::zero) + { + if(state==MAYBE_INACTIVE) + state = INACTIVE; + else if(state==MAYBE_ACTIVE) + state = ACTIVE; + state_confirm_timeout = Time::zero; + signal_state_changed.emit(state); + } + } +} + +void Sensor::event(unsigned a, bool s) +{ + if(a==address) + { + if(s && stateMAYBE_INACTIVE) + { + state = MAYBE_INACTIVE; + state_confirm_timeout = 700*Time::msec; + signal_state_changed.emit(state); + } + } +} + +} // namespace R2C2