X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibr2c2%2Fcentralstation.h;h=6fe26f61e6b94802c5f74eb2501430d02552c805;hb=42f767669d9fa699e1fd58a62548b62f5c93a87b;hp=4539e0b10d00f56db768b9c416b5d138e87ab546;hpb=a76a60a5eb20f6e7c5bfc2a7250529b2510df987;p=r2c2.git diff --git a/source/libr2c2/centralstation.h b/source/libr2c2/centralstation.h index 4539e0b..6fe26f6 100644 --- a/source/libr2c2/centralstation.h +++ b/source/libr2c2/centralstation.h @@ -68,25 +68,33 @@ private: Locomotive(); }; - struct Turnout + struct MagnetAccessory { + enum Type + { + TURNOUT, + SIGNAL + }; + enum Symbol { - LEFT = 0, - RIGHT = 1, - THREEWAY = 2, - DOUBLESLIP = 3, - CURVED_LEFT = 21, - CURVED_RIGHT = 22 + TURNOUT_LEFT = 0, + TURNOUT_RIGHT = 1, + TURNOUT_THREEWAY = 2, + TURNOUT_DOUBLESLIP = 3, + SEMAPHORE_HOME = 5, + TURNOUT_CURVED_LEFT = 21, + TURNOUT_CURVED_RIGHT = 22 }; unsigned address; - unsigned symbol; + Type type; + Symbol symbol; unsigned state; unsigned bits; bool synced; - Turnout(); + MagnetAccessory(); }; struct Sensor @@ -98,7 +106,7 @@ private: typedef std::map AddressMap; typedef std::map LocoMap; - typedef std::map TurnoutMap; + typedef std::map AccessoryMap; typedef std::map SensorMap; Msp::Net::StreamSocket socket; @@ -110,9 +118,9 @@ private: LocoMap locos; AddressMap loco_addr; bool locos_synced; - TurnoutMap turnouts; - AddressMap turnout_addr; - bool turnouts_synced; + AccessoryMap accessories; + AddressMap accessory_addr; + bool accessories_synced; SensorMap sensors; std::vector s88; bool sensors_synced; @@ -138,6 +146,17 @@ public: virtual void set_turnout(unsigned, unsigned); virtual unsigned get_turnout(unsigned) const; + virtual void add_signal(unsigned, const SignalType &); + virtual void set_signal(unsigned, unsigned); + virtual unsigned get_signal(unsigned) const; + +private: + MagnetAccessory &add_accessory(unsigned, MagnetAccessory::Type, MagnetAccessory::Symbol); + void set_accessory_state(unsigned, MagnetAccessory::Type, unsigned); + unsigned get_accessory_state(unsigned, MagnetAccessory::Type) const; + void accessory_state_changed(const MagnetAccessory &) const; + +public: virtual void add_sensor(unsigned); virtual void set_sensor(unsigned, bool) { } virtual bool get_sensor(unsigned) const;