X-Git-Url: http://git.tdb.fi/?p=r2c2.git;a=blobdiff_plain;f=source%2Flibr2c2%2Farducontrol.h;h=1f45534a1ca472ee22cfbd40159fe2be806cf7a7;hp=c9a88aa56f4c30f068bda6fc40c9f673337d2284;hb=d5d8ee8;hpb=59b3cebecfd8f1462c95bab447be70dfb5f38e92 diff --git a/source/libr2c2/arducontrol.h b/source/libr2c2/arducontrol.h index c9a88aa..1f45534 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: @@ -264,6 +292,7 @@ private: virtual bool get_work(PendingCommand &); void set_serial(unsigned); + unsigned get_serial() const { return serial; } }; class MfxSearchTask: public Task @@ -283,6 +312,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 +343,7 @@ private: Msp::IO::Serial serial; unsigned debug; + Msp::FS::Path state_file; ControlledVariable power; @@ -353,6 +384,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 +416,8 @@ public: virtual void tick(); virtual void flush(); +private: + void save_state() const; }; } // namespace R2C2