1 #ifndef LIBR2C2_DRIVER_H_
2 #define LIBR2C2_DRIVER_H_
5 #include <sigc++/signal.h>
16 struct DetectedLocomotive
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;
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;
43 virtual const char *enumerate_protocols(unsigned) const = 0;
44 virtual unsigned get_protocol_speed_steps(const std::string &) const = 0;
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;
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;
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;
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;
68 virtual void tick() = 0;
69 virtual void flush() = 0;
71 static Driver *create(const std::string &);