X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibr2c2%2Fintellibox.cpp;h=ebaac8dc7d30e7f41f39297a9e062d20aabc7160;hb=e0a4caf7d4ef980a90cd03117705310e0469e440;hp=7702ed6b1bdde49b9309c2da9ef72f54fd3e2ae6;hpb=85362cce505281c1d281c959e135c9f8fa12bd5c;p=r2c2.git diff --git a/source/libr2c2/intellibox.cpp b/source/libr2c2/intellibox.cpp index 7702ed6..ebaac8d 100644 --- a/source/libr2c2/intellibox.cpp +++ b/source/libr2c2/intellibox.cpp @@ -242,7 +242,7 @@ void Intellibox::set_turnout(unsigned addr, unsigned state) { Turnout &turnout = turnouts[addr]; unsigned mask = (1<::iterator i=queue.begin(); i!=queue.end(); ++i) { write(serial_fd, i->data, i->length); @@ -601,6 +600,8 @@ void Intellibox::process_reply(const Time::TimeStamp &t) turnout.pending = turnout.state; signal_turnout.emit(addr, turnout.state); } + + turnout.synced = true; } else error(cmd, err); @@ -620,24 +621,22 @@ void Intellibox::process_reply(const Time::TimeStamp &t) unsigned speed = (data[0]<=1 ? 0 : data[0]*2/19+1); bool reverse = !(data[1]&0x20); - if(speed!=loco.speed || reverse!=loco.reverse) - { - loco.speed = speed; - loco.reverse = reverse; - signal_loco_speed.emit(addr, loco.speed, loco.reverse); - } + bool speed_changed = (speed!=loco.speed || reverse!=loco.reverse); + + loco.speed = speed; + loco.reverse = reverse; unsigned funcs = (data[1]&0xF)<<1; if(data[1]&0x10) funcs |= 1; - if(funcs!=loco.funcs) - { - unsigned changed = loco.funcs^funcs; - loco.funcs = funcs; - for(unsigned i=0; i<5; ++i) - if(changed&(1<