-/* $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_
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
typedef std::map<unsigned, unsigned> AddressMap;
typedef std::map<unsigned, Locomotive> LocoMap;
- typedef std::map<unsigned, Turnout> TurnoutMap;
+ typedef std::map<unsigned, MagnetAccessory> AccessoryMap;
typedef std::map<unsigned, Sensor> SensorMap;
Msp::Net::StreamSocket socket;
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<unsigned> s88;
bool sensors_synced;
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;