]> git.tdb.fi Git - r2c2.git/blobdiff - source/libr2c2/arducontrol.h
Turn ArduControl command_queue into a Task
[r2c2.git] / source / libr2c2 / arducontrol.h
index 8560a13b969d21257c7e8dfab3aa611113d16682..4373a84f707713e6b7d80c1e927875719b6cad0a 100644 (file)
@@ -173,12 +173,13 @@ private:
                Kind kind;
                unsigned address;
                unsigned bits;
+               unsigned valid_states;
                ControlledVariable<unsigned> 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;
        };
@@ -219,6 +220,7 @@ private:
        public:
                void push(const T &);
                bool pop(T &);
+               bool empty() const;
        };
 
        class Task
@@ -239,6 +241,9 @@ private:
 
        public:
                virtual bool get_work(PendingCommand &);
+
+               void push(const PendingCommand &);
+               bool empty() const { return queue.empty(); }
        };
 
        class RefreshTask: public Task
@@ -356,8 +361,9 @@ private:
                virtual void main();
                void init_baud_rate();
                bool get_work(PendingCommand &);
-               unsigned do_command(const PendingCommand &);
+               unsigned do_command(const PendingCommand &, const Msp::Time::TimeDelta &);
                unsigned process_reply(const char *, unsigned);
+               void set_power(bool);
        };
 
        typedef std::map<unsigned, Locomotive> LocomotiveMap;
@@ -383,8 +389,8 @@ private:
 
        SensorMap sensors;
 
-       Msp::Mutex mutex;
-       Queue<PendingCommand> command_queue;
+       Msp::Time::TimeDelta command_timeout;
+       CommandQueueTask command_queue;
        Queue<Tag> completed_commands;
        RefreshTask refresh;
        S88Task s88;
@@ -431,10 +437,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);