X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibr2c2%2Farducontrol.h;h=a48f6f0990aa59997b9c45bdde7778cd3506c17c;hb=25aacc9bfe66f1a2bffd196c735d3444adac6fe3;hp=4373a84f707713e6b7d80c1e927875719b6cad0a;hpb=aa48746158b19ad795a3cc656c4dfe17044baf54;p=r2c2.git diff --git a/source/libr2c2/arducontrol.h b/source/libr2c2/arducontrol.h index 4373a84..a48f6f0 100644 --- a/source/libr2c2/arducontrol.h +++ b/source/libr2c2/arducontrol.h @@ -220,18 +220,30 @@ private: public: void push(const T &); bool pop(T &); + unsigned size() const; bool empty() const; }; 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 @@ -240,9 +252,12 @@ private: Queue queue; public: + CommandQueueTask(); + virtual bool get_work(PendingCommand &); void push(const PendingCommand &); + unsigned size() const { return queue.size(); } bool empty() const { return queue.empty(); } }; @@ -276,7 +291,8 @@ private: ArduControl &control; unsigned n_octets; unsigned octets_remaining; - unsigned delay; + Msp::Time::TimeStamp last_poll; + Msp::Time::TimeDelta latency; public: S88Task(ArduControl &); @@ -286,13 +302,14 @@ private: void set_n_octets(unsigned); void grow_n_octets(unsigned); + + const Msp::Time::TimeDelta &get_latency() const { return latency; } }; class MfxAnnounceTask: public Task { private: unsigned serial; - Msp::Time::TimeStamp next; public: MfxAnnounceTask(); @@ -308,7 +325,6 @@ private: private: ArduControl &control; unsigned next_address; - Msp::Time::TimeStamp next; unsigned size; unsigned bits; unsigned misses; @@ -331,7 +347,6 @@ private: float current; float base_level; float peak_level; - Msp::Time::TimeStamp next_poll; unsigned next_type; public: @@ -400,6 +415,7 @@ private: ControlThread thread; static ProtocolInfo protocol_info[2]; + static TelemetryInfo telemetry_info[4]; public: ArduControl(const Options &); @@ -449,6 +465,9 @@ public: virtual void set_sensor(unsigned, bool) { } virtual bool get_sensor(unsigned) const; + virtual const TelemetryInfo *enumerate_telemetry(unsigned) const; + virtual float get_telemetry_value(const std::string &) const; + virtual void tick(); virtual void flush(); private: