]> git.tdb.fi Git - r2c2.git/blobdiff - source/libmarklin/simplephysics.cpp
Change the control system to separate speed and reverse
[r2c2.git] / source / libmarklin / simplephysics.cpp
index 284e5271b6ae9a06448857a663dbab146e2e2c73..3bcbd5774cf29f634be6d192213a9d53eb9634d4 100644 (file)
@@ -15,7 +15,8 @@ using namespace Msp;
 namespace Marklin {
 
 SimplePhysics::SimplePhysics():
-       target_speed(TrainControl::continuous("speed", -1000, 1000)),
+       target_speed(TrainControl::continuous("speed", 0, 1000)),
+       reverse(TrainControl::binary("reverse")),
        accel(0.07),
        speed(0)
 {
@@ -27,7 +28,14 @@ void SimplePhysics::set_control(const string &name, float v)
        if(name=="speed")
        {
                target_speed.set(v);
-               signal_control_changed.emit(name, target_speed.value);
+               signal_control_changed.emit(target_speed);
+       }
+       else if(name=="reverse")
+       {
+               if(target_speed.value || speed)
+                       throw InvalidState("Must be stopped to change reverse");
+               reverse.set(v);
+               signal_control_changed.emit(reverse);
        }
 }
 
@@ -35,6 +43,8 @@ const TrainControl &SimplePhysics::get_control(const string &name) const
 {
        if(name=="speed")
                return target_speed;
+       else if(name=="reverse")
+               return reverse;
        else
                throw KeyError("Unknown control", name);
 }