--- /dev/null
+/* $Id$
+
+This file is part of the MSP Märklin suite
+Copyright © 2010 Mikkosoft Productions, Mikko Rasa
+Distributed under the GPL
+*/
+
+#ifndef LIBMARKLIN_DRIVER_H_
+#define LIBMARKLIN_DRIVER_H_
+
+#include <string>
+#include <sigc++/signal.h>
+
+namespace Marklin {
+
+class Driver
+{
+public:
+ sigc::signal<void, bool> signal_power;
+ sigc::signal<void, unsigned, unsigned, bool> signal_loco_speed;
+ sigc::signal<void, unsigned, unsigned, bool> signal_loco_function;
+ sigc::signal<void, unsigned, bool> signal_turnout;
+ sigc::signal<void, unsigned, bool> signal_sensor;
+
+protected:
+ Driver() { }
+public:
+ virtual ~Driver() { }
+
+ virtual void set_power(bool) = 0;
+ virtual bool get_power() const = 0;
+
+ virtual void add_loco(unsigned) = 0;
+ virtual void set_loco_speed(unsigned, unsigned) = 0;
+ virtual void set_loco_reverse(unsigned, bool) = 0;
+ virtual void set_loco_function(unsigned, unsigned, bool) = 0;
+
+ virtual void add_turnout(unsigned) = 0;
+ virtual void set_turnout(unsigned, bool) = 0;
+ virtual bool get_turnout(unsigned) const = 0;
+
+ virtual void add_sensor(unsigned) = 0;
+ virtual bool get_sensor(unsigned) const = 0;
+
+ virtual void tick() = 0;
+ virtual void flush() = 0;
+
+ static Driver *create(const std::string &);
+};
+
+} // namespace Marklin
+
+#endif