X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fnetwork%2Ftrain.cpp;fp=source%2Fnetwork%2Ftrain.cpp;h=468b2200a0aa7d97dfd9e9724169a89e1b348da6;hb=010d8321e982d1684fcbff5bf6fc2bdec7cb7bae;hp=0000000000000000000000000000000000000000;hpb=6109a2122226e1c71e9cc71e4c21036e99e43601;p=r2c2.git diff --git a/source/network/train.cpp b/source/network/train.cpp new file mode 100644 index 0000000..468b220 --- /dev/null +++ b/source/network/train.cpp @@ -0,0 +1,90 @@ +/* $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 { + +NetTrain::NetTrain(Client &c, const TrainInfoPacket &pkt): + client(c), + loco_type(client.get_catalogue().get_locomotive(pkt.loco_type)), + address(pkt.address), + name(pkt.name), + speed(0), + reverse(0), + functions(0) +{ } + +void NetTrain::set_speed(unsigned s) +{ + if(s==speed) + return; + + TrainSpeedPacket pkt; + pkt.address = address; + pkt.speed = s; + pkt.reverse = reverse; + client.send(pkt); +} + +void NetTrain::set_reverse(bool r) +{ + if(r==reverse) + return; + + TrainSpeedPacket pkt; + pkt.address = address; + pkt.speed = speed; + pkt.reverse = r; + client.send(pkt); +} + +void NetTrain::set_function(unsigned i, bool set) +{ + TrainFunctionPacket pkt; + pkt.address = address; + pkt.functions = functions; + if(set) + pkt.functions |= 1<>i)&1) + signal_function_changed.emit(i, (functions>>i)&1); +} + +void NetTrain::process_packet(const TrainStatusPacket &pkt) +{ + status = pkt.status; + signal_status_changed.emit(status); +} + +} // namespace Marklin