FindEndUserContext *u= (void*)c;
DPRINTF(resolving,ends, " constraint_nextseg %c"
- " %s%s dist=INF-%d det=%d ours=%d owner=%s home=%s\n",
+ " %s%s remain=%d dist=INF-%d det=%d ours=%d owner=%s home=%s\n",
"fr"[u->rear],
- t->backwards?"-":"", t->seg->i->pname,
+ t->backwards?"-":"", t->seg->i->pname, t->remain,
TL_DIST_INF - c->distance,
t->seg->res_detect,
t->seg->resfin_ours,
if (before) {
if (t->seg == u->startpoint) return 'l';
const SegmentLinkInfo *rlink= &pci->link[!t->backwards];
- if (before->seg != &segments[rlink->next]) return 'm';
+ if (before->seg != &segments[rlink->next]) {
+ DPRINTF(resolving,ends, " j mismatch %s %s\n",
+ before->seg->i->pname, info_segments[rlink->next].pname);
+ return 'j';
+ }
}
if (t->seg->res_detect) {
u->atlastdetect= c->distance;
+ if (!before)
+ /* wind back to start of this segment which is necessary if this
+ * we are looking rearwards */
+ u->atlastdetect += (pci->dist - t->remain);
u->lastdetect= t->seg;
}
return 0;
u->problems++;
}
- DPRINTF(resolving,ends, " lims %c hardwhy=%c %s,%s lim=%d..%d out=%d..%d\n",
- "fr"[u->rear], cons->hardwhy,
- cons->lastdetect->i->pname, u->t.seg->i->pname,
+ DPRINTF(resolving,ends, " lims %c %s,%s,%c dist=INF-%d"
+ " lim=%d..%d out=%d..%d\n",
+ "fr"[u->rear],
+ cons->lastdetect->i->pname, u->t.seg->i->pname, cons->hardwhy,
+ TL_DIST_INF - u->tc.distance,
lim.min, lim.max, cons->min, cons->max);
}
SEG_IV;
FindEndUserContext u;
const SegPosCombInfo *pci;
- struct timeval tnow;
- ErrorCode ec;
int r, DP;
switch (tra->resolution) {
u.problems++;
}
- int min= MIN(u.constraints[0].min, u.constraints[1].min);
+ int min= MAX(u.constraints[0].min, u.constraints[1].min);
int max= MIN(u.constraints[0].max, u.constraints[1].max);
DPRINTF(resolving,ends, " lims a %d..%d problems=%d\n",
min, max, u.problems);
tra->uncertainty= max - min;
report_train_position(tra);
-
- mgettimeofday(&tnow);
- tra->plan_lookahead_nsegs= INT_MAX;
- ec= predict(tra,tnow, PREDF_OLDPLAN, 0,0, 0,
- 0,(char*)"resolution confirmation");
- assert(!ec);
+ /* We don't lay the train out now since the moveable features
+ * are not yet in place. We can defer it, though, as it is guaranteed
+ * to work, now. */
return 0;
}
}
void resolve_motioncheck(void) {
+ ErrorCode ec;
SEG_IV;
+ TRA_IV;
+ struct timeval tnow;
+
assert(sta_state == Sta_Finalising);
FOR_SEG
if (seg->moving) return;
+ FOR_TRA {
+ if (tra->resolution == RR_N) continue;
+
+ mgettimeofday(&tnow);
+ tra->plan_lookahead_nsegs= INT_MAX;
+ ec= predict(tra,tnow, PREDF_OLDPLAN, 0,0, 0,
+ 0,(char*)"resolution confirmation");
+ assert(!ec);
+ }
+
sta_finalising_done();
}