+/* $Id$
+
+This file is part of the MSP Märklin suite
+Copyright © 2006-2009 Mikkosoft Productions, Mikko Rasa
+Distributed under the GPL
+*/
+
#ifndef LIBMARKLIN_LOCOMOTIVE_H_
#define LIBMARKLIN_LOCOMOTIVE_H_
namespace Marklin {
class Control;
+class LocoType;
+class Reply;
class Locomotive
{
+private:
+ const LocoType &type;
+ Control &control;
+ unsigned addr;
+ unsigned speed;
+ bool reverse;
+ unsigned funcs;
+
public:
+ sigc::signal<void, unsigned> signal_speed_changing;
sigc::signal<void, unsigned> signal_speed_changed;
+ sigc::signal<void, unsigned, bool> signal_function_changed;
+
+ Locomotive(const LocoType &, Control &, unsigned);
- Locomotive(Control &, unsigned);
+ const LocoType &get_type() const { return type; }
void set_speed(unsigned);
void set_reverse(bool);
void set_function(unsigned, bool);
bool get_function(unsigned f) const { return (funcs>>f)&1; }
void refresh_status();
private:
- Control &control;
- unsigned addr;
- unsigned speed;
- bool reverse;
- unsigned funcs;
-
void send_command(bool);
- void status_reply(Error, const std::string &);
+ void status_reply(const Reply &);
bool reverse_timeout();
};