X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibr2c2%2Fintellibox.h;h=caf84905dbe617524167838468fabeac6a106010;hb=3dfcd6a470a96dc7b6f2f100e604c7f0db6da00c;hp=8655bfc8ddc9509a472c0c091a6122ef02034004;hpb=1ff06c5bc46a677fa389ef86c6b26664368f1653;p=r2c2.git diff --git a/source/libr2c2/intellibox.h b/source/libr2c2/intellibox.h index 8655bfc..caf8490 100644 --- a/source/libr2c2/intellibox.h +++ b/source/libr2c2/intellibox.h @@ -1,14 +1,8 @@ -/* $Id$ - -This file is part of R²C² -Copyright © 2010 Mikkosoft Productions, Mikko Rasa -Distributed under the GPL -*/ - #ifndef LIBR2C2_INTELLIBOX_H_ #define LIBR2C2_INTELLIBOX_H_ #include +#include #include #include "driver.h" @@ -68,11 +62,12 @@ private: ERR_NO_I2C_SPACE, ERR_LOW_TURNOUT_SPACE=0x40, ERR_LOK_HALTED, - ERR_LOK_POWER_OFF, + ERR_LOK_POWER_OFF }; enum Protocol { + NONE, MM, MM_27 }; @@ -80,6 +75,7 @@ private: struct Locomotive { Protocol protocol; + bool ext_func; unsigned speed; bool reverse; unsigned funcs; @@ -89,12 +85,16 @@ private: Locomotive(); }; + // These are used for signals as well, but Intellibox calls them turnouts. struct Turnout { - bool state; + unsigned bits; + unsigned state; bool active; - bool pending; + bool synced; + unsigned pending; Msp::Time::TimeStamp off_timeout; + bool signal; Turnout(); }; @@ -115,7 +115,7 @@ private: unsigned length; }; - int serial_fd; + Msp::IO::Serial serial; bool power; bool halted; std::map locos; @@ -127,7 +127,7 @@ private: Msp::Time::TimeStamp next_event_query; public: - Intellibox(const std::string &); + Intellibox(const Options &); virtual void set_power(bool); virtual bool get_power() const { return power; } @@ -136,19 +136,36 @@ public: virtual const char *enumerate_protocols(unsigned) const; virtual unsigned get_protocol_speed_steps(const std::string &) const; - virtual void add_loco(unsigned, const std::string &); + virtual DetectedLocomotive *enumerate_detected_locos(unsigned) const { return 0; } + virtual unsigned add_loco(unsigned, const std::string &, const VehicleType &); + virtual void remove_loco(unsigned); virtual void set_loco_speed(unsigned, unsigned); virtual void set_loco_reverse(unsigned, bool); virtual void set_loco_function(unsigned, unsigned, bool); - virtual void add_turnout(unsigned); - virtual void set_turnout(unsigned, bool); - virtual bool get_turnout(unsigned) const; + virtual unsigned add_turnout(unsigned, const TrackType &); + virtual void remove_turnout(unsigned); +private: + unsigned add_turnout(unsigned, unsigned, bool); + void turnout_state_changed(unsigned, const Turnout &) const; +public: + virtual void set_turnout(unsigned, unsigned); + virtual unsigned get_turnout(unsigned) const; + + virtual unsigned add_signal(unsigned, const SignalType &); + virtual void remove_signal(unsigned); + virtual void set_signal(unsigned, unsigned); + virtual unsigned get_signal(unsigned) const; - virtual void add_sensor(unsigned); +public: + virtual unsigned add_sensor(unsigned); + virtual void remove_sensor(unsigned); virtual void set_sensor(unsigned, bool) { } virtual bool get_sensor(unsigned) const; + virtual const TelemetryInfo *enumerate_telemetry(unsigned) const { return 0; } + virtual float get_telemetry_value(const std::string &) const; + virtual void tick(); virtual void flush(); @@ -157,7 +174,7 @@ private: void command(Command); void command(Command, const unsigned char *, unsigned); void command(Command, unsigned, const unsigned char *, unsigned); - void loco_command(unsigned, unsigned, bool, unsigned); + void loco_command(unsigned, unsigned, bool, unsigned, bool); void turnout_command(unsigned, bool, bool); void process_reply(const Msp::Time::TimeStamp &); unsigned read_all(unsigned char *, unsigned);