X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibr2c2%2Farducontrol.h;h=a8bdfa7a7ba1b018d3798c9ff3d50f25f8d640ff;hb=776b39dfb0896aa563a220bdbf0b044425629917;hp=c9a88aa56f4c30f068bda6fc40c9f673337d2284;hpb=59b3cebecfd8f1462c95bab447be70dfb5f38e92;p=r2c2.git diff --git a/source/libr2c2/arducontrol.h b/source/libr2c2/arducontrol.h index c9a88aa..a8bdfa7 100644 --- a/source/libr2c2/arducontrol.h +++ b/source/libr2c2/arducontrol.h @@ -3,6 +3,8 @@ #include #include +#include +#include #include #include #include @@ -12,6 +14,17 @@ namespace R2C2 { class ArduControl: public Driver { +public: + class Loader: public Msp::DataFile::ObjectLoader + { + public: + Loader(ArduControl &); + + private: + void mfx_announce_serial(unsigned); + void mfx_locomotive(unsigned); + }; + private: enum Command { @@ -133,6 +146,12 @@ private: struct MfxInfo: public DetectedLocomotive { + class Loader: public Msp::DataFile::ObjectLoader + { + public: + Loader(MfxInfo &); + }; + unsigned id; }; @@ -211,6 +230,15 @@ private: virtual void process_reply(const char *, unsigned) { } }; + class CommandQueueTask: public Task + { + private: + Queue queue; + + public: + virtual bool get_work(PendingCommand &); + }; + class RefreshTask: public Task { private: @@ -241,6 +269,7 @@ private: ArduControl &control; unsigned n_octets; unsigned octets_remaining; + unsigned delay; public: S88Task(ArduControl &); @@ -264,6 +293,7 @@ private: virtual bool get_work(PendingCommand &); void set_serial(unsigned); + unsigned get_serial() const { return serial; } }; class MfxSearchTask: public Task @@ -283,6 +313,7 @@ private: virtual bool get_work(PendingCommand &); virtual void process_reply(const char *, unsigned); + void set_next_address(unsigned); bool pop_info(MfxInfo &); }; @@ -313,6 +344,7 @@ private: Msp::IO::Serial serial; unsigned debug; + Msp::FS::Path state_file; ControlledVariable power; @@ -353,6 +385,9 @@ public: virtual const DetectedLocomotive *enumerate_detected_locos(unsigned) const; virtual unsigned add_loco(unsigned, const std::string &, const VehicleType &); +private: + MfxInfoArray::iterator add_mfx_info(const MfxInfo &); +public: virtual void remove_loco(unsigned); virtual void set_loco_speed(unsigned, unsigned); virtual void set_loco_reverse(unsigned, bool); @@ -382,6 +417,8 @@ public: virtual void tick(); virtual void flush(); +private: + void save_state() const; }; } // namespace R2C2