X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibr2c2%2Fdriver.h;h=3f5a75ce2a6b959d31071d38436c2d73bbef8f0e;hb=d84f187ca34a6ab2f8c37d85fa13d5c113714344;hp=9648c921354c4d8fbd4c85c494eb3e3bd0b9f474;hpb=ce2ff9a6e154f5b245cfb35114566489ab3e597c;p=r2c2.git diff --git a/source/libr2c2/driver.h b/source/libr2c2/driver.h index 9648c92..3f5a75c 100644 --- a/source/libr2c2/driver.h +++ b/source/libr2c2/driver.h @@ -1,8 +1,10 @@ #ifndef LIBR2C2_DRIVER_H_ #define LIBR2C2_DRIVER_H_ +#include #include #include +#include namespace R2C2 { @@ -13,11 +15,52 @@ class VehicleType; class Driver { public: + class Options + { + private: + typedef std::map OptionMap; + + OptionMap opts; + + public: + Options() { } + Options(const std::string &); + + void set(const std::string &, const std::string &); + + template + T get(const std::string &k, const T &d = T()) const + { + OptionMap::const_iterator i = opts.find(k); + if(i==opts.end()) + return d; + return Msp::lexical_cast(i->second); + } + }; + + struct DetectedLocomotive + { + std::string protocol; + unsigned address; + std::string name; + }; + + struct TelemetryInfo + { + const char *name; + const char *label; + const char *unit; + unsigned precision; + }; + sigc::signal signal_power; sigc::signal signal_halt; + sigc::signal signal_locomotive_detected; + sigc::signal signal_locomotive_gone; sigc::signal signal_loco_speed; sigc::signal signal_loco_function; sigc::signal signal_turnout; + sigc::signal signal_turnout_failed; sigc::signal signal_signal; sigc::signal signal_sensor; @@ -33,27 +76,32 @@ public: virtual const char *enumerate_protocols(unsigned) const = 0; virtual unsigned get_protocol_speed_steps(const std::string &) const = 0; - virtual void add_loco(unsigned, const std::string &, const VehicleType &) = 0; + + virtual const DetectedLocomotive *enumerate_detected_locos(unsigned) const = 0; + virtual unsigned add_loco(unsigned, const std::string &, const VehicleType &) = 0; virtual void remove_loco(unsigned) = 0; virtual void set_loco_speed(unsigned, unsigned) = 0; virtual void set_loco_reverse(unsigned, bool) = 0; virtual void set_loco_function(unsigned, unsigned, bool) = 0; - virtual void add_turnout(unsigned, const TrackType &) = 0; + virtual unsigned add_turnout(unsigned, const TrackType &) = 0; virtual void remove_turnout(unsigned) = 0; virtual void set_turnout(unsigned, unsigned) = 0; virtual unsigned get_turnout(unsigned) const = 0; - virtual void add_signal(unsigned, const SignalType &) = 0; + virtual unsigned add_signal(unsigned, const SignalType &) = 0; virtual void remove_signal(unsigned) = 0; virtual void set_signal(unsigned, unsigned) = 0; virtual unsigned get_signal(unsigned) const = 0; - virtual void add_sensor(unsigned) = 0; + virtual unsigned add_sensor(unsigned) = 0; virtual void remove_sensor(unsigned) = 0; virtual void set_sensor(unsigned, bool) = 0; virtual bool get_sensor(unsigned) const = 0; + virtual const TelemetryInfo *enumerate_telemetry(unsigned) const = 0; + virtual float get_telemetry_value(const std::string &) const = 0; + virtual void tick() = 0; virtual void flush() = 0;