X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fnetwork%2Ftrain.cpp;h=52eca849b30421c79591f6296ef6a266f125b6a0;hb=53712fb06be78cb6383ed8a54467dad7aebbf369;hp=468b2200a0aa7d97dfd9e9724169a89e1b348da6;hpb=010d8321e982d1684fcbff5bf6fc2bdec7cb7bae;p=r2c2.git diff --git a/source/network/train.cpp b/source/network/train.cpp index 468b220..52eca84 100644 --- a/source/network/train.cpp +++ b/source/network/train.cpp @@ -1,47 +1,52 @@ -/* $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(pkt.loco_type)), address(pkt.address), name(pkt.name), - speed(0), - reverse(0), + target_speed(0), + reverse(false), 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.control = c; + pkt.value = v; + client.send(pkt); +} + +float NetTrain::get_control(const string &c) const +{ + map::const_iterator i = controls.find(c); + return i!=controls.end() ? i->second : 0; +} + +void NetTrain::set_target_speed(float s) +{ + TrainAIControlPacket pkt; pkt.address = address; - pkt.speed = s; + pkt.target_speed = s; pkt.reverse = reverse; client.send(pkt); } void NetTrain::set_reverse(bool r) { - if(r==reverse) - return; - - TrainSpeedPacket pkt; + TrainAIControlPacket pkt; pkt.address = address; - pkt.speed = speed; + pkt.target_speed = target_speed; pkt.reverse = r; client.send(pkt); } @@ -58,18 +63,21 @@ 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(pkt.speed!=speed) - { - speed = pkt.speed; - signal_speed_changed.emit(speed); - } - if(pkt.reverse!=reverse) - { - reverse = pkt.reverse; - signal_reverse_changed.emit(reverse); - } + if(r==route) + return; + + TrainRoutePacket pkt; + pkt.address = address; + pkt.route = r; + client.send(pkt); +} + +void NetTrain::process_packet(const TrainControlPacket &pkt) +{ + controls[pkt.control] = pkt.value; + signal_control_changed.emit(pkt.control, pkt.value); } void NetTrain::process_packet(const TrainFunctionPacket &pkt) @@ -81,10 +89,31 @@ void NetTrain::process_packet(const TrainFunctionPacket &pkt) signal_function_changed.emit(i, (functions>>i)&1); } +void NetTrain::process_packet(const TrainAIControlPacket &pkt) +{ + if(pkt.target_speed!=target_speed) + { + target_speed = pkt.target_speed; + signal_target_speed_changed.emit(target_speed); + } + + if(pkt.reverse!=reverse) + { + reverse = pkt.reverse; + signal_reverse_changed.emit(reverse); + } +} + void NetTrain::process_packet(const TrainStatusPacket &pkt) { status = pkt.status; signal_status_changed.emit(status); } -} // namespace Marklin +void NetTrain::process_packet(const TrainRoutePacket &pkt) +{ + route = pkt.route; + signal_route_changed.emit(route); +} + +} // namespace R2C2