X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibmarklin%2Flayout.cpp;h=97297410c25d4188b7e54d6e13c5c7e77ee9d3ad;hb=4d33c389881ebdf0b3926343d53e7d1ece654e20;hp=af88d7d8fd2e35f3a44af86ff24640c85c003d1d;hpb=a4566a4a23ff676f11a90615e8e468ef50107946;p=r2c2.git diff --git a/source/libmarklin/layout.cpp b/source/libmarklin/layout.cpp index af88d7d..9729741 100644 --- a/source/libmarklin/layout.cpp +++ b/source/libmarklin/layout.cpp @@ -9,6 +9,7 @@ Distributed under the GPL #include #include #include +#include #include #include "block.h" #include "catalogue.h" @@ -216,6 +217,7 @@ void Layout::emergency(const string &msg) { if(driver) driver->halt(true); + IO::print("Emergency: %s\n", msg); signal_emergency.emit(msg); } @@ -237,6 +239,9 @@ void Layout::save(const string &fn) for(map::iterator i=routes.begin(); i!=routes.end(); ++i) { + if(i->second->is_temporary()) + continue; + DataFile::Statement st("route"); st.append(i->first); i->second->save(st.sub); @@ -287,6 +292,9 @@ void Layout::check_routes() { for(map::iterator i=routes.begin(); i!=routes.end(); ++i) { + if(i->second->is_temporary()) + continue; + /* We must copy the turnout map, since adding tracks to the route will (temporarily) mess it up */ const map turnouts = i->second->get_turnouts(); @@ -322,6 +330,8 @@ void Layout::check_routes() while(1) { // Traverse the track and get the next one + if(track->get_type().get_endpoints().size()<2) + break; unsigned out_ep = track->traverse(ep, trk_path); Track *next = track->get_links()[out_ep]; if(!next || next == start) @@ -362,7 +372,7 @@ void Layout::sensor_event(unsigned addr, bool state) if((*i)->get_sensor_id()==addr) { if(!(*i)->get_train()) - emergency("Unreserved sensor triggered"); + emergency(format("Unreserved sensor %d triggered", addr)); break; } }