]> git.tdb.fi Git - r2c2.git/blobdiff - source/libr2c2/dummy.h
Add turnout failure simulation to the dummy driver
[r2c2.git] / source / libr2c2 / dummy.h
index d388ca6ecc87eb9402af1f46197b5c50766e71f8..547efc3269622850b764feeadea4adb73f08df17 100644 (file)
@@ -1,14 +1,9 @@
-/* $Id$
-
-This file is part of R²C²
-Copyright © 2010  Mikkosoft Productions, Mikko Rasa
-Distributed under the GPL
-*/
-
 #ifndef LIBR2C2_DUMMY_H_
 #define LIBR2C2_DUMMY_H_
 
 #include <map>
+#include <msp/time/timedelta.h>
+#include <msp/time/timestamp.h>
 #include "driver.h"
 
 namespace R2C2 {
@@ -16,6 +11,13 @@ namespace R2C2 {
 class Dummy: public Driver
 {
 private:
+       struct TurnoutState
+       {
+               unsigned state;
+               unsigned pending;
+               Msp::Time::TimeStamp timeout;
+       };
+
        struct LocoState
        {
                unsigned speed;
@@ -23,34 +25,46 @@ private:
        };
 
        bool power;
-       std::map<unsigned, unsigned> turnouts;
+       bool halted;
+       std::map<unsigned, TurnoutState> turnouts;
        std::map<unsigned, LocoState> locos;
        std::map<unsigned, bool> sensors;
+       Msp::Time::TimeDelta turnout_delay;
+       int turnout_fail_rate;
 
 public:
-       Dummy();
+       Dummy(const Options &);
 
        virtual void set_power(bool);
        virtual bool get_power() const { return power; }
-       virtual void halt(bool) { }
-       virtual bool is_halted() const { return false; }
+       virtual void halt(bool);
+       virtual bool is_halted() const { return halted; }
 
        virtual const char *enumerate_protocols(unsigned) const;
        virtual unsigned get_protocol_speed_steps(const std::string &) const;
-       virtual void add_loco(unsigned, const std::string &, const VehicleType &) { }
+       virtual DetectedLocomotive *enumerate_detected_locos(unsigned) const { return 0; }
+       virtual unsigned add_loco(unsigned a, const std::string &, const VehicleType &) { return a; }
+       virtual void remove_loco(unsigned) { }
        virtual void set_loco_speed(unsigned, unsigned);
        virtual void set_loco_reverse(unsigned, bool);
        virtual void set_loco_function(unsigned, unsigned, bool);
 
-       virtual void add_turnout(unsigned, const TrackType &);
+       virtual unsigned add_turnout(unsigned, const TrackType &);
+       virtual void remove_turnout(unsigned) { }
        virtual void set_turnout(unsigned, unsigned);
        virtual unsigned get_turnout(unsigned) const;
 
-       virtual void add_sensor(unsigned) { }
+       virtual unsigned add_signal(unsigned a, const SignalType &) { return a; }
+       virtual void remove_signal(unsigned) { }
+       virtual void set_signal(unsigned, unsigned) { }
+       virtual unsigned get_signal(unsigned) const { return 0; }
+
+       virtual unsigned add_sensor(unsigned a) { return a; }
+       virtual void remove_sensor(unsigned) { }
        virtual void set_sensor(unsigned, bool);
        virtual bool get_sensor(unsigned) const;
 
-       virtual void tick() { }
+       virtual void tick();
        virtual void flush() { }
 };