]> git.tdb.fi Git - r2c2.git/blobdiff - source/libmarklin/control.h
Initial revision
[r2c2.git] / source / libmarklin / control.h
diff --git a/source/libmarklin/control.h b/source/libmarklin/control.h
new file mode 100644 (file)
index 0000000..62d64f9
--- /dev/null
@@ -0,0 +1,59 @@
+#ifndef LIBMARKLIN_CONTROL_H_
+#define LIBMARKLIN_CONTROL_H_
+
+#include <list>
+#include <string>
+#include <msp/time/timestamp.h>
+#include "constants.h"
+#include "sensor.h"
+#include "locomotive.h"
+#include "turnout.h"
+
+namespace Marklin {
+
+class Command;
+
+class Control
+{
+public:
+       sigc::signal<void, unsigned, bool> signal_turnout_event;
+       sigc::signal<void, unsigned, bool> signal_sensor_event;
+
+       Control();
+       void       set_power(bool);
+       void       set_debug(bool d) { debug=d; }
+       bool       get_power() const { return power; }
+       const TurnoutMap &get_turnouts() const { return turnouts; }
+       Turnout    *get_turnout(unsigned) const;
+       Locomotive *get_locomotive(unsigned) const;
+       Sensor     *get_sensor(unsigned) const;
+       unsigned   get_queue_length() const { return queue.size(); }
+       void       open(const std::string &);
+       Command    &command(const std::string &);
+       void       add_turnout(Turnout *);
+       void       add_locomotive(Locomotive *);
+       void       add_sensor(Sensor *);
+       void       tick();
+       ~Control();
+private:
+       int  serial_fd;
+       bool p50_enabled;
+       bool power;
+       std::list<Command> queue;
+       TurnoutMap turnouts;
+       LocomotiveSeq locomotives;
+       SensorMap sensors;
+       Msp::Time::TimeStamp next_event_query;
+       bool poll_sensors;
+       bool debug;
+
+       void read_all(int, char *, int);
+       std::string read_reply(Cmd);
+       void event_query_done(Error, const std::string &);
+       void turnout_event_done(Error, const std::string &);
+       void sensor_event_done(Error, const std::string &);
+};
+
+} // namespace Marklin
+
+#endif