chiark / gitweb /
found, checkin before liberator repair
[trains.git] / hostside / safety.c
index 21956f8a436e625d2bf2d20c1b7aab2e79a7535e..d8c58020edc3eb83e91dd10a1672b9587d90f33b 100644 (file)
@@ -34,7 +34,7 @@ static void lay_train_pass(LayTrainState *l,
                           TrackLocation tloc, long advance,
                           long speed, unsigned backwards,
                           unsigned check_clash) {
-  State *s= &safety_state;
+  S;
   SegmentNum segn;
   SegmentState *seg;
   const SegmentInfo *segi;
@@ -104,7 +104,7 @@ static void lay_train_pass(LayTrainState *l,
 }
 
 static void lay_train_inversions(LayTrainState *l) {
-  State *s= &safety_state;
+  S;
   SegmentNum segn;
   SegmentState *seg;
   const SegmentInfo *segi;
@@ -131,7 +131,7 @@ static void lay_train_inversions(LayTrainState *l) {
 }
 
 static void lay_train_done(LayTrainState *l) {
-  State *s= &safety_state;
+  S;
   SegmentNum segn;
   SegmentState *seg;
   
@@ -148,9 +148,7 @@ static void lay_train_done(LayTrainState *l) {
 }
 
 static ErrorCode lay_train(TrainNum tran, long added_slop) {
-  State *s= &safety_state;
-  TrainState *tra= &s->trains[tran];
-  const TrainInfo *trai= &info_trains[tran];
+  S; TRA; TRAI;
   SegmentNum segn;
   SegmentState *seg;
   TrackLocation tloc;
@@ -212,10 +210,9 @@ static void setspeed(TrainNum tran, Speed newspeed) {
 }
 
 void safety_notify_detection(SegmentNum segn) {
-  State *s= &safety_state;
-  SegmentState *seg= &s->segments[segn];
+  S; SEG;
   TrainNum tran= seg->owner;
-  TrainState *tra= &s->trains[tran];
+  TRA;
   ErrorCode ec;
   TrackLocation tloc;
 
@@ -253,21 +250,25 @@ void safety_notify_detection(SegmentNum segn) {
 }
 
 void safety_emergencystop(TrainNum tran) {
-  State *s= &safety_state;
+  S; TRA;
   ErrorCode ec;
-  TrainState *tra= &s->trains[tran];
 
   tra->speed= 0;
+  fixme /* this is wrong
+          we need to take into account the finite stopping time or distance
+          of the train
+          and predict and track its location while it stops
+       */;
+
   actual_emergencystop(tran);
   ec= lay_train(tran, ESTOP_UNCERTAINTY);
   if (ec) safety_panic(tran, NOTA(Segment), "emergency stop forbidden!");
-  speedmanager_speedchange_notify(tran);
+  speedmanager_emergencystop_notify(tran);
 }
 
 void safety_requestspeed(TrainNum tran, long newspeed) {
-  State *s= &safety_state;
+  S; TRA;
   long oldspeed;
-  TrainState *tra= &s->trains[tran];
   ErrorCode ec;
 
   oldspeed= tra->speed;