#define LIBR2C2_INTELLIBOX_H_
#include <map>
+#include <msp/io/serial.h>
#include <msp/time/timestamp.h>
#include "driver.h"
ERR_NO_I2C_SPACE,
ERR_LOW_TURNOUT_SPACE=0x40,
ERR_LOK_HALTED,
- ERR_LOK_POWER_OFF,
+ ERR_LOK_POWER_OFF
};
enum Protocol
Locomotive();
};
+ // These are used for signals as well, but Intellibox calls them turnouts.
struct Turnout
{
unsigned bits;
bool synced;
unsigned pending;
Msp::Time::TimeStamp off_timeout;
+ bool signal;
Turnout();
};
unsigned length;
};
- int serial_fd;
+ Msp::IO::Serial serial;
bool power;
bool halted;
std::map<unsigned, Locomotive> locos;
Msp::Time::TimeStamp next_event_query;
public:
- Intellibox(const std::string &);
+ Intellibox(const Options &);
virtual void set_power(bool);
virtual bool get_power() const { return power; }
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);
+private:
+ unsigned add_turnout(unsigned, unsigned, bool);
+ void turnout_state_changed(unsigned, const Turnout &) const;
+public:
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;
+
+public:
+ virtual unsigned add_sensor(unsigned);
+ virtual void remove_sensor(unsigned);
virtual void set_sensor(unsigned, bool) { }
virtual bool get_sensor(unsigned) const;