X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibmarklin%2Fintellibox.cpp;h=6efe8750a188e7dce26efeb4585d46fd438c1ba9;hb=d3907f4b0e60f246a53201b93b06e86062f1b48a;hp=70372f4f10dae20b930f091affe7cc80416249a4;hpb=a4566a4a23ff676f11a90615e8e468ef50107946;p=r2c2.git diff --git a/source/libmarklin/intellibox.cpp b/source/libmarklin/intellibox.cpp index 70372f4..6efe875 100644 --- a/source/libmarklin/intellibox.cpp +++ b/source/libmarklin/intellibox.cpp @@ -161,6 +161,7 @@ void Intellibox::set_turnout(unsigned addr, bool state) turnout.pending = state; turnout.active = true; + turnout.off_timeout = Time::TimeStamp(); turnout_command(addr, state, true); } @@ -376,7 +377,10 @@ void Intellibox::process_reply(const Time::TimeStamp &t) read_all(data, 2); unsigned addr = data[0]+((data[1]&7)<<8); - signal_turnout.emit(addr, (data[1]&0x80)!=0); + Turnout &turnout = turnouts[addr]; + turnout.state = (data[1]&0x80)!=0; + turnout.pending = turnout.state; + signal_turnout.emit(addr, turnout.state); } } else if(cmd==CMD_EVENT_SENSOR) @@ -461,6 +465,7 @@ void Intellibox::process_reply(const Time::TimeStamp &t) if(state!=turnout.state) { turnout.state = state; + turnout.pending = state; signal_turnout.emit(addr, turnout.state); } } @@ -540,7 +545,8 @@ Intellibox::Locomotive::Locomotive(): Intellibox::Turnout::Turnout(): state(false), - active(false) + active(false), + pending(false) { }