X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibr2c2%2Farducontrol.h;h=292700d5c452d8daee03e2815542e34b7297404e;hb=b78b49d85fbb9b2901c77e6450cfd41c0a818ac1;hp=40c7b3c6912d47247024c5ab28461bb497a6a7f1;hpb=b4beace6f1d3e018dbe1495430d32f828d406229;p=r2c2.git diff --git a/source/libr2c2/arducontrol.h b/source/libr2c2/arducontrol.h index 40c7b3c..292700d 100644 --- a/source/libr2c2/arducontrol.h +++ b/source/libr2c2/arducontrol.h @@ -173,12 +173,13 @@ private: Kind kind; unsigned address; unsigned bits; + unsigned valid_states; ControlledVariable state; unsigned uncertain; unsigned target; Msp::Time::TimeDelta active_time; - Accessory(Kind, unsigned, unsigned); + Accessory(Kind, unsigned, unsigned, unsigned); unsigned create_state_command(unsigned, bool, char *) const; }; @@ -225,12 +226,23 @@ private: class Task { protected: - Task() { } + std::string name; + unsigned priority; + Msp::Time::TimeStamp sleep_timeout; + + Task(const std::string &, unsigned = 0); public: virtual ~Task() { } + const std::string &get_name() const { return name; } + virtual bool get_work(PendingCommand &) = 0; virtual void process_reply(const char *, unsigned) { } + + unsigned get_priority() const { return priority; } + const Msp::Time::TimeStamp &get_sleep_timeout() const { return sleep_timeout; } + protected: + void sleep(const Msp::Time::TimeDelta &); }; class CommandQueueTask: public Task @@ -239,7 +251,12 @@ private: Queue queue; public: + CommandQueueTask(); + virtual bool get_work(PendingCommand &); + + void push(const PendingCommand &); + bool empty() const { return queue.empty(); } }; class RefreshTask: public Task @@ -272,7 +289,6 @@ private: ArduControl &control; unsigned n_octets; unsigned octets_remaining; - unsigned delay; public: S88Task(ArduControl &); @@ -288,7 +304,6 @@ private: { private: unsigned serial; - Msp::Time::TimeStamp next; public: MfxAnnounceTask(); @@ -304,7 +319,6 @@ private: private: ArduControl &control; unsigned next_address; - Msp::Time::TimeStamp next; unsigned size; unsigned bits; unsigned misses; @@ -327,7 +341,6 @@ private: float current; float base_level; float peak_level; - Msp::Time::TimeStamp next_poll; unsigned next_type; public: @@ -359,6 +372,7 @@ private: bool get_work(PendingCommand &); unsigned do_command(const PendingCommand &, const Msp::Time::TimeDelta &); unsigned process_reply(const char *, unsigned); + void set_power(bool); }; typedef std::map LocomotiveMap; @@ -385,7 +399,7 @@ private: SensorMap sensors; Msp::Time::TimeDelta command_timeout; - Queue command_queue; + CommandQueueTask command_queue; Queue completed_commands; RefreshTask refresh; S88Task s88; @@ -432,10 +446,11 @@ public: virtual unsigned get_signal(unsigned) const; private: - unsigned add_accessory(Accessory::Kind, unsigned, unsigned); + unsigned add_accessory(Accessory::Kind, unsigned, unsigned, unsigned); void remove_accessory(Accessory::Kind, unsigned); void set_accessory(Accessory::Kind, unsigned, unsigned); unsigned get_accessory(Accessory::Kind, unsigned) const; + void activate_accessory_by_mask(Accessory &, unsigned); public: virtual unsigned add_sensor(unsigned); @@ -443,6 +458,9 @@ public: 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(); private: