chiark / gitweb /
found, checkin before liberator repair
[trains.git] / hostside / speed.c
1 /*
2  * realtime
3  * speed manager
4  */
5
6 #include "realtime.h"
7
8 static void adjust_next(TrainNum tran) {
9   S; TRA;
10   calculate next speed step in the appropriate direction
11     call safety_setspeed
12
13
14 speedmanager_speedchange_notify {
15   fixme need to know whether this is a countermand or not
16
17   actually send speed to train
18     (fixme: combine speedmanager and actual?)
19     queue an adjust_next
20
21   make speedmanager also responsible for doing actuals ?
22   pass speed step number through ?
23
24 void speedmanager_speedchange_request(TrainNum tran, Speed speed) {
25   S; TRA; TRAI;
26
27   if (speed > trai->maxspeed) {
28     logmsg(EC_Invalid, tran, NOTA(SegmentNum),
29            "requested speed %l excessive; capping at %l",
30            (long)speed, (long)trai->maxspeed);
31     speed= trai->maxspeed;
32   }
33   tra->targetspeed= speed;
34   if (!speedadjust->running)
35     adjust_next(tran);
36 }