X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibr2c2%2Fcentralstation.h;h=959a5acb6b21b8429ba8dfe851f1c7bbee1d5e90;hb=9f0d428e974defa64cdf8e7b7072967327250958;hp=fea882be1011230fa9d6f8c86fc77a7dfbc6288d;hpb=b14059de03324aecde3efc649293d98ce5b7aaf2;p=r2c2.git diff --git a/source/libr2c2/centralstation.h b/source/libr2c2/centralstation.h index fea882b..959a5ac 100644 --- a/source/libr2c2/centralstation.h +++ b/source/libr2c2/centralstation.h @@ -1,10 +1,3 @@ -/* $Id$ - -This file is part of R²C² -Copyright © 2010 Mikkosoft Productions, Mikko Rasa -Distributed under the GPL -*/ - #ifndef LIBR2C2_CENTRALSTATION_H_ #define LIBR2C2_CENTRALSTATION_H_ @@ -30,7 +23,7 @@ private: struct Message { - typedef std::map AttribMap; + typedef std::multimap AttribMap; typedef std::map ObjectMap; Tag header; @@ -68,29 +61,40 @@ private: unsigned address; unsigned speed; bool reverse; + unsigned func_mask; unsigned funcs; bool control; Locomotive(); }; - struct Turnout + struct MagnetAccessory { + enum Type + { + TURNOUT, + SIGNAL + }; + enum Symbol { - LEFT, - RIGHT, - THREEWAY, - DOUBLESLIP + 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 @@ -102,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; @@ -114,15 +118,15 @@ 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; public: - CentralStation(const std::string &); + CentralStation(const Options &); ~CentralStation(); virtual void set_power(bool); @@ -133,19 +137,39 @@ public: virtual const char *enumerate_protocols(unsigned) const; virtual unsigned get_protocol_speed_steps(const std::string &) const; - virtual void add_loco(unsigned, const std::string &, const VehicleType &); + virtual DetectedLocomotive *enumerate_detected_locos(unsigned) const { return 0; } + virtual unsigned add_loco(unsigned, const std::string &, const VehicleType &); + virtual void remove_loco(unsigned); virtual void set_loco_speed(unsigned, unsigned); virtual void set_loco_reverse(unsigned, bool); virtual void set_loco_function(unsigned, unsigned, bool); - virtual void add_turnout(unsigned, const TrackType &); + virtual unsigned add_turnout(unsigned, const TrackType &); + virtual void remove_turnout(unsigned); virtual void set_turnout(unsigned, unsigned); virtual unsigned get_turnout(unsigned) const; - virtual void add_sensor(unsigned); + virtual unsigned add_signal(unsigned, const SignalType &); + virtual void remove_signal(unsigned); + virtual void set_signal(unsigned, unsigned); + virtual unsigned get_signal(unsigned) const; + +private: + MagnetAccessory &add_accessory(unsigned, MagnetAccessory::Type, MagnetAccessory::Symbol); + void remove_accessory(unsigned); + 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 unsigned add_sensor(unsigned); + virtual void remove_sensor(unsigned); virtual void set_sensor(unsigned, bool) { } virtual bool get_sensor(unsigned) const; + virtual const TelemetryInfo *enumerate_telemetry(unsigned) const { return 0; } + virtual float get_telemetry_value(const std::string &) const; + virtual void tick(); virtual void flush();