1 #ifndef LIBR2C2_DRIVER_H_
2 #define LIBR2C2_DRIVER_H_
6 #include <sigc++/signal.h>
7 #include <msp/strings/lexicalcast.h>
21 typedef std::map<std::string, std::string> OptionMap;
27 Options(const std::string &);
29 void set(const std::string &, const std::string &);
32 T get(const std::string &k, const T &d = T()) const
34 OptionMap::const_iterator i = opts.find(k);
37 return Msp::lexical_cast<T>(i->second);
41 struct DetectedLocomotive
56 sigc::signal<void, bool> signal_power;
57 sigc::signal<void, bool> signal_halt;
58 sigc::signal<void, const DetectedLocomotive &> signal_locomotive_detected;
59 sigc::signal<void, const DetectedLocomotive &> signal_locomotive_gone;
60 sigc::signal<void, unsigned, unsigned, bool> signal_loco_speed;
61 sigc::signal<void, unsigned, unsigned, bool> signal_loco_function;
62 sigc::signal<void, unsigned, unsigned> signal_turnout;
63 sigc::signal<void, unsigned> signal_turnout_failed;
64 sigc::signal<void, unsigned, unsigned> signal_signal;
65 sigc::signal<void, unsigned, bool> signal_sensor;
72 virtual void set_power(bool) = 0;
73 virtual bool get_power() const = 0;
74 virtual void halt(bool) = 0;
75 virtual bool is_halted() const = 0;
77 virtual const char *enumerate_protocols(unsigned) const = 0;
78 virtual unsigned get_protocol_speed_steps(const std::string &) const = 0;
80 virtual const DetectedLocomotive *enumerate_detected_locos(unsigned) const = 0;
81 virtual unsigned add_loco(unsigned, const std::string &, const VehicleType &) = 0;
82 virtual void remove_loco(unsigned) = 0;
83 virtual void set_loco_speed(unsigned, unsigned) = 0;
84 virtual void set_loco_reverse(unsigned, bool) = 0;
85 virtual void set_loco_function(unsigned, unsigned, bool) = 0;
87 virtual unsigned add_turnout(unsigned, const TrackType &) = 0;
88 virtual void remove_turnout(unsigned) = 0;
89 virtual void set_turnout(unsigned, unsigned) = 0;
90 virtual unsigned get_turnout(unsigned) const = 0;
92 virtual unsigned add_signal(unsigned, const SignalType &) = 0;
93 virtual void remove_signal(unsigned) = 0;
94 virtual void set_signal(unsigned, unsigned) = 0;
95 virtual unsigned get_signal(unsigned) const = 0;
97 virtual unsigned add_sensor(unsigned) = 0;
98 virtual void remove_sensor(unsigned) = 0;
99 virtual void set_sensor(unsigned, bool) = 0;
100 virtual bool get_sensor(unsigned) const = 0;
102 virtual const TelemetryInfo *enumerate_telemetry(unsigned) const = 0;
103 virtual float get_telemetry_value(const std::string &) const = 0;
105 virtual void tick() = 0;
106 virtual void flush() = 0;
108 static Driver *create(const std::string &);