]> git.tdb.fi Git - r2c2.git/blobdiff - source/libmarklin/dummy.cpp
Support more complex article numbers
[r2c2.git] / source / libmarklin / dummy.cpp
index 1a7dd365ca2a2a2598425531e684ae0803fb7854..b8478a2fe95c10e7f27843a531f658f26df72c04 100644 (file)
@@ -28,8 +28,11 @@ void Dummy::add_turnout(unsigned addr)
 
 void Dummy::set_turnout(unsigned addr, bool state)
 {
-       turnouts[addr] = state;
-       signal_turnout.emit(addr, state);
+       if(turnouts[addr]!=state)
+       {
+               turnouts[addr] = state;
+               signal_turnout.emit(addr, state);
+       }
 }
 
 bool Dummy::get_turnout(unsigned addr) const
@@ -40,4 +43,40 @@ bool Dummy::get_turnout(unsigned addr) const
        return false;
 }
 
+void Dummy::set_loco_speed(unsigned addr, unsigned speed)
+{
+       LocoState &loco = locos[addr];
+       loco.speed = speed;
+       signal_loco_speed.emit(addr, speed, loco.reverse);
+}
+
+void Dummy::set_loco_reverse(unsigned addr, bool rev)
+{
+       LocoState &loco = locos[addr];
+       loco.reverse = rev;
+       signal_loco_speed.emit(addr, loco.speed, rev);
+}
+
+void Dummy::set_loco_function(unsigned addr, unsigned func, bool state)
+{
+       signal_loco_function.emit(addr, func, state);
+}
+
+void Dummy::set_sensor(unsigned addr, bool state)
+{
+       if(sensors[addr]!=state)
+       {
+               sensors[addr] = state;
+               signal_sensor.emit(addr, state);
+       }
+}
+
+bool Dummy::get_sensor(unsigned addr) const
+{
+       map<unsigned, bool>::const_iterator i = sensors.find(addr);
+       if(i!=sensors.end())
+               return i->second;
+       return false;
+}
+
 } // namespace Marklin