]> git.tdb.fi Git - r2c2.git/blobdiff - source/libr2c2/intellibox.cpp
Save turnout states and restore them on startup
[r2c2.git] / source / libr2c2 / intellibox.cpp
index 7702ed6b1bdde49b9309c2da9ef72f54fd3e2ae6..84d576ba99ac8821ae797b62d13380adffb38dbb 100644 (file)
@@ -242,7 +242,7 @@ void Intellibox::set_turnout(unsigned addr, unsigned state)
 {
        Turnout &turnout = turnouts[addr];
        unsigned mask = (1<<turnout.bits)-1;
-       if(((state^turnout.state)&mask)==0 || ((state^turnout.pending)&mask)==0)
+       if(((state^turnout.state)&mask)==0 || ((state^turnout.pending)&mask)==0 || !turnout.synced)
        {
                turnout.state = state;
                turnout.pending = state;
@@ -601,6 +601,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);
@@ -748,7 +750,8 @@ Intellibox::Turnout::Turnout():
        bits(1),
        state(0),
        active(false),
-       pending(false)
+       synced(false),
+       pending(0)
 { }