PredictionProblemCallback *ppc, void *ppcu);
/* ppc and ppcu as for predict_confirm */
-void speedmanager_safety_stop(Train *tra, struct timeval tnow);
+void speedmanager_safety_stop(Train *tra, struct timeval tnow,
+ unsigned predictflags);
+ /* Ignores value of PREDF_OLDPLAN */
void speedmanager_reset_train(Train *tra);
void speedmanager_getinfo(Train *tra, struct timeval tnow, SpeedInfo*);
}
static ErrorCode request_core(Train *tra, int step, struct timeval tnow,
+ unsigned predictflags,
PredictionProblemCallback *ppc, void *ppcu) {
+ /* We ignore the value of PREDF_OLDPLAN in predictflags, as we can tell
+ * whether the old plan is good by the change in speed */
ErrorCode ec, ec2;
double vnow, vtarg, vmax;
SpeedInfo try;
tra->uncertainty += tra->maxinto - oldmaxinto;
}
+ predictflags &= ~PREDF_OLDPLAN;
+
ec= predict(tra,tnow,
- step <= tra->speed.step ? PREDF_OLDPLAN : 0,
+ predictflags | (step <= tra->speed.step ? PREDF_OLDPLAN : 0),
0,0, &try, ppc,ppcu);
if (ec) {
tra->uncertainty -= tra->maxinto - oldmaxinto;
tra->maxinto= oldmaxinto;
- ec2= predict(tra,tnow, PREDF_OLDPLAN,0,0, 0,
+ ec2= predict(tra,tnow, predictflags | PREDF_OLDPLAN, 0,0, 0,
0,(char*)"abandoned acceleration");
assert(!ec2);
return ec;
MUSTECR( safety_checktrain(tra,ppc,ppcu) );
mgettimeofday(&tnow);
- return request_core(tra,step,tnow,ppc,ppcu);
+ return request_core(tra,step, tnow,0, ppc,ppcu);
}
-void speedmanager_safety_stop(Train *tra, struct timeval tnow) {
+void speedmanager_safety_stop(Train *tra, struct timeval tnow,
+ unsigned predictflags) {
ErrorCode ec;
- ec= request_core(tra,0,tnow,0,(char*)"emergency stop");
+ ec= request_core(tra,0,tnow,predictflags, 0,(char*)"emergency stop");
assert(!ec);
}