]> git.tdb.fi Git - r2c2.git/blob - source/libr2c2/driver.h
ec143e83d244c24f32b308fa8d3b646f07e4d68d
[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 TrackType;
10 class VehicleType;
11
12 class Driver
13 {
14 public:
15         sigc::signal<void, bool> signal_power;
16         sigc::signal<void, bool> signal_halt;
17         sigc::signal<void, unsigned, unsigned, bool> signal_loco_speed;
18         sigc::signal<void, unsigned, unsigned, bool> signal_loco_function;
19         sigc::signal<void, unsigned, unsigned> signal_turnout;
20         sigc::signal<void, unsigned, bool> signal_sensor;
21
22 protected:
23         Driver() { }
24 public:
25         virtual ~Driver() { }
26
27         virtual void set_power(bool) = 0;
28         virtual bool get_power() const = 0;
29         virtual void halt(bool) = 0;
30         virtual bool is_halted() const = 0;
31
32         virtual const char *enumerate_protocols(unsigned) const = 0;
33         virtual unsigned get_protocol_speed_steps(const std::string &) const = 0;
34         virtual void add_loco(unsigned, const std::string &, const VehicleType &) = 0;
35         virtual void set_loco_speed(unsigned, unsigned) = 0;
36         virtual void set_loco_reverse(unsigned, bool) = 0;
37         virtual void set_loco_function(unsigned, unsigned, bool) = 0;
38
39         virtual void add_turnout(unsigned, const TrackType &) = 0;
40         virtual void set_turnout(unsigned, unsigned) = 0;
41         virtual unsigned get_turnout(unsigned) const = 0;
42
43         virtual void add_sensor(unsigned) = 0;
44         virtual void set_sensor(unsigned, bool) = 0;
45         virtual bool get_sensor(unsigned) const = 0;
46
47         virtual void tick() = 0;
48         virtual void flush() = 0;
49
50         static Driver *create(const std::string &);
51 };
52
53 } // namespace R2C2
54
55 #endif