X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibr2c2%2Farducontrol.h;h=69311f8280fecbb94ce0671b636a0ec4bf9fcf0d;hb=9afe42fc94eed6754da8401082e76121f8c66783;hp=46af9238af3fe845e5e19af05ea285b27987361d;hpb=aada4cd3c335e6cf55d64200b9d92e8f9310fa1d;p=r2c2.git diff --git a/source/libr2c2/arducontrol.h b/source/libr2c2/arducontrol.h index 46af923..69311f8 100644 --- a/source/libr2c2/arducontrol.h +++ b/source/libr2c2/arducontrol.h @@ -35,6 +35,7 @@ private: MFX_SPEED_FUNCS8 = 0x29, MFX_SPEED_FUNCS16 = 0x2A, S88_READ = 0x30, + SET_BAUD_RATE = 0x70, COMMAND_OK = 0x80, RECEIVE_OVERRUN = 0x81, FRAMING_ERROR = 0x82, @@ -42,6 +43,7 @@ private: LENGTH_ERROR = 0x84, INVALID_VALUE = 0x85, OVERCURRENT = 0xA0, + BAUD_CHANGE_FAILED = 0xA1, TRACK_CURRENT = 0xC0, INPUT_VOLTAGE = 0xC1, POWER_STATE = 0xC2, @@ -73,7 +75,8 @@ private: enum GeneralCommand { - POWER + POWER, + NEW_LOCO }; enum Protocol @@ -128,6 +131,11 @@ private: unsigned create_speed_func_command(unsigned, char *) const; }; + struct MfxInfo: public DetectedLocomotive + { + unsigned id; + }; + struct Accessory { enum Kind @@ -255,12 +263,19 @@ private: unsigned size; unsigned bits; unsigned misses; + std::list queue; + Msp::Mutex mutex; public: MfxSearchTask(ArduControl &); virtual bool get_work(PendingCommand &); virtual void process_reply(const char *, unsigned); + + private: + void push_info(const MfxInfo &); + public: + bool pop_info(MfxInfo &); }; class ControlThread: public Msp::Thread @@ -276,12 +291,14 @@ private: void exit(); private: virtual void main(); + void init_baud_rate(); bool get_work(PendingCommand &); unsigned do_command(const PendingCommand &); unsigned process_reply(const char *, unsigned); }; typedef std::map LocomotiveMap; + typedef std::vector MfxInfoArray; typedef std::map AccessoryMap; typedef std::list AccessoryPtrList; typedef std::map SensorMap; @@ -292,6 +309,7 @@ private: ControlledVariable power; LocomotiveMap locomotives; + MfxInfoArray mfx_info; AccessoryMap accessories; AccessoryPtrList accessory_queue; Accessory *active_accessory; @@ -325,6 +343,7 @@ private: public: virtual unsigned get_protocol_speed_steps(const std::string &) const; + virtual const DetectedLocomotive *enumerate_detected_locos(unsigned) const; virtual unsigned add_loco(unsigned, const std::string &, const VehicleType &); virtual void remove_loco(unsigned); virtual void set_loco_speed(unsigned, unsigned);