X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibr2c2%2Fsensor.cpp;h=83dcb6d1be3b6bae9610101672bf21973674e655;hb=d0881a98a6240758ac1aeceaa9443d718ab1ad5c;hp=c31c795f12986e32fbd4f23e95c885e03d1aff2f;hpb=a4a6af55ad5a9bfa14067532b1d1c914ef4c6668;p=r2c2.git diff --git a/source/libr2c2/sensor.cpp b/source/libr2c2/sensor.cpp index c31c795..83dcb6d 100644 --- a/source/libr2c2/sensor.cpp +++ b/source/libr2c2/sensor.cpp @@ -2,6 +2,7 @@ #include "layout.h" #include "sensor.h" +using namespace std; using namespace Msp; namespace R2C2 { @@ -9,6 +10,7 @@ namespace R2C2 { Sensor::Sensor(Layout &l): layout(l), address(0), + id(0), invert(false), state(INACTIVE) { @@ -20,36 +22,42 @@ Sensor::Sensor(Layout &l): Sensor::~Sensor() { + if(layout.has_driver() && address) + layout.get_driver().remove_sensor(address); layout.remove(*this); } void Sensor::set_address(unsigned a) { + Driver *driver = (layout.has_driver() ? &layout.get_driver() : 0); + if(driver && id) + driver->remove_sensor(id); address = a; - if(layout.has_driver()) - layout.get_driver().add_sensor(address); + if(driver && address) + id = driver->add_sensor(address); + else + id = 0; } void Sensor::tick(const Time::TimeDelta &dt) { if(state_confirm_timeout) { - state_confirm_timeout -= dt; + state_confirm_timeout = max(state_confirm_timeout-dt, Time::zero); 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) +void Sensor::event(unsigned i, bool s) { - if(a==address) + if(i==id) { if(s!=invert && state