chiark / gitweb /
Properly deal with MARGIN_SPEED
authorian <ian>
Sat, 26 Jul 2008 23:07:57 +0000 (23:07 +0000)
committerian <ian>
Sat, 26 Jul 2008 23:07:57 +0000 (23:07 +0000)
hostside/speed.c

index c2f4daab9e9781406a536ec5892116101b3e7ebe..716f7cd06950dec7bf5acd15ddd0a5ce31f045a0 100644 (file)
@@ -101,7 +101,7 @@ int speedmanager_stopped(Train *tra) {
 static ErrorCode request_core(Train *tra, int step, struct timeval tnow,
                              PredictionProblemCallback *ppc, void *ppcu) {
   ErrorCode ec, ec2;
-  double vnow, vtarg;
+  double vnow, vtarg, vmax;
   SpeedInfo try;
   const SpeedRange *regime;
   Distance oldmaxinto;
@@ -119,10 +119,10 @@ static ErrorCode request_core(Train *tra, int step, struct timeval tnow,
   
   DPRINTF(speed,core, " request  vnow=%f vtarg=%f\n", vnow,vtarg);
 
-  try.max_speed_estimate= MAX(vtarg,vnow);
-  regime= stop_info(tra,try.max_speed_estimate);
-  try.stopping_distance= stoppingdistance(tra,tnow, regime,
-                                         try.max_speed_estimate);
+  vmax= MAX(vtarg,vnow);
+  try.max_speed_estimate= vmax * MARGIN_SPEED;
+  regime= stop_info(tra,vmax);
+  try.stopping_distance= stoppingdistance(tra,tnow, regime, vmax);
   try.stopping= !step;
 
   if (!try.stopping) {
@@ -146,7 +146,7 @@ static ErrorCode request_core(Train *tra, int step, struct timeval tnow,
 
   toev_stop(&tra->speed.decel);
   tra->speed.step= step;
-  tra->speed.speed= try.max_speed_estimate;
+  tra->speed.speed= vmax;
 
   if (vtarg <= vnow) {
     tra->speed.decel.duration= regime->ts;