]> git.tdb.fi Git - r2c2.git/blob - source/libr2c2/driver.h
e8d27f0b5cc58864e781a880e42a9a3774ae093c
[r2c2.git] / source / libr2c2 / driver.h
1 /* $Id$
2
3 This file is part of R²C²
4 Copyright © 2010  Mikkosoft Productions, Mikko Rasa
5 Distributed under the GPL
6 */
7
8 #ifndef LIBR2C2_DRIVER_H_
9 #define LIBR2C2_DRIVER_H_
10
11 #include <string>
12 #include <sigc++/signal.h>
13
14 namespace R2C2 {
15
16 class TrackType;
17 class VehicleType;
18
19 class Driver
20 {
21 public:
22         sigc::signal<void, bool> signal_power;
23         sigc::signal<void, bool> signal_halt;
24         sigc::signal<void, unsigned, unsigned, bool> signal_loco_speed;
25         sigc::signal<void, unsigned, unsigned, bool> signal_loco_function;
26         sigc::signal<void, unsigned, unsigned> signal_turnout;
27         sigc::signal<void, unsigned, bool> signal_sensor;
28
29 protected:
30         Driver() { }
31 public:
32         virtual ~Driver() { }
33
34         virtual void set_power(bool) = 0;
35         virtual bool get_power() const = 0;
36         virtual void halt(bool) = 0;
37         virtual bool is_halted() const = 0;
38
39         virtual const char *enumerate_protocols(unsigned) const = 0;
40         virtual unsigned get_protocol_speed_steps(const std::string &) const = 0;
41         virtual void add_loco(unsigned, const std::string &, const VehicleType &) = 0;
42         virtual void set_loco_speed(unsigned, unsigned) = 0;
43         virtual void set_loco_reverse(unsigned, bool) = 0;
44         virtual void set_loco_function(unsigned, unsigned, bool) = 0;
45
46         virtual void add_turnout(unsigned, const TrackType &) = 0;
47         virtual void set_turnout(unsigned, unsigned) = 0;
48         virtual unsigned get_turnout(unsigned) const = 0;
49
50         virtual void add_sensor(unsigned) = 0;
51         virtual void set_sensor(unsigned, bool) = 0;
52         virtual bool get_sensor(unsigned) const = 0;
53
54         virtual void tick() = 0;
55         virtual void flush() = 0;
56
57         static Driver *create(const std::string &);
58 };
59
60 } // namespace R2C2
61
62 #endif