chiark / gitweb /
units change again - only speeds are doubles; fix up marks etc. so just safety does...
authorian <ian>
Sat, 19 Apr 2008 10:24:13 +0000 (10:24 +0000)
committerian <ian>
Sat, 19 Apr 2008 10:24:13 +0000 (10:24 +0000)
hostside/analyse-speeds
hostside/persist.c
hostside/record-i.h
hostside/record-y.y
hostside/record.c
hostside/resolve.c
hostside/safety.h
layout/data2safety
layout/layout-data.h

index 1742248bd74f21bbef1c8ba881898669f609ceeb..d7b20126629413b3c24960811196572d291f72a1 100755 (executable)
@@ -99,12 +99,12 @@ perl <$o.table.tmp >$o.record.tmp -ne '
        sub calcwait ($$) {
                my ($step,$wholetime) = @_;
                return 0 if $step<0 || $step>=$steps;
-               return $wholetime *
+               return $wholetime * 1000 *
                        ($speed[$step+1] - $speed[$step]) / $max;
        }
        for ($step=0; $step<$nxt; $step++) {
-               printf  "train %s step %d=%f %f/%f\n",
-                       "'$train'", $step, $speed[$step]*1e3,
+               printf  "train %s step %d=%f %d/%d\n",
+                       "'$train'", $step, $speed[$step],
                        calcwait($step-1,'$acceltime'),
                        calcwait($step,'$deceltime')
                                or die $!;
index 739b5aa67d12aca848714a92cef28cfa844995e6..1335bc7027eef4d9d06afd54ba2cde0e25723050 100644 (file)
@@ -373,7 +373,7 @@ void persist_entrails_run_converter(void) {
     if (!tra->pname || !tra->foredetect ||
        !tra->foredetect->i || !tra->foredetect->i->pname)
       continue;
-    printf("train %s at %s%s:%f+-%f\n",
+    printf("train %s at %s%s:%d+-%d\n",
           tra->pname, tra->backwards ? "-" : "",
           tra->foredetect->i->pname, tra->maxinto, tra->uncertainty);
   }
index 568f81ba50f8b89807a562c6a2532fc5ea4cf554..3ef2a42d692865870e80317947b21af8e058044c 100644 (file)
@@ -9,7 +9,7 @@
 
 void record_train_at(Train *tra, int backw, Segment *seg, int maxi, int unc);
 void record_train_is(Train *tra, int addr, int head, int det, int tail);
-void record_train_step(Train *tra, int step, int speed, int upw, int downw);
+void record_train_step(Train *tra, int step, double speed, int upw, int downw);
 void record_train_step_count(void);
 void record_train_home(Train *tra, int backw, Segment *seg);
 void record_seg_has(Segment *seg, int backw, Train *tra);
index 12b003e5c7bcb47b792f8c9d964a1fbadedcadac..b47f387b377df06cb1838af833d191b80dbff609 100644 (file)
@@ -40,16 +40,16 @@ file:               end
        |       line NL { record_tempzone_clear(); } file
 
 line:          /* empty */
-       |       TRAIN train IS NUM dbl '+' dbl '+' dbl
+       |       TRAIN train IS NUM NUM '+' NUM '+' NUM
        {         if ($2) record_train_is($2,$4,$5,$7,$9);
        }
-       |       TRAIN train AT backwards seg ':' dbl '+' '-' dbl
+       |       TRAIN train AT backwards seg ':' NUM '+' '-' NUM
        {         if ($2) record_train_at($2,$4,$5,$7,$10);
        }
        |       TRAIN train HOME { cur_train=$2; } segments
        {
        }
-       |       TRAIN train STEP NUM '=' dbl dbl '/' dbl
+       |       TRAIN train STEP NUM '=' dbl NUM '/' NUM
        {         if (!trains) record_train_step_count();
                  else if ($2) record_train_step($2,$4,$6,$7,$9);
        }
index c9106a0a41135978e6b0468e9d63022043caeb7e..ef8a5b7987bdb4d0f8658dea4d7e03fad24d4f7f 100644 (file)
@@ -259,7 +259,8 @@ void record_train_step_count(void) {
   curvebufsz++;
 }
 
-void record_train_step(Train *tra, int step, int speed, int upw, int downw) {
+void record_train_step(Train *tra, int step, double speed,
+                      int upw, int downw) {
   Train *other;
   SpeedCurveEntry *new;
   int i;
index 0c7bc33f4161f21d875dd90537d36f8b49d0d9fa..6de6dc75a90b8544016d457a507584651ef7ea90 100644 (file)
 #define RR_H 2u
 
 /* We record R in tra->resolution,
- * U in segi->tr_updated and D in segi->res_detect */
+ * U in segi->mark0 and D in segi->res_detect */
+#define iselem_u mark0
 
 void resolve_begin(void) {
   SEG_IV;
   actual_inversions_start();
   FOR_SEG {
     seg->res_detect= 0;
-    seg->tr_updated= 0;
+    seg->iselem_u= 0;
     if (segi->invertible)
       actual_inversions_segment(seg);
     else
@@ -194,12 +195,12 @@ int resolve_complete(void) {
       ADDTO_U_EH(owner, RR_E, "as-expected");
 
       assert(updated<=1);
-      d->tr_updated= updated;
+      d->iselem_u= updated;
     }
 
     oprintf(UPO, "resolving  searching\n");
     FOR_SEGMENT(d, NOOP, NOOP) {
-      if (!(d->res_detect && !d->tr_updated))
+      if (!(d->res_detect && !d->iselem_u))
        continue;
       /* 3. we have a violation of D \subset U, namely d */
 
@@ -231,7 +232,7 @@ int resolve_complete(void) {
        /* check E(t) \disjoint U */
        int clashes= 0;
        FOR_SEGMENT(d1, NOOP, NOOP) {
-         if (d1->owner == t && d1->tr_updated) {
+         if (d1->owner == t && d1->iselem_u) {
            FOR_TRAIN(t2, NOOP, NOOP) {
              if (t2->resolution == RR_H && d1->owner == t2) {
                oprintf(UPO, "resolving     clash @%s %s\n",
@@ -280,7 +281,7 @@ int resolve_complete(void) {
        FOR_SEGMENT(dplus, NOOP,NOOP) {
          Train *tplus= dplus->owner;
          if (!(tplus && tplus->resolution == RR_E)) continue;
-         dplus->tr_updated= 0;
+         dplus->iselem_u= 0;
        }
 
        t1->resolution= RR_H;
@@ -305,7 +306,7 @@ int resolve_complete(void) {
     if (problems)
       goto x_problems;
 
-    d->tr_updated= 0;
+    d->iselem_u= 0;
     d->cm_autostop= 0;
 
     MovPosComb target= -1;
@@ -320,7 +321,7 @@ int resolve_complete(void) {
     }      
 
     if (d->owner)
-      d->until_detect= 1e-3;
+      d->until_here= 1e-3;
 
     if (d->i->n_poscombs>1) {
       d->movposcomb= -1;
index 66de2ac0622df7183e1cdd360fe201b315474ff2..7b2820db537c0b51c5bc205f0481f5ddcead2fe7 100644 (file)
@@ -11,7 +11,7 @@
 
 /*========== more basic types etc. ==========*/
 
-typedef double TimeInterval; /*s*/
+typedef long TimeInterval; /*ms*/
 
 /*---------- units and scales ----------*/
 
@@ -69,7 +69,8 @@ struct Segment {
     ho_backwards:1, /* home train has its front and rear backwards wrt track */
     cm_autostop:1, /* train should stop on detection */
     seg_inverted:1, /* polarity is inverted */
-    det_ignore:1, det_expected:1, pred_enter:1, pred_vacate:1, /* safety.c */
+    det_ignore:1, det_expected:1, /* safety.c */
+    mark0,mark1,mark2,mark3, /* for temporary private uses */
     res_detect:1; /* detection noticed here during resolution */
   TimeInterval until_here; /* ) nonnegative; */  /* ) always valid but      */
                            /* ) 0 if already */  /* )  meaningful iff owner */
@@ -294,12 +295,12 @@ const SegmentLinkInfo *trackloc_segmentlink(const TrackLocation *tloc,
 /*---------- safety margin parameters ----------*/
 
 #define CLEAR_FORESIGHT_TIME 500 /*ms*/
-#define AUTOSTOP_MAXSPEED 50.0 /*mm/s*/
+#define AUTOSTOP_MAXSPEED 0.050 /*m/s*/
 #define AUTOSTOP_UNCERTAINTY 20  /*mm*/
 #define ESTOP_UNCERTAINTY 300  /*mm*/
 #define ESTOP_DEADTIME    2000 /*ms*/
 
-#define TIMEINTERVAL2MS(ti) ((ti) * 1000.0)
+#define TIMEINTERVAL2MS(ti) (ti)
 #define SPEED_CLEAR_MULT SPEED_CALC_DIST(1,CLEAR_FORESIGHT_TIME,UP)
 
 #endif /*SAFETY_H*/
index cfac5beb92487203e79118d4d8e388d48fd35cf5..95c1eb9666b95d62ea16c68525e7bfbf30251dda 100755 (executable)
@@ -493,7 +493,7 @@ sub writeout () {
                              ($comb / $featr->{Weight}) % $featr->{Posns});
            }
            o("$delim\n");
-           o(sprintf " { %-7s%7.3f",
+           o(sprintf " { %-7s%4d",
              '"'.$pi.'",',
              $segr->{Dist}[$comb]);
            for ($end=0; $end<2; $end++) {
index f6eb3e2f122a030b46df29d7829389cce6467a3c..6688c1b440ed55645162a14a17dd6435b6a0092f 100644 (file)
@@ -22,7 +22,7 @@ typedef int Small;
 typedef short SegmentNumInMap;
 
 typedef double Speed;
-typedef double Distance;
+typedef int Distance;
 
 typedef enum {
   mfk_none,