]> git.tdb.fi Git - r2c2.git/blob - source/libr2c2/driver.h
Add interface for importing detected locomotives from the driver
[r2c2.git] / source / libr2c2 / driver.h
1 #ifndef LIBR2C2_DRIVER_H_
2 #define LIBR2C2_DRIVER_H_
3
4 #include <string>
5 #include <sigc++/signal.h>
6
7 namespace R2C2 {
8
9 class SignalType;
10 class TrackType;
11 class VehicleType;
12
13 class Driver
14 {
15 public:
16         struct DetectedLocomotive
17         {
18                 std::string protocol;
19                 unsigned address;
20                 std::string name;
21         };
22
23         sigc::signal<void, bool> signal_power;
24         sigc::signal<void, bool> signal_halt;
25         sigc::signal<void, const DetectedLocomotive &> signal_locomotive_detected;
26         sigc::signal<void, const DetectedLocomotive &> signal_locomotive_gone;
27         sigc::signal<void, unsigned, unsigned, bool> signal_loco_speed;
28         sigc::signal<void, unsigned, unsigned, bool> signal_loco_function;
29         sigc::signal<void, unsigned, unsigned> signal_turnout;
30         sigc::signal<void, unsigned, unsigned> signal_signal;
31         sigc::signal<void, unsigned, bool> signal_sensor;
32
33 protected:
34         Driver() { }
35 public:
36         virtual ~Driver() { }
37
38         virtual void set_power(bool) = 0;
39         virtual bool get_power() const = 0;
40         virtual void halt(bool) = 0;
41         virtual bool is_halted() const = 0;
42
43         virtual const char *enumerate_protocols(unsigned) const = 0;
44         virtual unsigned get_protocol_speed_steps(const std::string &) const = 0;
45
46         virtual const DetectedLocomotive *enumerate_detected_locos(unsigned) const = 0;
47         virtual unsigned add_loco(unsigned, const std::string &, const VehicleType &) = 0;
48         virtual void remove_loco(unsigned) = 0;
49         virtual void set_loco_speed(unsigned, unsigned) = 0;
50         virtual void set_loco_reverse(unsigned, bool) = 0;
51         virtual void set_loco_function(unsigned, unsigned, bool) = 0;
52
53         virtual unsigned add_turnout(unsigned, const TrackType &) = 0;
54         virtual void remove_turnout(unsigned) = 0;
55         virtual void set_turnout(unsigned, unsigned) = 0;
56         virtual unsigned get_turnout(unsigned) const = 0;
57
58         virtual unsigned add_signal(unsigned, const SignalType &) = 0;
59         virtual void remove_signal(unsigned) = 0;
60         virtual void set_signal(unsigned, unsigned) = 0;
61         virtual unsigned get_signal(unsigned) const = 0;
62
63         virtual unsigned add_sensor(unsigned) = 0;
64         virtual void remove_sensor(unsigned) = 0;
65         virtual void set_sensor(unsigned, bool) = 0;
66         virtual bool get_sensor(unsigned) const = 0;
67
68         virtual void tick() = 0;
69         virtual void flush() = 0;
70
71         static Driver *create(const std::string &);
72 };
73
74 } // namespace R2C2
75
76 #endif