]> git.tdb.fi Git - r2c2.git/blobdiff - source/libr2c2/arducontrol.h
Retain addresses of previously seen locomotives
[r2c2.git] / source / libr2c2 / arducontrol.h
index a48f6f0990aa59997b9c45bdde7778cd3506c17c..78b360018de17c245629059b789ab6be55c9ba4d 100644 (file)
@@ -1,6 +1,7 @@
 #ifndef LIBR2C2_ARDUCONTROL_H_
 #define LIBR2C2_ARDUCONTROL_H_
 
+#include <deque>
 #include <msp/core/mutex.h>
 #include <msp/core/thread.h>
 #include <msp/datafile/objectloader.h>
@@ -44,6 +45,7 @@ private:
                MFX_SEARCH = 0x23,
                MFX_ASSIGN_ADDRESS = 0x24,
                MFX_PING = 0x25,
+               MFX_READ = 0x26,
                MFX_SPEED = 0x28,
                MFX_SPEED_FUNCS8 = 0x29,
                MFX_SPEED_FUNCS16 = 0x2A,
@@ -62,7 +64,8 @@ private:
                POWER_STATE = 0xC2,
                S88_DATA = 0xD0,
                MFX_SEARCH_FEEDBACK = 0xD1,
-               MFX_PING_FEEDBACK = 0xD2
+               MFX_PING_FEEDBACK = 0xD2,
+               MFX_READ_FEEDBACK = 0xD3
        };
 
        struct Tag
@@ -214,7 +217,7 @@ private:
        class Queue
        {
        private:
-               std::list<T> items;
+               std::deque<T> items;
                Msp::Mutex mutex;
 
        public:
@@ -330,6 +333,13 @@ private:
                unsigned misses;
                Queue<MfxInfo> queue;
 
+               MfxInfo *pending_info;
+               unsigned read_array;
+               unsigned read_offset;
+               unsigned read_length;
+               char read_data[0x40];
+               unsigned block_size;
+
        public:
                MfxSearchTask(ArduControl &);
 
@@ -436,6 +446,7 @@ public:
        virtual unsigned add_loco(unsigned, const std::string &, const VehicleType &);
 private:
        MfxInfoArray::iterator add_mfx_info(const MfxInfo &);
+       MfxInfo *find_mfx_info(unsigned);
 public:
        virtual void remove_loco(unsigned);
        virtual void set_loco_speed(unsigned, unsigned);