]> git.tdb.fi Git - r2c2.git/blobdiff - source/libmarklin/dummy.cpp
Make LCD output selectable at runtime through an extra I/O pin
[r2c2.git] / source / libmarklin / dummy.cpp
index 1a7dd365ca2a2a2598425531e684ae0803fb7854..da6c5c97cb630874db1889afcbd0476365016b7f 100644 (file)
@@ -21,6 +21,18 @@ void Dummy::set_power(bool p)
        signal_power.emit(power);
 }
 
+const char *Dummy::enumerate_protocols(unsigned i) const
+{
+       if(i==0)
+               return "dummy";
+       return 0;
+}
+
+unsigned Dummy::get_protocol_speed_steps(const string &) const
+{
+       return 0;
+}
+
 void Dummy::add_turnout(unsigned addr)
 {
        turnouts[addr];
@@ -28,8 +40,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 +55,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