-/* $Id$
-
-This file is part of the MSP Märklin suite
-Copyright © 2009 Mikkosoft Productions, Mikko Rasa
-Distributed under the GPL
-*/
-
#include "client.h"
#include "train.h"
using namespace std;
-namespace Marklin {
+namespace R2C2 {
NetTrain::NetTrain(Client &c, const TrainInfoPacket &pkt):
client(c),
- loco_type(client.get_catalogue().get_locomotive(pkt.loco_type)),
+ loco_type(client.get_catalogue().get<VehicleType>(pkt.loco_type)),
address(pkt.address),
name(pkt.name),
- speed(0),
- reverse(0),
functions(0)
{ }
-void NetTrain::set_speed(unsigned s)
+void NetTrain::set_control(const string &c, float v)
{
- if(s==speed)
+ if(v==controls[c])
return;
- TrainSpeedPacket pkt;
+ TrainControlPacket pkt;
pkt.address = address;
- pkt.speed = s;
- pkt.reverse = reverse;
+ pkt.control = c;
+ pkt.value = v;
client.send(pkt);
}
-void NetTrain::set_reverse(bool r)
+float NetTrain::get_control(const string &c) const
{
- if(r==reverse)
- return;
-
- TrainSpeedPacket pkt;
- pkt.address = address;
- pkt.speed = speed;
- pkt.reverse = r;
- client.send(pkt);
+ map<string, float>::const_iterator i = controls.find(c);
+ return i!=controls.end() ? i->second : 0;
}
void NetTrain::set_function(unsigned i, bool set)
client.send(pkt);
}
-void NetTrain::process_packet(const TrainSpeedPacket &pkt)
+void NetTrain::set_route(const string &r)
+{
+ if(r==route)
+ return;
+
+ TrainRoutePacket pkt;
+ pkt.address = address;
+ pkt.route = r;
+ client.send(pkt);
+}
+
+void NetTrain::process_packet(const TrainControlPacket &pkt)
{
- if(pkt.speed!=speed)
- {
- speed = pkt.speed;
- signal_speed_changed.emit(speed);
- }
- if(pkt.reverse!=reverse)
- {
- reverse = pkt.reverse;
- signal_reverse_changed.emit(reverse);
- }
+ controls[pkt.control] = pkt.value;
+ signal_control_changed.emit(pkt.control, pkt.value);
}
void NetTrain::process_packet(const TrainFunctionPacket &pkt)
signal_status_changed.emit(status);
}
-} // namespace Marklin
+void NetTrain::process_packet(const TrainRoutePacket &pkt)
+{
+ route = pkt.route;
+ signal_route_changed.emit(route);
+}
+
+} // namespace R2C2