chiark / gitweb /
wip on resolution bugs
authorian <ian>
Fri, 25 Apr 2008 18:49:17 +0000 (18:49 +0000)
committerian <ian>
Fri, 25 Apr 2008 18:49:17 +0000 (18:49 +0000)
hostside/TODO
hostside/resolve.c
hostside/trackloc.c
hostside/x.gdb

index 004fb89ae4db484abb449f3d87d0db738ee0e1e9..8e6f926ed1d6a6c40a125f57f56e3cbd9d41dc06 100644 (file)
@@ -1,5 +1,10 @@
 bugs
-       startup resolve crashes due to findhead_nextseg returning -1
+       startup resolve fails due to shinkansen not being
+               as long as expected and thus seeming to
+               overrun the rear
+               - user should put it as close to the head as
+                 possible
+               can we fail resolution at this point ?
 
 want to
        document commands [!]movfeat and speed
index aea6188cbba958a123f29d03dae78e6ce13e3ea1..bda9b4713fe1d9726c24eaf2e9c4c45b5bd9e57c 100644 (file)
@@ -360,9 +360,21 @@ static int segdist(Segment *seg) {
   return seg->i->poscombs[seg->movposcomb].dist;
 }
 
+static void finalise_callback_debug(const char *what, TrackLocation *t,
+                                   struct TrackAdvanceContext *c) {
+  oprintf(DUPO("resolving") " finalise  %s"
+         " %s%s owner=%s res_detect=%d resfin_done=%d\n",
+         what, t->backwards?"-":"", t->seg->i->pname,
+         t->seg->owner ? t->seg->owner->pname : "0",
+         t->seg->res_detect, t->seg->resfin_done);
+}
+
 static int findhead_nextseg(TrackLocation *t, struct TrackAdvanceContext *c,
                            MovPosComb *mpc_io, Segment *before) {
   FindEndUserContext *u= c->u;
+
+  finalise_callback_debug("findhead_nextseg",t,c);
+
   if (t->seg->owner != u->train) return -1;
   u->furthest= t->seg;
   if (!t->seg->res_detect) { u->extraspace= 0; return -1; }
@@ -376,6 +388,9 @@ static int findhead_nextseg(TrackLocation *t, struct TrackAdvanceContext *c,
 static int walkback_nextseg(TrackLocation *t, struct TrackAdvanceContext *c,
                            MovPosComb *mpc_io, Segment *before) {
   FindEndUserContext *u= c->u;
+
+  finalise_callback_debug("walkback_nextseg",t,c);
+
   if (t->seg->owner != u->train) return -1;
   t->seg->tr_backwards= !t->backwards;
   t->seg->resfin_done= 1;
@@ -405,12 +420,22 @@ static void resolve_train_finalise(Segment *startpoint) {
   tc.getmovpos= 0;
   tc.u= &u;
 
+  u.train= tra;
   u.extraspace= MARGIN_NOSE + tra->head;
   u.furthest= 0;
 
+  oprintf(DUPO("resolving") " finalise %s start=%s%s es=%d\n",
+         tra->pname,
+         t.backwards?"-":"", t.seg->i->pname,
+         u.extraspace);
+
   r= findhead_nextseg(&t,&tc,0,0); assert(!r);
   trackloc_advance(&t,&tc);
 
+  oprintf(DUPO("resolving") " finalise  es=%d furthest=%s fdd(%s)=%d\n",
+         u.extraspace, u.furthest->i->pname,
+         tra->foredetect->i->pname, segdist(tra->foredetect));
+
   tra->maxinto= segdist(tra->foredetect) - u.extraspace;
   if (tra->maxinto < 0) tra->maxinto= 0;
   tra->uncertainty= tra->maxinto;
@@ -421,7 +446,7 @@ static void resolve_train_finalise(Segment *startpoint) {
   }
 
   t.seg= tra->foredetect;
-  t.remain= 0;
+  t.remain= segdist(tra->foredetect) - u.extraspace;
   t.backwards= !tra->foredetect->tr_backwards;
   
   tc.distance= tra->detectable + tra->tail + MARGIN_NOSE;
@@ -430,6 +455,10 @@ static void resolve_train_finalise(Segment *startpoint) {
   r= walkback_nextseg(&t,&tc,0,0); assert(!r);
   trackloc_advance(&t,&tc);
 
+  oprintf(DUPO("resolving") " finalise  maxi=%d unc=%d;"
+         " remaining distance=%d\n",
+         tra->maxinto, tra->uncertainty, tc.distance);
+
   if (tc.distance) {
     tra->uncertainty -= tc.distance;
     if (tra->uncertainty < 0)
index 98a6e3762212e1feafded9328ddd5cac6478f97e..3305861eea4bbbc8b3f03b78e791552ccf3be788 100644 (file)
@@ -51,8 +51,8 @@ int trackloc_getlink(TrackLocation *t, TrackAdvanceContext *c,
   }
   assert(mpc < t->seg->i->n_poscombs);
   pci= &t->seg->i->poscombs[t->seg->movposcomb];
-  if (*pci_r) *pci_r= pci;
-  if (*link_r) *link_r= &pci->link[t->backwards];
+  if (pci_r) *pci_r= pci;
+  if (link_r) *link_r= &pci->link[t->backwards];
   return 0;
 }
 
index a1620129a488ab11169dacdde935241e70e00c60..a393f9f81e1dfd95f91691901b7af87450af1652 100644 (file)
@@ -7,7 +7,7 @@ set args -s/dev/ttyUSB0 shinkansen.speeds.record homes.record
 break vdie
 break nmra_errchk_fail
 break predict_problem
-#break resolve.c:337
+break safety_panic
 
 run