]> git.tdb.fi Git - r2c2.git/blob - source/libr2c2/dummy.h
6943413a8142d5500136ce259afd89bc2ba8ced9
[r2c2.git] / source / libr2c2 / dummy.h
1 #ifndef LIBR2C2_DUMMY_H_
2 #define LIBR2C2_DUMMY_H_
3
4 #include <map>
5 #include <msp/time/timedelta.h>
6 #include <msp/time/timestamp.h>
7 #include "driver.h"
8
9 namespace R2C2 {
10
11 class Dummy: public Driver
12 {
13 private:
14         struct TurnoutState
15         {
16                 unsigned state;
17                 unsigned pending;
18                 Msp::Time::TimeStamp timeout;
19         };
20
21         struct LocoState
22         {
23                 unsigned speed;
24                 bool reverse;
25         };
26
27         bool power;
28         std::map<unsigned, TurnoutState> turnouts;
29         std::map<unsigned, LocoState> locos;
30         std::map<unsigned, bool> sensors;
31         Msp::Time::TimeDelta turnout_delay;
32
33 public:
34         Dummy(const Options &);
35
36         virtual void set_power(bool);
37         virtual bool get_power() const { return power; }
38         virtual void halt(bool) { }
39         virtual bool is_halted() const { return false; }
40
41         virtual const char *enumerate_protocols(unsigned) const;
42         virtual unsigned get_protocol_speed_steps(const std::string &) const;
43         virtual DetectedLocomotive *enumerate_detected_locos(unsigned) const { return 0; }
44         virtual unsigned add_loco(unsigned a, const std::string &, const VehicleType &) { return a; }
45         virtual void remove_loco(unsigned) { }
46         virtual void set_loco_speed(unsigned, unsigned);
47         virtual void set_loco_reverse(unsigned, bool);
48         virtual void set_loco_function(unsigned, unsigned, bool);
49
50         virtual unsigned add_turnout(unsigned, const TrackType &);
51         virtual void remove_turnout(unsigned) { }
52         virtual void set_turnout(unsigned, unsigned);
53         virtual unsigned get_turnout(unsigned) const;
54
55         virtual unsigned add_signal(unsigned a, const SignalType &) { return a; }
56         virtual void remove_signal(unsigned) { }
57         virtual void set_signal(unsigned, unsigned) { }
58         virtual unsigned get_signal(unsigned) const { return 0; }
59
60         virtual unsigned add_sensor(unsigned a) { return a; }
61         virtual void remove_sensor(unsigned) { }
62         virtual void set_sensor(unsigned, bool);
63         virtual bool get_sensor(unsigned) const;
64
65         virtual void tick();
66         virtual void flush() { }
67 };
68
69 } // namespace R2C2
70
71 #endif