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
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 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;