]> git.tdb.fi Git - r2c2.git/log
r2c2.git
9 years agoSome refactoring in preparation for UI persistence
Mikko Rasa [Fri, 3 Apr 2015 22:40:03 +0000 (01:40 +0300)]
Some refactoring in preparation for UI persistence

9 years agoRemove some unnecessary proxy functions
Mikko Rasa [Fri, 3 Apr 2015 22:36:53 +0000 (01:36 +0300)]
Remove some unnecessary proxy functions

9 years agoMinor adjustments to UI code
Mikko Rasa [Fri, 3 Apr 2015 16:37:46 +0000 (19:37 +0300)]
Minor adjustments to UI code

9 years agoMove user interface code to its own class
Mikko Rasa [Fri, 3 Apr 2015 16:29:46 +0000 (19:29 +0300)]
Move user interface code to its own class

9 years agoAdd a dialog and necessary support code to display departures
Mikko Rasa [Thu, 2 Apr 2015 21:53:08 +0000 (00:53 +0300)]
Add a dialog and necessary support code to display departures

9 years agoSet delay to zero before emitting signal_departed
Mikko Rasa [Thu, 2 Apr 2015 21:50:33 +0000 (00:50 +0300)]
Set delay to zero before emitting signal_departed

9 years agoHandle the case of a train being late
Mikko Rasa [Tue, 31 Mar 2015 21:49:03 +0000 (00:49 +0300)]
Handle the case of a train being late

Send it on its next trip after a short fixed delay instead of waiting
for the next day.

9 years agoMove the responsibility of starting the train to TrainRouter
Mikko Rasa [Tue, 31 Mar 2015 21:42:00 +0000 (00:42 +0300)]
Move the responsibility of starting the train to TrainRouter

This avoids any further sync problems with the planner, accounts for
irregular situations and also makes more sense.

9 years agoAdd two new telemetry values to the arducontrol driver
Mikko Rasa [Mon, 30 Mar 2015 20:18:38 +0000 (23:18 +0300)]
Add two new telemetry values to the arducontrol driver

9 years agoKeep UI better in sync with the clock
Mikko Rasa [Sun, 29 Mar 2015 22:31:36 +0000 (01:31 +0300)]
Keep UI better in sync with the clock

9 years agoSync timetable on clock discontinuity
Mikko Rasa [Sun, 29 Mar 2015 22:29:48 +0000 (01:29 +0300)]
Sync timetable on clock discontinuity

9 years agoUse add_argument instead of get_args
Mikko Rasa [Fri, 27 Mar 2015 07:15:10 +0000 (09:15 +0200)]
Use add_argument instead of get_args

9 years agoAdd an option to set simulation speed
Mikko Rasa [Fri, 27 Mar 2015 07:12:58 +0000 (09:12 +0200)]
Add an option to set simulation speed

Useful for testing long timetables.  Will cause problems if used with a
physical layout; currently there are no checks to prevent it.

9 years agoLimit timestep to 10 milliseconds
Mikko Rasa [Fri, 27 Mar 2015 07:04:54 +0000 (09:04 +0200)]
Limit timestep to 10 milliseconds

The simulation still has some problems with detriggering sensors if a
train advances too much during a step.  This should alleviate the issue.

9 years agoAllow zones with no qualifier or no number
Mikko Rasa [Thu, 26 Mar 2015 20:09:05 +0000 (22:09 +0200)]
Allow zones with no qualifier or no number

9 years agoAvoid unnecessary wait time with shared destinations
Mikko Rasa [Tue, 24 Mar 2015 10:28:40 +0000 (12:28 +0200)]
Avoid unnecessary wait time with shared destinations

If a train gets blocked by another train which has already arrived but
has a trip duration, a step must be processed when the blocking train
departs again.  Otherwise the next step might be a long time off (in case
all other trains have long departure delays) and would get an overly
inflated cost.

9 years agoAvoid negative values of wait_time
Mikko Rasa [Tue, 24 Mar 2015 10:07:47 +0000 (12:07 +0200)]
Avoid negative values of wait_time

9 years agoAdd missing initializer
Mikko Rasa [Tue, 24 Mar 2015 09:13:44 +0000 (11:13 +0200)]
Add missing initializer

9 years agoTweak the picking of the next train to process
Mikko Rasa [Mon, 23 Mar 2015 21:12:33 +0000 (23:12 +0200)]
Tweak the picking of the next train to process

If a train just became unblocked, it should be considered for picking
immediately.

9 years agoFix handling of trains that are becoming blocked
Mikko Rasa [Mon, 23 Mar 2015 20:49:29 +0000 (22:49 +0200)]
Fix handling of trains that are becoming blocked

9 years agoPenalize running against the preferred direction when planning routes
Mikko Rasa [Sun, 22 Mar 2015 16:03:24 +0000 (18:03 +0200)]
Penalize running against the preferred direction when planning routes

9 years agoCosmetic tweaks
Mikko Rasa [Sun, 22 Mar 2015 16:02:25 +0000 (18:02 +0200)]
Cosmetic tweaks

9 years agoAdd explicit typecast to avoid infinite recursion
Mikko Rasa [Sun, 22 Mar 2015 16:01:58 +0000 (18:01 +0200)]
Add explicit typecast to avoid infinite recursion

9 years agoGive zones a preferred running direction
Mikko Rasa [Sun, 22 Mar 2015 15:58:41 +0000 (17:58 +0200)]
Give zones a preferred running direction

It's also reflected in tracks as a preferred exit endpoint to avoid
having to look up zones while routing.  Weird things may happen if a
track belongs to multiple zones.

9 years agoAdd a using statement for get_end in Zone
Mikko Rasa [Sun, 22 Mar 2015 15:32:16 +0000 (17:32 +0200)]
Add a using statement for get_end in Zone

The virtual function declaration hides the other overload if it's not
explicitly brought in.

9 years agoRetain addresses of previously seen locomotives
Mikko Rasa [Mon, 2 Mar 2015 21:16:20 +0000 (23:16 +0200)]
Retain addresses of previously seen locomotives

It may happen that a locomotive gets re-enumerated, e.g. after visiting
another layout.  Since they are identified by their address, it's useful
to keep the same address.

9 years agoRead MFX locomotive name
Mikko Rasa [Thu, 26 Feb 2015 17:29:37 +0000 (19:29 +0200)]
Read MFX locomotive name

9 years agoRewrite goal initialization for TrainRouteMetric
Mikko Rasa [Mon, 23 Feb 2015 14:42:00 +0000 (16:42 +0200)]
Rewrite goal initialization for TrainRouteMetric

The previous code incorrectly added all tracks as goals when a direction
was specified, instead of only the ends.  This caused cost estimate creep
in the route planner, resulting in suboptimal performance.

9 years agoUse cached path length from occupied_tracks
Mikko Rasa [Mon, 23 Feb 2015 14:41:02 +0000 (16:41 +0200)]
Use cached path length from occupied_tracks

TrackType::get_path_length is not only a function call but also loops
through all parts to calculate the length.

9 years agoFix a problem with estimated remaining distance in route planner
Mikko Rasa [Mon, 23 Feb 2015 14:40:02 +0000 (16:40 +0200)]
Fix a problem with estimated remaining distance in route planner

The front of the occupied tracks list contains the length of the chosen
path on the current track and needs to be updated when the path changes.

9 years agoFollow the same path until another is significantly better
Mikko Rasa [Mon, 23 Feb 2015 10:17:27 +0000 (12:17 +0200)]
Follow the same path until another is significantly better

This replaces the cost penalty for routing steps.  In the penalty approach
it was possible to get two or more steps with the same penalty, which
would then race with each other.  In the new approach, all other steps are
sorted by their unpenalized cost and only the preferred one gets special
treatment.

9 years agoConsider train length when calculating wait time estimate
Mikko Rasa [Mon, 23 Feb 2015 10:14:58 +0000 (12:14 +0200)]
Consider train length when calculating wait time estimate

This allows also estimating wait time when a train is blocked.

9 years agoReset wait time estimate when the train starts moving again
Mikko Rasa [Mon, 23 Feb 2015 10:13:25 +0000 (12:13 +0200)]
Reset wait time estimate when the train starts moving again

Just in case the estimate was too high.

9 years agoAdd an actual heuristic for wait time
Mikko Rasa [Sun, 22 Feb 2015 18:09:51 +0000 (20:09 +0200)]
Add an actual heuristic for wait time

9 years agoDon't go past end of allocation when checking blocks for a signal
Mikko Rasa [Sat, 21 Feb 2015 23:52:44 +0000 (01:52 +0200)]
Don't go past end of allocation when checking blocks for a signal

9 years agoDon't clear current_sequence in set_route
Mikko Rasa [Sat, 21 Feb 2015 23:38:31 +0000 (01:38 +0200)]
Don't clear current_sequence in set_route

It may be still needed by routers of other trains.

9 years agoRobustify sequence handling while applying route plans
Mikko Rasa [Sat, 21 Feb 2015 19:05:28 +0000 (21:05 +0200)]
Robustify sequence handling while applying route plans

Setting current_sequence of all participating routers to zero beforehand
will make sequence points involving them not cleared and avoid the need
to special case everything.

9 years agoOnly schedule a sequence check if we're waiting at a sequence point
Mikko Rasa [Sat, 21 Feb 2015 18:30:15 +0000 (20:30 +0200)]
Only schedule a sequence check if we're waiting at a sequence point

9 years agoCombine the sequence_check_pending flag with state
Mikko Rasa [Sat, 21 Feb 2015 18:29:30 +0000 (20:29 +0200)]
Combine the sequence_check_pending flag with state

9 years agoSprinkle some comments on the routing system
Mikko Rasa [Fri, 20 Feb 2015 22:46:46 +0000 (00:46 +0200)]
Sprinkle some comments on the routing system

9 years agoDon't bother with creating intermediate steps for state updates
Mikko Rasa [Fri, 20 Feb 2015 22:42:40 +0000 (00:42 +0200)]
Don't bother with creating intermediate steps for state updates

They were needed back when the wait system was different, but no longer
have any use.

9 years agoClear the critical flag one track earlier
Mikko Rasa [Fri, 20 Feb 2015 16:40:54 +0000 (18:40 +0200)]
Clear the critical flag one track earlier

Check_arrival is called when the train reaches the end of its current
track.  The flag should be cleared when the track it is entering is no
longer critical.

9 years agoMove duplicated successor step creation code to a function
Mikko Rasa [Fri, 20 Feb 2015 16:11:41 +0000 (18:11 +0200)]
Move duplicated successor step creation code to a function

9 years agoAllow direction to be specified for routing waypoints
Mikko Rasa [Fri, 20 Feb 2015 16:08:20 +0000 (18:08 +0200)]
Allow direction to be specified for routing waypoints

9 years agoSupport directionality for zones
Mikko Rasa [Fri, 20 Feb 2015 15:44:56 +0000 (17:44 +0200)]
Support directionality for zones

9 years agoStore zone blocks in order and use add_tracks to load them
Mikko Rasa [Fri, 20 Feb 2015 15:41:53 +0000 (17:41 +0200)]
Store zone blocks in order and use add_tracks to load them

9 years agoDon't save an allocated but pending block
Mikko Rasa [Fri, 20 Feb 2015 09:58:42 +0000 (11:58 +0200)]
Don't save an allocated but pending block

It could be a failed turnout which is still set the wrong way.

9 years agoCosmetic fixes
Mikko Rasa [Fri, 20 Feb 2015 09:54:15 +0000 (11:54 +0200)]
Cosmetic fixes

9 years agoDon't attempt to use planned route if no waypoints are set
Mikko Rasa [Fri, 20 Feb 2015 09:53:45 +0000 (11:53 +0200)]
Don't attempt to use planned route if no waypoints are set

9 years agoInitialize the halted flag of dummy driver
Mikko Rasa [Fri, 20 Feb 2015 09:50:54 +0000 (11:50 +0200)]
Initialize the halted flag of dummy driver

9 years agoAdd a dialog to display telemetry data from the driver
Mikko Rasa [Thu, 19 Feb 2015 13:44:28 +0000 (15:44 +0200)]
Add a dialog to display telemetry data from the driver

9 years agoAdd a common base class for dialogs that need to update dynamically
Mikko Rasa [Thu, 19 Feb 2015 13:31:56 +0000 (15:31 +0200)]
Add a common base class for dialogs that need to update dynamically

9 years agoUse deque rather than list for queues
Mikko Rasa [Thu, 19 Feb 2015 13:30:03 +0000 (15:30 +0200)]
Use deque rather than list for queues

List makes one allocation for every item, deque only one per a bunch of
items.

9 years agoProvide some telemetry values from ArduControl
Mikko Rasa [Thu, 19 Feb 2015 13:29:34 +0000 (15:29 +0200)]
Provide some telemetry values from ArduControl

9 years agoAdd telemetry framework for drivers
Mikko Rasa [Thu, 19 Feb 2015 12:01:52 +0000 (14:01 +0200)]
Add telemetry framework for drivers

9 years agoImprove ArduControl task scheduling
Mikko Rasa [Thu, 19 Feb 2015 09:18:02 +0000 (11:18 +0200)]
Improve ArduControl task scheduling

The new scheduler can handle multiple tasks with the same priority, so
other things won't get blocked by the priority command queue for too
long.  It also handles sleeping at the scheduler rather than individual
tasks.

9 years agoTurn ArduControl command_queue into a Task
Mikko Rasa [Mon, 16 Feb 2015 00:17:03 +0000 (02:17 +0200)]
Turn ArduControl command_queue into a Task

It seems that I was thinking of this back in d5d8ee8, but left it
unfinished probably because it was simpler to use a Queue directly.  Now
some upcoming task management improvements call for it to be a Task.

9 years agoDon't check sequence points while applying routes
Mikko Rasa [Sun, 15 Feb 2015 15:46:22 +0000 (17:46 +0200)]
Don't check sequence points while applying routes

The preceding train's routes might not be applied yet.  Instead queue a
sequence check to be done when all routes have been applied.

9 years agoCorrect TrackAttachment entry endpoint
Mikko Rasa [Sun, 15 Feb 2015 08:40:37 +0000 (10:40 +0200)]
Correct TrackAttachment entry endpoint

Since endpoint direction points outwards from the endpoint, we want to
find one that's as close to opposite to the TrackAttachment's direction
as possible.

9 years agoAlso check if the clock is stopped
Mikko Rasa [Sun, 15 Feb 2015 07:20:57 +0000 (09:20 +0200)]
Also check if the clock is stopped

9 years agoDon't eat away departure delay while halted
Mikko Rasa [Fri, 13 Feb 2015 00:50:36 +0000 (02:50 +0200)]
Don't eat away departure delay while halted

9 years agoDon't segfault if an emergency doesn't have a block
Mikko Rasa [Fri, 13 Feb 2015 00:48:03 +0000 (02:48 +0200)]
Don't segfault if an emergency doesn't have a block

9 years agoDeclare emergency if route planning fails
Mikko Rasa [Fri, 13 Feb 2015 00:47:25 +0000 (02:47 +0200)]
Declare emergency if route planning fails

9 years agoAbort route planning if it takes too long
Mikko Rasa [Fri, 13 Feb 2015 00:47:01 +0000 (02:47 +0200)]
Abort route planning if it takes too long

9 years agoBe more permissive when checking route continuity
Mikko Rasa [Thu, 12 Feb 2015 16:11:06 +0000 (18:11 +0200)]
Be more permissive when checking route continuity

In some cases more than one consecutive route may end on the same track,
or a route might only go one track past the previous one, with that track
being a turnout with undetermined path.  Allow skipping routes to deal
with these situations, as long as we don't go completely off route.

9 years agoEnsure that remaining estimate is negative if the waypoint is unreachable
Mikko Rasa [Thu, 12 Feb 2015 14:54:27 +0000 (16:54 +0200)]
Ensure that remaining estimate is negative if the waypoint is unreachable

9 years agoFix critical block logic
Mikko Rasa [Thu, 12 Feb 2015 14:46:45 +0000 (16:46 +0200)]
Fix critical block logic

First noncritical block is not reliable, as it could be outside of the
train's allocated blocks and not guaranteed to set to a consistent path.
Worse, the get_first_noncritical_block function could return a block on
the other side of a turnout which is changing path, and is_block_critical
used completely different logic.

9 years agoDon't allow trains to become blocked in critical blocks
Mikko Rasa [Thu, 12 Feb 2015 09:33:47 +0000 (11:33 +0200)]
Don't allow trains to become blocked in critical blocks

9 years agoAvoid arriving too early if there's an unexpected stop on the last route
Mikko Rasa [Wed, 11 Feb 2015 18:14:30 +0000 (20:14 +0200)]
Avoid arriving too early if there's an unexpected stop on the last route

If the final block of the route is allocated while the train is stopped,
arrival could be triggered prematurely.  I'm not entirely certain if this
can happen in absence of certain quirks of the dummy driver, but better
safe than sorry.

9 years agoBetter sequence syncing on route change
Mikko Rasa [Wed, 11 Feb 2015 16:28:49 +0000 (18:28 +0200)]
Better sequence syncing on route change

Immediately go into the wait state if an uncleared sequence point is
encountered during sync.

9 years agoApply all planned routes at once
Mikko Rasa [Wed, 11 Feb 2015 15:35:56 +0000 (17:35 +0200)]
Apply all planned routes at once

Letting each router to do it separately in the tick function causes
certain problems with synchronization.  In particular, sequence points
are difficult to synchronize unless the route update is atomic.

9 years agoAdd turnout failure simulation to the dummy driver
Mikko Rasa [Wed, 11 Feb 2015 12:54:49 +0000 (14:54 +0200)]
Add turnout failure simulation to the dummy driver

9 years agoEliminate an unnecessary variable
Mikko Rasa [Wed, 11 Feb 2015 12:54:42 +0000 (14:54 +0200)]
Eliminate an unnecessary variable

9 years agoUnify destination and waypoints
Mikko Rasa [Wed, 11 Feb 2015 12:43:15 +0000 (14:43 +0200)]
Unify destination and waypoints

Destination is really just a special case of a waypoint, so there's no
point in keeping it separate.  It just adds duplicated logic, which was
about to get worse with some upcoming new features.

9 years agoDo not allocate blocks while halt is in effect
Mikko Rasa [Wed, 11 Feb 2015 12:06:39 +0000 (14:06 +0200)]
Do not allocate blocks while halt is in effect

A turnout state change signal is emitted even if a failure is detected,
to indicate the end of the operation.  Resuming allocation in such a case
would cause the train to stray to an incorrect path.  It's better to wait
until the user has resolved the situation and removed the halt state.

9 years agoUse a shared white material for techniques
Mikko Rasa [Mon, 9 Feb 2015 17:41:17 +0000 (19:41 +0200)]
Use a shared white material for techniques

9 years agoInstantly set turnout paths when loading state
Mikko Rasa [Mon, 9 Feb 2015 17:33:41 +0000 (19:33 +0200)]
Instantly set turnout paths when loading state

Vehicles are placed immediately and will follow turnout paths.  Having
them in the wrong places confuses the route planner.

9 years agoMove block reservation signal serialization to Layout
Mikko Rasa [Mon, 9 Feb 2015 17:27:38 +0000 (19:27 +0200)]
Move block reservation signal serialization to Layout

It needs to be serialized between different blocks as well, since
TrainRouter at least expects to receive the signals in order.

9 years agoInitialize clock rate field with the current rate
Mikko Rasa [Fri, 6 Feb 2015 22:00:58 +0000 (00:00 +0200)]
Initialize clock rate field with the current rate

9 years agoInterpret turnout delay as float, not unsigned
Mikko Rasa [Fri, 6 Feb 2015 22:00:12 +0000 (00:00 +0200)]
Interpret turnout delay as float, not unsigned

9 years agoCosmetic fixes
Mikko Rasa [Fri, 6 Feb 2015 21:58:10 +0000 (23:58 +0200)]
Cosmetic fixes

9 years agoUse max/min for range capping
Mikko Rasa [Fri, 6 Feb 2015 21:55:14 +0000 (23:55 +0200)]
Use max/min for range capping

9 years agoSync timetable to clock on first tick
Mikko Rasa [Fri, 6 Feb 2015 14:45:54 +0000 (16:45 +0200)]
Sync timetable to clock on first tick

This is not perfect, but it allows some flexibility in restarting the
program.

9 years agoMake sure Block::signal_reserved is emitted consistently
Mikko Rasa [Fri, 6 Feb 2015 14:37:46 +0000 (16:37 +0200)]
Make sure Block::signal_reserved is emitted consistently

Sigc++ apparently takes arguments as references, so if someone reached to
a signal with null train by reserving the block again, any remaining slots
of the release emission would also get the new train pointer.  This caused
the routing system to malfunction in certain cases as the router saw two
emissions for the same block reservation.

The simplest solution would be to pass t instead of train to emit(), but
then the ordering of the two emissions would be inconsistent.  Thus the
additional logic to delay further emissions until the outstanding one is
completed.

9 years agoConsider block deallocation when planning routes
Mikko Rasa [Fri, 6 Feb 2015 14:32:18 +0000 (16:32 +0200)]
Consider block deallocation when planning routes

Blocks are not released until a sensor is detriggered.  Not taking that
into account could cause situations where the planner tries to drive
trains through a balloon loop which is actually too small for them.

9 years agoFurther improve lead route generation
Mikko Rasa [Fri, 6 Feb 2015 14:26:10 +0000 (16:26 +0200)]
Further improve lead route generation

The previous version generated nonsense if the first actual route was
completely covered by existing critical blocks.

9 years agoImmediately process sequence points that are already covered
Mikko Rasa [Fri, 6 Feb 2015 14:23:05 +0000 (16:23 +0200)]
Immediately process sequence points that are already covered

The planner starts from the front buffer of the train, so it may generate
sequence points in the existing critical blocks.

9 years agoDon't diverge from critical blocks
Mikko Rasa [Thu, 5 Feb 2015 18:02:20 +0000 (20:02 +0200)]
Don't diverge from critical blocks

Doing so could confuse the router.

9 years agoImprove metrics_stale flag handling
Mikko Rasa [Thu, 5 Feb 2015 16:03:25 +0000 (18:03 +0200)]
Improve metrics_stale flag handling

9 years agoEliminate a possible race condition in thread termination
Mikko Rasa [Thu, 5 Feb 2015 14:19:01 +0000 (16:19 +0200)]
Eliminate a possible race condition in thread termination

In the unlikely event that the thread doesn't terminate fast enough after
setting the goal pointer, deleting it would send it a kill signal.
Remove this possibility by explicitly jouning the thread.

9 years agoAllow an undetermined turnout at the beginning of a route
Mikko Rasa [Thu, 5 Feb 2015 14:01:13 +0000 (16:01 +0200)]
Allow an undetermined turnout at the beginning of a route

If route plans are regenerated when the train's last vehicle is on the
sensor following a turnout in a points-facing movement, the first track
of the lead route is a turnout with undetermined path.  Route_changed
would then try to figure out which route the next allocation will occur
on and fail at the very beginning because advance_to_track refused to
use the undetermined turnout.

9 years agoRestructure lead route generation
Mikko Rasa [Thu, 5 Feb 2015 13:58:45 +0000 (15:58 +0200)]
Restructure lead route generation

All of the relevant logic is now in one place.

9 years agoDon't access waypoint and metric data if the router has no destination
Mikko Rasa [Thu, 5 Feb 2015 13:53:32 +0000 (15:53 +0200)]
Don't access waypoint and metric data if the router has no destination

9 years agoDon't use bool for a counter variable
Mikko Rasa [Thu, 5 Feb 2015 13:06:57 +0000 (15:06 +0200)]
Don't use bool for a counter variable

9 years agoPenalize steps other than the fastest one
Mikko Rasa [Thu, 5 Feb 2015 08:48:48 +0000 (10:48 +0200)]
Penalize steps other than the fastest one

This encourages the planner to follow a single chain of steps and avoids
exploding the state tree too much.  In the future this may be replaced by
different speed limits on diverging paths of turnouts (reducing the
ambiguity of fastest path) and an actual heuristic for potential wait time
(giving wait states an implicit penalty).

9 years agoStore routing information in TrainRoutePlanner to avoid threading problems
Mikko Rasa [Thu, 5 Feb 2015 08:40:19 +0000 (10:40 +0200)]
Store routing information in TrainRoutePlanner to avoid threading problems

TrainRouter removes checkpoints when the train passes them, which will
cause problems if the planner is still running.

9 years agoResume allocation if a train moves out of its own way
Mikko Rasa [Wed, 4 Feb 2015 12:15:11 +0000 (14:15 +0200)]
Resume allocation if a train moves out of its own way

The normal handling in block_reserved() does not work, since by that time
release_block() has already cleared pending_block.

9 years agoUnoccupy destination during planning when the train has departed again
Mikko Rasa [Tue, 3 Feb 2015 23:25:32 +0000 (01:25 +0200)]
Unoccupy destination during planning when the train has departed again

9 years agoEliminate the one step delay in adding tracks to routes
Mikko Rasa [Tue, 3 Feb 2015 22:37:24 +0000 (00:37 +0200)]
Eliminate the one step delay in adding tracks to routes

It is no longer necessary now that we inspect linked tracks to detect
loops.  Removing it makes the logic easier to understand.

9 years agoMake route planning threaded
Mikko Rasa [Tue, 3 Feb 2015 21:47:17 +0000 (23:47 +0200)]
Make route planning threaded

It can take several seconds in some cases, which would cause an
unacceptable pause in simulation and control.